From 4a54011aac169c91aeba7ec86c92576f9e981146 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Thu, 16 Nov 2023 15:31:07 +0100 Subject: [PATCH 01/41] Large rework of context menus for units and map --- client/demo.js | 35 +- client/src/contextmenus/airbasecontextmenu.ts | 4 +- client/src/contextmenus/airbasespawnmenu.ts | 2 +- client/src/contextmenus/contextmenu.ts | 14 +- client/src/contextmenus/unitcontextmenu.ts | 18 +- client/src/map/map.ts | 80 +-- client/src/mission/missionmanager.ts | 2 +- client/src/olympusapp.ts | 4 +- client/src/panels/unitcontrolpanel.ts | 72 +-- client/src/unit/contextaction.ts | 47 ++ client/src/unit/contextactionset.ts | 23 + client/src/unit/unit.ts | 323 +++++------ client/src/unit/unitsmanager.ts | 528 +++++++++++------- 13 files changed, 614 insertions(+), 538 deletions(-) create mode 100644 client/src/unit/contextaction.ts create mode 100644 client/src/unit/contextactionset.ts diff --git a/client/demo.js b/client/demo.js index 9e560bee..b23e5b92 100644 --- a/client/demo.js +++ b/client/demo.js @@ -54,7 +54,7 @@ class DemoDataGenerator { /* - UNCOMMENT TO TEST ALL UNITS + ***************** UNCOMMENT TO TEST ALL UNITS **************** var databases = Object.assign({}, aircraftDatabase, helicopterDatabase, groundUnitDatabase, navyUnitDatabase); var t = Object.keys(databases).length; @@ -114,6 +114,39 @@ class DemoDataGenerator { DEMO_UNIT_DATA[idx].position.lat += idx / 100; DEMO_UNIT_DATA[idx].category = "GroundUnit"; DEMO_UNIT_DATA[idx].isLeader = false; + + idx += 1; + DEMO_UNIT_DATA[idx] = JSON.parse(JSON.stringify(baseData)); + DEMO_UNIT_DATA[idx].name = "F-14B"; + DEMO_UNIT_DATA[idx].groupName = `Group-1`; + DEMO_UNIT_DATA[idx].position.lat += idx / 100; + DEMO_UNIT_DATA[idx].category = "Aircraft"; + DEMO_UNIT_DATA[idx].isLeader = false; + + idx += 1; + DEMO_UNIT_DATA[idx] = JSON.parse(JSON.stringify(baseData)); + DEMO_UNIT_DATA[idx].name = "Infantry AK"; + DEMO_UNIT_DATA[idx].groupName = `Group-2`; + DEMO_UNIT_DATA[idx].position.lat += idx / 100; + DEMO_UNIT_DATA[idx].category = "GroundUnit"; + DEMO_UNIT_DATA[idx].isLeader = true; + + idx += 1; + DEMO_UNIT_DATA[idx] = JSON.parse(JSON.stringify(baseData)); + DEMO_UNIT_DATA[idx].name = "Infantry AK"; + DEMO_UNIT_DATA[idx].groupName = `Group-3`; + DEMO_UNIT_DATA[idx].position.lat += idx / 100; + DEMO_UNIT_DATA[idx].category = "GroundUnit"; + DEMO_UNIT_DATA[idx].isLeader = true; + + idx += 1; + DEMO_UNIT_DATA[idx] = JSON.parse(JSON.stringify(baseData)); + DEMO_UNIT_DATA[idx].name = "F-14B"; + DEMO_UNIT_DATA[idx].groupName = `Group-4`; + DEMO_UNIT_DATA[idx].position.lat += idx / 100; + DEMO_UNIT_DATA[idx].category = "Aircraft"; + DEMO_UNIT_DATA[idx].isLeader = true; + this.startTime = Date.now(); } diff --git a/client/src/contextmenus/airbasecontextmenu.ts b/client/src/contextmenus/airbasecontextmenu.ts index b6b753ac..85738197 100644 --- a/client/src/contextmenus/airbasecontextmenu.ts +++ b/client/src/contextmenus/airbasecontextmenu.ts @@ -24,7 +24,7 @@ export class AirbaseContextMenu extends ContextMenu { document.addEventListener("contextMenuLandAirbase", (e: any) => { if (this.#airbase) - getApp().getUnitsManager().selectedUnitsLandAt(this.#airbase.getLatLng()); + getApp().getUnitsManager().landAt(this.#airbase.getLatLng()); this.hide(); }) } @@ -111,7 +111,7 @@ export class AirbaseContextMenu extends ContextMenu { #showSpawnMenu() { if (this.#airbase != null) { getApp().setActiveCoalition(this.#airbase.getCoalition()); - getApp().getMap().showAirbaseSpawnMenu(this.getX(), this.getY(), this.getLatLng(), this.#airbase); + getApp().getMap().showAirbaseSpawnMenu(this.#airbase, this.getX(), this.getY(), this.getLatLng()); } } diff --git a/client/src/contextmenus/airbasespawnmenu.ts b/client/src/contextmenus/airbasespawnmenu.ts index a5c40e3c..ff753c6e 100644 --- a/client/src/contextmenus/airbasespawnmenu.ts +++ b/client/src/contextmenus/airbasespawnmenu.ts @@ -46,7 +46,7 @@ export class AirbaseSpawnContextMenu extends ContextMenu { * @param x X screen coordinate of the top left corner of the context menu * @param y Y screen coordinate of the top left corner of the context menu */ - show(x: number, y: number) { + show(x: number | undefined, y: number | undefined) { super.show(x, y, new LatLng(0, 0)); this.#aircraftSpawnMenu.setAirbase(undefined); diff --git a/client/src/contextmenus/contextmenu.ts b/client/src/contextmenus/contextmenu.ts index fb923e10..78d91713 100644 --- a/client/src/contextmenus/contextmenu.ts +++ b/client/src/contextmenus/contextmenu.ts @@ -19,15 +19,15 @@ export class ContextMenu { /** Show the contextmenu on top of the map, usually at the location where the user has clicked on it. * - * @param x X screen coordinate of the top left corner of the context menu - * @param y Y screen coordinate of the top left corner of the context menu - * @param latlng Leaflet latlng object of the mouse click + * @param x X screen coordinate of the top left corner of the context menu. If undefined, use the old value + * @param y Y screen coordinate of the top left corner of the context menu. If undefined, use the old value + * @param latlng Leaflet latlng object of the mouse click. If undefined, use the old value */ - show(x: number, y: number, latlng: LatLng) { - this.#latlng = latlng; + show(x: number | undefined = undefined, y: number | undefined = undefined, latlng: LatLng | undefined = undefined) { + this.#latlng = latlng ?? this.#latlng; this.#container?.classList.toggle("hide", false); - this.#x = x; - this.#y = y; + this.#x = x ?? this.#x; + this.#y = y ?? this.#y; this.clip(); this.getContainer()?.dispatchEvent(new Event("show")); } diff --git a/client/src/contextmenus/unitcontextmenu.ts b/client/src/contextmenus/unitcontextmenu.ts index fe1ee735..57502abb 100644 --- a/client/src/contextmenus/unitcontextmenu.ts +++ b/client/src/contextmenus/unitcontextmenu.ts @@ -1,4 +1,4 @@ -import { deg2rad, ftToM } from "../other/utils"; +import { ContextActionSet } from "../unit/contextactionset"; import { ContextMenu } from "./contextmenu"; /** The UnitContextMenu is shown when the user rightclicks on a unit. It dynamically presents the user with possible actions to perform on the unit. */ @@ -16,15 +16,19 @@ export class UnitContextMenu extends ContextMenu { * @param options Dictionary element containing the text and tooltip of the options shown in the menu * @param callback Callback that will be called when the user clicks on one of the options */ - setOptions(options: { [key: string]: {text: string, tooltip: string }}, callback: CallableFunction) { - this.getContainer()?.replaceChildren(...Object.keys(options).map((key: string, idx: number) => { - const option = options[key]; + setContextActions(contextActionSet: ContextActionSet) { + this.getContainer()?.replaceChildren(...Object.keys(contextActionSet.getContextActions()).map((key: string, idx: number) => { + const contextAction = contextActionSet.getContextActions()[key]; var button = document.createElement("button"); var el = document.createElement("div"); - el.title = option.tooltip; - el.innerText = option.text; + el.title = contextAction.getDescription(); + el.innerText = contextAction.getLabel(); el.id = key; - button.addEventListener("click", () => callback(key)); + button.addEventListener("click", () => { + contextAction.executeCallback(); + if (contextAction.getHideContextAfterExecution()) + this.hide(); + }); button.appendChild(el); return (button); })); diff --git a/client/src/map/map.ts b/client/src/map/map.ts index b176e137..f4df7ecd 100644 --- a/client/src/map/map.ts +++ b/client/src/map/map.ts @@ -12,16 +12,16 @@ import { DestinationPreviewMarker } from "./markers/destinationpreviewmarker"; import { TemporaryUnitMarker } from "./markers/temporaryunitmarker"; import { ClickableMiniMap } from "./clickableminimap"; import { SVGInjector } from '@tanem/svg-injector' -import { mapLayers, mapBounds, minimapBoundaries, IDLE, COALITIONAREA_DRAW_POLYGON, visibilityControls, visibilityControlsTooltips, MOVE_UNIT, SHOW_UNIT_CONTACTS, HIDE_GROUP_MEMBERS, SHOW_UNIT_PATHS, SHOW_UNIT_TARGETS, visibilityControlsTypes, SHOW_UNIT_LABELS, SHOW_UNITS_ENGAGEMENT_RINGS, SHOW_UNITS_ACQUISITION_RINGS, HIDE_UNITS_SHORT_RANGE_RINGS, FILL_SELECTED_RING, MAP_MARKER_CONTROLS } from "../constants/constants"; +import { mapLayers, mapBounds, minimapBoundaries, IDLE, COALITIONAREA_DRAW_POLYGON, MOVE_UNIT, SHOW_UNIT_CONTACTS, HIDE_GROUP_MEMBERS, SHOW_UNIT_PATHS, SHOW_UNIT_TARGETS, SHOW_UNIT_LABELS, SHOW_UNITS_ENGAGEMENT_RINGS, SHOW_UNITS_ACQUISITION_RINGS, HIDE_UNITS_SHORT_RANGE_RINGS, FILL_SELECTED_RING, MAP_MARKER_CONTROLS } from "../constants/constants"; import { TargetMarker } from "./markers/targetmarker"; import { CoalitionArea } from "./coalitionarea/coalitionarea"; import { CoalitionAreaContextMenu } from "../contextmenus/coalitionareacontextmenu"; import { DrawingCursor } from "./coalitionarea/drawingcursor"; import { AirbaseSpawnContextMenu } from "../contextmenus/airbasespawnmenu"; -import { Popup } from "../popups/popup"; import { GestureHandling } from "leaflet-gesture-handling"; import { TouchBoxSelect } from "./touchboxselect"; import { DestinationPreviewHandle } from "./markers/destinationpreviewHandle"; +import { ContextActionSet } from "../unit/contextactionset"; var hasTouchScreen = false; //if ("maxTouchPoints" in navigator) @@ -322,7 +322,7 @@ export class Map extends L.Map { return this.#mapContextMenu; } - showUnitContextMenu(x: number, y: number, latlng: L.LatLng) { + showUnitContextMenu(x: number | undefined = undefined, y: number | undefined = undefined, latlng: L.LatLng | undefined = undefined) { this.hideAllContextMenus(); this.#unitContextMenu.show(x, y, latlng); } @@ -335,7 +335,7 @@ export class Map extends L.Map { this.#unitContextMenu.hide(); } - showAirbaseContextMenu(x: number, y: number, latlng: L.LatLng, airbase: Airbase) { + showAirbaseContextMenu(airbase: Airbase, x: number | undefined = undefined, y: number | undefined = undefined, latlng: L.LatLng | undefined = undefined) { this.hideAllContextMenus(); this.#airbaseContextMenu.show(x, y, latlng); this.#airbaseContextMenu.setAirbase(airbase); @@ -349,7 +349,7 @@ export class Map extends L.Map { this.#airbaseContextMenu.hide(); } - showAirbaseSpawnMenu(x: number, y: number, latlng: L.LatLng, airbase: Airbase) { + showAirbaseSpawnMenu(airbase: Airbase, x: number | undefined = undefined, y: number | undefined = undefined, latlng: L.LatLng | undefined = undefined) { this.hideAllContextMenus(); this.#airbaseSpawnMenu.show(x, y); this.#airbaseSpawnMenu.setAirbase(airbase); @@ -561,9 +561,9 @@ export class Map extends L.Map { } else if (this.#state === MOVE_UNIT) { if (!e.originalEvent.ctrlKey) { - getApp().getUnitsManager().selectedUnitsClearDestinations(); + getApp().getUnitsManager().clearDestinations(); } - getApp().getUnitsManager().selectedUnitsAddDestination(this.#computeDestinationRotation && this.#destinationRotationCenter != null ? this.#destinationRotationCenter : e.latlng, this.#shiftKey, this.#destinationGroupRotation) + getApp().getUnitsManager().addDestination(this.#computeDestinationRotation && this.#destinationRotationCenter != null ? this.#destinationRotationCenter : e.latlng, this.#shiftKey, this.#destinationGroupRotation) this.#destinationGroupRotation = 0; this.#destinationRotationCenter = null; @@ -611,59 +611,15 @@ export class Map extends L.Map { if (e.originalEvent.button != 2 || e.originalEvent.ctrlKey || e.originalEvent.shiftKey) return; - var options: { [key: string]: { text: string, tooltip: string } } = {}; - const selectedUnits = getApp().getUnitsManager().getSelectedUnits(); - const selectedUnitTypes = getApp().getUnitsManager().getSelectedUnitsCategories(); - - if (selectedUnitTypes.length === 1 && ["Aircraft", "Helicopter"].includes(selectedUnitTypes[0])) { - if (selectedUnits.every((unit: Unit) => { return unit.canLandAtPoint()})) - options["land-at-point"] = { text: "Land here", tooltip: "Land at this precise location" }; - - if (selectedUnits.every((unit: Unit) => { return unit.canTargetPoint()})) { - options["bomb"] = { text: "Precision bombing", tooltip: "Precision bombing of a specific point" }; - options["carpet-bomb"] = { text: "Carpet bombing", tooltip: "Carpet bombing close to a point" }; - } - - if (Object.keys(options).length === 0) - (getApp().getPopupsManager().get("infoPopup") as Popup).setText(`Selected units can not perform point actions.`); - } - else if (selectedUnitTypes.length === 1 && ["GroundUnit", "NavyUnit"].includes(selectedUnitTypes[0])) { - if (selectedUnits.every((unit: Unit) => { return unit.canTargetPoint() })) { - options["fire-at-area"] = { text: "Fire at area", tooltip: "Fire at a large area" }; - options["simulate-fire-fight"] = { text: "Simulate fire fight", tooltip: "Simulate a fire fight by shooting randomly in a certain large area" }; - } - else - (getApp().getPopupsManager().get("infoPopup") as Popup).setText(`Selected units can not perform point actions.`); - } - else if(selectedUnitTypes.length > 1) { - (getApp().getPopupsManager().get("infoPopup") as Popup).setText(`Multiple unit types selected, no common actions available.`); - } - - if (Object.keys(options).length > 0) { - this.showUnitContextMenu(e.originalEvent.x, e.originalEvent.y, e.latlng); - this.getUnitContextMenu().setOptions(options, (option: string) => { - this.hideUnitContextMenu(); - if (option === "bomb") { - getApp().getUnitsManager().getSelectedUnits().length > 0 ? this.setState(MOVE_UNIT) : this.setState(IDLE); - getApp().getUnitsManager().selectedUnitsBombPoint(this.getMouseCoordinates()); - } - else if (option === "carpet-bomb") { - getApp().getUnitsManager().getSelectedUnits().length > 0 ? this.setState(MOVE_UNIT) : this.setState(IDLE); - getApp().getUnitsManager().selectedUnitsCarpetBomb(this.getMouseCoordinates()); - } - else if (option === "fire-at-area") { - getApp().getUnitsManager().getSelectedUnits().length > 0 ? this.setState(MOVE_UNIT) : this.setState(IDLE); - getApp().getUnitsManager().selectedUnitsFireAtArea(this.getMouseCoordinates()); - } - else if (option === "simulate-fire-fight") { - getApp().getUnitsManager().getSelectedUnits().length > 0 ? this.setState(MOVE_UNIT) : this.setState(IDLE); - getApp().getUnitsManager().selectedUnitsSimulateFireFight(this.getMouseCoordinates()); - } - else if (option === "land-at-point") { - getApp().getUnitsManager().getSelectedUnits().length > 0 ? this.setState(MOVE_UNIT) : this.setState(IDLE); - getApp().getUnitsManager().selectedUnitsLandAtPoint(this.getMouseCoordinates()); - } - }); + var contextActionSet = new ContextActionSet(); + var units = getApp().getUnitsManager().getSelectedUnits(); + units.forEach((unit: Unit) => { + unit.appendContextActions(contextActionSet, null, e.latlng); + }) + + if (Object.keys(contextActionSet.getContextActions()).length > 0) { + getApp().getMap().showUnitContextMenu(e.originalEvent.x, e.originalEvent.y, e.latlng); + getApp().getMap().getUnitContextMenu().setContextActions(contextActionSet); } }, 150); this.#longPressHandled = false; @@ -742,6 +698,8 @@ export class Map extends L.Map { const toggles = `["${control.toggles.join('","')}"]`; const div = document.createElement("div"); div.className = control.protectable === true ? "protectable" : ""; + + // TODO: for consistency let's avoid using innerHTML. Let's create elements. div.innerHTML = ` From 11d6f25606bfcc3258cee1c52c873dbf18e6bdcc Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Fri, 17 Nov 2023 21:34:50 +0100 Subject: [PATCH 09/41] Changed unit:getCategory to Object.getCategory(unit) And added some isExist guards --- scripts/OlympusCommand.lua | 64 +++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/scripts/OlympusCommand.lua b/scripts/OlympusCommand.lua index f05d7cf3..0c72da80 100644 --- a/scripts/OlympusCommand.lua +++ b/scripts/OlympusCommand.lua @@ -180,7 +180,7 @@ function Olympus.buildTask(groupName, options) if options ['altitudeType'] then if options ['altitudeType'] == "AGL" then local groundHeight = 0 - if group then + if group ~= nil then local groupPos = mist.getLeadPos(group) groundHeight = land.getHeight({x = groupPos.x, y = groupPos.z}) end @@ -287,7 +287,7 @@ end function Olympus.move(groupName, lat, lng, altitude, altitudeType, speed, speedType, category, taskOptions) Olympus.debug("Olympus.move " .. groupName .. " (" .. lat .. ", " .. lng ..") " .. altitude .. "m " .. altitudeType .. " ".. speed .. "m/s " .. category .. " " .. Olympus.serializeTable(taskOptions), 2) local group = Group.getByName(groupName) - if group then + if group ~= nil then if category == "Aircraft" then local startPoint = mist.getLeadPos(group) local endPoint = coord.LLtoLO(lat, lng, 0) @@ -765,9 +765,9 @@ end -- Find a database entry by ID function Olympus.findInDatabase(ID) - for idx, unit in pairs(Olympus.cloneDatabase) do - if unit ~= nil and unit["ID"] == ID then - return unit + for idx, unitRecord in pairs(Olympus.cloneDatabase) do + if unitRecord ~= nil and unitRecord["ID"] == ID then + return unitRecord end end return nil @@ -789,11 +789,11 @@ function Olympus.clone(cloneTable, deleteOriginal) -- All the units in the table will be cloned in a single group for idx, cloneData in pairs(cloneTable) do local ID = cloneData.ID - local unit = Olympus.findInDatabase(ID) + local unitRecord = Olympus.findInDatabase(ID) - if unit ~= nil then + if unitRecord ~= nil then -- Update the data of the cloned unit - local unitTable = mist.utils.deepCopy(unit) + local unitTable = mist.utils.deepCopy(unitRecord) local point = coord.LLtoLO(cloneData['lat'], cloneData['lng'], 0) if unitTable then @@ -803,8 +803,8 @@ function Olympus.clone(cloneTable, deleteOriginal) end if countryID == nil and category == nil then - countryID = unit["country"] - if unit["category"] == Unit.Category.AIRPLANE then + countryID = unitRecord["country"] + if unitRecord["category"] == Unit.Category.AIRPLANE then category = 'plane' route = { ["points"] = @@ -823,7 +823,7 @@ function Olympus.clone(cloneTable, deleteOriginal) }, }, } - elseif unit["category"] == Unit.Category.HELICOPTER then + elseif unitRecord["category"] == Unit.Category.HELICOPTER then category = 'helicopter' route = { ["points"] = @@ -842,9 +842,9 @@ function Olympus.clone(cloneTable, deleteOriginal) }, }, } - elseif unit["category"] == Unit.Category.GROUND_UNIT then + elseif unitRecord["category"] == Unit.Category.GROUND_UNIT then category = 'vehicle' - elseif unit["category"] == Unit.Category.SHIP then + elseif unitRecord["category"] == Unit.Category.SHIP then category = 'ship' end end @@ -884,7 +884,7 @@ end function Olympus.delete(ID, explosion, explosionType) Olympus.debug("Olympus.delete " .. ID .. " " .. tostring(explosion), 2) local unit = Olympus.getUnitByID(ID) - if unit then + if unit ~= nil and unit:isExist() then if unit:getPlayerName() or explosion then if explosionType == nil then explosionType = "normal" @@ -903,7 +903,7 @@ end function Olympus.setTask(groupName, taskOptions) Olympus.debug("Olympus.setTask " .. groupName .. " " .. Olympus.serializeTable(taskOptions), 2) local group = Group.getByName(groupName) - if group then + if group ~= nil then local task = Olympus.buildTask(groupName, taskOptions); Olympus.debug("Olympus.setTask " .. Olympus.serializeTable(task), 20) if task then @@ -917,7 +917,7 @@ end function Olympus.resetTask(groupName) Olympus.debug("Olympus.resetTask " .. groupName, 2) local group = Group.getByName(groupName) - if group then + if group ~= nil then group:getController():resetTask() Olympus.debug("Olympus.resetTask completed successfully", 2) end @@ -927,7 +927,7 @@ end function Olympus.setCommand(groupName, command) Olympus.debug("Olympus.setCommand " .. groupName .. " " .. Olympus.serializeTable(command), 2) local group = Group.getByName(groupName) - if group then + if group ~= nil then group:getController():setCommand(command) Olympus.debug("Olympus.setCommand completed successfully", 2) end @@ -937,7 +937,7 @@ end function Olympus.setOption(groupName, optionID, optionValue) Olympus.debug("Olympus.setOption " .. groupName .. " " .. optionID .. " " .. tostring(optionValue), 2) local group = Group.getByName(groupName) - if group then + if group ~= nil then group:getController():setOption(optionID, optionValue) Olympus.debug("Olympus.setOption completed successfully", 2) end @@ -947,7 +947,7 @@ end function Olympus.setOnOff(groupName, onOff) Olympus.debug("Olympus.setOnOff " .. groupName .. " " .. tostring(onOff), 2) local group = Group.getByName(groupName) - if group then + if group ~= nil then group:getController():setOnOff(onOff) Olympus.debug("Olympus.setOnOff completed successfully", 2) end @@ -965,19 +965,19 @@ function Olympus.setUnitsData(arg, time) index = index + 1 -- Only the indexes between startIndex and endIndex are handled. This is a simple way to spread the update load over many cycles if index > startIndex then - if unit ~= nil then + if unit ~= nil and unit:isExist() then local table = {} -- Get the object category in Olympus name - local objectCategory = unit:getCategory() + local objectCategory = Object.getCategory(unit) if objectCategory == Object.Category.UNIT then - if unit:getDesc().category == Unit.Category.AIRPLANE then + if unit:getCategory() == Unit.Category.AIRPLANE then table["category"] = "Aircraft" - elseif unit:getDesc().category == Unit.Category.HELICOPTER then + elseif unit:getCategory() == Unit.Category.HELICOPTER then table["category"] = "Helicopter" - elseif unit:getDesc().category == Unit.Category.GROUND_UNIT then + elseif unit:getCategory() == Unit.Category.GROUND_UNIT then table["category"] = "GroundUnit" - elseif unit:getDesc().category == Unit.Category.SHIP then + elseif unit:getCategory() == Unit.Category.SHIP then table["category"] = "NavyUnit" end else @@ -1039,7 +1039,7 @@ function Olympus.setUnitsData(arg, time) local name = unit:getName() if Olympus.cloneDatabase[name] ~= nil then Olympus.cloneDatabase[name]["ID"] = ID - Olympus.cloneDatabase[name]["category"] = unit:getDesc().category + Olympus.cloneDatabase[name]["category"] = unit:getCategory() Olympus.cloneDatabase[name]["heading"] = table["heading"] Olympus.cloneDatabase[name]["alt"] = alt Olympus.cloneDatabase[name]["country"] = unit:getCountry() @@ -1091,17 +1091,17 @@ function Olympus.setWeaponsData(arg, time) -- Only the indexes between startIndex and endIndex are handled. This is a simple way to spread the update load over many cycles if index > startIndex then - if weapon ~= nil then + if weapon ~= nil and weapon:isExist() then local table = {} -- Get the object category in Olympus name - local objectCategory = weapon:getCategory() + local objectCategory = Object.getCategory(weapon) if objectCategory == Object.Category.WEAPON then - if weapon:getDesc().category == Weapon.Category.MISSILE then + if weapon:getCategory() == Weapon.Category.MISSILE then table["category"] = "Missile" - elseif weapon:getDesc().category == Weapon.Category.ROCKET then + elseif weapon:getCategory() == Weapon.Category.ROCKET then table["category"] = "Missile" - elseif weapon:getDesc().category == Weapon.Category.BOMB then + elseif weapon:getCategory() == Weapon.Category.BOMB then table["category"] = "Bomb" end else @@ -1216,7 +1216,7 @@ function Olympus.initializeUnits() if mist and mist.DBs and mist.DBs.MEunitsById then for id, unitsTable in pairs(mist.DBs.MEunitsById) do local unit = Unit.getByName(unitsTable["unitName"]) - if unit then + if unit ~= nil and unit:isExist() then Olympus.units[unit["id_"]] = unit end end From 017a89b9458234435bf80414b7e4c088dc8a806e Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Fri, 17 Nov 2023 22:02:32 +0100 Subject: [PATCH 10/41] getDesc().category reimplemented unit:getCategory() reports "Airplane" for Helicopters --- client/src/constants/constants.ts | 94 +++++++++++++++---------------- scripts/OlympusCommand.lua | 16 +++--- 2 files changed, 55 insertions(+), 55 deletions(-) diff --git a/client/src/constants/constants.ts b/client/src/constants/constants.ts index 7ec229c5..c58e3073 100644 --- a/client/src/constants/constants.ts +++ b/client/src/constants/constants.ts @@ -15,11 +15,11 @@ export const BLUE_COMMANDER = "Blue commander"; export const RED_COMMANDER = "Red commander"; export const VISUAL = 1; -export const OPTIC = 2; -export const RADAR = 4; -export const IRST = 8; -export const RWR = 16; -export const DLINK = 32; +export const OPTIC = 2; +export const RADAR = 4; +export const IRST = 8; +export const RWR = 16; +export const DLINK = 32; export const states: string[] = ["none", "idle", "reach-destination", "attack", "follow", "land", "refuel", "AWACS", "tanker", "bomb-point", "carpet-bomb", "bomb-building", "fire-at-area", "simulate-fire-fight", "scenic-aaa", "miss-on-purpose", "land-at-point"]; export const ROEs: string[] = ["free", "designated", "", "return", "hold"]; @@ -35,16 +35,16 @@ export const ROEDescriptions: string[] = [ ]; export const reactionsToThreatDescriptions: string[] = [ - "None (No reaction)", - "Manoeuvre (no countermeasures)", - "Passive (Countermeasures only, no manoeuvre)", + "None (No reaction)", + "Manoeuvre (no countermeasures)", + "Passive (Countermeasures only, no manoeuvre)", "Evade (Countermeasures and manoeuvers)" ]; export const emissionsCountermeasuresDescriptions: string[] = [ - "Silent (Radar OFF, no ECM)", - "Attack (Radar only for targeting, ECM only if locked)", - "Defend (Radar for searching, ECM if locked)", + "Silent (Radar OFF, no ECM)", + "Attack (Radar only for targeting, ECM only if locked)", + "Defend (Radar for searching, ECM if locked)", "Always on (Radar and ECM always on)" ]; @@ -118,25 +118,25 @@ export const mapLayers = { "ArcGIS Satellite": { urlTemplate: "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}", minZoom: 1, - maxZoom: 18, + maxZoom: 19, attribution: "Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, GetApp().getMap()ping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community" }, "USGS Topo": { urlTemplate: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}', minZoom: 1, - maxZoom: 18, + maxZoom: 14, attribution: 'Tiles courtesy of the U.S. Geological Survey' }, "OpenStreetMap Mapnik": { urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', minZoom: 1, - maxZoom: 18, + maxZoom: 20, attribution: '© OpenStreetMap contributors' }, "OPENVKarte": { urlTemplate: 'https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png', minZoom: 1, - maxZoom: 18, + maxZoom: 20, attribution: 'Map memomaps.de CC-BY-SA, map data © OpenStreetMap contributors' }, "Esri.DeLorme": { @@ -148,7 +148,7 @@ export const mapLayers = { "CyclOSM": { urlTemplate: 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png', minZoom: 1, - maxZoom: 18, + maxZoom: 20, attribution: 'CyclOSM | Map data: © OpenStreetMap contributors' } } @@ -160,62 +160,62 @@ export const COALITIONAREA_DRAW_POLYGON = "Draw Coalition Area"; export const visibilityControls: string[] = ["human", "dcs", "aircraft", "helicopter", "groundunit-sam", "groundunit-other", "navyunit", "airbase"]; export const visibilityControlsTypes: string[][] = [["human"], ["dcs"], ["aircraft"], ["helicopter"], ["groundunit-sam", "groundunit-sam-radar", "groundunit-sam-launcher"], ["groundunit-other", "groundunit-ewr"], ["navyunit"], ["airbase"]]; export const visibilityControlsTooltips: string[] = ["Toggle human players visibility", "Toggle DCS controlled units visibility", "Toggle aircrafts visibility", "Toggle helicopter visibility", "Toggle SAM units visibility", "Toggle ground units (not SAM) visibility", "Toggle navy units visibility", "Toggle airbases visibility"]; -export const MAP_MARKER_CONTROLS:MapMarkerControl[] = [{ - "name":"Human", +export const MAP_MARKER_CONTROLS: MapMarkerControl[] = [{ + "name": "Human", "image": "visibility/human.svg", - "toggles": [ "human" ], + "toggles": ["human"], "tooltip": "Toggle human players' visibility" }, { "image": "visibility/dcs.svg", "isProtected": true, - "name":"DCS", + "name": "DCS", "protectable": true, - "toggles": [ "dcs" ], + "toggles": ["dcs"], "tooltip": "Toggle DCS-controlled units' visibility" }, { "image": "visibility/aircraft.svg", - "name":"Aircraft", - "toggles": [ "aircraft" ], + "name": "Aircraft", + "toggles": ["aircraft"], "tooltip": "Toggle aircraft's visibility" }, { "image": "visibility/helicopter.svg", - "name":"Helicopter", - "toggles": [ "helicopter" ], + "name": "Helicopter", + "toggles": ["helicopter"], "tooltip": "Toggle helicopters' visibility" }, { "image": "visibility/groundunit-sam.svg", - "name":"Air defence", - "toggles": [ "groundunit-sam" ], + "name": "Air defence", + "toggles": ["groundunit-sam"], "tooltip": "Toggle air defence units' visibility" }, { "image": "visibility/groundunit-other.svg", - "name":"Ground units", - "toggles": [ "groundunit-other" ], + "name": "Ground units", + "toggles": ["groundunit-other"], "tooltip": "Toggle ground units' visibility" }, { "image": "visibility/navyunit.svg", - "name":"Naval", - "toggles": [ "navyunit" ], + "name": "Naval", + "toggles": ["navyunit"], "tooltip": "Toggle naval units' visibility" }, { "image": "visibility/airbase.svg", - "name":"Airbase", - "toggles": [ "airbase" ], + "name": "Airbase", + "toggles": ["airbase"], "tooltip": "Toggle airbase' visibility" }]; export const IADSTypes = ["AAA", "MANPADS", "SAM Site", "Radar"]; -export const IADSDensities: {[key: string]: number}= {"AAA": 0.8, "MANPADS": 0.3, "SAM Site": 0.1, "Radar": 0.05}; +export const IADSDensities: { [key: string]: number } = { "AAA": 0.8, "MANPADS": 0.3, "SAM Site": 0.1, "Radar": 0.05 }; -export const HIDE_GROUP_MEMBERS = "Hide group members when zoomed out"; -export const SHOW_UNIT_LABELS = "Show unit labels (L)"; -export const SHOW_UNITS_ENGAGEMENT_RINGS = "Show units threat range rings (Q)"; -export const HIDE_UNITS_SHORT_RANGE_RINGS = "Hide short range units threat range rings (R)"; -export const SHOW_UNITS_ACQUISITION_RINGS = "Show units detection range rings (E)"; -export const FILL_SELECTED_RING = "Fill the threat range rings of selected units (F)"; -export const SHOW_UNIT_CONTACTS = "Show selected units contact lines"; -export const SHOW_UNIT_PATHS = "Show selected unit paths"; -export const SHOW_UNIT_TARGETS = "Show selected unit targets"; +export const HIDE_GROUP_MEMBERS = "Hide group members when zoomed out"; +export const SHOW_UNIT_LABELS = "Show unit labels (L)"; +export const SHOW_UNITS_ENGAGEMENT_RINGS = "Show units threat range rings (Q)"; +export const HIDE_UNITS_SHORT_RANGE_RINGS = "Hide short range units threat range rings (R)"; +export const SHOW_UNITS_ACQUISITION_RINGS = "Show units detection range rings (E)"; +export const FILL_SELECTED_RING = "Fill the threat range rings of selected units (F)"; +export const SHOW_UNIT_CONTACTS = "Show selected units contact lines"; +export const SHOW_UNIT_PATHS = "Show selected unit paths"; +export const SHOW_UNIT_TARGETS = "Show selected unit targets"; export enum DataIndexes { startOfData = 0, @@ -267,12 +267,12 @@ export enum DataIndexes { }; export const MGRS_PRECISION_10KM = 2; -export const MGRS_PRECISION_1KM = 3; +export const MGRS_PRECISION_1KM = 3; export const MGRS_PRECISION_100M = 4; -export const MGRS_PRECISION_10M = 5; -export const MGRS_PRECISION_1M = 6; +export const MGRS_PRECISION_10M = 5; +export const MGRS_PRECISION_1M = 6; -export const DELETE_CYCLE_TIME = 0.05; +export const DELETE_CYCLE_TIME = 0.05; export const DELETE_SLOW_THRESHOLD = 50; export const GROUPING_ZOOM_TRANSITION = 13; \ No newline at end of file diff --git a/scripts/OlympusCommand.lua b/scripts/OlympusCommand.lua index 0c72da80..f073a39c 100644 --- a/scripts/OlympusCommand.lua +++ b/scripts/OlympusCommand.lua @@ -971,13 +971,13 @@ function Olympus.setUnitsData(arg, time) -- Get the object category in Olympus name local objectCategory = Object.getCategory(unit) if objectCategory == Object.Category.UNIT then - if unit:getCategory() == Unit.Category.AIRPLANE then + if unit:getDesc().category == Unit.Category.AIRPLANE then table["category"] = "Aircraft" - elseif unit:getCategory() == Unit.Category.HELICOPTER then + elseif unit:getDesc().category == Unit.Category.HELICOPTER then table["category"] = "Helicopter" - elseif unit:getCategory() == Unit.Category.GROUND_UNIT then + elseif unit:getDesc().category == Unit.Category.GROUND_UNIT then table["category"] = "GroundUnit" - elseif unit:getCategory() == Unit.Category.SHIP then + elseif unit:getDesc().category == Unit.Category.SHIP then table["category"] = "NavyUnit" end else @@ -1039,7 +1039,7 @@ function Olympus.setUnitsData(arg, time) local name = unit:getName() if Olympus.cloneDatabase[name] ~= nil then Olympus.cloneDatabase[name]["ID"] = ID - Olympus.cloneDatabase[name]["category"] = unit:getCategory() + Olympus.cloneDatabase[name]["category"] = unit:getDesc().category Olympus.cloneDatabase[name]["heading"] = table["heading"] Olympus.cloneDatabase[name]["alt"] = alt Olympus.cloneDatabase[name]["country"] = unit:getCountry() @@ -1097,11 +1097,11 @@ function Olympus.setWeaponsData(arg, time) -- Get the object category in Olympus name local objectCategory = Object.getCategory(weapon) if objectCategory == Object.Category.WEAPON then - if weapon:getCategory() == Weapon.Category.MISSILE then + if weapon:getDesc().category == Weapon.Category.MISSILE then table["category"] = "Missile" - elseif weapon:getCategory() == Weapon.Category.ROCKET then + elseif weapon:getDesc().category == Weapon.Category.ROCKET then table["category"] = "Missile" - elseif weapon:getCategory() == Weapon.Category.BOMB then + elseif weapon:getDesc().category == Weapon.Category.BOMB then table["category"] = "Bomb" end else From 283b9e682eacea94dd8e1d117b101bcbb340b9c0 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Fri, 17 Nov 2023 22:04:21 +0100 Subject: [PATCH 11/41] v0.4.7 --- client/package-lock.json | 4 ++-- client/package.json | 2 +- client/views/other/dialogs.ejs | 2 +- client/views/toolbars/primary.ejs | 2 +- installer/olympus.iss | 2 +- mod/entry.lua | 2 +- scripts/OlympusCommand.lua | 2 +- scripts/OlympusHook.lua | 2 +- src/shared/include/defines.h | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 446de9f4..a50305c8 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,12 +1,12 @@ { "name": "DCSOlympus", - "version": "v0.4.6-alpha", + "version": "v0.4.7-alpha", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "DCSOlympus", - "version": "v0.4.6-alpha", + "version": "v0.4.7-alpha", "dependencies": { "@turf/turf": "^6.5.0", "body-parser": "^1.20.2", diff --git a/client/package.json b/client/package.json index 8a6e718a..1238d38a 100644 --- a/client/package.json +++ b/client/package.json @@ -2,7 +2,7 @@ "name": "DCSOlympus", "node-main": "./bin/www", "main": "http://localhost:3000", - "version": "v0.4.6-alpha", + "version": "v0.4.7-alpha", "private": true, "scripts": { "build": "browserify .\\src\\index.ts --debug -o .\\public\\javascripts\\bundle.js -t [ babelify --global true --presets [ @babel/preset-env ] --extensions '.js'] -p [ tsify --noImplicitAny ] && copy.bat", diff --git a/client/views/other/dialogs.ejs b/client/views/other/dialogs.ejs index 5e476b7c..3333b8f8 100644 --- a/client/views/other/dialogs.ejs +++ b/client/views/other/dialogs.ejs @@ -3,7 +3,7 @@

DCS Olympus

Dynamic Unit Command

-
Version v0.4.6-alpha
+
Version v0.4.7-alpha
diff --git a/client/views/toolbars/primary.ejs b/client/views/toolbars/primary.ejs index 439b35ad..f7cf4c0b 100644 --- a/client/views/toolbars/primary.ejs +++ b/client/views/toolbars/primary.ejs @@ -6,7 +6,7 @@

DCS Olympus

-
version v0.4.6-alpha
+
version v0.4.7-alpha
Discord diff --git a/installer/olympus.iss b/installer/olympus.iss index fc4e6f82..04904a3b 100644 --- a/installer/olympus.iss +++ b/installer/olympus.iss @@ -1,5 +1,5 @@ #define nwjsFolder "C:\Users\dpass\Documents\nwjs\" -#define version "v0.4.6-alpha" +#define version "v0.4.7-alpha" [Setup] AppName=DCS Olympus diff --git a/mod/entry.lua b/mod/entry.lua index 6dea1156..2a0ecb73 100644 --- a/mod/entry.lua +++ b/mod/entry.lua @@ -15,7 +15,7 @@ declare_plugin(self_ID, shortName = "Olympus", fileMenuName = "Olympus", - version = "v0.4.6-alpha", + version = "v0.4.7-alpha", state = "installed", developerName= "DCS Refugees 767 squadron", info = _("DCS Olympus is a mod for DCS World. It allows users to spawn, control, task, group, and remove units from a DCS World server using a real-time map interface, similarly to Real Time Strategy games. The user interface also provides useful informations units, like loadouts, fuel, tasking, and so on. In the future, more features for DCS World GCI and JTAC will be available."), diff --git a/scripts/OlympusCommand.lua b/scripts/OlympusCommand.lua index f073a39c..291b139b 100644 --- a/scripts/OlympusCommand.lua +++ b/scripts/OlympusCommand.lua @@ -1,4 +1,4 @@ -local version = "v0.4.6-alpha" +local version = "v0.4.7-alpha" local debug = false -- True enables debug printing using DCS messages diff --git a/scripts/OlympusHook.lua b/scripts/OlympusHook.lua index a34af85c..261023eb 100644 --- a/scripts/OlympusHook.lua +++ b/scripts/OlympusHook.lua @@ -1,4 +1,4 @@ -local version = 'v0.4.6-alpha' +local version = 'v0.4.7-alpha' Olympus = {} Olympus.OlympusDLL = nil diff --git a/src/shared/include/defines.h b/src/shared/include/defines.h index d695109e..1506bfd2 100644 --- a/src/shared/include/defines.h +++ b/src/shared/include/defines.h @@ -1,6 +1,6 @@ #pragma once -#define VERSION "v0.4.6-alpha" +#define VERSION "v0.4.7-alpha" #define LOG_NAME "Olympus_log.txt" #define REST_ADDRESS "http://localhost:30000" #define REST_URI "olympus" From 84cf9aa27adb44eca6e046a69a91591e02aff61e Mon Sep 17 00:00:00 2001 From: PeekabooSteam Date: Fri, 17 Nov 2023 22:44:15 +0000 Subject: [PATCH 12/41] More changes from the list --- .../public/stylesheets/panels/unitcontrol.css | 19 ++++++++++++++----- client/public/stylesheets/style/style.css | 4 ++++ client/views/panels/unitcontrol.ejs | 2 +- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/client/public/stylesheets/panels/unitcontrol.css b/client/public/stylesheets/panels/unitcontrol.css index 698ade34..122e6fab 100644 --- a/client/public/stylesheets/panels/unitcontrol.css +++ b/client/public/stylesheets/panels/unitcontrol.css @@ -268,17 +268,22 @@ body.feature-forceShowUnitControlPanel #unit-control-panel { #advanced-settings-div { position: relative; - column-gap: 5px; + column-gap: 8px; display: flex; height: fit-content; } -#advanced-settings-div>*:nth-child(2) { - margin-left: auto; +#advanced-settings-div button { + font-size:13px; + height: 40px; } -#advanced-settings-div>button { - height: 40px; +#delete-options { + font-size:13px; +} + +#delete-options * { + background-color: var(--background-steel); } #delete-options button { @@ -293,6 +298,10 @@ body.feature-forceShowUnitControlPanel #unit-control-panel { max-height: 18px; } +#delete-options button svg * { + stroke: red; +} + /* Element visibility control */ #unit-control-panel:not([data-show-categories-tooltip]) #categories-tooltip, #unit-control-panel:not([data-show-speed-slider]) #speed-slider, diff --git a/client/public/stylesheets/style/style.css b/client/public/stylesheets/style/style.css index 9909d690..cebc99bc 100644 --- a/client/public/stylesheets/style/style.css +++ b/client/public/stylesheets/style/style.css @@ -67,6 +67,10 @@ button>img:first-child { pointer-events: none; } +.ol-box-shadow { + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); +} + form { margin: 0; padding: 0; diff --git a/client/views/panels/unitcontrol.ejs b/client/views/panels/unitcontrol.ejs index 59343d31..48288741 100644 --- a/client/views/panels/unitcontrol.ejs +++ b/client/views/panels/unitcontrol.ejs @@ -108,7 +108,7 @@
- +
Delete unit From 51defbb8b2630a3acd3c1073dd8adfd47b4580ee Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Sat, 18 Nov 2023 19:01:47 +0100 Subject: [PATCH 13/41] Added default marker for unkown units --- client/src/other/utils.ts | 2 +- client/src/unit/databases/aircraftdatabase.ts | 1 + client/src/unit/databases/unitdatabase.ts | 17 ++++- client/src/unit/unit.ts | 75 +++++++++++++------ 4 files changed, 69 insertions(+), 26 deletions(-) diff --git a/client/src/other/utils.ts b/client/src/other/utils.ts index 64f67089..3dbf2e1e 100644 --- a/client/src/other/utils.ts +++ b/client/src/other/utils.ts @@ -348,7 +348,7 @@ export function getMarkerCategoryByName(name: string) { else if (navyUnitDatabase.getByName(name) != null) return "navyunit"; else - return "groundunit-other"; // TODO add other unit types + return "aircraft"; // TODO add other unit types } export function getUnitDatabaseByCategory(category: string) { diff --git a/client/src/unit/databases/aircraftdatabase.ts b/client/src/unit/databases/aircraftdatabase.ts index 74ecf23f..1c4069b3 100644 --- a/client/src/unit/databases/aircraftdatabase.ts +++ b/client/src/unit/databases/aircraftdatabase.ts @@ -1,5 +1,6 @@ import { getApp } from "../.."; import { GAME_MASTER } from "../../constants/constants"; +import { UnitBlueprint } from "../../interfaces"; import { UnitDatabase } from "./unitdatabase" export class AircraftDatabase extends UnitDatabase { diff --git a/client/src/unit/databases/unitdatabase.ts b/client/src/unit/databases/unitdatabase.ts index 94c8acca..d30a79b2 100644 --- a/client/src/unit/databases/unitdatabase.ts +++ b/client/src/unit/databases/unitdatabase.ts @@ -3,7 +3,7 @@ import { getApp } from "../.."; import { GAME_MASTER } from "../../constants/constants"; import { UnitBlueprint } from "../../interfaces"; -export class UnitDatabase { +export abstract class UnitDatabase { blueprints: { [key: string]: UnitBlueprint } = {}; #url: string; @@ -31,9 +31,7 @@ export class UnitDatabase { } } - getCategory() { - return ""; - } + abstract getCategory(): string; /* Gets a specific blueprint by name */ getByName(name: string) { @@ -240,4 +238,15 @@ export class UnitDatabase { getSpawnPointsByName(name: string) { return Infinity; } + + getUnkownUnit(name: string): UnitBlueprint { + return { + name: name, + enabled: true, + coalition: 'neutral', + era: 'N/A', + label: name, + shortLabel: '' + } + } } \ No newline at end of file diff --git a/client/src/unit/unit.ts b/client/src/unit/unit.ts index 28b3f2d3..fd2e9bbf 100644 --- a/client/src/unit/unit.ts +++ b/client/src/unit/unit.ts @@ -1,6 +1,6 @@ -import { Marker, LatLng, Polyline, Icon, DivIcon, CircleMarker, Map, Point, Circle } from 'leaflet'; +import { Marker, LatLng, Polyline, Icon, DivIcon, CircleMarker, Map, Point } from 'leaflet'; import { getApp } from '..'; -import { enumToCoalition, enumToEmissioNCountermeasure, getMarkerCategoryByName, enumToROE, enumToReactionToThreat, enumToState, getUnitDatabaseByCategory, mToFt, msToKnots, rad2deg, bearing, deg2rad, ftToM, getGroundElevation, coalitionToEnum, nmToFt, nmToM } from '../other/utils'; +import { enumToCoalition, enumToEmissioNCountermeasure, enumToROE, enumToReactionToThreat, enumToState, getUnitDatabaseByCategory, mToFt, msToKnots, rad2deg, bearing, deg2rad, ftToM, getGroundElevation, coalitionToEnum, nmToFt, nmToM } from '../other/utils'; import { CustomMarker } from '../map/markers/custommarker'; import { SVGInjector } from '@tanem/svg-injector'; import { UnitDatabase } from './databases/unitdatabase'; @@ -14,8 +14,6 @@ import { Ammo, Contact, GeneralSettings, LoadoutBlueprint, ObjectIconOptions, Of import { RangeCircle } from "../map/rangecircle"; import { Group } from './group'; import { ContextActionSet } from './contextactionset'; -import { ContextAction } from './contextaction'; - var pathIcon = new Icon({ iconUrl: '/resources/theme/images/markers/marker-icon.png', shadowUrl: '/resources/theme/images/markers/marker-shadow.png', @@ -233,6 +231,18 @@ export abstract class Unit extends CustomMarker { */ abstract appendContextActions(contextActionSet: ContextActionSet, targetUnit: Unit | null, targetPosition: LatLng | null): void; + /** + * + * @returns string containing the marker category + */ + abstract getMarkerCategory(): string; + + /** + * + * @returns string containing the default marker + */ + abstract getDefaultMarker(): string; + /********************** Unit data *************************/ /** This function is called by the units manager to update all the data coming from the backend. It reads the binary raw data using a DataExtractor * @@ -371,14 +381,6 @@ export abstract class Unit extends CustomMarker { } } - /** - * - * @returns string containing the marker category - */ - getMarkerCategory(): string { - return getMarkerCategoryByName(this.getName()); - } - /** Get a database of information also in this unit's category * * @returns UnitDatabase @@ -448,7 +450,7 @@ export abstract class Unit extends CustomMarker { return this.#selected; } - /** Set the number of the hotgroup to which the unit belongs + /** Set the number of the hotgroup to which the unit belongss * * @param hotgroup (number) */ @@ -522,7 +524,7 @@ export abstract class Unit extends CustomMarker { } getDatabaseEntry() { - return this.getDatabase()?.getByName(this.#name); + return this.getDatabase()?.getByName(this.#name) ?? this.getDatabase()?.getUnkownUnit(this.getName()); } getGroup() { @@ -592,7 +594,7 @@ export abstract class Unit extends CustomMarker { /* If a unit does not belong to the commanded coalition or it is not visually detected, show it with the generic aircraft square */ var marker; if (this.belongsToCommandedCoalition() || this.getDetectionMethods().some(value => [VISUAL, OPTIC].includes(value))) - marker = this.getDatabaseEntry()?.markerFile ?? this.getMarkerCategory(); + marker = this.getDatabaseEntry()?.markerFile ?? this.getDefaultMarker(); else marker = "aircraft"; img.src = `/resources/theme/images/units/${marker}.svg`; @@ -1492,6 +1494,14 @@ export class Aircraft extends AirUnit { contextActionSet.addContextAction(this, "refuel", "Refuel", "Refuel units at the nearest AAR Tanker. If no tanker is available the unit will RTB", (units: Unit[]) => { getApp().getUnitsManager().refuel(units) }); } } + + getMarkerCategory() { + return "aircraft"; + } + + getDefaultMarker() { + return "aircraft"; + } } export class Helicopter extends AirUnit { @@ -1509,6 +1519,14 @@ export class Helicopter extends AirUnit { if (targetPosition !== null) contextActionSet.addContextAction(this, "land-at-point", "Land here", "land at this precise location", (units: Unit[]) => { getApp().getUnitsManager().landAtPoint(targetPosition, units) }); } + + getMarkerCategory() { + return "helicopter"; + } + + getDefaultMarker() { + return "helicopter"; + } } export class GroundUnit extends Unit { @@ -1582,9 +1600,9 @@ export class GroundUnit extends Unit { unitWhenGrouped = (member !== null ? member?.getDatabaseEntry()?.unitWhenGrouped : unitWhenGrouped); } if (unitWhenGrouped) - return this.getDatabase()?.getByName(unitWhenGrouped); + return this.getDatabase()?.getByName(unitWhenGrouped) ?? this.getDatabase()?.getUnkownUnit(this.getName()); else - return this.getDatabase()?.getByName(this.getName()); + return this.getDatabase()?.getByName(this.getName()) ?? this.getDatabase()?.getUnkownUnit(this.getName()); } /* When we zoom past the grouping limit, grouping is enabled and the unit is a leader, we redraw the unit to apply any possible grouped marker */ @@ -1593,6 +1611,17 @@ export class GroundUnit extends Unit { (getApp().getMap().getZoom() >= GROUPING_ZOOM_TRANSITION && getApp().getMap().getPreviousZoom() < GROUPING_ZOOM_TRANSITION || getApp().getMap().getZoom() < GROUPING_ZOOM_TRANSITION && getApp().getMap().getPreviousZoom() >= GROUPING_ZOOM_TRANSITION)) } + + getMarkerCategory() { + if (/\bAAA|SAM\b/.test(this.getType()) || /\bmanpad|stinger\b/i.test(this.getType())) + return "groundunit-sam"; + else + return "groundunit"; + } + + getDefaultMarker() { + return "groundunit"; + } } export class NavyUnit extends Unit { @@ -1634,10 +1663,6 @@ export class NavyUnit extends Unit { } } - getMarkerCategory() { - return "navyunit"; - } - getCategory() { return "NavyUnit"; } @@ -1646,4 +1671,12 @@ export class NavyUnit extends Unit { var blueprint = navyUnitDatabase.getByName(this.getName()); return blueprint?.type ? blueprint.type : ""; } + + getMarkerCategory() { + return "navyunit"; + } + + getDefaultMarker() { + return "navyunit"; + } } From 178706f8de04a3c8f860932099aa30f1fce1be46 Mon Sep 17 00:00:00 2001 From: PeekabooSteam Date: Sat, 18 Nov 2023 22:02:59 +0000 Subject: [PATCH 14/41] Finalised styling for UCP --- .../public/stylesheets/panels/unitcontrol.css | 57 ++++++++++++------- client/public/stylesheets/style/style.css | 35 ++++++++++-- client/public/themes/olympus/theme.css | 1 + client/views/panels/unitcontrol.ejs | 11 ++-- 4 files changed, 76 insertions(+), 28 deletions(-) diff --git a/client/public/stylesheets/panels/unitcontrol.css b/client/public/stylesheets/panels/unitcontrol.css index 122e6fab..940eb0f0 100644 --- a/client/public/stylesheets/panels/unitcontrol.css +++ b/client/public/stylesheets/panels/unitcontrol.css @@ -229,27 +229,10 @@ body.feature-forceShowUnitControlPanel #unit-control-panel { opacity: 80%; } -#unit-control-panel .switch-control .ol-switch { - height: 25px; - width: 60px; -} - -#unit-control-panel .switch-control .ol-switch-fill { - background-color: var(--accent-light-blue); -} - #unit-control-panel .switch-control .ol-switch-fill::after { background-color: white; } -#unit-control-panel .switch-control .ol-switch[data-value="true"]>.ol-switch-fill::before { - content: "YES"; -} - -#unit-control-panel .switch-control .ol-switch[data-value="false"]>.ol-switch-fill::before { - content: "NO"; -} - #operate-as-switch[data-value="true"] .ol-switch-fill { background-color: var(--accent-light-blue); } @@ -267,25 +250,60 @@ body.feature-forceShowUnitControlPanel #unit-control-panel { } #advanced-settings-div { - position: relative; + align-items: center; column-gap: 8px; display: flex; height: fit-content; + position: relative; } -#advanced-settings-div button { +#advanced-settings-div > button { + background-color: var(--background-grey); font-size:13px; height: 40px; + padding:0 20px; } #delete-options { font-size:13px; } +#delete-options.ol-select > .ol-select-value:after { + content: ""; +} + +#delete-options.ol-select > .ol-select-value svg { + background-color: transparent; + position: absolute; + right:2px; + translate:0 1px; +} + +#delete-options.ol-select > .ol-select-value svg * { + fill: var(--primary-red); +} + #delete-options * { background-color: var(--background-steel); } +#delete-options.ol-select > .ol-select-value:hover, +#delete-options .ol-select-options > div:not(.hr):hover, +#delete-options .ol-select-options > div:not(.hr):hover button, +#delete-options .ol-select-options > div hr { + background-color: var(--background-grey); +} + +#delete-options .ol-select-options > div:first-of-type { + margin-top:12px; + padding-top:0; +} + +#delete-options .ol-select-options > div:last-of-type { + margin-bottom:12px; + padding-bottom:0; +} + #delete-options button { display: flex; flex-direction: row; @@ -293,6 +311,7 @@ body.feature-forceShowUnitControlPanel #unit-control-panel { } #delete-options button svg { + background-color: transparent; margin-right: 10px; width: 18px; max-height: 18px; diff --git a/client/public/stylesheets/style/style.css b/client/public/stylesheets/style/style.css index cebc99bc..c73d3b8b 100644 --- a/client/public/stylesheets/style/style.css +++ b/client/public/stylesheets/style/style.css @@ -230,13 +230,13 @@ form { } .ol-select.is-open[data-position="top"]>.ol-select-options { + box-shadow: 0 4px 4px rgba(0, 0, 0, 0.25); top: 0; translate: 0 -100%; } .ol-select>.ol-select-options>div { background-color: var(--background-grey); - box-shadow: 0 4px 4px rgba(0, 0, 0, 0.25); display: flex; justify-content: left; padding: 2px 15px; @@ -266,7 +266,6 @@ form { color: white; display: block; font-size: 13px; - font-weight: normal; height: 32px; padding: 6px 2px; padding: 5px; @@ -1334,7 +1333,7 @@ input[type=number]::-webkit-outer-spin-button { } [class|="ol-button"]::before { - margin-right: 8px; + margin-right: 4px; } .ol-button-close { @@ -1371,10 +1370,12 @@ input[type=number]::-webkit-outer-spin-button { } .ol-switch { + align-items: center; cursor: pointer; display: flex; - align-items: center; + height: 25px; justify-content: center; + width: 60px; } .ol-switch-input { @@ -1427,6 +1428,32 @@ input[type=number]::-webkit-outer-spin-button { transform: translateX(calc((var(--width) - var(--height)) * 0.5)); } +.switch-control.yes-no .ol-switch { + width:45px; +} + +.switch-control.yes-no .ol-switch[data-value="true"] .ol-switch-fill { + background-color: var(--accent-light-blue); +} + +.switch-control.yes-no .ol-switch[data-value="false"] .ol-switch-fill { + background-color: var(--ol-switch-off); +} + +.switch-control.yes-no .ol-switch>.ol-switch-fill::before { + translate:-100% 0; + transform: none; +} + +.switch-control.yes-no .ol-switch[data-value="true"]>.ol-switch-fill::before { + content: "YES"; +} + +.switch-control.yes-no .ol-switch[data-value="false"]>.ol-switch-fill::before { + content: "NO"; +} + + .ol-contexmenu-panel { padding: 20px; } diff --git a/client/public/themes/olympus/theme.css b/client/public/themes/olympus/theme.css index 0c82d859..b086467c 100644 --- a/client/public/themes/olympus/theme.css +++ b/client/public/themes/olympus/theme.css @@ -45,6 +45,7 @@ --nav-text: #ECECEC; --ol-select-secondary: #545F6C; + --ol-switch-off:#686868; /*** General border radii **/ --border-radius-xs: 2px; diff --git a/client/views/panels/unitcontrol.ejs b/client/views/panels/unitcontrol.ejs index 48288741..2219e442 100644 --- a/client/views/panels/unitcontrol.ejs +++ b/client/views/panels/unitcontrol.ejs @@ -79,12 +79,12 @@
-
+

Enable tanker

-
+

Airborne Early Warning

@@ -94,12 +94,12 @@
-
+

Unit active

-
+

Follow roads

@@ -112,10 +112,11 @@
Delete unit +
-

+

From 85325c17ac5da877de64d5d07cbe9edff11c034f Mon Sep 17 00:00:00 2001 From: PeekabooSteam Date: Sun, 19 Nov 2023 11:17:00 +0000 Subject: [PATCH 15/41] More styling, added pulse to scenic actions from (?) --- .../public/stylesheets/panels/unitcontrol.css | 83 +++++++++++++----- client/public/stylesheets/style/style.css | 85 +++++-------------- client/src/panels/unitcontrolpanel.ts | 15 ++++ client/src/unit/contextaction.ts | 15 +++- client/src/unit/contextactionset.ts | 8 +- client/src/unit/unit.ts | 10 ++- client/views/panels/unitcontrol.ejs | 2 +- 7 files changed, 128 insertions(+), 90 deletions(-) diff --git a/client/public/stylesheets/panels/unitcontrol.css b/client/public/stylesheets/panels/unitcontrol.css index 940eb0f0..c7ada90f 100644 --- a/client/public/stylesheets/panels/unitcontrol.css +++ b/client/public/stylesheets/panels/unitcontrol.css @@ -2,6 +2,69 @@ body.feature-forceShowUnitControlPanel #unit-control-panel { display: block !important; } + +#roe-buttons-container button, +#reaction-to-threat-buttons-container button, +#emissions-countermeasures-buttons-container button, +#shots-scatter-buttons-container button +#shots-intensity-buttons-container button { + align-items: center; + background-color: transparent; + border: 1px solid var(--accent-light-blue); + display: flex; + height: 30px; + justify-content: center; + width: 30px; +} + +#reaction-to-threat-buttons-container button:not(:first-child) svg { + width: 150%; + margin: -5px; +} + +#unit-control-panel .ol-option-button button.selected { + background-color: white; + border-color: white; +} + +#unit-control-panel .ol-option-button button.selected svg * { + fill: var(--background-steel); + stroke: var(--background-steel); +} + +#rapid-controls { + display: flex; + flex-direction: column; + row-gap: 5px; + height: fit-content; + width: fit-content; +} + +#rapid-controls button { + padding: 4px; +} + +#rapid-controls button.pulse { + animation: pulse 1.5s linear infinite; +} + +#rapid-controls svg { + height: 20px; + width: 20px; + fill: white; + stroke: white; +} + +#rapid-controls button:before { + display: inline-block; + filter: invert(100%); + height: 20px; + width: 20px; +} + + + + #unit-control-panel { display: flex; flex-direction: row; @@ -229,26 +292,6 @@ body.feature-forceShowUnitControlPanel #unit-control-panel { opacity: 80%; } -#unit-control-panel .switch-control .ol-switch-fill::after { - background-color: white; -} - -#operate-as-switch[data-value="true"] .ol-switch-fill { - background-color: var(--accent-light-blue); -} - -#operate-as-switch[data-value="false"] .ol-switch-fill { - background-color: var(--primary-red); -} - -#operate-as-switch[data-value="true"]>.ol-switch-fill::before { - content: "BLUE" !important; -} - -#operate-as-switch[data-value="false"]>.ol-switch-fill::before { - content: "RED" !important; -} - #advanced-settings-div { align-items: center; column-gap: 8px; diff --git a/client/public/stylesheets/style/style.css b/client/public/stylesheets/style/style.css index c73d3b8b..53d8768c 100644 --- a/client/public/stylesheets/style/style.css +++ b/client/public/stylesheets/style/style.css @@ -718,62 +718,6 @@ nav.ol-panel> :last-child { } - -#roe-buttons-container button, -#reaction-to-threat-buttons-container button, -#emissions-countermeasures-buttons-container button, -#shots-scatter-buttons-container button -#shots-intensity-buttons-container button { - align-items: center; - background-color: transparent; - border: 1px solid var(--accent-light-blue); - display: flex; - height: 30px; - justify-content: center; - width: 30px; -} - -#reaction-to-threat-buttons-container button:not(:first-child) svg { - width: 150%; - margin: -5px; -} - -#unit-control-panel .ol-option-button button.selected { - background-color: white; - border-color: white; -} - -#unit-control-panel .ol-option-button button.selected svg * { - fill: var(--background-steel); - stroke: var(--background-steel); -} - -#rapid-controls { - display: flex; - flex-direction: column; - row-gap: 5px; - height: fit-content; - width: fit-content; -} - -#rapid-controls button { - padding: 4px; -} - -#rapid-controls svg { - height: 20px; - width: 20px; - fill: white; - stroke: white; -} - -#rapid-controls button:before { - display: inline-block; - filter: invert(100%); - height: 20px; - width: 20px; -} - /****************************************************************************************/ #splash-screen { border-radius: var(--border-radius-md); @@ -1375,7 +1319,7 @@ input[type=number]::-webkit-outer-spin-button { display: flex; height: 25px; justify-content: center; - width: 60px; + width: 40px; } .ol-switch-input { @@ -1411,7 +1355,7 @@ input[type=number]::-webkit-outer-spin-button { display: flex; font-size: 11px; height: 100%; - padding: 0px 7px; + padding: 0px 6px; position: absolute; transition: transform 0.2s; } @@ -1428,10 +1372,6 @@ input[type=number]::-webkit-outer-spin-button { transform: translateX(calc((var(--width) - var(--height)) * 0.5)); } -.switch-control.yes-no .ol-switch { - width:45px; -} - .switch-control.yes-no .ol-switch[data-value="true"] .ol-switch-fill { background-color: var(--accent-light-blue); } @@ -1440,6 +1380,7 @@ input[type=number]::-webkit-outer-spin-button { background-color: var(--ol-switch-off); } +.switch-control.coalition .ol-switch>.ol-switch-fill::before, .switch-control.yes-no .ol-switch>.ol-switch-fill::before { translate:-100% 0; transform: none; @@ -1469,6 +1410,26 @@ input[type=number]::-webkit-outer-spin-button { .ol-coalition-switch[data-value="undefined"]>.ol-switch-fill { background-color: var(--primary-neutral); } +/* +#unit-control-panel .switch-control .ol-switch-fill::after { + background-color: white; +} +*/ +.switch-control.coalition [data-value="true"] .ol-switch-fill { + background-color: var(--accent-light-blue); +} + +.switch-control.coalition [data-value="false"] .ol-switch-fill { + background-color: var(--primary-red); +} + +.switch-control.coalition [data-value="true"]>.ol-switch-fill::before { + content: "BLUE" !important; +} + +.switch-control.coalition [data-value="false"]>.ol-switch-fill::before { + content: "RED" !important; +} .ol-context-menu>ul { max-height: 200px; diff --git a/client/src/panels/unitcontrolpanel.ts b/client/src/panels/unitcontrolpanel.ts index 6fbb87ec..6100b84a 100644 --- a/client/src/panels/unitcontrolpanel.ts +++ b/client/src/panels/unitcontrolpanel.ts @@ -107,6 +107,19 @@ export class UnitControlPanel extends Panel { getApp().getUnitsManager().setOperateAs(value); }); + /* Mouseover of (?) highlights activation buttons */ + const operateAsQuestionMark = this.getElement().querySelector("#operate-as h4 img"); + operateAsQuestionMark.addEventListener("mouseover", () => { + document.querySelectorAll(`#rapid-controls button.scenic-action`).forEach((btn:Element) => { + btn.classList.add(`pulse`); + }); + }); + operateAsQuestionMark.addEventListener("mouseout", () => { + document.querySelectorAll(`#rapid-controls button.scenic-action.pulse`).forEach((btn:Element) => { + btn.classList.remove(`pulse`); + }); + }); + /* Advanced settings dialog */ this.#advancedSettingsDialog = document.querySelector("#advanced-settings-dialog"); @@ -324,6 +337,8 @@ export class UnitControlPanel extends Panel { let button = document.createElement("button"); button.title = contextAction.getDescription(); button.classList.add("ol-button", "unit-action-button"); + if (contextAction.getOptions().isScenic) + button.classList.add("scenic-action"); button.id = key; rapidControlsContainer.appendChild(button); button.onclick = () => { diff --git a/client/src/unit/contextaction.ts b/client/src/unit/contextaction.ts index 32da1dc1..5d935143 100644 --- a/client/src/unit/contextaction.ts +++ b/client/src/unit/contextaction.ts @@ -1,5 +1,9 @@ import { Unit } from "./unit"; +export interface ContextActionOptionsInterface { + isScenic?:boolean +} + export class ContextAction { #id: string = ""; #label: string = ""; @@ -7,13 +11,18 @@ export class ContextAction { #callback: CallableFunction | null = null; #units: Unit[] = []; #hideContextAfterExecution: boolean = true + #options: ContextActionOptionsInterface; - constructor(id: string, label: string, description: string, callback: CallableFunction, hideContextAfterExecution: boolean = true) { + constructor(id: string, label: string, description: string, callback: CallableFunction, hideContextAfterExecution: boolean = true, options:ContextActionOptionsInterface) { this.#id = id; this.#label = label; this.#description = description; this.#callback = callback; this.#hideContextAfterExecution = hideContextAfterExecution; + this.#options = { + "isScenic": false, + ...options + } } addUnit(unit: Unit) { @@ -28,6 +37,10 @@ export class ContextAction { return this.#label; } + getOptions() { + return this.#options; + } + getDescription() { return this.#description; } diff --git a/client/src/unit/contextactionset.ts b/client/src/unit/contextactionset.ts index afea52ed..60e1e88d 100644 --- a/client/src/unit/contextactionset.ts +++ b/client/src/unit/contextactionset.ts @@ -1,4 +1,4 @@ -import { ContextAction } from "./contextaction"; +import { ContextAction, ContextActionOptionsInterface } from "./contextaction"; import { Unit } from "./unit"; export class ContextActionSet { @@ -8,9 +8,11 @@ export class ContextActionSet { } - addContextAction(unit: Unit, id: string, label: string, description: string, callback: CallableFunction, hideContextAfterExecution: boolean = true) { + addContextAction(unit: Unit, id: string, label: string, description: string, callback: CallableFunction, hideContextAfterExecution: boolean = true, options?:ContextActionOptionsInterface) { + options = options || {}; + if (!(id in this.#contextActions)) { - this.#contextActions[id] = new ContextAction(id, label, description, callback, hideContextAfterExecution); + this.#contextActions[id] = new ContextAction(id, label, description, callback, hideContextAfterExecution, options); } this.#contextActions[id].addUnit(unit); } diff --git a/client/src/unit/unit.ts b/client/src/unit/unit.ts index 28b3f2d3..274b08e2 100644 --- a/client/src/unit/unit.ts +++ b/client/src/unit/unit.ts @@ -1549,13 +1549,17 @@ export class GroundUnit extends Unit { if (targetPosition !== null) { if (this.canTargetPoint()) { contextActionSet.addContextAction(this, "fire-at-area", "Fire at area", "Fire at a specific area on the ground", (units: Unit[]) => { getApp().getUnitsManager().fireAtArea(targetPosition, units) }); - contextActionSet.addContextAction(this, "simulate-fire-fight", "Simulate fire fight", "Simulate a fire fight by shooting randomly in a certain large area. WARNING: works correctly only on neutral units, blue or red units will aim", (units: Unit[]) => { getApp().getUnitsManager().fireAtArea(targetPosition, units) }); + contextActionSet.addContextAction(this, "simulate-fire-fight", "Simulate fire fight", "Simulate a fire fight by shooting randomly in a certain large area.\nWARNING: works correctly only on neutral units, blue or red units will aim", (units: Unit[]) => { getApp().getUnitsManager().fireAtArea(targetPosition, units) }); } } else { if (this.canAAA()) { - contextActionSet.addContextAction(this, "scenic-aaa", "Scenic AAA", "Shoot AAA in the air without aiming at any target, when a enemy unit gets close enough. WARNING: works correctly only on neutral units, blue or red units will aim", (units: Unit[]) => { getApp().getUnitsManager().scenicAAA(units) }); - contextActionSet.addContextAction(this, "miss-aaa", "Misson on purpose", "Shoot AAA towards the closest enemy unit, but don't aim precisely. WARNING: works correctly only on neutral units, blue or red units will aim", (units: Unit[]) => { getApp().getUnitsManager().missOnPurpose(units) }); + contextActionSet.addContextAction(this, "scenic-aaa", "Scenic AAA", "Shoot AAA in the air without aiming at any target, when a enemy unit gets close enough.\nWARNING: works correctly only on neutral units, blue or red units will aim", (units: Unit[]) => { getApp().getUnitsManager().scenicAAA(units) }, undefined, { + "isScenic": true + }); + contextActionSet.addContextAction(this, "miss-aaa", "Miss on purpose", "Shoot AAA towards the closest enemy unit, but don't aim precisely.\nWARNING: works correctly only on neutral units, blue or red units will aim", (units: Unit[]) => { getApp().getUnitsManager().missOnPurpose(units) }, undefined, { + "isScenic": true + }); } } } diff --git a/client/views/panels/unitcontrol.ejs b/client/views/panels/unitcontrol.ejs index 2219e442..946037de 100644 --- a/client/views/panels/unitcontrol.ejs +++ b/client/views/panels/unitcontrol.ejs @@ -89,7 +89,7 @@
-
+

Operate as

From c43bc763f3ddd117c96e631ff862caea0c1248c4 Mon Sep 17 00:00:00 2001 From: PeekabooSteam Date: Sun, 19 Nov 2023 13:47:24 +0000 Subject: [PATCH 16/41] Fixed typos --- client/public/databases/units/default/navyunitdatabase.json | 4 ++-- client/public/databases/units/navyunitdatabase.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/public/databases/units/default/navyunitdatabase.json b/client/public/databases/units/default/navyunitdatabase.json index c70d5966..2e0c82af 100644 --- a/client/public/databases/units/default/navyunitdatabase.json +++ b/client/public/databases/units/default/navyunitdatabase.json @@ -1294,7 +1294,7 @@ "ALBATROS": { "name": "albatros", "coalition": "red", - "type": "Frigade", + "type": "Frigate", "era": "Early Cold War", "label": "Albatros (Grisha-5)", "shortLabel": "Albatros", @@ -1610,7 +1610,7 @@ "era": "", "label": "LS Samuel Chase", "shortLabel": "LS Samuel Chase", - "type": "Landing SHip", + "type": "Landing Ship", "enabled": true, "liveries": {}, "acquisitionRange": 0, diff --git a/client/public/databases/units/navyunitdatabase.json b/client/public/databases/units/navyunitdatabase.json index c70d5966..2e0c82af 100644 --- a/client/public/databases/units/navyunitdatabase.json +++ b/client/public/databases/units/navyunitdatabase.json @@ -1294,7 +1294,7 @@ "ALBATROS": { "name": "albatros", "coalition": "red", - "type": "Frigade", + "type": "Frigate", "era": "Early Cold War", "label": "Albatros (Grisha-5)", "shortLabel": "Albatros", @@ -1610,7 +1610,7 @@ "era": "", "label": "LS Samuel Chase", "shortLabel": "LS Samuel Chase", - "type": "Landing SHip", + "type": "Landing Ship", "enabled": true, "liveries": {}, "acquisitionRange": 0, From a12c09eba518300957fe407481cac7d21c6b0666 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Mon, 20 Nov 2023 09:44:59 +0100 Subject: [PATCH 17/41] Minor refactoring --- client/demo.js | 1 + client/src/unit/contextaction.ts | 10 +++++----- client/src/unit/contextactionset.ts | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/client/demo.js b/client/demo.js index ca65e0c8..5589ac23 100644 --- a/client/demo.js +++ b/client/demo.js @@ -138,6 +138,7 @@ class DemoDataGenerator { DEMO_UNIT_DATA[idx].position.lat += idx / 100; DEMO_UNIT_DATA[idx].category = "GroundUnit"; DEMO_UNIT_DATA[idx].isLeader = true; + DEMO_UNIT_DATA[idx].coalition = 0; idx += 1; DEMO_UNIT_DATA[idx] = JSON.parse(JSON.stringify(baseData)); diff --git a/client/src/unit/contextaction.ts b/client/src/unit/contextaction.ts index 5d935143..dd3a4b6b 100644 --- a/client/src/unit/contextaction.ts +++ b/client/src/unit/contextaction.ts @@ -1,7 +1,7 @@ import { Unit } from "./unit"; -export interface ContextActionOptionsInterface { - isScenic?:boolean +export interface ContextActionOptions { + isScenic?: boolean } export class ContextAction { @@ -11,10 +11,10 @@ export class ContextAction { #callback: CallableFunction | null = null; #units: Unit[] = []; #hideContextAfterExecution: boolean = true - #options: ContextActionOptionsInterface; + #options: ContextActionOptions; - constructor(id: string, label: string, description: string, callback: CallableFunction, hideContextAfterExecution: boolean = true, options:ContextActionOptionsInterface) { - this.#id = id; + constructor(id: string, label: string, description: string, callback: CallableFunction, hideContextAfterExecution: boolean = true, options: ContextActionOptions) { + this.#id = id; this.#label = label; this.#description = description; this.#callback = callback; diff --git a/client/src/unit/contextactionset.ts b/client/src/unit/contextactionset.ts index 60e1e88d..d061cd1d 100644 --- a/client/src/unit/contextactionset.ts +++ b/client/src/unit/contextactionset.ts @@ -1,4 +1,4 @@ -import { ContextAction, ContextActionOptionsInterface } from "./contextaction"; +import { ContextAction, ContextActionOptions } from "./contextaction"; import { Unit } from "./unit"; export class ContextActionSet { @@ -8,7 +8,7 @@ export class ContextActionSet { } - addContextAction(unit: Unit, id: string, label: string, description: string, callback: CallableFunction, hideContextAfterExecution: boolean = true, options?:ContextActionOptionsInterface) { + addContextAction(unit: Unit, id: string, label: string, description: string, callback: CallableFunction, hideContextAfterExecution: boolean = true, options?:ContextActionOptions) { options = options || {}; if (!(id in this.#contextActions)) { From 74989ec0150d65d5425d975143a6ddf687f1c3ff Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Mon, 20 Nov 2023 12:30:44 +0100 Subject: [PATCH 18/41] Fixed missing reset of expected value of operateAs toggle --- client/demo.js | 3 +++ client/src/panels/unitcontrolpanel.ts | 4 +--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/client/demo.js b/client/demo.js index 5589ac23..e1860648 100644 --- a/client/demo.js +++ b/client/demo.js @@ -130,6 +130,8 @@ class DemoDataGenerator { DEMO_UNIT_DATA[idx].position.lat += idx / 100; DEMO_UNIT_DATA[idx].category = "GroundUnit"; DEMO_UNIT_DATA[idx].isLeader = true; + DEMO_UNIT_DATA[idx].coalition = 0; + DEMO_UNIT_DATA[idx].operateAs = 2; idx += 1; DEMO_UNIT_DATA[idx] = JSON.parse(JSON.stringify(baseData)); @@ -139,6 +141,7 @@ class DemoDataGenerator { DEMO_UNIT_DATA[idx].category = "GroundUnit"; DEMO_UNIT_DATA[idx].isLeader = true; DEMO_UNIT_DATA[idx].coalition = 0; + DEMO_UNIT_DATA[idx].operateAs = 1; idx += 1; DEMO_UNIT_DATA[idx] = JSON.parse(JSON.stringify(baseData)); diff --git a/client/src/panels/unitcontrolpanel.ts b/client/src/panels/unitcontrolpanel.ts index 6100b84a..99ab8893 100644 --- a/client/src/panels/unitcontrolpanel.ts +++ b/client/src/panels/unitcontrolpanel.ts @@ -2,16 +2,13 @@ import { SVGInjector } from "@tanem/svg-injector"; import { getApp } from ".."; import { Dropdown } from "../controls/dropdown"; import { Slider } from "../controls/slider"; -import { aircraftDatabase } from "../unit/databases/aircraftdatabase"; import { Unit } from "../unit/unit"; import { Panel } from "./panel"; import { Switch } from "../controls/switch"; import { ROEDescriptions, ROEs, altitudeIncrements, emissionsCountermeasures, emissionsCountermeasuresDescriptions, maxAltitudeValues, maxSpeedValues, minAltitudeValues, minSpeedValues, reactionsToThreat, reactionsToThreatDescriptions, shotsIntensityDescriptions, shotsScatterDescriptions, speedIncrements } from "../constants/constants"; import { ftToM, knotsToMs, mToFt, msToKnots } from "../other/utils"; import { GeneralSettings, Radio, TACAN } from "../interfaces"; -import { PrimaryToolbar } from "../toolbars/primarytoolbar"; import { ContextActionSet } from "../unit/contextactionset"; -import { ContextAction } from "../unit/contextaction"; export class UnitControlPanel extends Panel { #altitudeSlider: Slider; @@ -176,6 +173,7 @@ export class UnitControlPanel extends Panel { this.#AWACSSwitch.resetExpectedValue(); this.#onOffSwitch.resetExpectedValue(); this.#followRoadsSwitch.resetExpectedValue(); + this.#operateAsSwitch.resetExpectedValue(); this.#altitudeSlider.resetExpectedValue(); this.#speedSlider.resetExpectedValue(); this.#calculateMaxHeight(); From 2a2baaf3246102425c206ad7fa8b061ab69f1098 Mon Sep 17 00:00:00 2001 From: Shredmetal <131475927+Shredmetal@users.noreply.github.com> Date: Tue, 21 Nov 2023 01:02:03 +0800 Subject: [PATCH 19/41] Update LEGAL --- LEGAL | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/LEGAL b/LEGAL index f92851cf..b0059956 100644 --- a/LEGAL +++ b/LEGAL @@ -6,9 +6,10 @@ Copyright (C) 2023 Veltro & Gang DCS Olympus (the "MATERIAL" or "Software") is provided completely free to users subject to the it under both the terms of version 3 of the GNU -General Public License as published by the Free Software Foundation, and -the additional terms set out below; except where such terms conflict with this -disclaimer, in which case, the terms of this disclaimer shall prevail. +General Public License ("GPLv3") as published by the Free Software Foundation, +and the additional terms set out below (the "Additional Terms"). In the event +that the terms of GPLv3 conflict with the Additional Terms, the +Additional Terms shall prevail. The authors and/or copyright holders of the Software have not received any financial benefit in connection with the Software. In any event, the @@ -17,15 +18,14 @@ implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. In no event shall the authors and/or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, -arising from, out of or in connection with the Software or the use or o -ther dealings in the Software. - -Any party making use of the Software in any manner agrees to be -bound by the terms set out in this disclaimer, version 3 of the GNU -General Public Licence, and the Additional Terms below. +arising from, out of or in connection with the Software or the use or +other dealings in the Software. THIS MATERIAL IS NOT MADE OR SUPPORTED BY EAGLE DYNAMICS SA. +Any party making use of the Software in any manner agrees to be bound by +the entirety of this document. + GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 @@ -657,4 +657,12 @@ copy of the Program in return for a fee. GNU General Public Licence Version 3 above shall be governed by and interpreted in accordance with English Law and the parties submit to the exclusive jurisdiction of the English Courts. + +2. Entire Agreement + + The text of this document contains the entire understanding between +you, the licensee, and the authors and/or copyright holders of the +Software with respect to the subject matter to which it pertains. +It supersedes all prior agreements and understandings (if applicable), +oral or written, with respect to such matters. From 806d0cc52fc9b787ba724e53b1c636edbdc42eb5 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Mon, 20 Nov 2023 18:19:41 +0100 Subject: [PATCH 20/41] Added ability for users to edit configuration during installation --- .gitignore | 4 + installer/olympus.iss | 425 +++++++++++++++++++++++++- scripts/python/build_configurator.bat | 4 + scripts/python/configurator.py | 67 ++++ scripts/python/configurator.spec | 44 +++ 5 files changed, 529 insertions(+), 15 deletions(-) create mode 100644 scripts/python/build_configurator.bat create mode 100644 scripts/python/configurator.py create mode 100644 scripts/python/configurator.spec diff --git a/.gitignore b/.gitignore index 2f1bffe6..9aa40bdb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ bin /scripts/old +/scripts/python/dist +/scripts/python/build +/scripts/python/venv .vs x64 core.user @@ -15,3 +18,4 @@ node_modules hgt /client/public/databases/units/old /client/plugins/databasemanager/index.js + diff --git a/installer/olympus.iss b/installer/olympus.iss index 04904a3b..55b94165 100644 --- a/installer/olympus.iss +++ b/installer/olympus.iss @@ -11,6 +11,7 @@ UninstallFilesDir={app}\Mods\Services\Olympus SetupIconFile="..\img\olympus.ico" DirExistsWarning=no AppendDefaultDirName=no +LicenseFile="..\LEGAL" [Messages] WizardSelectDir=Select the location of DCS's Saved Games folder @@ -24,22 +25,26 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{ [Files] ; NOTE: Don't use "Flags: ignoreversion" on any shared system files -Source: "..\scripts\OlympusHook.lua"; DestDir: "{app}\Scripts\Hooks"; Flags: ignoreversion +; Source: "..\scripts\OlympusHook.lua"; DestDir: "{app}\Scripts\Hooks"; Flags: ignoreversion Source: "..\olympus.json"; DestDir: "{app}\Mods\Services\Olympus"; Flags: onlyifdoesntexist -Source: "..\scripts\OlympusCommand.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion -Source: "..\scripts\unitPayloads.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion -Source: "..\scripts\templates.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion -Source: "..\scripts\mist.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion -Source: "..\mod\*"; DestDir: "{app}\Mods\Services\Olympus"; Flags: ignoreversion recursesubdirs; -Source: "..\bin\*.dll"; DestDir: "{app}\Mods\Services\Olympus\bin"; Flags: ignoreversion; -Source: "..\client\bin\*"; DestDir: "{app}\Mods\Services\Olympus\client\bin"; Flags: ignoreversion; -Source: "..\client\node_modules\*"; DestDir: "{app}\Mods\Services\Olympus\client\node_modules"; Flags: ignoreversion recursesubdirs; -Source: "..\client\public\*"; DestDir: "{app}\Mods\Services\Olympus\client\public"; Flags: ignoreversion recursesubdirs; -Source: "..\client\routes\*"; DestDir: "{app}\Mods\Services\Olympus\client\routes"; Flags: ignoreversion recursesubdirs; -Source: "..\client\views\*"; DestDir: "{app}\Mods\Services\Olympus\client\views"; Flags: ignoreversion recursesubdirs; -Source: "..\client\*.*"; DestDir: "{app}\Mods\Services\Olympus\client"; Flags: ignoreversion; -Source: "..\img\olympus.ico"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: ignoreversion; -Source: "{#nwjsFolder}\*.*"; DestDir: "{app}\Mods\Services\Olympus\client"; Flags: ignoreversion recursesubdirs; +; Source: "..\scripts\OlympusCommand.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion +; Source: "..\scripts\unitPayloads.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion +; Source: "..\scripts\templates.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion +; Source: "..\scripts\mist.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion +; Source: "..\mod\*"; DestDir: "{app}\Mods\Services\Olympus"; Flags: ignoreversion recursesubdirs; +; Source: "..\bin\*.dll"; DestDir: "{app}\Mods\Services\Olympus\bin"; Flags: ignoreversion; +; Source: "..\client\bin\*"; DestDir: "{app}\Mods\Services\Olympus\client\bin"; Flags: ignoreversion; +; Source: "..\client\node_modules\*"; DestDir: "{app}\Mods\Services\Olympus\client\node_modules"; Flags: ignoreversion recursesubdirs; +; Source: "..\client\public\*"; DestDir: "{app}\Mods\Services\Olympus\client\public"; Flags: ignoreversion recursesubdirs; +; Source: "..\client\routes\*"; DestDir: "{app}\Mods\Services\Olympus\client\routes"; Flags: ignoreversion recursesubdirs; +; Source: "..\client\views\*"; DestDir: "{app}\Mods\Services\Olympus\client\views"; Flags: ignoreversion recursesubdirs; +; Source: "..\client\*.*"; DestDir: "{app}\Mods\Services\Olympus\client"; Flags: ignoreversion; +; Source: "..\img\olympus.ico"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: ignoreversion; +; Source: "{#nwjsFolder}\*.*"; DestDir: "{app}\Mods\Services\Olympus\client"; Flags: ignoreversion recursesubdirs; +Source: "..\scripts\python\dist\configurator.exe"; DestDir: "{app}\Mods\Services\Olympus"; Flags: ignoreversion + +[Run] +Filename: "{app}\Mods\Services\Olympus\configurator.exe"; Parameters: -a {code:GetAddress} -c {code:GetClientPort} -b {code:GetBackendPort} -p {code:GetPassword} -bp {code:GetBluePassword} -rp {code:GetRedPassword} [Code] function NeedsAddPath(Param: string): boolean; @@ -68,3 +73,393 @@ ChangesEnvironment=yes [Icons] Name: "{userdesktop}\DCS Olympus Client"; Filename: "{app}\Mods\Services\Olympus\client\nw.exe"; Tasks: desktopicon; IconFilename: "{app}\Mods\Services\Olympus\img\olympus.ico" + +[Code] +var + lblLocalInstall: TLabel; + lblLocalInstallInstructions: TNewStaticText; + lblServerInstall: TLabel; + lblServerInstallInstructions: TNewStaticText; + lblClientPort: TLabel; + lblBackendPort: TLabel; + lblPassword: TLabel; + lblBluePassword: TLabel; + lblRedPassword: TLabel; + txtLocalInstall: TNewRadioButton; + txtServerInstall: TNewRadioButton; + txtClientPort: TEdit; + txtBackendPort: TEdit; + txtPassword: TPasswordEdit; + txtBluePassword: TPasswordEdit; + txtRedPassword: TPasswordEdit; + AddressPage: Integer; + PasswordPage: Integer; + lblPasswordInstructions: TNewStaticText; + +procedure AcceptNumbersOnlyKeyPress(Sender: TObject; var Key: Char); +var + KeyCode: Integer; +begin + // allow only numbers + KeyCode := Ord(Key); + if not ((KeyCode = 8) or ((KeyCode >= 48) and (KeyCode <= 57))) then + Key := #0; +end; + +procedure frmAddress_Activate(Page: TWizardPage); +begin +end; + +function frmAddress_ShouldSkipPage(Page: TWizardPage): Boolean; +begin + Result := False; +end; + +function frmAddress_BackButtonClick(Page: TWizardPage): Boolean; +begin + Result := True; +end; + +function frmAddress_NextButtonClick(Page: TWizardPage): Boolean; +begin + Result := True; +end; + +procedure frmAddress_CancelButtonClick(Page: TWizardPage; var Cancel, Confirm: Boolean); +begin +end; + +function frmAddress_CreatePage(PreviousPageId: Integer): Integer; +var + Page: TWizardPage; +begin + Page := CreateCustomPage( + PreviousPageId, + 'DCS Olympus configuration', + 'Setup DCS Olympus connectivity' + ); + + { lblLocalInstall } + lblLocalInstall := TLabel.Create(Page); + with lblLocalInstall do + begin + Parent := Page.Surface; + Left := ScaleX(30); + Top := ScaleY(14); + Width := ScaleX(35); + Height := ScaleY(10); + Font.Style := [fsBold]; + Caption := 'Local installation'; + end; + + { lblLocalInstallInstructions } + lblLocalInstallInstructions := TNewStaticText.Create(Page); + with lblLocalInstallInstructions do + begin + Parent := Page.Surface; + Left := ScaleX(30); + Top := ScaleY(31); + Width := ScaleX(340); + Height := ScaleY(23); + WordWrap := True; + Caption := 'Select this to install DCS Olympus locally. DCS Olympus will not be reachable by external clients (i.e. browsers running on different PCs)'; + end; + + { txtLocalInstall } + txtLocalInstall := TNewRadioButton.Create(Page); + with txtLocalInstall do + begin + Parent := Page.Surface; + Left := ScaleX(10); + Top := ScaleY(12); + Width := ScaleX(185); + Height := ScaleY(21); + TabOrder := 0; + Checked := True + end; + + { lblServerInstall } + lblServerInstall := TLabel.Create(Page); + with lblServerInstall do + begin + Parent := Page.Surface; + Left := ScaleX(30); + Top := ScaleY(76); + Width := ScaleX(52); + Height := ScaleY(13); + Font.Style := [fsBold]; + Caption := 'Dedicated server installation'; + end; + + { lblServerInstallInstructions } + lblServerInstallInstructions := TNewStaticText.Create(Page); + with lblServerInstallInstructions do + begin + Parent := Page.Surface; + Left := ScaleX(30); + Top := ScaleY(93); + Width := ScaleX(340); + Height := ScaleY(13); + WordWrap := True; + Caption := 'Select this to install DCS Olympus on a dedicated server. DCS Olympus will be reachable by external clients. NOTE: to enable external connections, port forwarding must be enabled. By default, ports 3000 and 30000 must be forwarded on TCP and UDP.'; + end; + + { txtServerInstall } + txtServerInstall := TNewRadioButton.Create(Page); + with txtServerInstall do + begin + Parent := Page.Surface; + Left := ScaleX(10); + Top := ScaleY(72); + Width := ScaleX(185); + Height := ScaleY(21); + TabOrder := 1; + end; + + { lblClientPort } + lblClientPort := TLabel.Create(Page); + with lblClientPort do + begin + Parent := Page.Surface; + Left := ScaleX(24); + Top := ScaleY(168); + Width := ScaleX(46); + Height := ScaleY(13); + Caption := 'Webserver port'; + end; + + { txtClientPort } + txtClientPort := TEdit.Create(Page); + with txtClientPort do + begin + Parent := Page.Surface; + Left := ScaleX(180); + Top := ScaleY(165); + Width := ScaleX(185); + Height := ScaleY(21); + Text := '3000'; + OnKeyPress := @AcceptNumbersOnlyKeyPress; + TabOrder := 3; + end; + + { lblBackendPort } + lblBackendPort := TLabel.Create(Page); + with lblBackendPort do + begin + Parent := Page.Surface; + Left := ScaleX(24); + Top := ScaleY(198); + Width := ScaleX(46); + Height := ScaleY(13); + Caption := 'DCS Olympus port'; + end; + + { txtBackendPort } + txtBackendPort := TEdit.Create(Page); + with txtBackendPort do + begin + Parent := Page.Surface; + Left := ScaleX(180); + Top := ScaleY(195); + Width := ScaleX(185); + Height := ScaleY(21); + Text := '3001'; + OnKeyPress := @AcceptNumbersOnlyKeyPress; + TabOrder := 4; + end; + + with Page do + begin + OnActivate := @frmAddress_Activate; + OnShouldSkipPage := @frmAddress_ShouldSkipPage; + OnBackButtonClick := @frmAddress_BackButtonClick; + OnNextButtonClick := @frmAddress_NextButtonClick; + OnCancelButtonClick := @frmAddress_CancelButtonClick; + end; + + Result := Page.ID; +end; + +procedure frmPassword_Activate(Page: TWizardPage); +begin +end; + +function frmPassword_ShouldSkipPage(Page: TWizardPage): Boolean; +begin + Result := False; +end; + +function frmPassword_BackButtonClick(Page: TWizardPage): Boolean; +begin + Result := True; +end; + +function frmPassword_NextButtonClick(Page: TWizardPage): Boolean; +begin + if (Trim(txtPassword.Text) <> '') and (Trim(txtBluePassword.Text) <> '') and (Trim(txtRedPassword.Text) <> '') then begin + Result := True; + end else + begin + MsgBox('All password fields must be filled to proceed.', mbInformation, MB_OK); + Result := False; + end; +end; + +procedure frmPassword_CancelButtonClick(Page: TWizardPage; var Cancel, Confirm: Boolean); +begin +end; + +function frmPassword_CreatePage(PreviousPageId: Integer): Integer; +var + Page: TWizardPage; +begin + Page := CreateCustomPage( + PreviousPageId, + 'DCS Olympus passwords', + 'Set DCS Olympus Admin and Commander passwords' + ); + + { lblPassword } + lblPassword := TLabel.Create(Page); + with lblPassword do + begin + Parent := Page.Surface; + Left := ScaleX(24); + Top := ScaleY(28); + Width := ScaleX(46); + Height := ScaleY(13); + Caption := 'Game Master password'; + end; + + { txtPassword } + txtPassword := TPasswordEdit.Create(Page); + with txtPassword do + begin + Parent := Page.Surface; + Left := ScaleX(180); + Top := ScaleY(25); + Width := ScaleX(185); + Height := ScaleY(21); + TabOrder := 2; + end; + + { lblBluePassword } + lblBluePassword := TLabel.Create(Page); + with lblBluePassword do + begin + Parent := Page.Surface; + Left := ScaleX(24); + Top := ScaleY(58); + Width := ScaleX(46); + Height := ScaleY(13); + Caption := 'Blue Commander password'; + end; + + { txtBluePassword } + txtBluePassword := TPasswordEdit.Create(Page); + with txtBluePassword do + begin + Parent := Page.Surface; + Left := ScaleX(180); + Top := ScaleY(55); + Width := ScaleX(185); + Height := ScaleY(21); + TabOrder := 2; + end; + + { lblRedPassword } + lblRedPassword := TLabel.Create(Page); + with lblRedPassword do + begin + Parent := Page.Surface; + Left := ScaleX(24); + Top := ScaleY(88); + Width := ScaleX(46); + Height := ScaleY(13); + Caption := 'Red Commander password'; + end; + + { txtRedPassword } + txtRedPassword := TPasswordEdit.Create(Page); + with txtRedPassword do + begin + Parent := Page.Surface; + Left := ScaleX(180); + Top := ScaleY(85); + Width := ScaleX(185); + Height := ScaleY(21); + TabOrder := 2; + end; + + + { lblPasswordInstructions } + lblPasswordInstructions := TNewStaticText.Create(Page); + with lblPasswordInstructions do + begin + Parent := Page.Surface; + Left := ScaleX(24); + Top := ScaleY(120); + Width := ScaleX(340); + Height := ScaleY(13); + WordWrap := True; + Caption := 'Passwords can be changed in the future by editing the file "olympus.json". For more information, see the DCS Olympus Wiki'; + end; + + with Page do + begin + OnActivate := @frmPassword_Activate; + OnShouldSkipPage := @frmPassword_ShouldSkipPage; + OnBackButtonClick := @frmPassword_BackButtonClick; + OnNextButtonClick := @frmPassword_NextButtonClick; + OnCancelButtonClick := @frmPassword_CancelButtonClick; + end; + + Result := Page.ID; +end; + +procedure InitializeWizard(); +begin + {this page will come after welcome page} + AddressPage := frmAddress_CreatePage(wpSelectDir); + PasswordPage:= frmPassword_CreatePage(AddressPage); +end; + +function GetAddress(Value: string): string; +begin + if txtLocalInstall.Checked then begin + Result := 'localhost' + end else + begin + Result := '*' + end +end; + +function GetClientPort(Value: string): string; +begin + Result := txtClientPort.Text; +end; + +function GetBackendPort(Value: string): string; +begin + Result := txtBackendPort.Text; +end; + +function GetPassword(Value: string): string; +begin + Result := txtPassword.Text; +end; + +function GetBluePassword(Value: string): string; +begin + Result := txtBluePassword.Text; +end; + +function GetRedPassword(Value: string): string; +begin + Result := txtRedPassword.Text; +end; + + + + + diff --git a/scripts/python/build_configurator.bat b/scripts/python/build_configurator.bat new file mode 100644 index 00000000..60934864 --- /dev/null +++ b/scripts/python/build_configurator.bat @@ -0,0 +1,4 @@ +python -m venv venv +call ./venv/Scripts/activate +pip install pyinstaller +python -m PyInstaller configurator.py --onefile \ No newline at end of file diff --git a/scripts/python/configurator.py b/scripts/python/configurator.py new file mode 100644 index 00000000..3fcbcda3 --- /dev/null +++ b/scripts/python/configurator.py @@ -0,0 +1,67 @@ +import argparse, json + +def main(): + parser = argparse.ArgumentParser( + prog='DCS Olympus configurator', + description='This software allows to edit the DCS Olympus configuration file', + epilog='') + + parser.add_argument('-a', '--address') + parser.add_argument('-c', '--clientPort') + parser.add_argument('-b', '--backendPort') + parser.add_argument('-p', '--password') + parser.add_argument('-bp', '--bluePassword') + parser.add_argument('-rp', '--redPassword') + + args = parser.parse_args() + + with open("olympus.json", "r") as fp: + config = json.load(fp) + + if (args.address is not None): + config["server"]["address"] = args.address + print(f"Address set to {args.address}") + else: + print("No address provided, skipping...") + + if args.backendPort is not None: + if args.backendPort.isdecimal(): + config["server"]["port"] = int(args.backendPort) + print(f"Backend port set to {args.backendPort}") + else: + print(f"Invalid backend port provided {args.backendPort}") + else: + print("No backend port provided, skipping...") + + if (args.password is not None): + config["authentication"]["gameMasterPassword"] = args.password + print(f"Game Master password set to {args.password}") + else: + print("No Game Master password provided, skipping...") + + if (args.bluePassword is not None): + config["authentication"]["blueCommanderPassword"] = args.bluePassword + print(f"Blue Commander password set to {args.bluePassword}") + else: + print("No Blue Commander password provided, skipping...") + + if (args.redPassword is not None): + config["authentication"]["redCommanderPassword"] = args.redPassword + print(f"Red Commander password set to {args.redPassword}") + else: + print("No Red Commander password provided, skipping...") + + if args.clientPort is not None: + if args.clientPort.isdecimal(): + config["client"]["port"] = int(args.clientPort) + print(f"Client port set to {args.clientPort}") + else: + print(f"Invalid client port provided {args.clientPort}") + else: + print("No client port provided, skipping...") + + with open("olympus.json", "w") as fp: + json.dump(config, fp, indent = 4) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/scripts/python/configurator.spec b/scripts/python/configurator.spec new file mode 100644 index 00000000..70674949 --- /dev/null +++ b/scripts/python/configurator.spec @@ -0,0 +1,44 @@ +# -*- mode: python ; coding: utf-8 -*- + + +block_cipher = None + + +a = Analysis( + ['configurator.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + noarchive=False, +) +pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.zipfiles, + a.datas, + [], + name='configurator', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) From e20d2fa95a0b5d1327028b08a4057161ca817f02 Mon Sep 17 00:00:00 2001 From: PeekabooSteam Date: Mon, 20 Nov 2023 20:33:41 +0000 Subject: [PATCH 21/41] We no longer LOSE the icon --- client/public/stylesheets/style/style.css | 115 ++++++++++++---------- client/src/controls/dropdown.ts | 6 +- client/views/toolbars/primary.ejs | 2 +- 3 files changed, 68 insertions(+), 55 deletions(-) diff --git a/client/public/stylesheets/style/style.css b/client/public/stylesheets/style/style.css index 53d8768c..f8f1a1be 100644 --- a/client/public/stylesheets/style/style.css +++ b/client/public/stylesheets/style/style.css @@ -67,10 +67,6 @@ button>img:first-child { pointer-events: none; } -.ol-box-shadow { - box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); -} - form { margin: 0; padding: 0; @@ -230,13 +226,13 @@ form { } .ol-select.is-open[data-position="top"]>.ol-select-options { - box-shadow: 0 4px 4px rgba(0, 0, 0, 0.25); top: 0; translate: 0 -100%; } .ol-select>.ol-select-options>div { background-color: var(--background-grey); + box-shadow: 0 4px 4px rgba(0, 0, 0, 0.25); display: flex; justify-content: left; padding: 2px 15px; @@ -266,6 +262,7 @@ form { color: white; display: block; font-size: 13px; + font-weight: normal; height: 32px; padding: 6px 2px; padding: 5px; @@ -718,6 +715,62 @@ nav.ol-panel> :last-child { } + +#roe-buttons-container button, +#reaction-to-threat-buttons-container button, +#emissions-countermeasures-buttons-container button, +#shots-scatter-buttons-container button +#shots-intensity-buttons-container button { + align-items: center; + background-color: transparent; + border: 1px solid var(--accent-light-blue); + display: flex; + height: 30px; + justify-content: center; + width: 30px; +} + +#reaction-to-threat-buttons-container button:not(:first-child) svg { + width: 150%; + margin: -5px; +} + +#unit-control-panel .ol-option-button button.selected { + background-color: white; + border-color: white; +} + +#unit-control-panel .ol-option-button button.selected svg * { + fill: var(--background-steel); + stroke: var(--background-steel); +} + +#rapid-controls { + display: flex; + flex-direction: column; + row-gap: 5px; + height: fit-content; + width: fit-content; +} + +#rapid-controls button { + padding: 4px; +} + +#rapid-controls svg { + height: 20px; + width: 20px; + fill: white; + stroke: white; +} + +#rapid-controls button:before { + display: inline-block; + filter: invert(100%); + height: 20px; + width: 20px; +} + /****************************************************************************************/ #splash-screen { border-radius: var(--border-radius-md); @@ -1272,12 +1325,13 @@ input[type=number]::-webkit-outer-spin-button { align-items: center; background-repeat: no-repeat; display: flex; + font-weight: normal; padding: 8px 10px; white-space: nowrap; } [class|="ol-button"]::before { - margin-right: 4px; + margin-right: 8px; } .ol-button-close { @@ -1314,12 +1368,10 @@ input[type=number]::-webkit-outer-spin-button { } .ol-switch { - align-items: center; cursor: pointer; display: flex; - height: 25px; + align-items: center; justify-content: center; - width: 40px; } .ol-switch-input { @@ -1355,7 +1407,7 @@ input[type=number]::-webkit-outer-spin-button { display: flex; font-size: 11px; height: 100%; - padding: 0px 6px; + padding: 0px 7px; position: absolute; transition: transform 0.2s; } @@ -1372,29 +1424,6 @@ input[type=number]::-webkit-outer-spin-button { transform: translateX(calc((var(--width) - var(--height)) * 0.5)); } -.switch-control.yes-no .ol-switch[data-value="true"] .ol-switch-fill { - background-color: var(--accent-light-blue); -} - -.switch-control.yes-no .ol-switch[data-value="false"] .ol-switch-fill { - background-color: var(--ol-switch-off); -} - -.switch-control.coalition .ol-switch>.ol-switch-fill::before, -.switch-control.yes-no .ol-switch>.ol-switch-fill::before { - translate:-100% 0; - transform: none; -} - -.switch-control.yes-no .ol-switch[data-value="true"]>.ol-switch-fill::before { - content: "YES"; -} - -.switch-control.yes-no .ol-switch[data-value="false"]>.ol-switch-fill::before { - content: "NO"; -} - - .ol-contexmenu-panel { padding: 20px; } @@ -1410,26 +1439,6 @@ input[type=number]::-webkit-outer-spin-button { .ol-coalition-switch[data-value="undefined"]>.ol-switch-fill { background-color: var(--primary-neutral); } -/* -#unit-control-panel .switch-control .ol-switch-fill::after { - background-color: white; -} -*/ -.switch-control.coalition [data-value="true"] .ol-switch-fill { - background-color: var(--accent-light-blue); -} - -.switch-control.coalition [data-value="false"] .ol-switch-fill { - background-color: var(--primary-red); -} - -.switch-control.coalition [data-value="true"]>.ol-switch-fill::before { - content: "BLUE" !important; -} - -.switch-control.coalition [data-value="false"]>.ol-switch-fill::before { - content: "RED" !important; -} .ol-context-menu>ul { max-height: 200px; diff --git a/client/src/controls/dropdown.ts b/client/src/controls/dropdown.ts index b2b53c82..a1b71a5c 100644 --- a/client/src/controls/dropdown.ts +++ b/client/src/controls/dropdown.ts @@ -7,6 +7,7 @@ export class Dropdown { #optionsList: string[] = []; #index: number = 0; #hidden: boolean = false; + #text!:HTMLElement; constructor(ID: string | null, callback: CallableFunction, options: string[] | null = null, defaultText?: string) { if (ID === null) @@ -15,7 +16,10 @@ export class Dropdown { this.#container = document.getElementById(ID) as HTMLElement; this.#options = this.#container.querySelector(".ol-select-options") as HTMLElement; - this.#value = this.#container.querySelector(".ol-select-value") as HTMLElement; + + const text = this.#container.querySelector(".ol-select-value-text"); + this.#value = ( text instanceof HTMLElement ) ? text : this.#container.querySelector(".ol-select-value") as HTMLElement; + this.#defaultValue = this.#value.innerText; this.#callback = callback; diff --git a/client/views/toolbars/primary.ejs b/client/views/toolbars/primary.ejs index f7cf4c0b..f82509b7 100644 --- a/client/views/toolbars/primary.ejs +++ b/client/views/toolbars/primary.ejs @@ -28,7 +28,7 @@
-
ArcGIS Satellite
+
ArcGIS Satellite
From 6aea839e04b3d9773e0b159ca730faf8f7b4c7d5 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Tue, 21 Nov 2023 14:34:51 +0100 Subject: [PATCH 22/41] Added configurator GUI --- .gitignore | 6 +- build_package.bat | 19 +- client/@types/olympus/index.d.ts | 487 +- client/bin/www | 2 + client/package-lock.json | 6301 +++++++---------- client/package.json | 4 +- client/plugins/controltips/index.js | 385 +- client/plugins/controltips/package-lock.json | 4817 ++++++++++++- client/plugins/controltips/package.json | 23 +- client/plugins/databasemanager/package.json | 21 +- img/configurator_logo.png | Bin 0 -> 25566 bytes img/olympus_configurator.ico | Bin 0 -> 17470 bytes img/olympus_server.ico | Bin 0 -> 16702 bytes installer/olympus.iss | 83 +- olympus.json | 36 +- scripts/python/.vscode/launch.json | 3 +- scripts/python/build_configurator.bat | 4 - scripts/python/configurator.py | 67 - .../configurator/build_configurator.bat | 5 + scripts/python/configurator/configurator.py | 136 + .../{ => configurator}/configurator.spec | 2 +- scripts/python/data.csv | 424 -- scripts/python/downloadSRTM.py | 86 - 23 files changed, 8068 insertions(+), 4843 deletions(-) create mode 100644 img/configurator_logo.png create mode 100644 img/olympus_configurator.ico create mode 100644 img/olympus_server.ico delete mode 100644 scripts/python/build_configurator.bat delete mode 100644 scripts/python/configurator.py create mode 100644 scripts/python/configurator/build_configurator.bat create mode 100644 scripts/python/configurator/configurator.py rename scripts/python/{ => configurator}/configurator.spec (97%) delete mode 100644 scripts/python/data.csv delete mode 100644 scripts/python/downloadSRTM.py diff --git a/.gitignore b/.gitignore index 9aa40bdb..0f5b4cd3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,8 @@ bin /scripts/old -/scripts/python/dist -/scripts/python/build -/scripts/python/venv +/scripts/python/configurator/dist +/scripts/python/configurator/build +/scripts/python/configurator/venv .vs x64 core.user diff --git a/build_package.bat b/build_package.bat index 0fc7c5ad..15d9720d 100644 --- a/build_package.bat +++ b/build_package.bat @@ -1,17 +1,28 @@ cd src msbuild olympus.sln /t:Rebuild /p:Configuration=Release cd .. + +cd scripts/python/configurator +call build_configurator.bat +cd ../../.. + cd client -call npm install rmdir /s /q "hgt" +call npm install call npm run emit-declarations -call npm run build +call npm run build-release + cd "plugins\controltips" -call npm run build +call npm install +call npm run build-release cd "..\.." + cd "plugins\databasemanager" -call npm run build +call npm install +call npm run build-release cd "..\.." + call npm prune --production cd .. + call "C:\Program Files (x86)\Inno Setup 6\iscc.exe" "installer\olympus.iss" diff --git a/client/@types/olympus/index.d.ts b/client/@types/olympus/index.d.ts index 6d698502..a5ec72f6 100644 --- a/client/@types/olympus/index.d.ts +++ b/client/@types/olympus/index.d.ts @@ -13,11 +13,11 @@ declare module "contextmenus/contextmenu" { constructor(ID: string); /** Show the contextmenu on top of the map, usually at the location where the user has clicked on it. * - * @param x X screen coordinate of the top left corner of the context menu - * @param y Y screen coordinate of the top left corner of the context menu - * @param latlng Leaflet latlng object of the mouse click + * @param x X screen coordinate of the top left corner of the context menu. If undefined, use the old value + * @param y Y screen coordinate of the top left corner of the context menu. If undefined, use the old value + * @param latlng Leaflet latlng object of the mouse click. If undefined, use the old value */ - show(x: number, y: number, latlng: LatLng): void; + show(x?: number | undefined, y?: number | undefined, latlng?: LatLng | undefined): void; /** Hide the contextmenu * */ @@ -264,6 +264,7 @@ declare module "constants/constants" { export const MGRS_PRECISION_1M = 6; export const DELETE_CYCLE_TIME = 0.05; export const DELETE_SLOW_THRESHOLD = 50; + export const GROUPING_ZOOM_TRANSITION = 13; } declare module "map/markers/custommarker" { import { Map, Marker } from "leaflet"; @@ -651,14 +652,14 @@ declare module "interfaces" { declare module "unit/databases/unitdatabase" { import { LatLng } from "leaflet"; import { UnitBlueprint } from "interfaces"; - export class UnitDatabase { + export abstract class UnitDatabase { #private; blueprints: { [key: string]: UnitBlueprint; }; constructor(url?: string); load(callback: CallableFunction): void; - getCategory(): string; + abstract getCategory(): string; getByName(name: string): UnitBlueprint | null; getByLabel(label: string): UnitBlueprint | null; getBlueprints(includeDisabled?: boolean): { @@ -679,6 +680,7 @@ declare module "unit/databases/unitdatabase" { generateTestGrid(initialPosition: LatLng): void; getSpawnPointsByLabel(label: string): number; getSpawnPointsByName(name: string): number; + getUnkownUnit(name: string): UnitBlueprint; } } declare module "unit/databases/aircraftdatabase" { @@ -774,7 +776,7 @@ declare module "other/utils" { ranges?: string[]; eras?: string[]; }): UnitBlueprint | null; - export function getMarkerCategoryByName(name: string): "aircraft" | "helicopter" | "groundunit-other" | "navyunit" | "groundunit"; + export function getMarkerCategoryByName(name: string): "aircraft" | "helicopter" | "groundunit-sam" | "groundunit-other" | "navyunit"; export function getUnitDatabaseByCategory(category: string): import("unit/databases/aircraftdatabase").AircraftDatabase | import("unit/databases/helicopterdatabase").HelicopterDatabase | import("unit/databases/groundunitdatabase").GroundUnitDatabase | import("unit/databases/navyunitdatabase").NavyUnitDatabase | null; export function base64ToBytes(base64: string): ArrayBufferLike; export function enumToState(state: number): string; @@ -918,28 +920,6 @@ declare module "contextmenus/mapcontextmenu" { setCoalitionArea(coalitionArea: CoalitionArea): void; } } -declare module "contextmenus/unitcontextmenu" { - import { ContextMenu } from "contextmenus/contextmenu"; - /** The UnitContextMenu is shown when the user rightclicks on a unit. It dynamically presents the user with possible actions to perform on the unit. */ - export class UnitContextMenu extends ContextMenu { - /** - * - * @param ID - the ID of the HTML element which will contain the context menu - */ - constructor(ID: string); - /** Set the options that will be presented to the user in the contextmenu - * - * @param options Dictionary element containing the text and tooltip of the options shown in the menu - * @param callback Callback that will be called when the user clicks on one of the options - */ - setOptions(options: { - [key: string]: { - text: string; - tooltip: string; - }; - }, callback: CallableFunction): void; - } -} declare module "map/markers/targetmarker" { import { LatLngExpression, MarkerOptions } from "leaflet"; import { CustomMarker } from "map/markers/custommarker"; @@ -1069,18 +1049,30 @@ declare module "map/rangecircle" { _updatePath(): void; } } +declare module "unit/group" { + import { Unit } from "unit/unit"; + export class Group { + #private; + constructor(name: string); + getName(): string; + addMember(member: Unit): void; + removeMember(member: Unit): void; + getMembers(): Unit[]; + getLeader(): Unit | undefined; + } +} declare module "unit/unit" { import { LatLng, Map } from 'leaflet'; import { CustomMarker } from "map/markers/custommarker"; import { UnitDatabase } from "unit/databases/unitdatabase"; import { DataExtractor } from "server/dataextractor"; import { Ammo, Contact, GeneralSettings, ObjectIconOptions, Offset, Radio, TACAN, UnitData } from "interfaces"; + import { Group } from "unit/group"; + import { ContextActionSet } from "unit/contextactionset"; /** * Unit class which controls unit behaviour - * - * Just about everything is a unit - even missiles! */ - export class Unit extends CustomMarker { + export abstract class Unit extends CustomMarker { #private; ID: number; getAlive(): boolean; @@ -1126,33 +1118,50 @@ declare module "unit/unit" { getShotsScatter(): number; getShotsIntensity(): number; getHealth(): number; - static getConstructor(type: string): typeof GroundUnit | undefined; + static getConstructor(type: string): typeof Aircraft | undefined; constructor(ID: number); - getCategory(): string; - /********************** Unit data *************************/ - setData(dataExtractor: DataExtractor): void; - drawLines(): void; - /** Get unit data collated into an object + /********************** Abstract methods *************************/ + /** Get the unit category string * - * @returns object populated by unit information which can also be retrieved using getters + * @returns string The unit category */ - getData(): UnitData; - /** - * - * @returns string containing the marker category - */ - getMarkerCategory(): string; - /** Get a database of information also in this unit's category - * - * @returns UnitDatabase - */ - getDatabase(): UnitDatabase | null; + abstract getCategory(): string; /** Get the icon options * Used to configure how the marker appears on the map * * @returns ObjectIconOptions */ - getIconOptions(): ObjectIconOptions; + abstract getIconOptions(): ObjectIconOptions; + /** Get the actions that this unit can perform + * + */ + abstract appendContextActions(contextActionSet: ContextActionSet, targetUnit: Unit | null, targetPosition: LatLng | null): void; + /** + * + * @returns string containing the marker category + */ + abstract getMarkerCategory(): string; + /** + * + * @returns string containing the default marker + */ + abstract getDefaultMarker(): string; + /********************** Unit data *************************/ + /** This function is called by the units manager to update all the data coming from the backend. It reads the binary raw data using a DataExtractor + * + * @param dataExtractor The DataExtractor object pointing to the binary buffer which contains the raw data coming from the backend + */ + setData(dataExtractor: DataExtractor): void; + /** Get unit data collated into an object + * + * @returns object populated by unit information which can also be retrieved using getters + */ + getData(): UnitData; + /** Get a database of information also in this unit's category + * + * @returns UnitDatabase + */ + getDatabase(): UnitDatabase | null; /** Set the unit as alive or dead * * @param newAlive (boolean) true = alive, false = dead @@ -1168,17 +1177,7 @@ declare module "unit/unit" { * @returns boolean */ getSelected(): boolean; - /** Set whether this unit is selectable - * - * @param selectable (boolean) - */ - setSelectable(selectable: boolean): void; - /** Get whether this unit is selectable - * - * @returns boolean - */ - getSelectable(): boolean; - /** Set the number of the hotgroup to which the unit belongs + /** Set the number of the hotgroup to which the unit belongss * * @param hotgroup (number) */ @@ -1203,6 +1202,11 @@ declare module "unit/unit" { * @returns Unit[] */ getGroupMembers(): Unit[]; + /** Return the leader of the group + * + * @returns Unit The leader of the group + */ + getGroupLeader(): Unit | null | undefined; /** Returns whether the user is allowed to command this unit, based on coalition * * @returns boolean @@ -1210,6 +1214,11 @@ declare module "unit/unit" { belongsToCommandedCoalition(): boolean; getType(): string; getSpawnPoints(): number | undefined; + getDatabaseEntry(): import("interfaces").UnitBlueprint | undefined; + getGroup(): Group | null; + setGroup(group: Group | null): void; + drawLines(): void; + checkZoomRedraw(): boolean; /********************** Icon *************************/ createIcon(): void; /********************** Visibility *************************/ @@ -1223,7 +1232,6 @@ declare module "unit/unit" { isInViewport(): boolean; canTargetPoint(): boolean; canRearm(): boolean; - canLandAtPoint(): boolean; canAAA(): boolean; indirectFire(): boolean; isTanker(): boolean; @@ -1264,19 +1272,12 @@ declare module "unit/unit" { setShotsScatter(shotsScatter: number): void; setShotsIntensity(shotsIntensity: number): void; /***********************************************/ - getActions(): { - [key: string]: { - text: string; - tooltip: string; - type: string; - }; - }; - executeAction(e: any, action: string): void; - /***********************************************/ onAdd(map: Map): this; - getActionOptions(): {}; + onGroupChanged(member: Unit): void; + showFollowOptions(units: Unit[]): void; + applyFollowOptions(formation: string, units: Unit[]): void; } - export class AirUnit extends Unit { + export abstract class AirUnit extends Unit { getIconOptions(): { showState: boolean; showVvi: boolean; @@ -1290,21 +1291,21 @@ declare module "unit/unit" { showCallsign: boolean; rotateToHeading: boolean; }; - getActions(): { - [key: string]: { - text: string; - tooltip: string; - type: string; - }; - }; + appendContextActions(contextActionSet: ContextActionSet, targetUnit: Unit | null, targetPosition: LatLng | null): void; } export class Aircraft extends AirUnit { constructor(ID: number); getCategory(): string; + appendContextActions(contextActionSet: ContextActionSet, targetUnit: Unit | null, targetPosition: LatLng | null): void; + getMarkerCategory(): string; + getDefaultMarker(): string; } export class Helicopter extends AirUnit { constructor(ID: number); getCategory(): string; + appendContextActions(contextActionSet: ContextActionSet, targetUnit: Unit | null, targetPosition: LatLng | null): void; + getMarkerCategory(): string; + getDefaultMarker(): string; } export class GroundUnit extends Unit { constructor(ID: number); @@ -1321,15 +1322,13 @@ declare module "unit/unit" { showCallsign: boolean; rotateToHeading: boolean; }; - getActions(): { - [key: string]: { - text: string; - tooltip: string; - type: string; - }; - }; + appendContextActions(contextActionSet: ContextActionSet, targetUnit: Unit | null, targetPosition: LatLng | null): void; getCategory(): string; getType(): string; + getDatabaseEntry(): import("interfaces").UnitBlueprint | undefined; + checkZoomRedraw(): boolean; + getMarkerCategory(): "groundunit-sam" | "groundunit"; + getDefaultMarker(): string; } export class NavyUnit extends Unit { constructor(ID: number); @@ -1346,16 +1345,59 @@ declare module "unit/unit" { showCallsign: boolean; rotateToHeading: boolean; }; - getActions(): { - [key: string]: { - text: string; - tooltip: string; - type: string; - }; - }; - getMarkerCategory(): string; + appendContextActions(contextActionSet: ContextActionSet, targetUnit: Unit | null, targetPosition: LatLng | null): void; getCategory(): string; getType(): string; + getMarkerCategory(): string; + getDefaultMarker(): string; + } +} +declare module "unit/contextaction" { + import { Unit } from "unit/unit"; + export interface ContextActionOptions { + isScenic?: boolean; + } + export class ContextAction { + #private; + constructor(id: string, label: string, description: string, callback: CallableFunction, hideContextAfterExecution: boolean | undefined, options: ContextActionOptions); + addUnit(unit: Unit): void; + getId(): string; + getLabel(): string; + getOptions(): ContextActionOptions; + getDescription(): string; + getCallback(): CallableFunction | null; + executeCallback(): void; + getHideContextAfterExecution(): boolean; + } +} +declare module "unit/contextactionset" { + import { ContextAction, ContextActionOptions } from "unit/contextaction"; + import { Unit } from "unit/unit"; + export class ContextActionSet { + #private; + constructor(); + addContextAction(unit: Unit, id: string, label: string, description: string, callback: CallableFunction, hideContextAfterExecution?: boolean, options?: ContextActionOptions): void; + getContextActions(): { + [key: string]: ContextAction; + }; + } +} +declare module "contextmenus/unitcontextmenu" { + import { ContextActionSet } from "unit/contextactionset"; + import { ContextMenu } from "contextmenus/contextmenu"; + /** The UnitContextMenu is shown when the user rightclicks on a unit. It dynamically presents the user with possible actions to perform on the unit. */ + export class UnitContextMenu extends ContextMenu { + /** + * + * @param ID - the ID of the HTML element which will contain the context menu + */ + constructor(ID: string); + /** Set the options that will be presented to the user in the contextmenu + * + * @param options Dictionary element containing the text and tooltip of the options shown in the menu + * @param callback Callback that will be called when the user clicks on one of the options + */ + setContextActions(contextActionSet: ContextActionSet): void; } } declare module "contextmenus/airbasecontextmenu" { @@ -1457,7 +1499,7 @@ declare module "contextmenus/airbasespawnmenu" { * @param x X screen coordinate of the top left corner of the context menu * @param y Y screen coordinate of the top left corner of the context menu */ - show(x: number, y: number): void; + show(x: number | undefined, y: number | undefined): void; /** Sets the airbase at which the new unit will be spawned * * @param airbase The airbase at which the new unit will be spawned. Note: if the airbase has no suitable parking spots, the airplane may be spawned on the runway, or spawning may fail. @@ -1465,6 +1507,97 @@ declare module "contextmenus/airbasespawnmenu" { setAirbase(airbase: Airbase): void; } } +declare module "map/touchboxselect" { + export var TouchBoxSelect: (new (...args: any[]) => any) & typeof import("leaflet").Class; +} +declare module "map/markers/destinationpreviewHandle" { + import { LatLng } from "leaflet"; + import { CustomMarker } from "map/markers/custommarker"; + export class DestinationPreviewHandle extends CustomMarker { + constructor(latlng: LatLng); + createIcon(): void; + } +} +declare module "map/map" { + import * as L from "leaflet"; + import { MapContextMenu } from "contextmenus/mapcontextmenu"; + import { UnitContextMenu } from "contextmenus/unitcontextmenu"; + import { AirbaseContextMenu } from "contextmenus/airbasecontextmenu"; + import { Airbase } from "mission/airbase"; + import { Unit } from "unit/unit"; + import { TemporaryUnitMarker } from "map/markers/temporaryunitmarker"; + import { CoalitionArea } from "map/coalitionarea/coalitionarea"; + import { CoalitionAreaContextMenu } from "contextmenus/coalitionareacontextmenu"; + import { AirbaseSpawnContextMenu } from "contextmenus/airbasespawnmenu"; + export type MapMarkerControl = { + "image": string; + "isProtected"?: boolean; + "name": string; + "protectable"?: boolean; + "toggles": string[]; + "tooltip": string; + }; + export class Map extends L.Map { + #private; + /** + * + * @param ID - the ID of the HTML element which will contain the context menu + */ + constructor(ID: string); + addVisibilityOption(option: string, defaultValue: boolean): void; + setLayer(layerName: string): void; + getLayers(): string[]; + setState(state: string): void; + getState(): string; + deselectAllCoalitionAreas(): void; + deleteCoalitionArea(coalitionArea: CoalitionArea): void; + setHiddenType(key: string, value: boolean): void; + getHiddenTypes(): string[]; + hideAllContextMenus(): void; + showMapContextMenu(x: number, y: number, latlng: L.LatLng): void; + hideMapContextMenu(): void; + getMapContextMenu(): MapContextMenu; + showUnitContextMenu(x?: number | undefined, y?: number | undefined, latlng?: L.LatLng | undefined): void; + getUnitContextMenu(): UnitContextMenu; + hideUnitContextMenu(): void; + showAirbaseContextMenu(airbase: Airbase, x?: number | undefined, y?: number | undefined, latlng?: L.LatLng | undefined): void; + getAirbaseContextMenu(): AirbaseContextMenu; + hideAirbaseContextMenu(): void; + showAirbaseSpawnMenu(airbase: Airbase, x?: number | undefined, y?: number | undefined, latlng?: L.LatLng | undefined): void; + getAirbaseSpawnMenu(): AirbaseSpawnContextMenu; + hideAirbaseSpawnMenu(): void; + showCoalitionAreaContextMenu(x: number, y: number, latlng: L.LatLng, coalitionArea: CoalitionArea): void; + getCoalitionAreaContextMenu(): CoalitionAreaContextMenu; + hideCoalitionAreaContextMenu(): void; + isZooming(): boolean; + getMousePosition(): L.Point; + getMouseCoordinates(): L.LatLng; + spawnFromAirbase(e: any): void; + centerOnUnit(ID: number | null): void; + getCenterUnit(): Unit | null; + setTheatre(theatre: string): void; + getMiniMapLayerGroup(): L.LayerGroup; + handleMapPanning(e: any): void; + addTemporaryMarker(latlng: L.LatLng, name: string, coalition: string, commandHash?: string): TemporaryUnitMarker; + getSelectedCoalitionArea(): CoalitionArea | undefined; + bringCoalitionAreaToBack(coalitionArea: CoalitionArea): void; + getVisibilityOptions(): { + [key: string]: boolean; + }; + getPreviousZoom(): number; + unitIsProtected(unit: Unit): boolean; + getMapMarkerControls(): MapMarkerControl[]; + } +} +declare module "mission/bullseye" { + import { CustomMarker } from "map/markers/custommarker"; + export class Bullseye extends CustomMarker { + #private; + createIcon(): void; + setCoalition(coalition: string): void; + getCoalition(): string; + } +} declare module "context/context" { export interface ContextInterface { useSpawnMenu?: boolean; @@ -1532,96 +1665,6 @@ declare module "popups/popup" { setText(text: string): void; } } -declare module "map/touchboxselect" { - export var TouchBoxSelect: (new (...args: any[]) => any) & typeof import("leaflet").Class; -} -declare module "map/markers/destinationpreviewHandle" { - import { LatLng } from "leaflet"; - import { CustomMarker } from "map/markers/custommarker"; - export class DestinationPreviewHandle extends CustomMarker { - constructor(latlng: LatLng); - createIcon(): void; - } -} -declare module "map/map" { - import * as L from "leaflet"; - import { MapContextMenu } from "contextmenus/mapcontextmenu"; - import { UnitContextMenu } from "contextmenus/unitcontextmenu"; - import { AirbaseContextMenu } from "contextmenus/airbasecontextmenu"; - import { Airbase } from "mission/airbase"; - import { Unit } from "unit/unit"; - import { TemporaryUnitMarker } from "map/markers/temporaryunitmarker"; - import { CoalitionArea } from "map/coalitionarea/coalitionarea"; - import { CoalitionAreaContextMenu } from "contextmenus/coalitionareacontextmenu"; - import { AirbaseSpawnContextMenu } from "contextmenus/airbasespawnmenu"; - export type MapMarkerControl = { - "image": string; - "isProtected"?: boolean; - "name": string; - "protectable"?: boolean; - "toggles": string[]; - "tooltip": string; - }; - export class Map extends L.Map { - #private; - /** - * - * @param ID - the ID of the HTML element which will contain the context menu - */ - constructor(ID: string); - addVisibilityOption(option: string, defaultValue: boolean): void; - setLayer(layerName: string): void; - getLayers(): string[]; - setState(state: string): void; - getState(): string; - deselectAllCoalitionAreas(): void; - deleteCoalitionArea(coalitionArea: CoalitionArea): void; - setHiddenType(key: string, value: boolean): void; - getHiddenTypes(): string[]; - hideAllContextMenus(): void; - showMapContextMenu(x: number, y: number, latlng: L.LatLng): void; - hideMapContextMenu(): void; - getMapContextMenu(): MapContextMenu; - showUnitContextMenu(x: number, y: number, latlng: L.LatLng): void; - getUnitContextMenu(): UnitContextMenu; - hideUnitContextMenu(): void; - showAirbaseContextMenu(x: number, y: number, latlng: L.LatLng, airbase: Airbase): void; - getAirbaseContextMenu(): AirbaseContextMenu; - hideAirbaseContextMenu(): void; - showAirbaseSpawnMenu(x: number, y: number, latlng: L.LatLng, airbase: Airbase): void; - getAirbaseSpawnMenu(): AirbaseSpawnContextMenu; - hideAirbaseSpawnMenu(): void; - showCoalitionAreaContextMenu(x: number, y: number, latlng: L.LatLng, coalitionArea: CoalitionArea): void; - getCoalitionAreaContextMenu(): CoalitionAreaContextMenu; - hideCoalitionAreaContextMenu(): void; - isZooming(): boolean; - getMousePosition(): L.Point; - getMouseCoordinates(): L.LatLng; - spawnFromAirbase(e: any): void; - centerOnUnit(ID: number | null): void; - getCenterUnit(): Unit | null; - setTheatre(theatre: string): void; - getMiniMapLayerGroup(): L.LayerGroup; - handleMapPanning(e: any): void; - addTemporaryMarker(latlng: L.LatLng, name: string, coalition: string, commandHash?: string): TemporaryUnitMarker; - getSelectedCoalitionArea(): CoalitionArea | undefined; - bringCoalitionAreaToBack(coalitionArea: CoalitionArea): void; - getVisibilityOptions(): { - [key: string]: boolean; - }; - unitIsProtected(unit: Unit): boolean; - getMapMarkerControls(): MapMarkerControl[]; - } -} -declare module "mission/bullseye" { - import { CustomMarker } from "map/markers/custommarker"; - export class Bullseye extends CustomMarker { - #private; - createIcon(): void; - setCoalition(coalition: string): void; - getCoalition(): string; - } -} declare module "mission/missionmanager" { import { Airbase } from "mission/airbase"; import { Bullseye } from "mission/bullseye"; @@ -1922,139 +1965,139 @@ declare module "unit/unitsmanager" { * @param mantainRelativePosition If true, the selected units will mantain their relative positions when reaching the target. This is useful to maintain a formation for groun/navy units * @param rotation Rotation in radians by which the formation will be rigidly rotated. E.g. a ( V ) formation will look like this ( < ) if rotated pi/4 radians (90 degrees) */ - selectedUnitsAddDestination(latlng: L.LatLng, mantainRelativePosition: boolean, rotation: number): void; + addDestination(latlng: L.LatLng, mantainRelativePosition: boolean, rotation: number, units?: Unit[] | null): void; /** Clear the destinations of all the selected units * */ - selectedUnitsClearDestinations(): void; + clearDestinations(units?: Unit[] | null): void; /** Instruct all the selected units to land at a specific location * * @param latlng Location where to land at */ - selectedUnitsLandAt(latlng: LatLng): void; + landAt(latlng: LatLng, units?: Unit[] | null): void; /** Instruct all the selected units to change their speed * * @param speedChange Speed change, either "stop", "slow", or "fast". The specific value depends on the unit category */ - selectedUnitsChangeSpeed(speedChange: string): void; + changeSpeed(speedChange: string, units?: Unit[] | null): void; /** Instruct all the selected units to change their altitude * * @param altitudeChange Altitude change, either "climb" or "descend". The specific value depends on the unit category */ - selectedUnitsChangeAltitude(altitudeChange: string): void; + changeAltitude(altitudeChange: string, units?: Unit[] | null): void; /** Set a specific speed to all the selected units * * @param speed Value to set, in m/s */ - selectedUnitsSetSpeed(speed: number): void; + setSpeed(speed: number, units?: Unit[] | null): void; /** Set a specific speed type to all the selected units * * @param speedType Value to set, either "CAS" or "GS". If "CAS" is selected, the unit will try to maintain the selected Calibrated Air Speed, but DCS will still only maintain a Ground Speed value so errors may arise depending on wind. */ - selectedUnitsSetSpeedType(speedType: string): void; + setSpeedType(speedType: string, units?: Unit[] | null): void; /** Set a specific altitude to all the selected units * * @param altitude Value to set, in m */ - selectedUnitsSetAltitude(altitude: number): void; + setAltitude(altitude: number, units?: Unit[] | null): void; /** Set a specific altitude type to all the selected units * * @param altitudeType Value to set, either "ASL" or "AGL". If "AGL" is selected, the unit will try to maintain the selected Above Ground Level altitude. Due to a DCS bug, this will only be true at the final position. */ - selectedUnitsSetAltitudeType(altitudeType: string): void; + setAltitudeType(altitudeType: string, units?: Unit[] | null): void; /** Set a specific ROE to all the selected units * * @param ROE Value to set, see constants for acceptable values */ - selectedUnitsSetROE(ROE: string): void; + setROE(ROE: string, units?: Unit[] | null): void; /** Set a specific reaction to threat to all the selected units * * @param reactionToThreat Value to set, see constants for acceptable values */ - selectedUnitsSetReactionToThreat(reactionToThreat: string): void; + setReactionToThreat(reactionToThreat: string, units?: Unit[] | null): void; /** Set a specific emissions & countermeasures to all the selected units * * @param emissionCountermeasure Value to set, see constants for acceptable values */ - selectedUnitsSetEmissionsCountermeasures(emissionCountermeasure: string): void; + setEmissionsCountermeasures(emissionCountermeasure: string, units?: Unit[] | null): void; /** Turn selected units on or off, only works on ground and navy units * * @param onOff If true, the unit will be turned on */ - selectedUnitsSetOnOff(onOff: boolean): void; + setOnOff(onOff: boolean, units?: Unit[] | null): void; /** Instruct the selected units to follow roads, only works on ground units * * @param followRoads If true, units will follow roads */ - selectedUnitsSetFollowRoads(followRoads: boolean): void; + setFollowRoads(followRoads: boolean, units?: Unit[] | null): void; /** Instruct selected units to operate as a certain coalition * * @param operateAsBool If true, units will operate as blue */ - selectedUnitsSetOperateAs(operateAsBool: boolean): void; + setOperateAs(operateAsBool: boolean, units?: Unit[] | null): void; /** Instruct units to attack a specific unit * * @param ID ID of the unit to attack */ - selectedUnitsAttackUnit(ID: number): void; + attackUnit(ID: number, units?: Unit[] | null): void; /** Instruct units to refuel at the nearest tanker, if possible. Else units will RTB * */ - selectedUnitsRefuel(): void; + refuel(units?: Unit[] | null): void; /** Instruct the selected units to follow another unit in a formation. Only works for aircrafts and helicopters. * * @param ID ID of the unit to follow * @param offset Optional parameter, defines a static offset. X: front-rear, positive front, Y: top-bottom, positive top, Z: left-right, positive right * @param formation Optional parameter, defines a predefined formation type. Values are: "trail", "echelon-lh", "echelon-rh", "line-abreast-lh", "line-abreast-rh", "front", "diamond" */ - selectedUnitsFollowUnit(ID: number, offset?: { + followUnit(ID: number, offset?: { "x": number; "y": number; "z": number; - }, formation?: string): void; + }, formation?: string, units?: Unit[] | null): void; /** Instruct the selected units to perform precision bombing of specific coordinates * * @param latlng Location to bomb */ - selectedUnitsBombPoint(latlng: LatLng): void; + bombPoint(latlng: LatLng, units?: Unit[] | null): void; /** Instruct the selected units to perform carpet bombing of specific coordinates * * @param latlng Location to bomb */ - selectedUnitsCarpetBomb(latlng: LatLng): void; + carpetBomb(latlng: LatLng, units?: Unit[] | null): void; /** Instruct the selected units to fire at specific coordinates * * @param latlng Location to fire at */ - selectedUnitsFireAtArea(latlng: LatLng): void; + fireAtArea(latlng: LatLng, units?: Unit[] | null): void; /** Instruct the selected units to simulate a fire fight at specific coordinates * * @param latlng Location to fire at */ - selectedUnitsSimulateFireFight(latlng: LatLng): void; + simulateFireFight(latlng: LatLng, units?: Unit[] | null): void; /** Instruct units to enter into scenic AAA mode. Units will shoot in the air without aiming * */ - selectedUnitsScenicAAA(): void; + scenicAAA(units?: Unit[] | null): void; /** Instruct units to enter into miss on purpose mode. Units will aim to the nearest enemy unit but not precisely. * */ - selectedUnitsMissOnPurpose(): void; + missOnPurpose(units?: Unit[] | null): void; /** Instruct units to land at specific point * * @param latlng Point where to land */ - selectedUnitsLandAtPoint(latlng: LatLng): void; + landAtPoint(latlng: LatLng, units?: Unit[] | null): void; /** Set a specific shots scatter to all the selected units * * @param shotsScatter Value to set */ - selectedUnitsSetShotsScatter(shotsScatter: number): void; + setShotsScatter(shotsScatter: number, units?: Unit[] | null): void; /** Set a specific shots intensity to all the selected units * * @param shotsScatter Value to set */ - selectedUnitsSetShotsIntensity(shotsIntensity: number): void; + setShotsIntensity(shotsIntensity: number, units?: Unit[] | null): void; /*********************** Control operations on selected units ************************/ /** See getUnitsCategories for more info * @@ -2070,42 +2113,42 @@ declare module "unit/unitsmanager" { /** Groups the selected units in a single (DCS) group, if all the units have the same category * */ - selectedUnitsCreateGroup(): void; + createGroup(units?: Unit[] | null): void; /** Set the hotgroup for the selected units. It will be the only hotgroup of the unit * * @param hotgroup Hotgroup number */ - selectedUnitsSetHotgroup(hotgroup: number): void; + setHotgroup(hotgroup: number, units?: Unit[] | null): void; /** Add the selected units to a hotgroup. Units can be in multiple hotgroups at the same type * * @param hotgroup Hotgroup number */ - selectedUnitsAddToHotgroup(hotgroup: number): void; + addToHotgroup(hotgroup: number, units?: Unit[] | null): void; /** Delete the selected units * * @param explosion If true, the unit will be deleted using an explosion * @returns */ - selectedUnitsDelete(explosion?: boolean, explosionType?: string): void; + delete(explosion?: boolean, explosionType?: string, units?: Unit[] | null): void; /** Compute the destinations of every unit in the selected units. This function preserves the relative positions of the units, and rotates the whole formation by rotation. * * @param latlng Center of the group after the translation * @param rotation Rotation of the group, in radians * @returns Array of positions for each unit, in order */ - selectedUnitsComputeGroupDestination(latlng: LatLng, rotation: number): { + computeGroupDestination(latlng: LatLng, rotation: number, units?: Unit[] | null): { [key: number]: LatLng; }; /** Copy the selected units and store their properties in memory * */ - selectedUnitsCopy(): void; + copy(units?: Unit[] | null): void; /*********************** Unit manipulation functions ************************/ /** Paste the copied units * * @returns True if units were pasted successfully */ - pasteUnits(): false | undefined; + paste(): false | undefined; /** Automatically create an Integrated Air Defence System from a CoalitionArea object. The units will be mostly focused around big cities. The bigger the city, the larger the amount of units created next to it. * If the CoalitionArea does not contain any city, no units will be created * diff --git a/client/bin/www b/client/bin/www index bb2e7ac7..8f0be3a5 100644 --- a/client/bin/www +++ b/client/bin/www @@ -98,3 +98,5 @@ function onListening() { : 'port ' + addr.port; debug('Listening on ' + bind); } + +console.log("DCS Olympus server v0.4.7 started correctly, happy flying!") diff --git a/client/package-lock.json b/client/package-lock.json index a50305c8..f042eede 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,97 +1,40 @@ { "name": "DCSOlympus", "version": "v0.4.7-alpha", - "lockfileVersion": 3, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "DCSOlympus", - "version": "v0.4.7-alpha", - "dependencies": { - "@turf/turf": "^6.5.0", - "body-parser": "^1.20.2", - "cookie-parser": "~1.4.4", - "debug": "~2.6.9", - "ejs": "^3.1.8", - "express": "~4.16.1", - "express-basic-auth": "^1.2.1", - "leaflet-gesture-handling": "^1.2.2", - "morgan": "~1.9.1", - "save": "^2.9.0", - "srtm-elevation": "^2.1.2" - }, - "devDependencies": { - "@babel/preset-env": "^7.21.4", - "@tanem/svg-injector": "^10.1.55", - "@types/formatcoords": "^1.1.0", - "@types/geojson": "^7946.0.10", - "@types/leaflet": "^1.9.0", - "@types/node": "^18.16.1", - "@types/sortablejs": "^1.15.0", - "@types/svg-injector": "^0.0.29", - "babelify": "^10.0.0", - "browserify": "^17.0.0", - "concurrently": "^7.6.0", - "cp": "^0.2.0", - "esmify": "^2.1.1", - "formatcoords": "^1.1.3", - "geodesy": "^1.1.2", - "leaflet": "^1.9.3", - "leaflet-control-mini-map": "^0.4.0", - "leaflet-path-drag": "*", - "leaflet.nauticscale": "^1.1.0", - "nodemon": "^2.0.20", - "requirejs": "^2.3.6", - "sortablejs": "^1.15.0", - "tsify": "^5.0.4", - "tslib": "latest", - "typedoc": "^0.24.8", - "typedoc-umlclass": "^0.7.1", - "typescript": "^4.9.4", - "usng.js": "^0.4.5", - "watchify": "^4.0.0" - } - }, - "node_modules/@ampproject/remapping": { + "dependencies": { + "@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, - "dependencies": { + "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" } }, - "node_modules/@babel/code-frame": { + "@babel/code-frame": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", "dev": true, - "dependencies": { + "requires": { "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/compat-data": { + "@babel/compat-data": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/@babel/core": { + "@babel/core": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", "dev": true, - "dependencies": { + "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.21.4", "@babel/generator": "^7.21.4", @@ -108,108 +51,80 @@ "json5": "^2.2.2", "semver": "^6.3.0" }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/generator": { + "@babel/generator": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.21.4", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { + "@babel/helper-annotate-as-pure": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets": { + "@babel/helper-compilation-targets": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", "dev": true, - "dependencies": { + "requires": { "@babel/compat-data": "^7.21.4", "@babel/helper-validator-option": "^7.21.0", "browserslist": "^4.21.3", "lru-cache": "^5.1.1", "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin": { + "@babel/helper-create-class-features-plugin": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.21.0", @@ -218,36 +133,24 @@ "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { + "@babel/helper-create-regexp-features-plugin": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz", "integrity": "sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "regexpu-core": "^5.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-define-polyfill-provider": { + "@babel/helper-define-polyfill-provider": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", @@ -255,109 +158,82 @@ "resolve": "^1.14.2", "semver": "^6.1.2" }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/helper-environment-visitor": { + "@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/@babel/helper-explode-assignable-expression": { + "@babel/helper-explode-assignable-expression": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-function-name": { + "@babel/helper-function-name": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, - "dependencies": { + "requires": { "@babel/template": "^7.20.7", "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-hoist-variables": { + "@babel/helper-hoist-variables": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { + "@babel/helper-member-expression-to-functions": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-imports": { + "@babel/helper-module-imports": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.21.4" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-transforms": { + "@babel/helper-module-transforms": { "version": "7.21.2", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", "@babel/helper-simple-access": "^7.20.2", @@ -366,803 +242,544 @@ "@babel/template": "^7.20.7", "@babel/traverse": "^7.21.2", "@babel/types": "^7.21.2" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { + "@babel/helper-optimise-call-expression": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-plugin-utils": { + "@babel/helper-plugin-utils": { "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/@babel/helper-remap-async-to-generator": { + "@babel/helper-remap-async-to-generator": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-wrap-function": "^7.18.9", "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-replace-supers": { + "@babel/helper-replace-supers": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", "@babel/template": "^7.20.7", "@babel/traverse": "^7.20.7", "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-simple-access": { + "@babel/helper-simple-access": { "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "@babel/helper-skip-transparent-expression-wrappers": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration": { + "@babel/helper-split-export-declaration": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helper-string-parser": { + "@babel/helper-string-parser": { "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/@babel/helper-validator-identifier": { + "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/@babel/helper-validator-option": { + "@babel/helper-validator-option": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/@babel/helper-wrap-function": { + "@babel/helper-wrap-function": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", "@babel/traverse": "^7.20.5", "@babel/types": "^7.20.5" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/helpers": { + "@babel/helpers": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dev": true, - "dependencies": { + "requires": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.21.0", "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { + "@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { + "@babel/parser": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } + "dev": true }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-proposal-optional-chaining": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { + "@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { + "@babel/plugin-proposal-class-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { + "@babel/plugin-proposal-class-static-block": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { + "@babel/plugin-proposal-dynamic-import": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { + "@babel/plugin-proposal-export-namespace-from": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-json-strings": { + "@babel/plugin-proposal-json-strings": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "@babel/plugin-proposal-logical-assignment-operators": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { + "@babel/plugin-proposal-numeric-separator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { + "@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", "dev": true, - "dependencies": { + "requires": { "@babel/compat-data": "^7.20.5", "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "@babel/plugin-proposal-optional-catch-binding": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { + "@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { + "@babel/plugin-proposal-private-methods": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { + "@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { + "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { + "@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { + "@babel/plugin-syntax-class-static-block": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { + "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { + "@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { + "@babel/plugin-syntax-import-assertions": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { + "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { + "@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { + "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { + "@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { + "@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { + "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { + "@babel/plugin-transform-arrow-functions": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { + "@babel/plugin-transform-async-to-generator": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-remap-async-to-generator": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { + "@babel/plugin-transform-block-scoped-functions": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { + "@babel/plugin-transform-block-scoping": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { + "@babel/plugin-transform-classes": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", @@ -1172,442 +789,274 @@ "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { + "@babel/plugin-transform-computed-properties": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/template": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-destructuring": { + "@babel/plugin-transform-destructuring": { "version": "7.21.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { + "@babel/plugin-transform-dotall-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { + "@babel/plugin-transform-duplicate-keys": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { + "@babel/plugin-transform-exponentiation-operator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-for-of": { + "@babel/plugin-transform-for-of": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-function-name": { + "@babel/plugin-transform-function-name": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-compilation-targets": "^7.18.9", "@babel/helper-function-name": "^7.18.9", "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-literals": { + "@babel/plugin-transform-literals": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { + "@babel/plugin-transform-member-expression-literals": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-amd": { + "@babel/plugin-transform-modules-amd": { "version": "7.20.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-module-transforms": "^7.20.11", "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { + "@babel/plugin-transform-modules-commonjs": { "version": "7.21.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-module-transforms": "^7.21.2", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-simple-access": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { + "@babel/plugin-transform-modules-systemjs": { "version": "7.20.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-module-transforms": "^7.20.11", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-validator-identifier": "^7.19.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { + "@babel/plugin-transform-modules-umd": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-regexp-features-plugin": "^7.20.5", "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-new-target": { + "@babel/plugin-transform-new-target": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-super": { + "@babel/plugin-transform-object-super": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-parameters": { + "@babel/plugin-transform-parameters": { "version": "7.21.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-property-literals": { + "@babel/plugin-transform-property-literals": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regenerator": { + "@babel/plugin-transform-regenerator": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.20.2", "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { + "@babel/plugin-transform-reserved-words": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { + "@babel/plugin-transform-shorthand-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-spread": { + "@babel/plugin-transform-spread": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { + "@babel/plugin-transform-sticky-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-template-literals": { + "@babel/plugin-transform-template-literals": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { + "@babel/plugin-transform-typeof-symbol": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { + "@babel/plugin-transform-unicode-escapes": { "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { + "@babel/plugin-transform-unicode-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env": { + "@babel/preset-env": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.4.tgz", "integrity": "sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==", "dev": true, - "dependencies": { + "requires": { "@babel/compat-data": "^7.21.4", "@babel/helper-compilation-targets": "^7.21.4", "@babel/helper-plugin-utils": "^7.20.2", @@ -1683,68 +1132,53 @@ "babel-plugin-polyfill-regenerator": "^0.4.1", "core-js-compat": "^3.25.1", "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-modules": { + "@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/regjsgen": { + "@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", "dev": true }, - "node_modules/@babel/runtime": { + "@babel/runtime": { "version": "7.21.5", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", "dev": true, - "dependencies": { + "requires": { "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/template": { + "@babel/template": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, - "dependencies": { + "requires": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@babel/traverse": { + "@babel/traverse": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", "dev": true, - "dependencies": { + "requires": { "@babel/code-frame": "^7.21.4", "@babel/generator": "^7.21.4", "@babel/helper-environment-visitor": "^7.18.9", @@ -1756,370 +1190,442 @@ "debug": "^4.1.0", "globals": "^11.1.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/types": { + "@babel/types": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" } }, - "node_modules/@jridgewell/gen-mapping": { + "@browserify/envify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@browserify/envify/-/envify-6.0.0.tgz", + "integrity": "sha512-ovxHR0KTsRCyMNwD7MGV0+VCU1sT6Ds+itC4DaQHM41eUId+w5Jd0qlhLVoDkkIVBnkY3BAAM8yb2QfpBlHkPw==", + "dev": true, + "requires": { + "acorn-node": "^2.0.1", + "dash-ast": "^2.0.1", + "multisplice": "^1.0.0", + "through2": "^4.0.2" + }, + "dependencies": { + "acorn-node": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-2.0.1.tgz", + "integrity": "sha512-VLR5sHqjk+8c5hrKeP2fWaIHb8eewsoxnZ8r2qpwRHXMHuC7KyOPflnOx9dLssVQUurzJ7rO0OzIFjHcndafWw==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + } + } + }, + "@browserify/uglifyify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@browserify/uglifyify/-/uglifyify-6.0.0.tgz", + "integrity": "sha512-48M2a3novsgKhUSo/B3ja10awc7unliK1HfW6aYBJdLFQj3wXDx9BBJVfj6MVYERSQVEVjNHQQ7IK89h4MpCLw==", + "dev": true, + "requires": { + "convert-source-map": "^1.9.0", + "minimatch": "^3.0.2", + "terser": "^5.15.1", + "through2": "^4.0.2", + "xtend": "^4.0.1" + }, + "dependencies": { + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "terser": { + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + } + } + }, + "@goto-bus-stop/common-shake": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@goto-bus-stop/common-shake/-/common-shake-2.4.0.tgz", + "integrity": "sha512-LO+7v+UbxE3IyAS4Suf/KYB7Zq9DEIHibwDe6Wph4apNEfDyyxP7BSxzRS/Qa9lUH5gsm9eL9nF8EE1E0/nQkQ==", + "dev": true, + "requires": { + "acorn-walk": "^7.0.0", + "debug": "^3.2.6", + "escope": "^3.6.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, - "dependencies": { + "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { + "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } + "dev": true }, - "node_modules/@jridgewell/set-array": { + "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, - "engines": { - "node": ">=6.0.0" + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "node_modules/@jridgewell/sourcemap-codec": { + "@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, - "node_modules/@jridgewell/trace-mapping": { + "@jridgewell/trace-mapping": { "version": "0.3.18", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dev": true, - "dependencies": { + "requires": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + } } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@tanem/svg-injector": { + "@tanem/svg-injector": { "version": "10.1.55", "resolved": "https://registry.npmjs.org/@tanem/svg-injector/-/svg-injector-10.1.55.tgz", "integrity": "sha512-xh8ejdvjDaH1eddZC0CdI45eeid4BIU2ppjNEhiTiWMYcLGT19KWjbES/ttDS4mq9gIAQfXx57g5zimEVohqYA==", "dev": true, - "dependencies": { + "requires": { "@babel/runtime": "^7.21.5", "content-type": "^1.0.5", "tslib": "^2.5.0" } }, - "node_modules/@turf/along": { + "@turf/along": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/along/-/along-6.5.0.tgz", "integrity": "sha512-LLyWQ0AARqJCmMcIEAXF4GEu8usmd4Kbz3qk1Oy5HoRNpZX47+i5exQtmIWKdqJ1MMhW26fCTXgpsEs5zgJ5gw==", - "dependencies": { + "requires": { "@turf/bearing": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/angle": { + "@turf/angle": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/angle/-/angle-6.5.0.tgz", "integrity": "sha512-4pXMbWhFofJJAOvTMCns6N4C8CMd5Ih4O2jSAG9b3dDHakj3O4yN1+Zbm+NUei+eVEZ9gFeVp9svE3aMDenIkw==", - "dependencies": { + "requires": { "@turf/bearing": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/rhumb-bearing": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/area": { + "@turf/area": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.5.0.tgz", "integrity": "sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/bbox": { + "@turf/bbox": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.5.0.tgz", "integrity": "sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/bbox-clip": { + "@turf/bbox-clip": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/bbox-clip/-/bbox-clip-6.5.0.tgz", "integrity": "sha512-F6PaIRF8WMp8EmgU/Ke5B1Y6/pia14UAYB5TiBC668w5rVVjy5L8rTm/m2lEkkDMHlzoP9vNY4pxpNthE7rLcQ==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/bbox-polygon": { + "@turf/bbox-polygon": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/bbox-polygon/-/bbox-polygon-6.5.0.tgz", "integrity": "sha512-+/r0NyL1lOG3zKZmmf6L8ommU07HliP4dgYToMoTxqzsWzyLjaj/OzgQ8rBmv703WJX+aS6yCmLuIhYqyufyuw==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/bearing": { + "@turf/bearing": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.5.0.tgz", "integrity": "sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/bezier-spline": { + "@turf/bezier-spline": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/bezier-spline/-/bezier-spline-6.5.0.tgz", "integrity": "sha512-vokPaurTd4PF96rRgGVm6zYYC5r1u98ZsG+wZEv9y3kJTuJRX/O3xIY2QnTGTdbVmAJN1ouOsD0RoZYaVoXORQ==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/boolean-clockwise": { + "@turf/boolean-clockwise": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-6.5.0.tgz", "integrity": "sha512-45+C7LC5RMbRWrxh3Z0Eihsc8db1VGBO5d9BLTOAwU4jR6SgsunTfRWR16X7JUwIDYlCVEmnjcXJNi/kIU3VIw==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/boolean-contains": { + "@turf/boolean-contains": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.5.0.tgz", "integrity": "sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/boolean-point-on-line": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/boolean-crosses": { + "@turf/boolean-crosses": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-crosses/-/boolean-crosses-6.5.0.tgz", "integrity": "sha512-gvshbTPhAHporTlQwBJqyfW+2yV8q/mOTxG6PzRVl6ARsqNoqYQWkd4MLug7OmAqVyBzLK3201uAeBjxbGw0Ng==", - "dependencies": { + "requires": { "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/line-intersect": "^6.5.0", "@turf/polygon-to-line": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/boolean-disjoint": { + "@turf/boolean-disjoint": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-disjoint/-/boolean-disjoint-6.5.0.tgz", "integrity": "sha512-rZ2ozlrRLIAGo2bjQ/ZUu4oZ/+ZjGvLkN5CKXSKBcu6xFO6k2bgqeM8a1836tAW+Pqp/ZFsTA5fZHsJZvP2D5g==", - "dependencies": { + "requires": { "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/line-intersect": "^6.5.0", "@turf/meta": "^6.5.0", "@turf/polygon-to-line": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/boolean-equal": { + "@turf/boolean-equal": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-equal/-/boolean-equal-6.5.0.tgz", "integrity": "sha512-cY0M3yoLC26mhAnjv1gyYNQjn7wxIXmL2hBmI/qs8g5uKuC2hRWi13ydufE3k4x0aNRjFGlg41fjoYLwaVF+9Q==", - "dependencies": { + "requires": { "@turf/clean-coords": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "geojson-equality": "0.1.6" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/boolean-intersects": { + "@turf/boolean-intersects": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-intersects/-/boolean-intersects-6.5.0.tgz", "integrity": "sha512-nIxkizjRdjKCYFQMnml6cjPsDOBCThrt+nkqtSEcxkKMhAQj5OO7o2CecioNTaX8EayqwMGVKcsz27oP4mKPTw==", - "dependencies": { + "requires": { "@turf/boolean-disjoint": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/boolean-overlap": { + "@turf/boolean-overlap": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.5.0.tgz", "integrity": "sha512-8btMIdnbXVWUa1M7D4shyaSGxLRw6NjMcqKBcsTXcZdnaixl22k7ar7BvIzkaRYN3SFECk9VGXfLncNS3ckQUw==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/line-intersect": "^6.5.0", "@turf/line-overlap": "^6.5.0", "@turf/meta": "^6.5.0", "geojson-equality": "0.1.6" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/boolean-parallel": { + "@turf/boolean-parallel": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-parallel/-/boolean-parallel-6.5.0.tgz", "integrity": "sha512-aSHJsr1nq9e5TthZGZ9CZYeXklJyRgR5kCLm5X4urz7+MotMOp/LsGOsvKvK9NeUl9+8OUmfMn8EFTT8LkcvIQ==", - "dependencies": { + "requires": { "@turf/clean-coords": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/line-segment": "^6.5.0", "@turf/rhumb-bearing": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/boolean-point-in-polygon": { + "@turf/boolean-point-in-polygon": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.5.0.tgz", "integrity": "sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/boolean-point-on-line": { + "@turf/boolean-point-on-line": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.5.0.tgz", "integrity": "sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/boolean-within": { + "@turf/boolean-within": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-within/-/boolean-within-6.5.0.tgz", "integrity": "sha512-YQB3oU18Inx35C/LU930D36RAVe7LDXk1kWsQ8mLmuqYn9YdPsDQTMTkLJMhoQ8EbN7QTdy333xRQ4MYgToteQ==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/boolean-point-on-line": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/buffer": { + "@turf/buffer": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/buffer/-/buffer-6.5.0.tgz", "integrity": "sha512-qeX4N6+PPWbKqp1AVkBVWFerGjMYMUyencwfnkCesoznU6qvfugFHNAngNqIBVnJjZ5n8IFyOf+akcxnrt9sNg==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/center": "^6.5.0", "@turf/helpers": "^6.5.0", @@ -2127,186 +1633,144 @@ "@turf/projection": "^6.5.0", "d3-geo": "1.7.1", "turf-jsts": "*" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/center": { + "@turf/center": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/center/-/center-6.5.0.tgz", "integrity": "sha512-T8KtMTfSATWcAX088rEDKjyvQCBkUsLnK/Txb6/8WUXIeOZyHu42G7MkdkHRoHtwieLdduDdmPLFyTdG5/e7ZQ==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/center-mean": { + "@turf/center-mean": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/center-mean/-/center-mean-6.5.0.tgz", "integrity": "sha512-AAX6f4bVn12pTVrMUiB9KrnV94BgeBKpyg3YpfnEbBpkN/znfVhL8dG8IxMAxAoSZ61Zt9WLY34HfENveuOZ7Q==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/center-median": { + "@turf/center-median": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/center-median/-/center-median-6.5.0.tgz", "integrity": "sha512-dT8Ndu5CiZkPrj15PBvslpuf01ky41DEYEPxS01LOxp5HOUHXp1oJxsPxvc+i/wK4BwccPNzU1vzJ0S4emd1KQ==", - "dependencies": { + "requires": { "@turf/center-mean": "^6.5.0", "@turf/centroid": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/center-of-mass": { + "@turf/center-of-mass": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/center-of-mass/-/center-of-mass-6.5.0.tgz", "integrity": "sha512-EWrriU6LraOfPN7m1jZi+1NLTKNkuIsGLZc2+Y8zbGruvUW+QV7K0nhf7iZWutlxHXTBqEXHbKue/o79IumAsQ==", - "dependencies": { + "requires": { "@turf/centroid": "^6.5.0", "@turf/convex": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/centroid": { + "@turf/centroid": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-6.5.0.tgz", "integrity": "sha512-MwE1oq5E3isewPprEClbfU5pXljIK/GUOMbn22UM3IFPDJX0KeoyLNwghszkdmFp/qMGL/M13MMWvU+GNLXP/A==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/circle": { + "@turf/circle": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/circle/-/circle-6.5.0.tgz", "integrity": "sha512-oU1+Kq9DgRnoSbWFHKnnUdTmtcRUMmHoV9DjTXu9vOLNV5OWtAAh1VZ+mzsioGGzoDNT/V5igbFOkMfBQc0B6A==", - "dependencies": { + "requires": { "@turf/destination": "^6.5.0", "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/clean-coords": { + "@turf/clean-coords": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/clean-coords/-/clean-coords-6.5.0.tgz", "integrity": "sha512-EMX7gyZz0WTH/ET7xV8MyrExywfm9qUi0/MY89yNffzGIEHuFfqwhcCqZ8O00rZIPZHUTxpmsxQSTfzJJA1CPw==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/clone": { + "@turf/clone": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-6.5.0.tgz", "integrity": "sha512-mzVtTFj/QycXOn6ig+annKrM6ZlimreKYz6f/GSERytOpgzodbQyOgkfwru100O1KQhhjSudKK4DsQ0oyi9cTw==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/clusters": { + "@turf/clusters": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/clusters/-/clusters-6.5.0.tgz", "integrity": "sha512-Y6gfnTJzQ1hdLfCsyd5zApNbfLIxYEpmDibHUqR5z03Lpe02pa78JtgrgUNt1seeO/aJ4TG1NLN8V5gOrHk04g==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/clusters-dbscan": { + "@turf/clusters-dbscan": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/clusters-dbscan/-/clusters-dbscan-6.5.0.tgz", "integrity": "sha512-SxZEE4kADU9DqLRiT53QZBBhu8EP9skviSyl+FGj08Y01xfICM/RR9ACUdM0aEQimhpu+ZpRVcUK+2jtiCGrYQ==", - "dependencies": { + "requires": { "@turf/clone": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0", "density-clustering": "1.3.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/clusters-kmeans": { + "@turf/clusters-kmeans": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/clusters-kmeans/-/clusters-kmeans-6.5.0.tgz", "integrity": "sha512-DwacD5+YO8kwDPKaXwT9DV46tMBVNsbi1IzdajZu1JDSWoN7yc7N9Qt88oi+p30583O0UPVkAK+A10WAQv4mUw==", - "dependencies": { + "requires": { "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "skmeans": "0.9.7" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/collect": { + "@turf/collect": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/collect/-/collect-6.5.0.tgz", "integrity": "sha512-4dN/T6LNnRg099m97BJeOcTA5fSI8cu87Ydgfibewd2KQwBexO69AnjEFqfPX3Wj+Zvisj1uAVIZbPmSSrZkjg==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/helpers": "^6.5.0", "rbush": "2.x" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/combine": { + "@turf/combine": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/combine/-/combine-6.5.0.tgz", "integrity": "sha512-Q8EIC4OtAcHiJB3C4R+FpB4LANiT90t17uOd851qkM2/o6m39bfN5Mv0PWqMZIHWrrosZqRqoY9dJnzz/rJxYQ==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/concave": { + "@turf/concave": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/concave/-/concave-6.5.0.tgz", "integrity": "sha512-I/sUmUC8TC5h/E2vPwxVht+nRt+TnXIPRoztDFvS8/Y0+cBDple9inLSo9nnPXMXidrBlGXZ9vQx/BjZUJgsRQ==", - "dependencies": { + "requires": { "@turf/clone": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", @@ -2315,192 +1779,147 @@ "@turf/tin": "^6.5.0", "topojson-client": "3.x", "topojson-server": "3.x" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/convex": { + "@turf/convex": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/convex/-/convex-6.5.0.tgz", "integrity": "sha512-x7ZwC5z7PJB0SBwNh7JCeCNx7Iu+QSrH7fYgK0RhhNop13TqUlvHMirMLRgf2db1DqUetrAO2qHJeIuasquUWg==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0", "concaveman": "*" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/destination": { + "@turf/destination": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.5.0.tgz", "integrity": "sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/difference": { + "@turf/difference": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-6.5.0.tgz", "integrity": "sha512-l8iR5uJqvI+5Fs6leNbhPY5t/a3vipUF/3AeVLpwPQcgmedNXyheYuy07PcMGH5Jdpi5gItOiTqwiU/bUH4b3A==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "polygon-clipping": "^0.15.3" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/dissolve": { + "@turf/dissolve": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/dissolve/-/dissolve-6.5.0.tgz", "integrity": "sha512-WBVbpm9zLTp0Bl9CE35NomTaOL1c4TQCtEoO43YaAhNEWJOOIhZMFJyr8mbvYruKl817KinT3x7aYjjCMjTAsQ==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "polygon-clipping": "^0.15.3" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/distance": { + "@turf/distance": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.5.0.tgz", "integrity": "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/distance-weight": { + "@turf/distance-weight": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/distance-weight/-/distance-weight-6.5.0.tgz", "integrity": "sha512-a8qBKkgVNvPKBfZfEJZnC3DV7dfIsC3UIdpRci/iap/wZLH41EmS90nM+BokAJflUHYy8PqE44wySGWHN1FXrQ==", - "dependencies": { + "requires": { "@turf/centroid": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/ellipse": { + "@turf/ellipse": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/ellipse/-/ellipse-6.5.0.tgz", "integrity": "sha512-kuXtwFviw/JqnyJXF1mrR/cb496zDTSbGKtSiolWMNImYzGGkbsAsFTjwJYgD7+4FixHjp0uQPzo70KDf3AIBw==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/rhumb-destination": "^6.5.0", "@turf/transform-rotate": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/envelope": { + "@turf/envelope": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/envelope/-/envelope-6.5.0.tgz", "integrity": "sha512-9Z+FnBWvOGOU4X+fMZxYFs1HjFlkKqsddLuMknRaqcJd6t+NIv5DWvPtDL8ATD2GEExYDiFLwMdckfr1yqJgHA==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/bbox-polygon": "^6.5.0", "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/explode": { + "@turf/explode": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/explode/-/explode-6.5.0.tgz", "integrity": "sha512-6cSvMrnHm2qAsace6pw9cDmK2buAlw8+tjeJVXMfMyY+w7ZUi1rprWMsY92J7s2Dar63Bv09n56/1V7+tcj52Q==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/flatten": { + "@turf/flatten": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/flatten/-/flatten-6.5.0.tgz", "integrity": "sha512-IBZVwoNLVNT6U/bcUUllubgElzpMsNoCw8tLqBw6dfYg9ObGmpEjf9BIYLr7a2Yn5ZR4l7YIj2T7kD5uJjZADQ==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/flip": { + "@turf/flip": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/flip/-/flip-6.5.0.tgz", "integrity": "sha512-oyikJFNjt2LmIXQqgOGLvt70RgE2lyzPMloYWM7OR5oIFGRiBvqVD2hA6MNw6JewIm30fWZ8DQJw1NHXJTJPbg==", - "dependencies": { + "requires": { "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/great-circle": { + "@turf/great-circle": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/great-circle/-/great-circle-6.5.0.tgz", "integrity": "sha512-7ovyi3HaKOXdFyN7yy1yOMa8IyOvV46RC1QOQTT+RYUN8ke10eyqExwBpL9RFUPvlpoTzoYbM/+lWPogQlFncg==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/helpers": { + "@turf/helpers": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz", - "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==", - "funding": { - "url": "https://opencollective.com/turf" - } + "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==" }, - "node_modules/@turf/hex-grid": { + "@turf/hex-grid": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/hex-grid/-/hex-grid-6.5.0.tgz", "integrity": "sha512-Ln3tc2tgZT8etDOldgc6e741Smg1CsMKAz1/Mlel+MEL5Ynv2mhx3m0q4J9IB1F3a4MNjDeVvm8drAaf9SF33g==", - "dependencies": { + "requires": { "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/intersect": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/interpolate": { + "@turf/interpolate": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/interpolate/-/interpolate-6.5.0.tgz", "integrity": "sha512-LSH5fMeiGyuDZ4WrDJNgh81d2DnNDUVJtuFryJFup8PV8jbs46lQGfI3r1DJ2p1IlEJIz3pmAZYeTfMMoeeohw==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/centroid": "^6.5.0", "@turf/clone": "^6.5.0", @@ -2512,40 +1931,31 @@ "@turf/point-grid": "^6.5.0", "@turf/square-grid": "^6.5.0", "@turf/triangle-grid": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/intersect": { + "@turf/intersect": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-6.5.0.tgz", "integrity": "sha512-2legGJeKrfFkzntcd4GouPugoqPUjexPZnOvfez+3SfIMrHvulw8qV8u7pfVyn2Yqs53yoVCEjS5sEpvQ5YRQg==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "polygon-clipping": "^0.15.3" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/invariant": { + "@turf/invariant": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.5.0.tgz", "integrity": "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/isobands": { + "@turf/isobands": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/isobands/-/isobands-6.5.0.tgz", "integrity": "sha512-4h6sjBPhRwMVuFaVBv70YB7eGz+iw0bhPRnp+8JBdX1UPJSXhoi/ZF2rACemRUr0HkdVB/a1r9gC32vn5IAEkw==", - "dependencies": { + "requires": { "@turf/area": "^6.5.0", "@turf/bbox": "^6.5.0", "@turf/boolean-point-in-polygon": "^6.5.0", @@ -2554,110 +1964,86 @@ "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "object-assign": "*" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/isolines": { + "@turf/isolines": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/isolines/-/isolines-6.5.0.tgz", "integrity": "sha512-6ElhiLCopxWlv4tPoxiCzASWt/jMRvmp6mRYrpzOm3EUl75OhHKa/Pu6Y9nWtCMmVC/RcWtiiweUocbPLZLm0A==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "object-assign": "*" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/kinks": { + "@turf/kinks": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/kinks/-/kinks-6.5.0.tgz", "integrity": "sha512-ViCngdPt1eEL7hYUHR2eHR662GvCgTc35ZJFaNR6kRtr6D8plLaDju0FILeFFWSc+o8e3fwxZEJKmFj9IzPiIQ==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/length": { + "@turf/length": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/length/-/length-6.5.0.tgz", "integrity": "sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig==", - "dependencies": { + "requires": { "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/line-arc": { + "@turf/line-arc": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-arc/-/line-arc-6.5.0.tgz", "integrity": "sha512-I6c+V6mIyEwbtg9P9zSFF89T7QPe1DPTG3MJJ6Cm1MrAY0MdejwQKOpsvNl8LDU2ekHOlz2kHpPVR7VJsoMllA==", - "dependencies": { + "requires": { "@turf/circle": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/line-chunk": { + "@turf/line-chunk": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-chunk/-/line-chunk-6.5.0.tgz", "integrity": "sha512-i1FGE6YJaaYa+IJesTfyRRQZP31QouS+wh/pa6O3CC0q4T7LtHigyBSYjrbjSLfn2EVPYGlPCMFEqNWCOkC6zg==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/length": "^6.5.0", "@turf/line-slice-along": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/line-intersect": { + "@turf/line-intersect": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.5.0.tgz", "integrity": "sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/line-segment": "^6.5.0", "@turf/meta": "^6.5.0", "geojson-rbush": "3.x" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/line-offset": { + "@turf/line-offset": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-offset/-/line-offset-6.5.0.tgz", "integrity": "sha512-CEXZbKgyz8r72qRvPchK0dxqsq8IQBdH275FE6o4MrBkzMcoZsfSjghtXzKaz9vvro+HfIXal0sTk2mqV1lQTw==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/line-overlap": { + "@turf/line-overlap": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.5.0.tgz", "integrity": "sha512-xHOaWLd0hkaC/1OLcStCpfq55lPHpPNadZySDXYiYjEz5HXr1oKmtMYpn0wGizsLwrOixRdEp+j7bL8dPt4ojQ==", - "dependencies": { + "requires": { "@turf/boolean-point-on-line": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", @@ -2666,56 +2052,44 @@ "@turf/nearest-point-on-line": "^6.5.0", "deep-equal": "1.x", "geojson-rbush": "3.x" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/line-segment": { + "@turf/line-segment": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.5.0.tgz", "integrity": "sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/line-slice": { + "@turf/line-slice": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-slice/-/line-slice-6.5.0.tgz", "integrity": "sha512-vDqJxve9tBHhOaVVFXqVjF5qDzGtKWviyjbyi2QnSnxyFAmLlLnBfMX8TLQCAf2GxHibB95RO5FBE6I2KVPRuw==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/nearest-point-on-line": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/line-slice-along": { + "@turf/line-slice-along": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-slice-along/-/line-slice-along-6.5.0.tgz", "integrity": "sha512-KHJRU6KpHrAj+BTgTNqby6VCTnDzG6a1sJx/I3hNvqMBLvWVA2IrkR9L9DtsQsVY63IBwVdQDqiwCuZLDQh4Ng==", - "dependencies": { + "requires": { "@turf/bearing": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/line-split": { + "@turf/line-split": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-split/-/line-split-6.5.0.tgz", "integrity": "sha512-/rwUMVr9OI2ccJjw7/6eTN53URtGThNSD5I0GgxyFXMtxWiloRJ9MTff8jBbtPWrRka/Sh2GkwucVRAEakx9Sw==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", @@ -2726,94 +2100,73 @@ "@turf/square": "^6.5.0", "@turf/truncate": "^6.5.0", "geojson-rbush": "3.x" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/line-to-polygon": { + "@turf/line-to-polygon": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-to-polygon/-/line-to-polygon-6.5.0.tgz", "integrity": "sha512-qYBuRCJJL8Gx27OwCD1TMijM/9XjRgXH/m/TyuND4OXedBpIWlK5VbTIO2gJ8OCfznBBddpjiObLBrkuxTpN4Q==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/mask": { + "@turf/mask": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/mask/-/mask-6.5.0.tgz", "integrity": "sha512-RQha4aU8LpBrmrkH8CPaaoAfk0Egj5OuXtv6HuCQnHeGNOQt3TQVibTA3Sh4iduq4EPxnZfDjgsOeKtrCA19lg==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "polygon-clipping": "^0.15.3" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/meta": { + "@turf/meta": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.5.0.tgz", "integrity": "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/midpoint": { + "@turf/midpoint": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/midpoint/-/midpoint-6.5.0.tgz", "integrity": "sha512-MyTzV44IwmVI6ec9fB2OgZ53JGNlgOpaYl9ArKoF49rXpL84F9rNATndbe0+MQIhdkw8IlzA6xVP4lZzfMNVCw==", - "dependencies": { + "requires": { "@turf/bearing": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/moran-index": { + "@turf/moran-index": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/moran-index/-/moran-index-6.5.0.tgz", "integrity": "sha512-ItsnhrU2XYtTtTudrM8so4afBCYWNaB0Mfy28NZwLjB5jWuAsvyV+YW+J88+neK/ougKMTawkmjQqodNJaBeLQ==", - "dependencies": { + "requires": { "@turf/distance-weight": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/nearest-point": { + "@turf/nearest-point": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/nearest-point/-/nearest-point-6.5.0.tgz", "integrity": "sha512-fguV09QxilZv/p94s8SMsXILIAMiaXI5PATq9d7YWijLxWUj6Q/r43kxyoi78Zmwwh1Zfqz9w+bCYUAxZ5+euA==", - "dependencies": { + "requires": { "@turf/clone": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/nearest-point-on-line": { + "@turf/nearest-point-on-line": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz", "integrity": "sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==", - "dependencies": { + "requires": { "@turf/bearing": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/distance": "^6.5.0", @@ -2821,72 +2174,57 @@ "@turf/invariant": "^6.5.0", "@turf/line-intersect": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/nearest-point-to-line": { + "@turf/nearest-point-to-line": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/nearest-point-to-line/-/nearest-point-to-line-6.5.0.tgz", "integrity": "sha512-PXV7cN0BVzUZdjj6oeb/ESnzXSfWmEMrsfZSDRgqyZ9ytdiIj/eRsnOXLR13LkTdXVOJYDBuf7xt1mLhM4p6+Q==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "@turf/point-to-line-distance": "^6.5.0", "object-assign": "*" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/planepoint": { + "@turf/planepoint": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/planepoint/-/planepoint-6.5.0.tgz", "integrity": "sha512-R3AahA6DUvtFbka1kcJHqZ7DMHmPXDEQpbU5WaglNn7NaCQg9HB0XM0ZfqWcd5u92YXV+Gg8QhC8x5XojfcM4Q==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/point-grid": { + "@turf/point-grid": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/point-grid/-/point-grid-6.5.0.tgz", "integrity": "sha512-Iq38lFokNNtQJnOj/RBKmyt6dlof0yhaHEDELaWHuECm1lIZLY3ZbVMwbs+nXkwTAHjKfS/OtMheUBkw+ee49w==", - "dependencies": { + "requires": { "@turf/boolean-within": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/point-on-feature": { + "@turf/point-on-feature": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/point-on-feature/-/point-on-feature-6.5.0.tgz", "integrity": "sha512-bDpuIlvugJhfcF/0awAQ+QI6Om1Y1FFYE8Y/YdxGRongivix850dTeXCo0mDylFdWFPGDo7Mmh9Vo4VxNwW/TA==", - "dependencies": { + "requires": { "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/center": "^6.5.0", "@turf/explode": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/nearest-point": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/point-to-line-distance": { + "@turf/point-to-line-distance": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/point-to-line-distance/-/point-to-line-distance-6.5.0.tgz", "integrity": "sha512-opHVQ4vjUhNBly1bob6RWy+F+hsZDH9SA0UW36pIRzfpu27qipU18xup0XXEePfY6+wvhF6yL/WgCO2IbrLqEA==", - "dependencies": { + "requires": { "@turf/bearing": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", @@ -2895,198 +2233,153 @@ "@turf/projection": "^6.5.0", "@turf/rhumb-bearing": "^6.5.0", "@turf/rhumb-distance": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/points-within-polygon": { + "@turf/points-within-polygon": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/points-within-polygon/-/points-within-polygon-6.5.0.tgz", "integrity": "sha512-YyuheKqjliDsBDt3Ho73QVZk1VXX1+zIA2gwWvuz8bR1HXOkcuwk/1J76HuFMOQI3WK78wyAi+xbkx268PkQzQ==", - "dependencies": { + "requires": { "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/polygon-smooth": { + "@turf/polygon-smooth": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/polygon-smooth/-/polygon-smooth-6.5.0.tgz", "integrity": "sha512-LO/X/5hfh/Rk4EfkDBpLlVwt3i6IXdtQccDT9rMjXEP32tRgy0VMFmdkNaXoGlSSKf/1mGqLl4y4wHd86DqKbg==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/polygon-tangents": { + "@turf/polygon-tangents": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/polygon-tangents/-/polygon-tangents-6.5.0.tgz", "integrity": "sha512-sB4/IUqJMYRQH9jVBwqS/XDitkEfbyqRy+EH/cMRJURTg78eHunvJ708x5r6umXsbiUyQU4eqgPzEylWEQiunw==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/boolean-within": "^6.5.0", "@turf/explode": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/nearest-point": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/polygon-to-line": { + "@turf/polygon-to-line": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/polygon-to-line/-/polygon-to-line-6.5.0.tgz", "integrity": "sha512-5p4n/ij97EIttAq+ewSnKt0ruvuM+LIDzuczSzuHTpq4oS7Oq8yqg5TQ4nzMVuK41r/tALCk7nAoBuw3Su4Gcw==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/polygonize": { + "@turf/polygonize": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/polygonize/-/polygonize-6.5.0.tgz", "integrity": "sha512-a/3GzHRaCyzg7tVYHo43QUChCspa99oK4yPqooVIwTC61npFzdrmnywMv0S+WZjHZwK37BrFJGFrZGf6ocmY5w==", - "dependencies": { + "requires": { "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/envelope": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/projection": { + "@turf/projection": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/projection/-/projection-6.5.0.tgz", "integrity": "sha512-/Pgh9mDvQWWu8HRxqpM+tKz8OzgauV+DiOcr3FCjD6ubDnrrmMJlsf6fFJmggw93mtVPrZRL6yyi9aYCQBOIvg==", - "dependencies": { + "requires": { "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/random": { + "@turf/random": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/random/-/random-6.5.0.tgz", "integrity": "sha512-8Q25gQ/XbA7HJAe+eXp4UhcXM9aOOJFaxZ02+XSNwMvY8gtWSCBLVqRcW4OhqilgZ8PeuQDWgBxeo+BIqqFWFQ==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/rectangle-grid": { + "@turf/rectangle-grid": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/rectangle-grid/-/rectangle-grid-6.5.0.tgz", "integrity": "sha512-yQZ/1vbW68O2KsSB3OZYK+72aWz/Adnf7m2CMKcC+aq6TwjxZjAvlbCOsNUnMAuldRUVN1ph6RXMG4e9KEvKvg==", - "dependencies": { + "requires": { "@turf/boolean-intersects": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/rewind": { + "@turf/rewind": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/rewind/-/rewind-6.5.0.tgz", "integrity": "sha512-IoUAMcHWotBWYwSYuYypw/LlqZmO+wcBpn8ysrBNbazkFNkLf3btSDZMkKJO/bvOzl55imr/Xj4fi3DdsLsbzQ==", - "dependencies": { + "requires": { "@turf/boolean-clockwise": "^6.5.0", "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/rhumb-bearing": { + "@turf/rhumb-bearing": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/rhumb-bearing/-/rhumb-bearing-6.5.0.tgz", "integrity": "sha512-jMyqiMRK4hzREjQmnLXmkJ+VTNTx1ii8vuqRwJPcTlKbNWfjDz/5JqJlb5NaFDcdMpftWovkW5GevfnuzHnOYA==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/rhumb-destination": { + "@turf/rhumb-destination": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/rhumb-destination/-/rhumb-destination-6.5.0.tgz", "integrity": "sha512-RHNP1Oy+7xTTdRrTt375jOZeHceFbjwohPHlr9Hf68VdHHPMAWgAKqiX2YgSWDcvECVmiGaBKWus1Df+N7eE4Q==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/rhumb-distance": { + "@turf/rhumb-distance": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/rhumb-distance/-/rhumb-distance-6.5.0.tgz", "integrity": "sha512-oKp8KFE8E4huC2Z1a1KNcFwjVOqa99isxNOwfo4g3SUABQ6NezjKDDrnvC4yI5YZ3/huDjULLBvhed45xdCrzg==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/sample": { + "@turf/sample": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/sample/-/sample-6.5.0.tgz", "integrity": "sha512-kSdCwY7el15xQjnXYW520heKUrHwRvnzx8ka4eYxX9NFeOxaFITLW2G7UtXb6LJK8mmPXI8Aexv23F2ERqzGFg==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/sector": { + "@turf/sector": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/sector/-/sector-6.5.0.tgz", "integrity": "sha512-cYUOkgCTWqa23SOJBqxoFAc/yGCUsPRdn/ovbRTn1zNTm/Spmk6hVB84LCKOgHqvSF25i0d2kWqpZDzLDdAPbw==", - "dependencies": { + "requires": { "@turf/circle": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/line-arc": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/shortest-path": { + "@turf/shortest-path": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/shortest-path/-/shortest-path-6.5.0.tgz", "integrity": "sha512-4de5+G7+P4hgSoPwn+SO9QSi9HY5NEV/xRJ+cmoFVRwv2CDsuOPDheHKeuIAhKyeKDvPvPt04XYWbac4insJMg==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/bbox-polygon": "^6.5.0", "@turf/boolean-point-in-polygon": "^6.5.0", @@ -3096,107 +2389,83 @@ "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "@turf/transform-scale": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/simplify": { + "@turf/simplify": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/simplify/-/simplify-6.5.0.tgz", "integrity": "sha512-USas3QqffPHUY184dwQdP8qsvcVH/PWBYdXY5am7YTBACaQOMAlf6AKJs9FT8jiO6fQpxfgxuEtwmox+pBtlOg==", - "dependencies": { + "requires": { "@turf/clean-coords": "^6.5.0", "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/square": { + "@turf/square": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/square/-/square-6.5.0.tgz", "integrity": "sha512-BM2UyWDmiuHCadVhHXKIx5CQQbNCpOxB6S/aCNOCLbhCeypKX5Q0Aosc5YcmCJgkwO5BERCC6Ee7NMbNB2vHmQ==", - "dependencies": { + "requires": { "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/square-grid": { + "@turf/square-grid": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/square-grid/-/square-grid-6.5.0.tgz", "integrity": "sha512-mlR0ayUdA+L4c9h7p4k3pX6gPWHNGuZkt2c5II1TJRmhLkW2557d6b/Vjfd1z9OVaajb1HinIs1FMSAPXuuUrA==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/rectangle-grid": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/standard-deviational-ellipse": { + "@turf/standard-deviational-ellipse": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/standard-deviational-ellipse/-/standard-deviational-ellipse-6.5.0.tgz", "integrity": "sha512-02CAlz8POvGPFK2BKK8uHGUk/LXb0MK459JVjKxLC2yJYieOBTqEbjP0qaWhiBhGzIxSMaqe8WxZ0KvqdnstHA==", - "dependencies": { + "requires": { "@turf/center-mean": "^6.5.0", "@turf/ellipse": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "@turf/points-within-polygon": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/tag": { + "@turf/tag": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/tag/-/tag-6.5.0.tgz", "integrity": "sha512-XwlBvrOV38CQsrNfrxvBaAPBQgXMljeU0DV8ExOyGM7/hvuGHJw3y8kKnQ4lmEQcmcrycjDQhP7JqoRv8vFssg==", - "dependencies": { + "requires": { "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/tesselate": { + "@turf/tesselate": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/tesselate/-/tesselate-6.5.0.tgz", "integrity": "sha512-M1HXuyZFCfEIIKkglh/r5L9H3c5QTEsnMBoZOFQiRnGPGmJWcaBissGb7mTFX2+DKE7FNWXh4TDnZlaLABB0dQ==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "earcut": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/tin": { + "@turf/tin": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/tin/-/tin-6.5.0.tgz", "integrity": "sha512-YLYikRzKisfwj7+F+Tmyy/LE3d2H7D4kajajIfc9mlik2+esG7IolsX/+oUz1biguDYsG0DUA8kVYXDkobukfg==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/transform-rotate": { + "@turf/transform-rotate": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/transform-rotate/-/transform-rotate-6.5.0.tgz", "integrity": "sha512-A2Ip1v4246ZmpssxpcL0hhiVBEf4L8lGnSPWTgSv5bWBEoya2fa/0SnFX9xJgP40rMP+ZzRaCN37vLHbv1Guag==", - "dependencies": { + "requires": { "@turf/centroid": "^6.5.0", "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", @@ -3205,16 +2474,13 @@ "@turf/rhumb-bearing": "^6.5.0", "@turf/rhumb-destination": "^6.5.0", "@turf/rhumb-distance": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/transform-scale": { + "@turf/transform-scale": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/transform-scale/-/transform-scale-6.5.0.tgz", "integrity": "sha512-VsATGXC9rYM8qTjbQJ/P7BswKWXHdnSJ35JlV4OsZyHBMxJQHftvmZJsFbOqVtQnIQIzf2OAly6rfzVV9QLr7g==", - "dependencies": { + "requires": { "@turf/bbox": "^6.5.0", "@turf/center": "^6.5.0", "@turf/centroid": "^6.5.0", @@ -3225,56 +2491,44 @@ "@turf/rhumb-bearing": "^6.5.0", "@turf/rhumb-destination": "^6.5.0", "@turf/rhumb-distance": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/transform-translate": { + "@turf/transform-translate": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/transform-translate/-/transform-translate-6.5.0.tgz", "integrity": "sha512-NABLw5VdtJt/9vSstChp93pc6oel4qXEos56RBMsPlYB8hzNTEKYtC146XJvyF4twJeeYS8RVe1u7KhoFwEM5w==", - "dependencies": { + "requires": { "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "@turf/rhumb-destination": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/triangle-grid": { + "@turf/triangle-grid": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/triangle-grid/-/triangle-grid-6.5.0.tgz", "integrity": "sha512-2jToUSAS1R1htq4TyLQYPTIsoy6wg3e3BQXjm2rANzw4wPQCXGOxrur1Fy9RtzwqwljlC7DF4tg0OnWr8RjmfA==", - "dependencies": { + "requires": { "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/intersect": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/truncate": { + "@turf/truncate": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/truncate/-/truncate-6.5.0.tgz", "integrity": "sha512-pFxg71pLk+eJj134Z9yUoRhIi8vqnnKvCYwdT4x/DQl/19RVdq1tV3yqOT3gcTQNfniteylL5qV1uTBDV5sgrg==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/turf": { + "@turf/turf": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/turf/-/turf-6.5.0.tgz", "integrity": "sha512-ipMCPnhu59bh92MNt8+pr1VZQhHVuTMHklciQURo54heoxRzt1neNYZOBR6jdL+hNsbDGAECMuIpAutX+a3Y+w==", - "dependencies": { + "requires": { "@turf/along": "^6.5.0", "@turf/angle": "^6.5.0", "@turf/area": "^6.5.0", @@ -3380,410 +2634,374 @@ "@turf/union": "^6.5.0", "@turf/unkink-polygon": "^6.5.0", "@turf/voronoi": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/union": { + "@turf/union": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.5.0.tgz", "integrity": "sha512-igYWCwP/f0RFHIlC2c0SKDuM/ObBaqSljI3IdV/x71805QbIvY/BYGcJdyNcgEA6cylIGl/0VSlIbpJHZ9ldhw==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "polygon-clipping": "^0.15.3" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/unkink-polygon": { + "@turf/unkink-polygon": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/unkink-polygon/-/unkink-polygon-6.5.0.tgz", "integrity": "sha512-8QswkzC0UqKmN1DT6HpA9upfa1HdAA5n6bbuzHy8NJOX8oVizVAqfEPY0wqqTgboDjmBR4yyImsdPGUl3gZ8JQ==", - "dependencies": { + "requires": { "@turf/area": "^6.5.0", "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0", "rbush": "^2.0.1" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/voronoi": { + "@turf/voronoi": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/voronoi/-/voronoi-6.5.0.tgz", "integrity": "sha512-C/xUsywYX+7h1UyNqnydHXiun4UPjK88VDghtoRypR9cLlb7qozkiLRphQxxsCM0KxyxpVPHBVQXdAL3+Yurow==", - "dependencies": { + "requires": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "d3-voronoi": "1.1.2" - }, - "funding": { - "url": "https://opencollective.com/turf" } }, - "node_modules/@types/formatcoords": { + "@types/formatcoords": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@types/formatcoords/-/formatcoords-1.1.0.tgz", "integrity": "sha512-T20OHYACraNS/xCoBEmvtUYLc/eYjXaGGDpPFVAyuwarE9KHSGX8DVb3KNBKZ5RQz7fB7qXazZj13520eDSODw==", "dev": true }, - "node_modules/@types/geojson": { + "@types/geojson": { "version": "7946.0.10", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==", "dev": true }, - "node_modules/@types/leaflet": { + "@types/leaflet": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.0.tgz", "integrity": "sha512-7LeOSj7EloC5UcyOMo+1kc3S1UT3MjJxwqsMT1d2PTyvQz53w0Y0oSSk9nwZnOZubCmBvpSNGceucxiq+ZPEUw==", "dev": true, - "dependencies": { + "requires": { "@types/geojson": "*" } }, - "node_modules/@types/node": { + "@types/node": { "version": "18.16.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.1.tgz", "integrity": "sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA==", "dev": true }, - "node_modules/@types/sortablejs": { + "@types/sortablejs": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.0.tgz", "integrity": "sha512-qrhtM7M41EhH4tZQTNw2/RJkxllBx3reiJpTbgWCM2Dx0U1sZ6LwKp9lfNln9uqE26ZMKUaPEYaD4rzvOWYtZw==", "dev": true }, - "node_modules/@types/svg-injector": { + "@types/svg-injector": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/svg-injector/-/svg-injector-0.0.29.tgz", "integrity": "sha512-tNvoN0Xk2si6IfxQI/PqInipOuCyXkDZhCh9Vc4aFv/l1DhIBfTFbXRXYUHBAGXaUNMOCHEtg9475O9J+4NXOg==", "dev": true }, - "node_modules/abbrev": { + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "node_modules/accepts": { + "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { + "requires": { "mime-types": "~2.1.34", "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" } }, - "node_modules/acorn": { + "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } + "dev": true }, - "node_modules/acorn-node": { + "acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, - "dependencies": { + "requires": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", "xtend": "^4.0.2" } }, - "node_modules/acorn-walk": { + "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } + "dev": true }, - "node_modules/ansi-regex": { + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true + }, + "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/ansi-sequence-parser": { + "ansi-sequence-parser": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", "dev": true }, - "node_modules/ansi-styles": { + "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { + "requires": { "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { + "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, - "node_modules/anymatch": { + "anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "dependencies": { + "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" } }, - "node_modules/array-flatten": { + "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, - "node_modules/asap": { + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==", + "dev": true + }, + "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, - "node_modules/asn1.js": { + "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, - "dependencies": { + "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/assert": { + "assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, - "dependencies": { + "requires": { "object-assign": "^4.1.1", "util": "0.10.3" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dev": true, + }, "dependencies": { - "inherits": "2.0.1" + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } } }, - "node_modules/async": { + "async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, - "node_modules/available-typed-arrays": { + "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/babel-code-frame": { + "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", "dev": true, - "dependencies": { + "requires": { "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" - } - }, - "node_modules/babel-code-frame/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", - "dev": true - }, - "node_modules/babel-code-frame/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } } }, - "node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/babel-messages": { + "babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.22.0" } }, - "node_modules/babel-plugin-import-to-require": { + "babel-plugin-import-to-require": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-import-to-require/-/babel-plugin-import-to-require-1.0.0.tgz", "integrity": "sha512-dc843CwrFivjO8AVgxcHvxl0cb7J7Ed8ZGFP8+PjH3X1CnyzYtAU1WL1349m9Wc/+oqk4ETx2+cIEO2jlp3XyQ==", "dev": true, - "dependencies": { + "requires": { "babel-template": "^6.26.0" } }, - "node_modules/babel-plugin-polyfill-corejs2": { + "babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dev": true, - "dependencies": { + "requires": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-plugin-polyfill-corejs3": { + "babel-plugin-polyfill-corejs3": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-define-polyfill-provider": "^0.3.3", "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-plugin-polyfill-regenerator": { + "babel-plugin-polyfill-regenerator": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-runtime": { + "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", "dev": true, - "dependencies": { + "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } } }, - "node_modules/babel-runtime/node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "node_modules/babel-template": { + "babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", @@ -3791,12 +3009,12 @@ "lodash": "^4.17.4" } }, - "node_modules/babel-traverse": { + "babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", "dev": true, - "dependencies": { + "requires": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", @@ -3806,124 +3024,93 @@ "globals": "^9.18.0", "invariant": "^2.2.2", "lodash": "^4.17.4" + }, + "dependencies": { + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + } } }, - "node_modules/babel-traverse/node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-types": { + "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", "dev": true, - "dependencies": { + "requires": { "babel-runtime": "^6.26.0", "esutils": "^2.0.2", "lodash": "^4.17.4", "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", + "dev": true + } } }, - "node_modules/babel-types/node_modules/to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babelify": { + "babelify": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } + "dev": true }, - "node_modules/babylon": { + "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true, - "bin": { - "babylon": "bin/babylon.js" - } + "dev": true }, - "node_modules/balanced-match": { + "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base64-js": { + "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, - "node_modules/basic-auth": { + "basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dependencies": { + "requires": { "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" } }, - "node_modules/binary-extensions": { + "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/binary-split": { + "binary-split": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/binary-split/-/binary-split-1.0.5.tgz", "integrity": "sha512-AQ5fcBrUU5hoIafkEvNKqxT+2xbqlSqAXef6IdCQr5wpHu9E7NGM6rTAlYJYbtxvAvjfx8nJkBy6rNlbPPI+Pw==", "dev": true, - "dependencies": { + "requires": { "through2": "^2.0.3" } }, - "node_modules/bn.js": { + "bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "dev": true }, - "node_modules/body-parser": { + "body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { + "requires": { "bytes": "3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", @@ -3937,145 +3124,180 @@ "type-is": "~1.6.18", "unpipe": "1.0.0" }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } } }, - "node_modules/body-parser/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/body-parser/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/body-parser/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/body-parser/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/brace-expansion": { + "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { + "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/braces": { + "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "dependencies": { + "requires": { "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" } }, - "node_modules/brorand": { + "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, - "node_modules/browser-pack": { + "browser-pack": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, - "dependencies": { + "requires": { + "JSONStream": "^1.0.3", "combine-source-map": "~0.8.0", "defined": "^1.0.0", - "JSONStream": "^1.0.3", "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" - }, - "bin": { - "browser-pack": "bin/cmd.js" } }, - "node_modules/browser-resolve": { + "browser-pack-flat": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/browser-pack-flat/-/browser-pack-flat-3.5.0.tgz", + "integrity": "sha512-u3iJUjs+TC/NGIL2GLyIcn5ppoNZXhTWqSW/gQbGIGvQiXXCQQzr5VWfACFraXQn2JrDlyRnKLeOs5AWXzKI6A==", + "dev": true, + "requires": { + "JSONStream": "^1.3.2", + "combine-source-map": "^0.8.0", + "convert-source-map": "^1.5.1", + "count-lines": "^0.1.2", + "dedent": "^0.7.0", + "estree-is-member-expression": "^1.0.0", + "estree-is-require": "^1.0.0", + "esutils": "^2.0.2", + "path-parse": "^1.0.5", + "scope-analyzer": "^2.0.0", + "stream-combiner": "^0.2.2", + "through2": "^3.0.1", + "transform-ast": "^2.4.2", + "umd": "^3.0.3", + "wrap-comment": "^1.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + } + } + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browser-resolve": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, - "dependencies": { + "requires": { "resolve": "^1.17.0" } }, - "node_modules/browserify": { + "browser-unpack": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.4.2.tgz", + "integrity": "sha512-uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA==", + "dev": true, + "requires": { + "acorn-node": "^1.5.2", + "concat-stream": "^1.5.0", + "minimist": "^1.1.1" + } + }, + "browserify": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, - "dependencies": { + "requires": { + "JSONStream": "^1.0.3", "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^2.0.0", @@ -4097,7 +3319,6 @@ "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.2.1", - "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp-classic": "^0.5.2", "module-deps": "^6.2.3", @@ -4124,20 +3345,14 @@ "util": "~0.12.0", "vm-browserify": "^1.0.0", "xtend": "^4.0.0" - }, - "bin": { - "browserify": "bin/cmd.js" - }, - "engines": { - "node": ">= 0.8" } }, - "node_modules/browserify-aes": { + "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "dependencies": { + "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", @@ -4146,45 +3361,45 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/browserify-cipher": { + "browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, - "dependencies": { + "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, - "node_modules/browserify-des": { + "browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, - "dependencies": { + "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "node_modules/browserify-rsa": { + "browserify-rsa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, - "dependencies": { + "requires": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, - "node_modules/browserify-sign": { + "browserify-sign": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, - "dependencies": { + "requires": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", @@ -4194,316 +3409,273 @@ "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" }, - "engines": { - "node": ">= 6" + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/browserify-zlib": { + "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, - "dependencies": { + "requires": { "pako": "~1.0.5" } }, - "node_modules/browserslist": { + "browserslist": { "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { + "requires": { "caniuse-lite": "^1.0.30001449", "electron-to-chromium": "^1.4.284", "node-releases": "^2.0.8", "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { + "buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, - "dependencies": { + "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, - "node_modules/buffer-crc32": { + "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "engines": { - "node": "*" - } + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" }, - "node_modules/buffer-from": { + "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/buffer-xor": { + "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true }, - "node_modules/builtin-status-codes": { + "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" + "bundle-collapser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.4.0.tgz", + "integrity": "sha512-Gd3K3+3KI1Utuk+gwAvuOVOjT/2XLGL8tU6FwDKk04LlOZkYfT0pwQllsG1Dv8RRhgcjNxZSDmmSXb0AOkwSwg==", + "dev": true, + "requires": { + "browser-pack": "^6.0.2", + "browser-unpack": "^1.1.0", + "concat-stream": "^1.5.0", + "falafel": "^2.1.0", + "minimist": "^1.1.1", + "through2": "^2.0.0" } }, - "node_modules/cached-path-relative": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "cached-path-relative": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", "dev": true }, - "node_modules/call-bind": { + "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { + "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/caniuse-lite": { + "caniuse-lite": { "version": "1.0.30001481", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] + "dev": true }, - "node_modules/chalk": { + "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { + "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chokidar": { + "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { + "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", + "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" } }, - "node_modules/cipher-base": { + "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, - "dependencies": { + "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, - "node_modules/cliui": { + "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "dependencies": { + "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" } }, - "node_modules/color-convert": { + "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { + "requires": { "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" } }, - "node_modules/color-name": { + "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/combine-source-map": { + "combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==", "dev": true, - "dependencies": { + "requires": { "convert-source-map": "~1.1.0", "inline-source-map": "~0.6.0", "lodash.memoize": "~3.0.3", "source-map": "~0.5.3" } }, - "node_modules/commander": { + "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/concat-map": { + "common-shakeify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/common-shakeify/-/common-shakeify-1.1.2.tgz", + "integrity": "sha512-r2zRKPCbCx1l9BT8nVGZssZXrH9jeLl5qfHKxUwSBT7Kr9l1jSjZsItZE/jXo+GYDyO3kQfsyV7Poid475MgWQ==", + "dev": true, + "requires": { + "@goto-bus-stop/common-shake": "^2.3.0", + "convert-source-map": "^1.5.1", + "through2": "^2.0.3", + "transform-ast": "^2.4.3", + "wrap-comment": "^1.0.1" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + } + } + }, + "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "node_modules/concat-stream": { + "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { + "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, - "node_modules/concaveman": { + "concaveman": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/concaveman/-/concaveman-1.2.1.tgz", "integrity": "sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw==", - "dependencies": { + "requires": { "point-in-polygon": "^1.1.0", "rbush": "^3.0.1", "robust-predicates": "^2.0.4", "tinyqueue": "^2.0.3" - } - }, - "node_modules/concaveman/node_modules/quickselect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" - }, - "node_modules/concaveman/node_modules/rbush": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", - "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + }, "dependencies": { - "quickselect": "^2.0.0" + "quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "requires": { + "quickselect": "^2.0.0" + } + } } }, - "node_modules/concurrently": { + "concurrently": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", "dev": true, - "dependencies": { + "requires": { "chalk": "^4.1.0", "date-fns": "^2.29.1", "lodash": "^4.17.21", @@ -4514,146 +3686,122 @@ "tree-kill": "^1.2.2", "yargs": "^17.3.1" }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "node_modules/console-browserify": { + "console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, - "node_modules/constants-browserify": { + "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", "dev": true }, - "node_modules/content-disposition": { + "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" }, - "node_modules/content-type": { + "content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, - "node_modules/convert-source-map": { + "convert-source-map": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==", "dev": true }, - "node_modules/cookie": { + "cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, - "node_modules/cookie-parser": { + "cookie-parser": { "version": "1.4.6", "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", - "dependencies": { + "requires": { "cookie": "0.4.1", "cookie-signature": "1.0.6" - }, - "engines": { - "node": ">= 0.8.0" } }, - "node_modules/cookie-signature": { + "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "node_modules/core-js": { + "core-js": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true, - "hasInstallScript": true + "dev": true }, - "node_modules/core-js-compat": { + "core-js-compat": { "version": "3.30.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", "dev": true, - "dependencies": { + "requires": { "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" } }, - "node_modules/core-util-is": { + "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "node_modules/cp": { + "count-lines": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/count-lines/-/count-lines-0.1.2.tgz", + "integrity": "sha512-YS8P4UYXX/hrDyLU3r/A5OcCNwdNbJFJckbe8j+x2Jhxsr2J4/rYl0sDwOljLZL7Uxc4s7mRSNcQD8dSjobz+g==", + "dev": true + }, + "cp": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/cp/-/cp-0.2.0.tgz", "integrity": "sha512-4ftCvShHjIZG/zzomHyunNpBof3sOFTTmU6s6q9DdqAL/ANqrKV3pr6Z6kVfBI4hjn59DFLImrBqn7GuuMqSZA==", "dev": true }, - "node_modules/create-ecdh": { + "create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, - "dependencies": { + "requires": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { + "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, - "dependencies": { + "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", @@ -4661,12 +3809,12 @@ "sha.js": "^2.4.0" } }, - "node_modules/create-hmac": { + "create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "dependencies": { + "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", @@ -4675,12 +3823,12 @@ "sha.js": "^2.4.8" } }, - "node_modules/crypto-browserify": { + "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, - "dependencies": { + "requires": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", @@ -4692,242 +3840,241 @@ "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" } }, - "node_modules/d3-array": { + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "d3-array": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" }, - "node_modules/d3-geo": { + "d3-geo": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.7.1.tgz", "integrity": "sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw==", - "dependencies": { + "requires": { "d3-array": "1" } }, - "node_modules/d3-voronoi": { + "d3-voronoi": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", "integrity": "sha512-RhGS1u2vavcO7ay7ZNAPo4xeDh/VYeGof3x5ZLJBQgYhLegxr3s5IykvWmJ94FTU6mcbtp4sloqZ54mP6R4Utw==" }, - "node_modules/dash-ast": { + "dash-ast": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", "dev": true }, - "node_modules/date-fns": { + "date-fns": { "version": "2.29.3", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", - "dev": true, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } + "dev": true }, - "node_modules/dbly-linked-list": { + "dbly-linked-list": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/dbly-linked-list/-/dbly-linked-list-0.3.4.tgz", "integrity": "sha512-327vOlwspi9i1T3Kc9yZhRUR8qDdgMQ4HmXsFDDCQ/HTc3sNe7gnF5b0UrsnaOJ0rvmG7yBZpK0NoOux9rKYKw==", "dev": true, - "dependencies": { + "requires": { "lodash.isequal": "^4.5.0" } }, - "node_modules/debug": { + "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { + "requires": { "ms": "2.0.0" } }, - "node_modules/deep-equal": { + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dependencies": { + "requires": { "is-arguments": "^1.0.4", "is-date-object": "^1.0.1", "is-regex": "^1.0.4", "object-is": "^1.0.1", "object-keys": "^1.1.1", "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-properties": { + "define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dependencies": { + "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/defined": { + "defined": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/density-clustering": { + "density-clustering": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/density-clustering/-/density-clustering-1.3.0.tgz", "integrity": "sha512-icpmBubVTwLnsaor9qH/4tG5+7+f61VcqMN3V3pm9sxxSCt2Jcs0zWOgwZW9ARJYaKD3FumIgHiMOcIMRRAzFQ==" }, - "node_modules/depd": { + "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" }, - "node_modules/deps-sort": { + "deps-sort": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, - "dependencies": { + "requires": { "JSONStream": "^1.0.3", "shasum-object": "^1.0.0", "subarg": "^1.0.0", "through2": "^2.0.0" - }, - "bin": { - "deps-sort": "bin/cmd.js" } }, - "node_modules/des.js": { + "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, - "dependencies": { + "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, - "node_modules/destroy": { + "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" }, - "node_modules/detective": { + "detective": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", "dev": true, - "dependencies": { + "requires": { "acorn-node": "^1.8.2", "defined": "^1.0.0", "minimist": "^1.2.6" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" } }, - "node_modules/diffie-hellman": { + "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, - "dependencies": { + "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/domain-browser": { + "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } + "dev": true }, - "node_modules/duplexer": { + "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, - "node_modules/duplexer2": { + "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, - "dependencies": { + "requires": { "readable-stream": "^2.0.2" } }, - "node_modules/earcut": { + "duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dev": true, + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "earcut": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" }, - "node_modules/ee-first": { + "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, - "node_modules/ejs": { + "ejs": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", - "dependencies": { + "requires": { "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/electron-to-chromium": { + "electron-to-chromium": { "version": "1.4.371", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.371.tgz", "integrity": "sha512-jlBzY4tFcJaiUjzhRTCWAqRvTO/fWzjA3Bls0mykzGZ7zvcMP7h05W6UcgzfT9Ca1SW2xyKDOFRyI0pQeRNZGw==", "dev": true }, - "node_modules/elliptic": { + "elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, - "dependencies": { + "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", @@ -4935,72 +4082,193 @@ "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + } } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/elliptic/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/emoji-regex": { + "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/encodeurl": { + "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" } }, - "node_modules/error-ex": { + "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "dependencies": { + "requires": { "is-arrayish": "^0.2.1" } }, - "node_modules/escalade": { + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/escape-html": { + "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, - "node_modules/escape-string-regexp": { + "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "engines": { - "node": ">=0.8.0" + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } } }, - "node_modules/esmify": { + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esmify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/esmify/-/esmify-2.1.1.tgz", "integrity": "sha512-GyOVgjG7sNyYB5Mbo15Ll4aGrcXZzZ3LI22rbLOjCI7L/wYelzQpBHRZkZkqbPNZ/QIRilcaHqzgNCLcEsi1lQ==", "dev": true, - "dependencies": { + "requires": { "@babel/core": "^7.2.2", "@babel/plugin-syntax-async-generators": "^7.2.0", "@babel/plugin-syntax-dynamic-import": "^7.2.0", @@ -5013,28 +4281,88 @@ "through2": "^2.0.5" } }, - "node_modules/esutils": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", + "dev": true + }, + "estree-is-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-identifier/-/estree-is-identifier-1.0.0.tgz", + "integrity": "sha512-2BDRGrkQJV/NhCAmmE33A35WAaxq3WQaGHgQuD//7orGWfpFqj8Srkwvx0TH+20yIdOF1yMQwi8anv5ISec2AQ==", + "dev": true + }, + "estree-is-member-expression": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz", + "integrity": "sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg==", + "dev": true + }, + "estree-is-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-require/-/estree-is-require-1.0.0.tgz", + "integrity": "sha512-oWxQdSEmnUwNZsDQYiBNpVxKEhMmsJQSSxnDrwsr1MWtooCLfhgzsNGzmokdmfK0EzEIS5V4LPvqxv1Kmb1vvA==", + "dev": true, + "requires": { + "estree-is-identifier": "^1.0.0" + } + }, + "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/etag": { + "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" } }, - "node_modules/event-stream": { + "event-stream": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", - "dependencies": { + "requires": { "duplexer": "^0.1.1", "from": "^0.1.7", "map-stream": "0.0.7", @@ -5044,35 +4372,32 @@ "through": "^2.3.8" } }, - "node_modules/events": { + "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } + "dev": true }, - "node_modules/events-intercept": { + "events-intercept": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/events-intercept/-/events-intercept-2.0.0.tgz", "integrity": "sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==" }, - "node_modules/evp_bytestokey": { + "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, - "dependencies": { + "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, - "node_modules/express": { + "express": { "version": "4.16.4", "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "dependencies": { + "requires": { "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", @@ -5104,142 +4429,157 @@ "utils-merge": "1.0.1", "vary": "~1.1.2" }, - "engines": { - "node": ">= 0.10.0" + "dependencies": { + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==" + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + } } }, - "node_modules/express-basic-auth": { + "express-basic-auth": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.2.1.tgz", "integrity": "sha512-L6YQ1wQ/mNjVLAmK3AG1RK6VkokA1BIY6wmiH304Xtt/cLTps40EusZsU1Uop+v9lTDPxdtzbFmdXfFO3KEnwA==", - "dependencies": { + "requires": { "basic-auth": "^2.0.1" } }, - "node_modules/express/node_modules/body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", - "dependencies": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "requires": { + "type": "^2.7.2" }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + } } }, - "node_modules/express/node_modules/raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dependencies": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/extend": { + "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "node_modules/fast-safe-stringify": { + "falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, - "node_modules/fd-slicer": { + "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dependencies": { + "requires": { "pend": "~1.2.0" } }, - "node_modules/filelist": { + "filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dependencies": { + "requires": { "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", - "dependencies": { - "brace-expansion": "^2.0.1" }, - "engines": { - "node": ">=10" + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, - "node_modules/fill-range": { + "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "dependencies": { + "requires": { "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" } }, - "node_modules/finalhandler": { + "finalhandler": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "dependencies": { + "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -5247,990 +4587,852 @@ "parseurl": "~1.3.2", "statuses": "~1.4.0", "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" } }, - "node_modules/for-each": { + "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "dependencies": { + "requires": { "is-callable": "^1.1.3" } }, - "node_modules/formatcoords": { + "formatcoords": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/formatcoords/-/formatcoords-1.1.3.tgz", "integrity": "sha512-Ittg5/AsYFCOtcFGPLSmVpP56a8Ionmv4Ys69UmCAdvBnqVzvVVbkZMnjWEmXrZvnmoGQE8YI3RhnxbMQFdYSw==", "dev": true }, - "node_modules/forwarded": { + "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, - "node_modules/fresh": { + "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, - "node_modules/from": { + "from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" }, - "node_modules/fs.realpath": { + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "from2-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/from2-string/-/from2-string-1.1.0.tgz", + "integrity": "sha512-m8vCh+KnXXXBtfF2VUbiYlQ+nczLcntB0BrtNgpmLkHylhObe9WF1b2LZjBBzrZzA6P4mkEla6ZYQoOUTG8cYA==", + "dev": true, + "requires": { + "from2": "^2.0.3" + } + }, + "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "node_modules/fsevents": { + "fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } + "optional": true }, - "node_modules/function-bind": { + "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/functions-have-names": { + "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" }, - "node_modules/gensync": { + "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "dev": true }, - "node_modules/geodesy": { + "geodesy": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/geodesy/-/geodesy-1.1.3.tgz", "integrity": "sha512-H/0XSd1KjKZGZ2YGZcOYzRyY/foYAawwTEumNSo+YUwf+u5d4CfvBRg2i2Qimrx9yUEjWR8hLvMnhghuVFN0Zg==", "dev": true }, - "node_modules/geojson-equality": { + "geojson-equality": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/geojson-equality/-/geojson-equality-0.1.6.tgz", "integrity": "sha512-TqG8YbqizP3EfwP5Uw4aLu6pKkg6JQK9uq/XZ1lXQntvTHD1BBKJWhNpJ2M0ax6TuWMP3oyx6Oq7FCIfznrgpQ==", - "dependencies": { + "requires": { "deep-equal": "^1.0.0" } }, - "node_modules/geojson-rbush": { + "geojson-rbush": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.2.0.tgz", "integrity": "sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==", - "dependencies": { + "requires": { "@turf/bbox": "*", "@turf/helpers": "6.x", "@turf/meta": "6.x", "@types/geojson": "7946.0.8", "rbush": "^3.0.1" - } - }, - "node_modules/geojson-rbush/node_modules/@types/geojson": { - "version": "7946.0.8", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", - "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" - }, - "node_modules/geojson-rbush/node_modules/quickselect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" - }, - "node_modules/geojson-rbush/node_modules/rbush": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", - "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + }, "dependencies": { - "quickselect": "^2.0.0" + "@types/geojson": { + "version": "7946.0.8", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", + "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" + }, + "quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "requires": { + "quickselect": "^2.0.0" + } + } } }, - "node_modules/get-assigned-identifiers": { + "get-assigned-identifiers": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", "dev": true }, - "node_modules/get-caller-file": { + "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } + "dev": true }, - "node_modules/get-intrinsic": { + "get-intrinsic": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dependencies": { + "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { + "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "dependencies": { + "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { + "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "dependencies": { + "requires": { "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" } }, - "node_modules/globals": { + "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/gopd": { + "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "dependencies": { + "requires": { "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has": { + "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { + "requires": { "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" } }, - "node_modules/has-ansi": { + "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, - "dependencies": { + "requires": { "ansi-regex": "^2.0.0" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + } } }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-flag": { + "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "node_modules/has-property-descriptors": { + "has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { + "requires": { "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { + "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, - "node_modules/has-tostringtag": { + "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { + "requires": { "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hash-base": { + "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, - "dependencies": { + "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/hash.js": { + "hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, - "dependencies": { + "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, - "node_modules/hmac-drbg": { + "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, - "dependencies": { + "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/htmlescape": { + "htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==", - "dev": true, - "engines": { - "node": ">=0.10" - } + "dev": true }, - "node_modules/http-errors": { + "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dependencies": { + "requires": { "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" } }, - "node_modules/https-browserify": { + "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true }, - "node_modules/iconv-lite": { + "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { + "requires": { "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/ieee754": { + "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, - "node_modules/ignore-by-default": { + "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, - "node_modules/inflight": { + "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "dependencies": { + "requires": { "once": "^1.3.0", "wrappy": "1" } }, - "node_modules/inherits": { + "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, - "node_modules/inline-source-map": { + "inline-source-map": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==", "dev": true, - "dependencies": { + "requires": { "source-map": "~0.5.3" } }, - "node_modules/insert-module-globals": { + "insert-module-globals": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, - "dependencies": { + "requires": { + "JSONStream": "^1.0.3", "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", - "JSONStream": "^1.0.3", "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", "undeclared-identifiers": "^1.1.2", "xtend": "^4.0.0" - }, - "bin": { - "insert-module-globals": "bin/cmd.js" } }, - "node_modules/invariant": { + "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, - "dependencies": { + "requires": { "loose-envify": "^1.0.0" } }, - "node_modules/ipaddr.js": { + "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "node_modules/is-arguments": { + "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { + "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { + "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "node_modules/is-binary-path": { + "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "dependencies": { + "requires": { "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/is-buffer": { + "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "node_modules/is-callable": { + "is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/is-core-module": { + "is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, - "dependencies": { + "requires": { "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { + "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { + "requires": { "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-extglob": { + "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/is-fullwidth-code-point": { + "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/is-generator-function": { + "is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, - "dependencies": { + "requires": { "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-glob": { + "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "dependencies": { + "requires": { "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/is-number": { + "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } + "dev": true }, - "node_modules/is-regex": { + "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { + "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typed-array": { + "is-typed-array": { "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "dev": true, - "dependencies": { + "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-utf8": { + "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true }, - "node_modules/isarray": { + "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, - "node_modules/jake": { + "jake": { "version": "10.8.5", "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "dependencies": { + "requires": { "async": "^3.2.3", "chalk": "^4.0.2", "filelist": "^1.0.1", "minimatch": "^3.0.4" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" } }, - "node_modules/js-tokens": { + "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "node_modules/jsesc": { + "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/json5": { + "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/jsonc-parser": { + "jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, - "node_modules/jsonparse": { + "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] + "dev": true }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/labeled-stream-splicer": { + "labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, - "dependencies": { + "requires": { "inherits": "^2.0.1", "stream-splicer": "^2.0.0" } }, - "node_modules/leaflet": { + "leaflet": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.3.tgz", "integrity": "sha512-iB2cR9vAkDOu5l3HAay2obcUHZ7xwUBBjph8+PGtmW/2lYhbLizWtG7nTeYht36WfOslixQF9D/uSIzhZgGMfQ==", "dev": true }, - "node_modules/leaflet-control-mini-map": { + "leaflet-control-mini-map": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/leaflet-control-mini-map/-/leaflet-control-mini-map-0.4.0.tgz", "integrity": "sha512-qnetYIYFqlrAbX7MaGsAkBsuA2fg3Z4xDRlEXJN1wSrnhNsIhQUzXt7Z3vapdEzx4r7VUqWTaqHYd7eY5C6Gfw==", - "dev": true, - "peerDependencies": { - "leaflet": ">=1.7.0" - } + "dev": true }, - "node_modules/leaflet-gesture-handling": { + "leaflet-gesture-handling": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/leaflet-gesture-handling/-/leaflet-gesture-handling-1.2.2.tgz", "integrity": "sha512-Blf5V4PoNphWkzL7Y1qge+Spkd4OCQ2atjwUNhMhLIcjKzPcBH++x/lwOinaR9jSqLWqJ6oKYO8d0XdTffy4hQ==" }, - "node_modules/leaflet-path-drag": { + "leaflet-path-drag": { "version": "1.8.0-beta.3", "resolved": "https://registry.npmjs.org/leaflet-path-drag/-/leaflet-path-drag-1.8.0-beta.3.tgz", "integrity": "sha512-kpZ6sPOKlR+m+VChIzZZ7XFH4C+VGTrAxgnM4UN5iYl7lJ00iDOxS+r717bDf/xFFHB6n2jpUp9vvzjjteMpeQ==", "dev": true }, - "node_modules/leaflet.nauticscale": { + "leaflet.nauticscale": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/leaflet.nauticscale/-/leaflet.nauticscale-1.1.0.tgz", "integrity": "sha512-kJqOVuY0bk3CjSWb1CUYsjXiM+W1K0TrlJmMjl/wVubKK2y0PZ+XxkIyD6cxVsKQGlJvLGMvrSqaYdj5LW1O1Q==", "dev": true }, - "node_modules/lodash": { + "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.assign": { + "lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" }, - "node_modules/lodash.debounce": { + "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "node_modules/lodash.isequal": { + "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", "dev": true }, - "node_modules/lodash.memoize": { + "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==", "dev": true }, - "node_modules/loose-envify": { + "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, - "dependencies": { + "requires": { "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" } }, - "node_modules/lru-cache": { + "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "dependencies": { + "requires": { "yallist": "^3.0.2" } }, - "node_modules/lunr": { + "lunr": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", "dev": true }, - "node_modules/map-stream": { + "magic-string": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", + "integrity": "sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.1" + } + }, + "map-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==" }, - "node_modules/marked": { + "marked": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } + "dev": true }, - "node_modules/md5.js": { + "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, - "dependencies": { + "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "node_modules/media-typer": { + "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, - "node_modules/merge-descriptors": { + "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" + "merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" } }, - "node_modules/miller-rabin": { + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, - "dependencies": { + "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" }, - "bin": { - "miller-rabin": "bin/miller-rabin" + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/mime": { + "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "bin": { - "mime": "cli.js" - } + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, - "node_modules/mime-db": { + "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, - "node_modules/mime-types": { + "mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { + "requires": { "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" } }, - "node_modules/mingo": { + "mingo": { "version": "6.2.7", "resolved": "https://registry.npmjs.org/mingo/-/mingo-6.2.7.tgz", "integrity": "sha512-r+yKmrZ+6SjwGxSot+/3S8sP9+LCxWNueR6xppMx7BzV60OegjbeklWAf/UveyQi8PDW8g/mwrQSHZVY/5jBJQ==" }, - "node_modules/minimalistic-assert": { + "minify-stream": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minify-stream/-/minify-stream-2.1.0.tgz", + "integrity": "sha512-P5xE4EQRkn7Td54VGcgfDMFx1jmKPPIXCdcMfrbXS6cNHK4dO1LXwtYFb48hHrSmZfT+jlGImvHgSZEkbpNtCw==", + "dev": true, + "requires": { + "concat-stream": "^2.0.0", + "convert-source-map": "^1.5.0", + "duplexify": "^4.1.1", + "from2-string": "^1.1.0", + "terser": "^4.7.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + } + } + }, + "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "node_modules/minimalistic-crypto-utils": { + "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true }, - "node_modules/minimatch": { + "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { + "requires": { "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" } }, - "node_modules/minimist": { + "minimist": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/mkdirp-classic": { + "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, - "node_modules/module-deps": { + "module-deps": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, - "dependencies": { + "requires": { + "JSONStream": "^1.0.3", "browser-resolve": "^2.0.0", "cached-path-relative": "^1.0.2", "concat-stream": "~1.6.0", @@ -6238,7 +5440,6 @@ "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", - "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", @@ -6246,73 +5447,145 @@ "subarg": "^1.0.0", "through2": "^2.0.0", "xtend": "^4.0.0" - }, - "bin": { - "module-deps": "bin/cmd.js" - }, - "engines": { - "node": ">= 0.8.0" } }, - "node_modules/morgan": { + "morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", - "dependencies": { + "requires": { "basic-auth": "~2.0.0", "debug": "2.6.9", "depd": "~1.1.2", "on-finished": "~2.3.0", "on-headers": "~1.0.1" - }, - "engines": { - "node": ">= 0.8.0" } }, - "node_modules/ms": { + "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "multi-stage-sourcemap": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz", + "integrity": "sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ==", + "dev": true, + "requires": { + "source-map": "^0.1.34" + }, "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } } } }, - "node_modules/node-releases": { + "multisplice": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/multisplice/-/multisplice-1.0.0.tgz", + "integrity": "sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA==", + "dev": true + }, + "mutexify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.4.0.tgz", + "integrity": "sha512-pbYSsOrSB/AKN5h/WzzLRMFgZhClWccf2XIB4RSMC8JbquiB0e0/SH5AIfdQMdyHmYtv4seU7yV/TvAwPLJ1Yg==", + "dev": true, + "requires": { + "queue-tick": "^1.0.0" + } + }, + "nanobench": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nanobench/-/nanobench-2.1.1.tgz", + "integrity": "sha512-z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A==", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2", + "chalk": "^1.1.3", + "mutexify": "^1.1.0", + "pretty-hrtime": "^1.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", "dev": true }, - "node_modules/nodemon": { + "nodemon": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", "dev": true, - "dependencies": { + "requires": { "chokidar": "^3.5.2", "debug": "^3.2.7", "ignore-by-default": "^1.0.1", @@ -6324,189 +5597,142 @@ "touch": "^3.1.0", "undefsafe": "^2.0.5" }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, "dependencies": { - "ms": "^2.1.1" + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/nodemon/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nopt": { + "nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "dev": true, - "dependencies": { + "requires": { "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" } }, - "node_modules/normalize-path": { + "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/object-assign": { + "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, - "node_modules/object-inspect": { + "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, - "node_modules/object-is": { + "object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { + "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "node_modules/on-finished": { + "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dependencies": { + "requires": { "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" } }, - "node_modules/on-headers": { + "on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, - "node_modules/once": { + "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "dependencies": { + "requires": { "wrappy": "1" } }, - "node_modules/os-browserify": { + "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, - "node_modules/outpipe": { + "outpipe": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", "integrity": "sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==", "dev": true, - "dependencies": { + "requires": { "shell-quote": "^1.4.2" } }, - "node_modules/pako": { + "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "node_modules/parents": { + "parents": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==", "dev": true, - "dependencies": { + "requires": { "path-platform": "~0.11.15" } }, - "node_modules/parse-asn1": { + "parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, - "dependencies": { + "requires": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", "evp_bytestokey": "^1.0.0", @@ -6514,360 +5740,320 @@ "safe-buffer": "^5.1.1" } }, - "node_modules/parse-json": { + "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, - "dependencies": { + "requires": { "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/parseurl": { + "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "node_modules/path-browserify": { + "path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, - "node_modules/path-is-absolute": { + "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/path-parse": { + "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "node_modules/path-platform": { + "path-platform": { "version": "0.11.15", "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } + "dev": true }, - "node_modules/path-to-regexp": { + "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, - "node_modules/pause-stream": { + "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "dependencies": { + "requires": { "through": "~2.3" } }, - "node_modules/pbkdf2": { + "pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, - "dependencies": { + "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", "ripemd160": "^2.0.1", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" } }, - "node_modules/pend": { + "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, - "node_modules/picocolors": { + "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "node_modules/picomatch": { + "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } + "dev": true }, - "node_modules/plantuml-encoder": { + "plantuml-encoder": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz", "integrity": "sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==", "dev": true }, - "node_modules/plantuml-pipe": { + "plantuml-pipe": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/plantuml-pipe/-/plantuml-pipe-1.6.0.tgz", "integrity": "sha512-TsEBors7XBhcejh0uVEFPxGWC+94jvGcPhNEs3cwhwgFSFNQaOuoA83X5sH2t5JBUnrGgL/hMHE/kcdKZBa5vw==", "dev": true, - "hasInstallScript": true, - "dependencies": { + "requires": { "binary-split": "^1.0.5", "split2": "^4.2.0" } }, - "node_modules/point-in-polygon": { + "point-in-polygon": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==" }, - "node_modules/polygon-clipping": { + "polygon-clipping": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz", "integrity": "sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==", - "dependencies": { + "requires": { "splaytree": "^3.1.0" } }, - "node_modules/process": { + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true + }, + "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } + "dev": true }, - "node_modules/process-nextick-args": { + "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/progress": { + "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } + "dev": true }, - "node_modules/promise": { + "promise": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { + "requires": { "asap": "~2.0.6" } }, - "node_modules/proxy-addr": { + "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { + "requires": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" } }, - "node_modules/pstree.remy": { + "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true }, - "node_modules/public-encrypt": { + "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, - "dependencies": { + "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/punycode": { + "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true }, - "node_modules/qs": { + "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "engines": { - "node": ">=0.6" - } + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, - "node_modules/querystring": { + "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } + "dev": true }, - "node_modules/querystring-es3": { + "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } + "dev": true }, - "node_modules/queue-fifo": { + "queue-fifo": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/queue-fifo/-/queue-fifo-0.2.6.tgz", "integrity": "sha512-rwlnZHAaTmWEGKC7ziasK8u4QnZW/uN6kSiG+tHNf/1GA+R32FArZi18s3SYUpKcA0Y6jJoUDn5GT3Anoc2mWw==", "dev": true, - "dependencies": { + "requires": { "dbly-linked-list": "0.3.4" } }, - "node_modules/quickselect": { + "queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, + "quickselect": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==" }, - "node_modules/randombytes": { + "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "dependencies": { + "requires": { "safe-buffer": "^5.1.0" } }, - "node_modules/randomfill": { + "randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, - "dependencies": { + "requires": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, - "node_modules/range-parser": { + "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, - "node_modules/raw-body": { + "raw-body": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { + "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } } }, - "node_modules/raw-body/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/raw-body/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/raw-body/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rbush": { + "rbush": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", - "dependencies": { + "requires": { "quickselect": "^1.0.1" } }, - "node_modules/read-only-stream": { + "read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==", "dev": true, - "dependencies": { + "requires": { "readable-stream": "^2.0.2" } }, - "node_modules/readable-stream": { + "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "dependencies": { + "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", @@ -6875,214 +6061,201 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, + }, "dependencies": { - "safe-buffer": "~5.1.0" + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, - "node_modules/readdirp": { + "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "dependencies": { + "requires": { "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" } }, - "node_modules/regenerate": { + "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, - "node_modules/regenerate-unicode-properties": { + "regenerate-unicode-properties": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, - "dependencies": { + "requires": { "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" } }, - "node_modules/regenerator-runtime": { + "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, - "node_modules/regenerator-transform": { + "regenerator-transform": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dev": true, - "dependencies": { + "requires": { "@babel/runtime": "^7.8.4" } }, - "node_modules/regexp.prototype.flags": { + "regexp.prototype.flags": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpu-core": { + "regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, - "dependencies": { + "requires": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" } }, - "node_modules/regjsparser": { + "regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, - "dependencies": { + "requires": { "jsesc": "~0.5.0" }, - "bin": { - "regjsparser": "bin/parser" + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { + "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/requirejs": { + "requirejs": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", - "dev": true, - "bin": { - "r_js": "bin/r.js", - "r.js": "bin/r.js" - }, - "engines": { - "node": ">=0.4.0" - } + "dev": true }, - "node_modules/resolve": { + "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, - "dependencies": { + "requires": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ripemd160": { + "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, - "dependencies": { + "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, - "node_modules/robust-predicates": { + "robust-predicates": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz", "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==" }, - "node_modules/rxjs": { + "rxjs": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dev": true, - "dependencies": { + "requires": { "tslib": "^2.1.0" } }, - "node_modules/safe-buffer": { + "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/safer-buffer": { + "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/save": { + "save": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/save/-/save-2.9.0.tgz", "integrity": "sha512-eg8+g8CjvehE/2C6EbLdtK1pINVD27pcJLj4M9PjWWhoeha/y5bWf4dp/0RF+OzbKTcG1bae9qi3PAqiR8CJTg==", - "dependencies": { + "requires": { "async": "^3.2.2", "event-stream": "^4.0.1", "lodash.assign": "^4.2.0", "mingo": "^6.1.0" } }, - "node_modules/semver": { + "scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "dev": true, + "requires": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + }, + "dependencies": { + "dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + } + } + }, + "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "dev": true }, - "node_modules/send": { + "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dependencies": { + "requires": { "debug": "2.6.9", "depd": "~1.1.2", "destroy": "~1.0.4", @@ -7096,815 +6269,802 @@ "on-finished": "~2.3.0", "range-parser": "~1.2.0", "statuses": "~1.4.0" - }, - "engines": { - "node": ">= 0.8.0" } }, - "node_modules/serve-static": { + "serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dependencies": { + "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.2", "send": "0.16.2" - }, - "engines": { - "node": ">= 0.8.0" } }, - "node_modules/setprototypeof": { + "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, - "node_modules/sha.js": { + "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, - "dependencies": { + "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" } }, - "node_modules/shasum-object": { + "shasum-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, - "dependencies": { + "requires": { "fast-safe-stringify": "^2.0.7" } }, - "node_modules/shell-quote": { + "shell-quote": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/shiki": { + "shiki": { "version": "0.14.4", "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", "dev": true, - "dependencies": { + "requires": { "ansi-sequence-parser": "^1.1.0", "jsonc-parser": "^3.2.0", "vscode-oniguruma": "^1.7.0", "vscode-textmate": "^8.0.0" } }, - "node_modules/side-channel": { + "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { + "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/simple-concat": { + "simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, - "node_modules/simple-update-notifier": { + "simple-update-notifier": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", "dev": true, - "dependencies": { + "requires": { "semver": "~7.0.0" }, - "engines": { - "node": ">=8.10.0" + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } } }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/skmeans": { + "skmeans": { "version": "0.9.7", "resolved": "https://registry.npmjs.org/skmeans/-/skmeans-0.9.7.tgz", "integrity": "sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg==" }, - "node_modules/sortablejs": { + "sortablejs": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==", "dev": true }, - "node_modules/source-map": { + "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "node_modules/spawn-command": { + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spawn-command": { "version": "0.0.2-1", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", "dev": true }, - "node_modules/splaytree": { + "splaytree": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.2.tgz", "integrity": "sha512-4OM2BJgC5UzrhVnnJA4BkHKGtjXNzzUfpQjCO8I05xYPsfS/VuQDwjCGGMi8rYQilHEV4j8NBqTFbls/PZEE7A==" }, - "node_modules/split": { + "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dependencies": { + "requires": { "through": "2" - }, - "engines": { - "node": "*" } }, - "node_modules/split2": { + "split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true, - "engines": { - "node": ">= 10.x" - } + "dev": true }, - "node_modules/srtm-elevation": { + "srtm-elevation": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/srtm-elevation/-/srtm-elevation-2.1.2.tgz", "integrity": "sha512-VAYD86JwB4l4yXNJmlTVy5ryQBu0bq50rOvPqpNu4pbKwgPrc7QijjYFKKcM+AfnDvbmlaZv+qWWMGYg+mvBVg==", - "dependencies": { + "requires": { "extend": "^3.0.2", "lru-cache": "^6.0.0", "node-fetch": "^2.6.1", "promise": "^8.1.0", "yauzl": "^2.10.0", "yauzl-promise": "^2.1.3" - } - }, - "node_modules/srtm-elevation/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" }, - "engines": { - "node": ">=10" + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, - "node_modules/srtm-elevation/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/statuses": { + "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, - "node_modules/stream-browserify": { + "stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, - "dependencies": { + "requires": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" - } - }, - "node_modules/stream-browserify/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" }, - "engines": { - "node": ">= 6" + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, - "node_modules/stream-combiner": { + "stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", - "dependencies": { + "requires": { "duplexer": "~0.1.1", "through": "~2.3.4" } }, - "node_modules/stream-combiner2": { + "stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, - "dependencies": { + "requires": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" } }, - "node_modules/stream-http": { + "stream-http": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, - "dependencies": { + "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", "readable-stream": "^3.6.0", "xtend": "^4.0.2" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, - "node_modules/stream-http/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/stream-splicer": { + "stream-splicer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, - "dependencies": { + "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.2" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-width": { + "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "dependencies": { + "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" } }, - "node_modules/strip-ansi": { + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "dependencies": { + "requires": { "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" } }, - "node_modules/strip-bom": { + "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, - "dependencies": { + "requires": { "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/strip-json-comments": { + "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/subarg": { + "subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", "dev": true, - "dependencies": { + "requires": { "minimist": "^1.1.0" } }, - "node_modules/supports-color": { + "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { + "requires": { "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/supports-preserve-symlinks-flag": { + "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/syntax-error": { + "syntax-error": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, - "dependencies": { + "requires": { "acorn-node": "^1.2.0" } }, - "node_modules/through": { + "terser": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", + "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", + "dev": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.9" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/through2": { + "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "dependencies": { + "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, - "node_modules/timers-browserify": { + "timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==", "dev": true, - "dependencies": { + "requires": { "process": "~0.11.0" - }, - "engines": { - "node": ">=0.6.0" } }, - "node_modules/tinyqueue": { + "tinyify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tinyify/-/tinyify-4.0.0.tgz", + "integrity": "sha512-jNDxImwUrJJAU2NyGG144J8aWx2ni39UuBo7ppCXFRmhSH0CbpWL4HgjNvrsAW05WQAgNZePwAlEemNuB+byaA==", + "dev": true, + "requires": { + "@browserify/envify": "^6.0.0", + "@browserify/uglifyify": "^6.0.0", + "browser-pack-flat": "^3.0.9", + "bundle-collapser": "^1.3.0", + "common-shakeify": "^1.1.1", + "minify-stream": "^2.0.1", + "multisplice": "^1.0.0", + "terser": "3.16.1", + "through2": "^4.0.2", + "unassertify": "^3.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + } + } + }, + "tinyqueue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, - "node_modules/to-fast-properties": { + "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/to-regex-range": { + "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "dependencies": { + "requires": { "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" } }, - "node_modules/toidentifier": { + "toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, - "node_modules/topojson-client": { + "topojson-client": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", - "dependencies": { + "requires": { "commander": "2" - }, - "bin": { - "topo2geo": "bin/topo2geo", - "topomerge": "bin/topomerge", - "topoquantize": "bin/topoquantize" } }, - "node_modules/topojson-server": { + "topojson-server": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/topojson-server/-/topojson-server-3.0.1.tgz", "integrity": "sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw==", - "dependencies": { + "requires": { "commander": "2" - }, - "bin": { - "geo2topo": "bin/geo2topo" } }, - "node_modules/touch": { + "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "dev": true, - "dependencies": { + "requires": { "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" } }, - "node_modules/tr46": { + "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/tree-kill": { + "transform-ast": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", + "integrity": "sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "convert-source-map": "^1.5.1", + "dash-ast": "^1.0.0", + "is-buffer": "^2.0.0", + "magic-string": "^0.23.2", + "merge-source-map": "1.0.4", + "nanobench": "^2.1.1" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + } + } + }, + "tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } + "dev": true }, - "node_modules/tsconfig": { + "tsconfig": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz", "integrity": "sha512-Cq65A3kVp6BbsUgg9DRHafaGmbMb9EhAc7fjWvudNWKjkbWrt43FnrtZt6awshH1R0ocfF2Z0uxock3lVqEgOg==", "dev": true, - "dependencies": { + "requires": { "any-promise": "^1.3.0", "parse-json": "^2.2.0", "strip-bom": "^2.0.0", "strip-json-comments": "^2.0.0" } }, - "node_modules/tsify": { + "tsify": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/tsify/-/tsify-5.0.4.tgz", "integrity": "sha512-XAZtQ5OMPsJFclkZ9xMZWkSNyMhMxEPsz3D2zu79yoKorH9j/DT4xCloJeXk5+cDhosEibu4bseMVjyPOAyLJA==", "dev": true, - "dependencies": { + "requires": { "convert-source-map": "^1.1.0", "fs.realpath": "^1.0.0", "object-assign": "^4.1.0", "semver": "^6.1.0", "through2": "^2.0.0", "tsconfig": "^5.0.3" - }, - "engines": { - "node": ">=0.12" - }, - "peerDependencies": { - "browserify": ">= 10.x", - "typescript": ">= 2.8" } }, - "node_modules/tslib": { + "tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, - "node_modules/tty-browserify": { + "tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, - "node_modules/turf-jsts": { + "turf-jsts": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/turf-jsts/-/turf-jsts-1.2.3.tgz", "integrity": "sha512-Ja03QIJlPuHt4IQ2FfGex4F4JAr8m3jpaHbFbQrgwr7s7L6U8ocrHiF3J1+wf9jzhGKxvDeaCAnGDot8OjGFyA==" }, - "node_modules/type-is": { + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { + "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" } }, - "node_modules/typedarray": { + "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "node_modules/typedoc": { + "typedoc": { "version": "0.24.8", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", "dev": true, - "dependencies": { + "requires": { "lunr": "^2.3.9", "marked": "^4.3.0", "minimatch": "^9.0.0", "shiki": "^0.14.1" }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 14.14" - }, - "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, - "node_modules/typedoc-umlclass": { + "typedoc-umlclass": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/typedoc-umlclass/-/typedoc-umlclass-0.7.1.tgz", "integrity": "sha512-nHEPjbda1oIZ5lKNMainzi93UB1FyyMNoFWjNlipjK/Adx/RtepJdaGdIrZ8EgtuWGi7pW+xP8jaRmb40vj/9w==", "dev": true, - "dependencies": { + "requires": { "plantuml-encoder": "^1.4.0", "plantuml-pipe": "^1.5.0", "progress": "^2.0.3", "queue-fifo": "^0.2.6" - }, - "peerDependencies": { - "typedoc": "0.23.x || 0.24.x" } }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typescript": { + "typescript": { "version": "4.9.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } + "dev": true }, - "node_modules/umd": { + "umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "dev": true + }, + "unassert": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unassert/-/unassert-2.0.2.tgz", + "integrity": "sha512-P6OOg/aRdQmWH+b0g+T4U+9MgL+DG7w6oQPG+N3F2IMuvvd1WfZ5alT/Rjik2lMFVyhfACUxF7PGP1VCwSHlQA==", "dev": true, - "bin": { - "umd": "bin/cli.js" + "requires": { + "estraverse": "^5.0.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, - "node_modules/undeclared-identifiers": { + "unassertify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/unassertify/-/unassertify-3.0.1.tgz", + "integrity": "sha512-461ykSPY3oWU+39J5haiq7S/hcYy1oGJ2nHU92lqdL3jft+pSU6oAbb7o6VVmM7nZGLqppszgyzfpCnRBFgFtw==", + "dev": true, + "requires": { + "acorn": "^8.0.0", + "convert-source-map": "^1.1.1", + "escodegen": "^2.0.0", + "multi-stage-sourcemap": "^0.3.1", + "through": "^2.3.7", + "unassert": "^2.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true + } + } + }, + "undeclared-identifiers": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, - "dependencies": { + "requires": { "acorn-node": "^1.3.0", "dash-ast": "^1.0.0", "get-assigned-identifiers": "^1.2.0", "simple-concat": "^1.0.0", "xtend": "^4.0.1" - }, - "bin": { - "undeclared-identifiers": "bin.js" } }, - "node_modules/undefsafe": { + "undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, - "node_modules/unicode-canonical-property-names-ecmascript": { + "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/unicode-match-property-ecmascript": { + "unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "dependencies": { + "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" } }, - "node_modules/unicode-match-property-value-ecmascript": { + "unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/unicode-property-aliases-ecmascript": { + "unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/unpipe": { + "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, - "node_modules/update-browserslist-db": { + "update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { + "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" } }, - "node_modules/url": { + "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", "dev": true, - "dependencies": { + "requires": { "punycode": "1.3.2", "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + } } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - }, - "node_modules/usng.js": { + "usng.js": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/usng.js/-/usng.js-0.4.5.tgz", "integrity": "sha512-JTJcFFDy/JqA5iiU8DqMOV5gJiL3ZdXH0hCKYaRMDbbredhFna5Ok4C1YDFU07mTGAgm+5FzHaaOzQnO/3BzWQ==", - "dev": true, - "bin": { - "usng-cli": "bin/cli.js" - } + "dev": true }, - "node_modules/util": { + "util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, - "dependencies": { + "requires": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", @@ -7912,52 +7072,46 @@ "which-typed-array": "^1.1.2" } }, - "node_modules/util-deprecate": { + "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/utils-merge": { + "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, - "node_modules/vary": { + "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, - "node_modules/vm-browserify": { + "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, - "node_modules/vscode-oniguruma": { + "vscode-oniguruma": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", "dev": true }, - "node_modules/vscode-textmate": { + "vscode-textmate": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", "dev": true }, - "node_modules/watchify": { + "watchify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz", "integrity": "sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==", "dev": true, - "dependencies": { + "requires": { "anymatch": "^3.1.0", "browserify": "^17.0.0", "chokidar": "^3.4.0", @@ -7966,123 +7120,104 @@ "through2": "^4.0.2", "xtend": "^4.0.2" }, - "bin": { - "watchify": "bin/cmd.js" - }, - "engines": { - "node": ">= 8.10.0" - } - }, - "node_modules/watchify/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + } } }, - "node_modules/watchify/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/webidl-conversions": { + "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "node_modules/whatwg-url": { + "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { + "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "node_modules/which-typed-array": { + "which-typed-array": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "dev": true, - "dependencies": { + "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0", "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wrap-ansi": { + "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "dependencies": { + "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrappy": { + "wrap-comment": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wrap-comment/-/wrap-comment-1.0.1.tgz", + "integrity": "sha512-APccrMwl/ont0RHFTXNAQfM647duYYEfs6cngrIyTByTI0xbWnDnPSptFZhS68L4WCjt2ZxuhCFwuY6Pe88KZQ==", + "dev": true + }, + "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "node_modules/xtend": { + "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } + "dev": true }, - "node_modules/y18n": { + "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } + "dev": true }, - "node_modules/yallist": { + "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "node_modules/yargs": { + "yargs": { "version": "17.6.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, - "dependencies": { + "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -8090,50 +7225,38 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" } }, - "node_modules/yargs-parser": { + "yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } + "dev": true }, - "node_modules/yauzl": { + "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dependencies": { + "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, - "node_modules/yauzl-clone": { + "yauzl-clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/yauzl-clone/-/yauzl-clone-1.0.4.tgz", "integrity": "sha512-igM2RRCf3k8TvZoxR2oguuw4z1xasOnA31joCqHIyLkeWrvAc2Jgay5ISQ2ZplinkoGaJ6orCz56Ey456c5ESA==", - "dependencies": { + "requires": { "events-intercept": "^2.0.0" - }, - "engines": { - "node": ">=6" } }, - "node_modules/yauzl-promise": { + "yauzl-promise": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/yauzl-promise/-/yauzl-promise-2.1.3.tgz", "integrity": "sha512-A1pf6fzh6eYkK0L4Qp7g9jzJSDrM6nN0bOn5T0IbY4Yo3w+YkWlHFkJP7mzknMXjqusHFHlKsK2N+4OLsK2MRA==", - "dependencies": { + "requires": { "yauzl": "^2.9.1", "yauzl-clone": "^1.0.4" - }, - "engines": { - "node": ">=6" } } } diff --git a/client/package.json b/client/package.json index 1238d38a..d5bf4526 100644 --- a/client/package.json +++ b/client/package.json @@ -5,7 +5,8 @@ "version": "v0.4.7-alpha", "private": true, "scripts": { - "build": "browserify .\\src\\index.ts --debug -o .\\public\\javascripts\\bundle.js -t [ babelify --global true --presets [ @babel/preset-env ] --extensions '.js'] -p [ tsify --noImplicitAny ] && copy.bat", + "build": "browserify .\\src\\index.ts --debug -o .\\public\\javascripts\\bundle.js -t [ babelify --global true --presets [ @babel/preset-env ] --extensions '.js'] -p [ tsify --noImplicitAny ] && copy.bat", + "build-release": "browserify .\\src\\index.ts -o .\\public\\javascripts\\bundle.js -t [ babelify --global true --presets [ @babel/preset-env ] --extensions '.js'] -p [ tsify --noImplicitAny ] -p [ tinyify ] && copy.bat", "emit-declarations": "tsc --project tsconfig.json --declaration --emitDeclarationOnly --outfile ./@types/olympus/index.d.ts", "copy": "copy.bat", "start": "node ./bin/www", @@ -48,6 +49,7 @@ "nodemon": "^2.0.20", "requirejs": "^2.3.6", "sortablejs": "^1.15.0", + "tinyify": "^4.0.0", "tsify": "^5.0.4", "tslib": "latest", "typedoc": "^0.24.8", diff --git a/client/plugins/controltips/index.js b/client/plugins/controltips/index.js index a3092be0..09835271 100644 --- a/client/plugins/controltips/index.js +++ b/client/plugins/controltips/index.js @@ -1,384 +1 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i { - __classPrivateFieldGet(this, _ControlTipsPlugin_instances, "m", _ControlTipsPlugin_updateTips).call(this); - }); - __classPrivateFieldGet(this, _ControlTipsPlugin_shortcutManager, "f").onKeyUp(() => { - __classPrivateFieldGet(this, _ControlTipsPlugin_instances, "m", _ControlTipsPlugin_updateTips).call(this); - }); - document.addEventListener("airbaseMouseover", (ev) => { - __classPrivateFieldSet(this, _ControlTipsPlugin_cursorIsHoveringOverAirbase, true, "f"); - __classPrivateFieldGet(this, _ControlTipsPlugin_instances, "m", _ControlTipsPlugin_updateTips).call(this); - }); - document.addEventListener("airbaseMouseout", (ev) => { - __classPrivateFieldSet(this, _ControlTipsPlugin_cursorIsHoveringOverAirbase, false, "f"); - __classPrivateFieldGet(this, _ControlTipsPlugin_instances, "m", _ControlTipsPlugin_updateTips).call(this); - }); - document.addEventListener("unitDeselection", (ev) => { - __classPrivateFieldGet(this, _ControlTipsPlugin_instances, "m", _ControlTipsPlugin_updateTips).call(this); - }); - document.addEventListener("unitMouseover", (ev) => { - __classPrivateFieldSet(this, _ControlTipsPlugin_cursorIsHoveringOverUnit, true, "f"); - __classPrivateFieldGet(this, _ControlTipsPlugin_instances, "m", _ControlTipsPlugin_updateTips).call(this); - }); - document.addEventListener("unitMouseout", (ev) => { - __classPrivateFieldSet(this, _ControlTipsPlugin_cursorIsHoveringOverUnit, false, "f"); - __classPrivateFieldGet(this, _ControlTipsPlugin_instances, "m", _ControlTipsPlugin_updateTips).call(this); - }); - document.addEventListener("unitsSelection", (ev) => { - __classPrivateFieldGet(this, _ControlTipsPlugin_instances, "m", _ControlTipsPlugin_updateTips).call(this); - }); - document.addEventListener("mapVisibilityOptionsChanged", () => { - this.toggle(!__classPrivateFieldGet(this, _ControlTipsPlugin_app, "f").getMap().getVisibilityOptions()[SHOW_CONTROL_TIPS]); - }); - document.addEventListener("mouseover", (ev) => { - if (ev.target instanceof HTMLElement) { - __classPrivateFieldSet(this, _ControlTipsPlugin_mouseoverElement, ev.target, "f"); - } - __classPrivateFieldGet(this, _ControlTipsPlugin_instances, "m", _ControlTipsPlugin_updateTips).call(this); - }); - document.addEventListener("mouseup", (ev) => { - __classPrivateFieldGet(this, _ControlTipsPlugin_instances, "m", _ControlTipsPlugin_updateTips).call(this); - }); - __classPrivateFieldGet(this, _ControlTipsPlugin_instances, "m", _ControlTipsPlugin_updateTips).call(this); - __classPrivateFieldGet(this, _ControlTipsPlugin_app, "f").getMap().addVisibilityOption(SHOW_CONTROL_TIPS, true); - return true; - } - getElement() { - return __classPrivateFieldGet(this, _ControlTipsPlugin_element, "f"); - } - toggle(bool) { - this.getElement().classList.toggle("hide", bool); - } -} -exports.ControlTipsPlugin = ControlTipsPlugin; -_ControlTipsPlugin_element = new WeakMap(), _ControlTipsPlugin_app = new WeakMap(), _ControlTipsPlugin_shortcutManager = new WeakMap(), _ControlTipsPlugin_cursorIsHoveringOverUnit = new WeakMap(), _ControlTipsPlugin_cursorIsHoveringOverAirbase = new WeakMap(), _ControlTipsPlugin_mouseoverElement = new WeakMap(), _ControlTipsPlugin_instances = new WeakSet(), _ControlTipsPlugin_updateTips = function _ControlTipsPlugin_updateTips() { - const combos = [ - { - "keys": [], - "tips": [ - { - "key": `SHIFT`, - "action": `Box select`, - "showIfHoveringOverAirbase": false, - "showIfHoveringOverUnit": false, - "showIfUnitSelected": false - }, - { - "key": `Mouse1`, - "action": `Deselect`, - "showIfUnitSelected": true - }, - { - "key": `Mouse1+drag`, - "action": `Move map`, - "showIfHoveringOverAirbase": false, - "showIfHoveringOverUnit": false, - "showIfUnitSelected": false - }, - { - "key": `Mouse2`, - "action": `Spawn menu`, - "showIfUnitSelected": false, - "showIfHoveringOverAirbase": false, - "showIfHoveringOverUnit": false - }, - { - "key": `Mouse2`, - "action": `Quick options`, - "showIfUnitSelected": false, - "showIfHoveringOverAirbase": false, - "showIfHoveringOverUnit": true - }, - { - "key": `Mouse2`, - "action": `Airbase menu`, - "showIfUnitSelected": false, - "showIfHoveringOverAirbase": true, - "showIfHoveringOverUnit": false - }, - { - "key": `Mouse2`, - "action": `Set first waypoint`, - "showIfHoveringOverAirbase": false, - "showIfUnitSelected": true, - "unitsMustBeControlled": true - }, - { - "key": `Mouse2 (hold)`, - "action": `Interact (ground)`, - "showIfUnitSelected": true, - "showIfHoveringOverAirbase": false, - "showIfHoveringOverUnit": false, - "unitsMustBeControlled": true - }, - { - "key": `Shift`, - "action": " in formation...", - "showIfUnitSelected": true, - "minSelectedUnits": 2 - }, - { - "key": "CTRL", - "action": " ... more", - "showIfUnitSelected": true, - "showIfHoveringOverAirbase": false, - "unitsMustBeControlled": true - }, - { - "key": "CTRL", - "action": " Pin tool", - "showIfUnitSelected": false, - "showIfHoveringOverAirbase": false, - "showIfHoveringOverUnit": false, - "unitsMustBeControlled": true - }, - { - "key": "CTRL+Mouse2", - "action": " Airbase menu", - "showIfUnitSelected": true, - "showIfHoveringOverAirbase": true, - "unitsMustBeControlled": true - }, - { - "key": `Mouse1`, - "action": "Toggle Blue/Red", - "mouseoverSelector": "#coalition-switch .ol-switch-fill" - }, - { - "key": `Mouse2`, - "action": "Set Neutral", - "mouseoverSelector": "#coalition-switch .ol-switch-fill" - }, - { - "key": `Mouse1`, - "action": "Toggle time display", - "mouseoverSelector": "#connection-status-panel[data-is-connected] #connection-status-message abbr" - }, - { - "key": `Mouse1 or Z`, - "action": "Change location system", - "mouseoverSelector": "#coordinates-tool, #coordinates-tool *" - }, - { - "key": `Comma`, - "action": "Decrease precision", - "mouseoverSelector": `#coordinates-tool[data-location-system="MGRS"], #coordinates-tool[data-location-system="MGRS"] *` - }, - { - "key": `Period`, - "action": "Increase precision", - "mouseoverSelector": `#coordinates-tool[data-location-system="MGRS"], #coordinates-tool[data-location-system="MGRS"] *` - } - ] - }, - { - "keys": ["ControlLeft"], - "tips": [ - { - "key": `Mouse1`, - "action": "Toggle pin", - "showIfUnitSelected": false, - "showIfHoveringOverAirbase": false, - "showIfHoveringOverUnit": false - }, - { - "key": `Mouse1`, - "action": "Toggle selection", - "showIfUnitSelected": true, - "showIfHoveringOverAirbase": false, - "showIfHoveringOverUnit": true - }, - { - "key": `Mouse2`, - "action": `Add waypoint`, - "showIfHoveringOverAirbase": false, - "showIfHoveringOverUnit": false, - "showIfUnitSelected": true, - "unitsMustBeControlled": true - }, - { - "key": `Mouse2`, - "action": `Interact (airbase)`, - "showIfHoveringOverAirbase": true, - "showIfUnitSelected": true, - "unitsMustBeControlled": true - }, - { - "key": `Mouse2`, - "action": `Interact (unit)`, - "showIfHoveringOverAirbase": false, - "showIfHoveringOverUnit": true, - "showIfUnitSelected": true, - "unitsMustBeControlled": true - }, - { - "key": `Shift`, - "action": " in formation...", - "showIfUnitSelected": true, - "minSelectedUnits": 2 - }, - { - "key": `[Num 1-9]`, - "action": "Set hotgroup", - "showIfUnitSelected": true - } - ] - }, - { - "keys": ["ShiftLeft"], - "tips": [ - { - "key": `Mouse1+drag`, - "action": "Box select", - "showIfUnitSelected": false - }, - { - "key": `Mouse2`, - "action": "Set first formation waypoint", - "showIfUnitSelected": true, - "minSelectedUnits": 2 - }, - { - "key": `[Num 1-9]`, - "action": "Add to hotgroup", - "showIfUnitSelected": true - }, - { - "key": "CTRL", - "action": " ... more", - "minSelectedUnits": 2, - "showIfUnitSelected": true, - "showIfHoveringOverAirbase": false, - "unitsMustBeControlled": true - } - ] - }, - { - "keys": ["ControlLeft", "ShiftLeft"], - "tips": [ - { - "key": `Mouse2`, - "action": "Add formation waypoint", - "showIfUnitSelected": true, - "minSelectedUnits": 2, - "unitsMustBeControlled": true - }, { - "key": `[Num 1-9]`, - "action": "Add hotgroup to selection", - "callback": (tip) => { - return (Object.values(__classPrivateFieldGet(this, _ControlTipsPlugin_app, "f").getUnitsManager().getUnits()).some((unit) => { - return unit.getHotgroup(); - })); - }, - "showIfUnitSelected": true, - "minSelectedUnits": 1 - } - ] - } - ]; - const currentCombo = combos.find((combo) => __classPrivateFieldGet(this, _ControlTipsPlugin_shortcutManager, "f").keyComboMatches(combo.keys)) || combos[0]; - const element = this.getElement(); - element.innerHTML = ""; - let numSelectedUnits = 0; - let numSelectedControlledUnits = 0; - let unitSelectionContainsControlled = false; - if (__classPrivateFieldGet(this, _ControlTipsPlugin_app, "f").getUnitsManager()) { - let selectedUnits = Object.values(__classPrivateFieldGet(this, _ControlTipsPlugin_app, "f").getUnitsManager().getSelectedUnits()); - numSelectedUnits = selectedUnits.length; - numSelectedControlledUnits = selectedUnits.filter((unit) => unit.getControlled()).length; - unitSelectionContainsControlled = numSelectedControlledUnits > 0; - } - const tipsIncludesActiveMouseover = (currentCombo.tips.some((tip) => { - if (!tip.mouseoverSelector) { - return false; - } - if (__classPrivateFieldGet(this, _ControlTipsPlugin_mouseoverElement, "f") instanceof HTMLElement === false) { - return false; - } - if (!__classPrivateFieldGet(this, _ControlTipsPlugin_mouseoverElement, "f").matches(tip.mouseoverSelector)) { - return false; - } - return true; - })); - currentCombo.tips.filter((tip) => { - if (numSelectedUnits > 0) { - if (tip.showIfUnitSelected === false) { - return false; - } - if (tip.unitsMustBeControlled === true && unitSelectionContainsControlled === false) { - return false; - } - if (typeof tip.minSelectedUnits === "number" && numSelectedControlledUnits < tip.minSelectedUnits) { - return false; - } - } - if (numSelectedUnits === 0 && tip.showIfUnitSelected === true) { - return false; - } - if (typeof tip.showIfHoveringOverAirbase === "boolean") { - if (tip.showIfHoveringOverAirbase !== __classPrivateFieldGet(this, _ControlTipsPlugin_cursorIsHoveringOverAirbase, "f")) { - return false; - } - } - if (typeof tip.showIfHoveringOverUnit === "boolean") { - if (tip.showIfHoveringOverUnit !== __classPrivateFieldGet(this, _ControlTipsPlugin_cursorIsHoveringOverUnit, "f")) { - return false; - } - } - if (tipsIncludesActiveMouseover && (typeof tip.mouseoverSelector !== "string" || !__classPrivateFieldGet(this, _ControlTipsPlugin_mouseoverElement, "f").matches(tip.mouseoverSelector))) { - return false; - } - if (!tipsIncludesActiveMouseover && typeof tip.mouseoverSelector === "string") { - return false; - } - if (typeof tip.callback === "function" && !tip.callback(tip)) { - return false; - } - element.innerHTML += `
${tip.key}${tip.action}
`; - }); -}; - -},{}],2:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const controltipsplugin_1 = require("./controltipsplugin"); -globalThis.getOlympusPlugin = () => { - return new controltipsplugin_1.ControlTipsPlugin(); -}; - -},{"./controltipsplugin":1}]},{},[2]); +!function(){var e,t,o,i,s,n,r,a,l={},c=this&&this.__classPrivateFieldSet||function(e,t,o,i,s){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?s.call(e,o):s?s.value=o:t.set(e,o),o},h=this&&this.__classPrivateFieldGet||function(e,t,o,i){if("a"===o&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===o?i:"a"===o?i.call(e):i?i.value:t.get(e)};Object.defineProperty(l,"__esModule",{value:!0}),l.ControlTipsPlugin=void 0,l.ControlTipsPlugin=class{constructor(){e.add(this),t.set(this,void 0),o.set(this,void 0),i.set(this,void 0),s.set(this,!1),n.set(this,!1),r.set(this,void 0),c(this,t,document.createElement("div"),"f"),h(this,t,"f").id="control-tips-panel",document.body.appendChild(h(this,t,"f"))}getName(){return"Control Tips Plugin"}initialize(t){return c(this,o,t,"f"),c(this,i,h(this,o,"f").getShortcutManager(),"f"),h(this,i,"f").onKeyDown(()=>{h(this,e,"m",a).call(this)}),h(this,i,"f").onKeyUp(()=>{h(this,e,"m",a).call(this)}),document.addEventListener("airbaseMouseover",t=>{c(this,n,!0,"f"),h(this,e,"m",a).call(this)}),document.addEventListener("airbaseMouseout",t=>{c(this,n,!1,"f"),h(this,e,"m",a).call(this)}),document.addEventListener("unitDeselection",t=>{h(this,e,"m",a).call(this)}),document.addEventListener("unitMouseover",t=>{c(this,s,!0,"f"),h(this,e,"m",a).call(this)}),document.addEventListener("unitMouseout",t=>{c(this,s,!1,"f"),h(this,e,"m",a).call(this)}),document.addEventListener("unitsSelection",t=>{h(this,e,"m",a).call(this)}),document.addEventListener("mapVisibilityOptionsChanged",()=>{this.toggle(!h(this,o,"f").getMap().getVisibilityOptions()["Show control tips"])}),document.addEventListener("mouseover",t=>{t.target instanceof HTMLElement&&c(this,r,t.target,"f"),h(this,e,"m",a).call(this)}),document.addEventListener("mouseup",t=>{h(this,e,"m",a).call(this)}),h(this,e,"m",a).call(this),h(this,o,"f").getMap().addVisibilityOption("Show control tips",!0),!0}getElement(){return h(this,t,"f")}toggle(e){this.getElement().classList.toggle("hide",e)}},t=new WeakMap,o=new WeakMap,i=new WeakMap,s=new WeakMap,n=new WeakMap,r=new WeakMap,e=new WeakSet,a=function(){const e=[{keys:[],tips:[{key:"SHIFT",action:"Box select",showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1,showIfUnitSelected:!1},{key:"Mouse1",action:"Deselect",showIfUnitSelected:!0},{key:"Mouse1+drag",action:"Move map",showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1,showIfUnitSelected:!1},{key:"Mouse2",action:"Spawn menu",showIfUnitSelected:!1,showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1},{key:"Mouse2",action:"Quick options",showIfUnitSelected:!1,showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!0},{key:"Mouse2",action:"Airbase menu",showIfUnitSelected:!1,showIfHoveringOverAirbase:!0,showIfHoveringOverUnit:!1},{key:"Mouse2",action:"Set first waypoint",showIfHoveringOverAirbase:!1,showIfUnitSelected:!0,unitsMustBeControlled:!0},{key:"Mouse2 (hold)",action:"Interact (ground)",showIfUnitSelected:!0,showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1,unitsMustBeControlled:!0},{key:"Shift",action:" in formation...",showIfUnitSelected:!0,minSelectedUnits:2},{key:"CTRL",action:" ... more",showIfUnitSelected:!0,showIfHoveringOverAirbase:!1,unitsMustBeControlled:!0},{key:"CTRL",action:" Pin tool",showIfUnitSelected:!1,showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1,unitsMustBeControlled:!0},{key:"CTRL+Mouse2",action:" Airbase menu",showIfUnitSelected:!0,showIfHoveringOverAirbase:!0,unitsMustBeControlled:!0},{key:"Mouse1",action:"Toggle Blue/Red",mouseoverSelector:"#coalition-switch .ol-switch-fill"},{key:"Mouse2",action:"Set Neutral",mouseoverSelector:"#coalition-switch .ol-switch-fill"},{key:"Mouse1",action:"Toggle time display",mouseoverSelector:"#connection-status-panel[data-is-connected] #connection-status-message abbr"},{key:"Mouse1 or Z",action:"Change location system",mouseoverSelector:"#coordinates-tool, #coordinates-tool *"},{key:"Comma",action:"Decrease precision",mouseoverSelector:'#coordinates-tool[data-location-system="MGRS"], #coordinates-tool[data-location-system="MGRS"] *'},{key:"Period",action:"Increase precision",mouseoverSelector:'#coordinates-tool[data-location-system="MGRS"], #coordinates-tool[data-location-system="MGRS"] *'}]},{keys:["ControlLeft"],tips:[{key:"Mouse1",action:"Toggle pin",showIfUnitSelected:!1,showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1},{key:"Mouse1",action:"Toggle selection",showIfUnitSelected:!0,showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!0},{key:"Mouse2",action:"Add waypoint",showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1,showIfUnitSelected:!0,unitsMustBeControlled:!0},{key:"Mouse2",action:"Interact (airbase)",showIfHoveringOverAirbase:!0,showIfUnitSelected:!0,unitsMustBeControlled:!0},{key:"Mouse2",action:"Interact (unit)",showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!0,showIfUnitSelected:!0,unitsMustBeControlled:!0},{key:"Shift",action:" in formation...",showIfUnitSelected:!0,minSelectedUnits:2},{key:"[Num 1-9]",action:"Set hotgroup",showIfUnitSelected:!0}]},{keys:["ShiftLeft"],tips:[{key:"Mouse1+drag",action:"Box select",showIfUnitSelected:!1},{key:"Mouse2",action:"Set first formation waypoint",showIfUnitSelected:!0,minSelectedUnits:2},{key:"[Num 1-9]",action:"Add to hotgroup",showIfUnitSelected:!0},{key:"CTRL",action:" ... more",minSelectedUnits:2,showIfUnitSelected:!0,showIfHoveringOverAirbase:!1,unitsMustBeControlled:!0}]},{keys:["ControlLeft","ShiftLeft"],tips:[{key:"Mouse2",action:"Add formation waypoint",showIfUnitSelected:!0,minSelectedUnits:2,unitsMustBeControlled:!0},{key:"[Num 1-9]",action:"Add hotgroup to selection",callback:e=>Object.values(h(this,o,"f").getUnitsManager().getUnits()).some(e=>e.getAlive()&&e.getControlled()&&e.getHotgroup()),showIfUnitSelected:!0,minSelectedUnits:1}]}],t=e.find(e=>h(this,i,"f").keyComboMatches(e.keys))||e[0],a=this.getElement();a.innerHTML="";let l=0,c=0,d=!1;if(h(this,o,"f").getUnitsManager()){let e=Object.values(h(this,o,"f").getUnitsManager().getSelectedUnits());l=e.length,c=e.filter(e=>e.getControlled()).length,d=c>0}const f=t.tips.some(e=>!!e.mouseoverSelector&&h(this,r,"f")instanceof HTMLElement!=0&&!!h(this,r,"f").matches(e.mouseoverSelector));t.tips.filter(e=>{if(l>0){if(!1===e.showIfUnitSelected)return!1;if(!0===e.unitsMustBeControlled&&!1===d)return!1;if("number"==typeof e.minSelectedUnits&&c${e.key}${e.action}
`)})};Object.defineProperty({},"__esModule",{value:!0}),globalThis.getOlympusPlugin=()=>new l.ControlTipsPlugin}(); \ No newline at end of file diff --git a/client/plugins/controltips/package-lock.json b/client/plugins/controltips/package-lock.json index 86c830ed..65771e21 100644 --- a/client/plugins/controltips/package-lock.json +++ b/client/plugins/controltips/package-lock.json @@ -4,72 +4,3951 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz", + "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/compat-data": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", + "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", + "dev": true + }, + "@babel/core": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", + "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.3", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.4.tgz", + "integrity": "sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==", + "dev": true, + "requires": { + "@babel/types": "^7.23.4", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "dependencies": { + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", + "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "requires": { + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + } + }, + "@babel/helpers": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.4.tgz", + "integrity": "sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.4", + "@babel/types": "^7.23.4" + } + }, + "@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz", + "integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + } + }, + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", + "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", + "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz", + "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", + "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz", + "integrity": "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.3", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.3", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.3", + "@babel/plugin-transform-classes": "^7.23.3", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.3", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.3", + "@babel/plugin-transform-for-of": "^7.23.3", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.3", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.3", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.3", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.3", + "@babel/plugin-transform-numeric-separator": "^7.23.3", + "@babel/plugin-transform-object-rest-spread": "^7.23.3", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.3", + "@babel/plugin-transform-optional-chaining": "^7.23.3", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.3", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.4.tgz", + "integrity": "sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + }, + "@babel/traverse": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.4.tgz", + "integrity": "sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.23.4", + "@babel/generator": "^7.23.4", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.4", + "@babel/types": "^7.23.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz", + "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "@browserify/envify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@browserify/envify/-/envify-6.0.0.tgz", + "integrity": "sha512-ovxHR0KTsRCyMNwD7MGV0+VCU1sT6Ds+itC4DaQHM41eUId+w5Jd0qlhLVoDkkIVBnkY3BAAM8yb2QfpBlHkPw==", + "requires": { + "acorn-node": "^2.0.1", + "dash-ast": "^2.0.1", + "multisplice": "^1.0.0", + "through2": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "requires": { + "readable-stream": "3" + } + } + } + }, + "@browserify/uglifyify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@browserify/uglifyify/-/uglifyify-6.0.0.tgz", + "integrity": "sha512-48M2a3novsgKhUSo/B3ja10awc7unliK1HfW6aYBJdLFQj3wXDx9BBJVfj6MVYERSQVEVjNHQQ7IK89h4MpCLw==", + "requires": { + "convert-source-map": "^1.9.0", + "minimatch": "^3.0.2", + "terser": "^5.15.1", + "through2": "^4.0.2", + "xtend": "^4.0.1" + }, + "dependencies": { + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==" + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "terser": { + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "requires": { + "readable-stream": "3" + } + } + } + }, + "@goto-bus-stop/common-shake": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@goto-bus-stop/common-shake/-/common-shake-2.4.0.tgz", + "integrity": "sha512-LO+7v+UbxE3IyAS4Suf/KYB7Zq9DEIHibwDe6Wph4apNEfDyyxP7BSxzRS/Qa9lUH5gsm9eL9nF8EE1E0/nQkQ==", + "requires": { + "acorn-walk": "^7.0.0", + "debug": "^3.2.6", + "escope": "^3.6.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@types/node": { + "version": "18.18.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.11.tgz", + "integrity": "sha512-c1vku6qnTeujJneYH94/4aq73XrVcsJe35UPyAsSok1ijiKrkRzK+AxQPSpNMUnC03roWBBwJx/9I8V7lQoxmA==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/sortablejs": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.6.tgz", + "integrity": "sha512-/G23qmK63iBjke89C1KvyFGMC7sooH4OKPuhOhLZUttZJ49dw7y7oimqICFe2PHCdQ4Cfb9tsF/Xy8kYr1/nIg==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-node": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-2.0.1.tgz", + "integrity": "sha512-VLR5sHqjk+8c5hrKeP2fWaIHb8eewsoxnZ8r2qpwRHXMHuC7KyOPflnOx9dLssVQUurzJ7rO0OzIFjHcndafWw==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" + }, "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==" + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "dev": true, + "requires": { + "object.assign": "^4.1.4", + "util": "^0.10.4" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + } + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + } + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-import-to-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-import-to-require/-/babel-plugin-import-to-require-1.0.0.tgz", + "integrity": "sha512-dc843CwrFivjO8AVgxcHvxl0cb7J7Ed8ZGFP8+PjH3X1CnyzYtAU1WL1349m9Wc/+oqk4ETx2+cIEO2jlp3XyQ==", + "dev": true, + "requires": { + "babel-template": "^6.26.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", + "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.3", + "semver": "^6.3.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", + "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.3", + "core-js-compat": "^3.33.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", + "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.3" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", + "dev": true + } + } + }, + "babelify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", + "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", + "dev": true + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "binary-split": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/binary-split/-/binary-split-1.0.5.tgz", + "integrity": "sha512-AQ5fcBrUU5hoIafkEvNKqxT+2xbqlSqAXef6IdCQr5wpHu9E7NGM6rTAlYJYbtxvAvjfx8nJkBy6rNlbPPI+Pw==", + "dev": true, + "requires": { + "through2": "^2.0.3" + } + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "requires": { + "JSONStream": "^1.0.3", + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + } + }, + "browser-pack-flat": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/browser-pack-flat/-/browser-pack-flat-3.5.0.tgz", + "integrity": "sha512-u3iJUjs+TC/NGIL2GLyIcn5ppoNZXhTWqSW/gQbGIGvQiXXCQQzr5VWfACFraXQn2JrDlyRnKLeOs5AWXzKI6A==", + "requires": { + "JSONStream": "^1.3.2", + "combine-source-map": "^0.8.0", + "convert-source-map": "^1.5.1", + "count-lines": "^0.1.2", + "dedent": "^0.7.0", + "estree-is-member-expression": "^1.0.0", + "estree-is-require": "^1.0.0", + "esutils": "^2.0.2", + "path-parse": "^1.0.5", + "scope-analyzer": "^2.0.0", + "stream-combiner": "^0.2.2", + "through2": "^3.0.1", + "transform-ast": "^2.4.2", + "umd": "^3.0.3", + "wrap-comment": "^1.0.0" + }, + "dependencies": { + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + } + } + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==" + }, + "browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dev": true, + "requires": { + "resolve": "^1.17.0" + } + }, + "browser-unpack": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.4.2.tgz", + "integrity": "sha512-uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA==", + "requires": { + "acorn-node": "^1.5.2", + "concat-stream": "^1.5.0", + "minimist": "^1.1.1" + }, + "dependencies": { + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + } + } + }, + "browserify": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", + "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.1", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^3.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.2.1", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "^1.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum-object": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^3.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.12.0", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.4", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + } + }, + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "bundle-collapser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.4.0.tgz", + "integrity": "sha512-Gd3K3+3KI1Utuk+gwAvuOVOjT/2XLGL8tU6FwDKk04LlOZkYfT0pwQllsG1Dv8RRhgcjNxZSDmmSXb0AOkwSwg==", + "requires": { + "browser-pack": "^6.0.2", + "browser-unpack": "^1.1.0", + "concat-stream": "^1.5.0", + "falafel": "^2.1.0", + "minimist": "^1.1.1", + "through2": "^2.0.0" + } + }, + "cached-path-relative": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", + "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", + "dev": true + }, + "call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001563", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", + "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==", + "requires": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + }, + "dependencies": { + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "common-shakeify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/common-shakeify/-/common-shakeify-1.1.2.tgz", + "integrity": "sha512-r2zRKPCbCx1l9BT8nVGZssZXrH9jeLl5qfHKxUwSBT7Kr9l1jSjZsItZE/jXo+GYDyO3kQfsyV7Poid475MgWQ==", + "requires": { + "@goto-bus-stop/common-shake": "^2.3.0", + "convert-source-map": "^1.5.1", + "through2": "^2.0.3", + "transform-ast": "^2.4.3", + "wrap-comment": "^1.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "concurrently": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", + "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "date-fns": "^2.29.1", + "lodash": "^4.17.21", + "rxjs": "^7.0.0", + "shell-quote": "^1.7.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^17.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true }, "convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + }, + "core-js-compat": { + "version": "3.33.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.3.tgz", + "integrity": "sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==", + "dev": true, + "requires": { + "browserslist": "^4.22.1" + } + }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "count-lines": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/count-lines/-/count-lines-0.1.2.tgz", + "integrity": "sha512-YS8P4UYXX/hrDyLU3r/A5OcCNwdNbJFJckbe8j+x2Jhxsr2J4/rYl0sDwOljLZL7Uxc4s7mRSNcQD8dSjobz+g==" + }, + "cp": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/cp/-/cp-0.2.0.tgz", + "integrity": "sha512-4ftCvShHjIZG/zzomHyunNpBof3sOFTTmU6s6q9DdqAL/ANqrKV3pr6Z6kVfBI4hjn59DFLImrBqn7GuuMqSZA==", + "dev": true + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==" + }, + "date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.21.0" + } + }, + "dbly-linked-list": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/dbly-linked-list/-/dbly-linked-list-0.3.4.tgz", + "integrity": "sha512-327vOlwspi9i1T3Kc9yZhRUR8qDdgMQ4HmXsFDDCQ/HTc3sNe7gnF5b0UrsnaOJ0rvmG7yBZpK0NoOux9rKYKw==", + "dev": true, + "requires": { + "lodash.isequal": "^4.5.0" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==" + }, + "deps-sort": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + } + }, + "des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "dependencies": { + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + } + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "electron-to-chromium": { + "version": "1.4.589", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.589.tgz", + "integrity": "sha512-zF6y5v/YfoFIgwf2dDfAqVlPPsyQeWNpEWXbAlDUS8Ax4Z2VoiiZpAPC0Jm9hXEkJm2vIZpwB6rc4KnLTQffbQ==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esmify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/esmify/-/esmify-2.1.1.tgz", + "integrity": "sha512-GyOVgjG7sNyYB5Mbo15Ll4aGrcXZzZ3LI22rbLOjCI7L/wYelzQpBHRZkZkqbPNZ/QIRilcaHqzgNCLcEsi1lQ==", + "dev": true, + "requires": { + "@babel/core": "^7.2.2", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "babel-plugin-import-to-require": "^1.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "^1.6.2", + "duplexer2": "^0.1.4", + "through2": "^2.0.5" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==" + }, + "estree-is-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-identifier/-/estree-is-identifier-1.0.0.tgz", + "integrity": "sha512-2BDRGrkQJV/NhCAmmE33A35WAaxq3WQaGHgQuD//7orGWfpFqj8Srkwvx0TH+20yIdOF1yMQwi8anv5ISec2AQ==" + }, + "estree-is-member-expression": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz", + "integrity": "sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg==" + }, + "estree-is-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-require/-/estree-is-require-1.0.0.tgz", + "integrity": "sha512-oWxQdSEmnUwNZsDQYiBNpVxKEhMmsJQSSxnDrwsr1MWtooCLfhgzsNGzmokdmfK0EzEIS5V4LPvqxv1Kmb1vvA==", + "requires": { + "estree-is-identifier": "^1.0.0" + } + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "requires": { + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + } + } + }, + "falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "requires": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "from2-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/from2-string/-/from2-string-1.1.0.tgz", + "integrity": "sha512-m8vCh+KnXXXBtfF2VUbiYlQ+nczLcntB0BrtNgpmLkHylhObe9WF1b2LZjBBzrZzA6P4mkEla6ZYQoOUTG8cYA==", + "requires": { + "from2": "^2.0.3" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "geodesy": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/geodesy/-/geodesy-1.1.3.tgz", + "integrity": "sha512-H/0XSd1KjKZGZ2YGZcOYzRyY/foYAawwTEumNSo+YUwf+u5d4CfvBRg2i2Qimrx9yUEjWR8hLvMnhghuVFN0Zg==", + "dev": true + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==", + "dev": true + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==", + "requires": { + "source-map": "~0.5.3" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "insert-module-globals": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", + "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + }, + "dependencies": { + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + } + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.11" + } }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" + }, + "labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "magic-string": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", + "integrity": "sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA==", + "requires": { + "sourcemap-codec": "^1.4.1" + } + }, + "marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "minify-stream": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minify-stream/-/minify-stream-2.1.0.tgz", + "integrity": "sha512-P5xE4EQRkn7Td54VGcgfDMFx1jmKPPIXCdcMfrbXS6cNHK4dO1LXwtYFb48hHrSmZfT+jlGImvHgSZEkbpNtCw==", + "requires": { + "concat-stream": "^2.0.0", + "convert-source-map": "^1.5.0", + "duplexify": "^4.1.1", + "from2-string": "^1.1.0", + "terser": "^4.7.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "module-deps": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "multi-stage-sourcemap": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz", + "integrity": "sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ==", + "requires": { + "source-map": "^0.1.34" + }, + "dependencies": { + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "multisplice": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/multisplice/-/multisplice-1.0.0.tgz", + "integrity": "sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA==" + }, + "mutexify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.4.0.tgz", + "integrity": "sha512-pbYSsOrSB/AKN5h/WzzLRMFgZhClWccf2XIB4RSMC8JbquiB0e0/SH5AIfdQMdyHmYtv4seU7yV/TvAwPLJ1Yg==", + "requires": { + "queue-tick": "^1.0.0" + } + }, + "nanobench": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nanobench/-/nanobench-2.1.1.tgz", + "integrity": "sha512-z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A==", + "requires": { + "browser-process-hrtime": "^0.1.2", + "chalk": "^1.1.3", + "mutexify": "^1.1.0", + "pretty-hrtime": "^1.0.2" + } + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "outpipe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", + "integrity": "sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==", + "dev": true, + "requires": { + "shell-quote": "^1.4.2" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==", + "dev": true, + "requires": { + "path-platform": "~0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, "requires": { "error-ex": "^1.2.0" } }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "plantuml-encoder": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz", + "integrity": "sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==", + "dev": true + }, + "plantuml-pipe": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/plantuml-pipe/-/plantuml-pipe-1.6.0.tgz", + "integrity": "sha512-TsEBors7XBhcejh0uVEFPxGWC+94jvGcPhNEs3cwhwgFSFNQaOuoA83X5sH2t5JBUnrGgL/hMHE/kcdKZBa5vw==", + "dev": true, + "requires": { + "binary-split": "^1.0.5", + "split2": "^4.2.0" + } + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true + }, + "queue-fifo": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/queue-fifo/-/queue-fifo-0.2.6.tgz", + "integrity": "sha512-rwlnZHAaTmWEGKC7ziasK8u4QnZW/uN6kSiG+tHNf/1GA+R32FArZi18s3SYUpKcA0Y6jJoUDn5GT3Anoc2mWw==", + "dev": true, + "requires": { + "dbly-linked-list": "0.3.4" + } + }, + "queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, "readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -84,15 +3963,370 @@ "util-deprecate": "~1.0.1" } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "dev": true + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "requires": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + } + }, "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", + "dev": true, + "requires": { + "fast-safe-stringify": "^2.0.7" + } + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "shiki": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.5.tgz", + "integrity": "sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==", + "dev": true, + "requires": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true + }, + "simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "sortablejs": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", + "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "dev": true + }, + "split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true + }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "requires": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "dev": true, + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } }, "string_decoder": { "version": "1.1.1", @@ -102,10 +4336,19 @@ "safe-buffer": "~5.1.0" } }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, "requires": { "is-utf8": "^0.2.0" } @@ -113,7 +4356,72 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", + "dev": true, + "requires": { + "minimist": "^1.1.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dev": true, + "requires": { + "acorn-node": "^1.2.0" + }, + "dependencies": { + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + } + } + }, + "terser": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", + "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.9" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "through2": { "version": "2.0.5", @@ -124,10 +4432,118 @@ "xtend": "~4.0.1" } }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==", + "dev": true, + "requires": { + "process": "~0.11.0" + } + }, + "tinyify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tinyify/-/tinyify-4.0.0.tgz", + "integrity": "sha512-jNDxImwUrJJAU2NyGG144J8aWx2ni39UuBo7ppCXFRmhSH0CbpWL4HgjNvrsAW05WQAgNZePwAlEemNuB+byaA==", + "requires": { + "@browserify/envify": "^6.0.0", + "@browserify/uglifyify": "^6.0.0", + "browser-pack-flat": "^3.0.9", + "bundle-collapser": "^1.3.0", + "common-shakeify": "^1.1.1", + "minify-stream": "^2.0.1", + "multisplice": "^1.0.0", + "terser": "3.16.1", + "through2": "^4.0.2", + "unassertify": "^3.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "requires": { + "readable-stream": "3" + } + } + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "transform-ast": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", + "integrity": "sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ==", + "requires": { + "acorn-node": "^1.3.0", + "convert-source-map": "^1.5.1", + "dash-ast": "^1.0.0", + "is-buffer": "^2.0.0", + "magic-string": "^0.23.2", + "merge-source-map": "1.0.4", + "nanobench": "^2.1.1" + }, + "dependencies": { + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" + } + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, "tsconfig": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz", "integrity": "sha512-Cq65A3kVp6BbsUgg9DRHafaGmbMb9EhAc7fjWvudNWKjkbWrt43FnrtZt6awshH1R0ocfF2Z0uxock3lVqEgOg==", + "dev": true, "requires": { "any-promise": "^1.3.0", "parse-json": "^2.2.0", @@ -139,6 +4555,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/tsify/-/tsify-5.0.4.tgz", "integrity": "sha512-XAZtQ5OMPsJFclkZ9xMZWkSNyMhMxEPsz3D2zu79yoKorH9j/DT4xCloJeXk5+cDhosEibu4bseMVjyPOAyLJA==", + "dev": true, "requires": { "convert-source-map": "^1.1.0", "fs.realpath": "^1.0.0", @@ -148,15 +4565,401 @@ "tsconfig": "^5.0.3" } }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "typedoc": { + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", + "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", + "dev": true, + "requires": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.0", + "shiki": "^0.14.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "typedoc-umlclass": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/typedoc-umlclass/-/typedoc-umlclass-0.7.1.tgz", + "integrity": "sha512-nHEPjbda1oIZ5lKNMainzi93UB1FyyMNoFWjNlipjK/Adx/RtepJdaGdIrZ8EgtuWGi7pW+xP8jaRmb40vj/9w==", + "dev": true, + "requires": { + "plantuml-encoder": "^1.4.0", + "plantuml-pipe": "^1.5.0", + "progress": "^2.0.3", + "queue-fifo": "^0.2.6" + } + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true + }, + "umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==" + }, + "unassert": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unassert/-/unassert-2.0.2.tgz", + "integrity": "sha512-P6OOg/aRdQmWH+b0g+T4U+9MgL+DG7w6oQPG+N3F2IMuvvd1WfZ5alT/Rjik2lMFVyhfACUxF7PGP1VCwSHlQA==", + "requires": { + "estraverse": "^5.0.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } + } + }, + "unassertify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/unassertify/-/unassertify-3.0.1.tgz", + "integrity": "sha512-461ykSPY3oWU+39J5haiq7S/hcYy1oGJ2nHU92lqdL3jft+pSU6oAbb7o6VVmM7nZGLqppszgyzfpCnRBFgFtw==", + "requires": { + "acorn": "^8.0.0", + "convert-source-map": "^1.1.1", + "escodegen": "^2.0.0", + "multi-stage-sourcemap": "^0.3.1", + "through": "^2.3.7", + "unassert": "^2.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==" + } + } + }, + "undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + } + } + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dev": true, + "requires": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, + "usng.js": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/usng.js/-/usng.js-0.4.5.tgz", + "integrity": "sha512-JTJcFFDy/JqA5iiU8DqMOV5gJiL3ZdXH0hCKYaRMDbbredhFna5Ok4C1YDFU07mTGAgm+5FzHaaOzQnO/3BzWQ==", + "dev": true + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, + "watchify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz", + "integrity": "sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==", + "dev": true, + "requires": { + "anymatch": "^3.1.0", + "browserify": "^17.0.0", + "chokidar": "^3.4.0", + "defined": "^1.0.0", + "outpipe": "^1.1.0", + "through2": "^4.0.2", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + } + } + }, + "which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "wrap-comment": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wrap-comment/-/wrap-comment-1.0.1.tgz", + "integrity": "sha512-APccrMwl/ont0RHFTXNAQfM647duYYEfs6cngrIyTByTI0xbWnDnPSptFZhS68L4WCjt2ZxuhCFwuY6Pe88KZQ==" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true } } } diff --git a/client/plugins/controltips/package.json b/client/plugins/controltips/package.json index 3b0097a1..3862e744 100644 --- a/client/plugins/controltips/package.json +++ b/client/plugins/controltips/package.json @@ -3,8 +3,27 @@ "version": "v0.0.1", "private": true, "scripts": { - "build": "browserify ./src/index.ts -p [ tsify --noImplicitAny] > index.js && copy.bat" + "build": "browserify ./src/index.ts -p [ tsify --noImplicitAny] > index.js && copy.bat", + "build-release": "browserify ./src/index.ts -p [ tsify --noImplicitAny] -p [ tinyify ] > index.js && copy.bat" }, "dependencies": {}, - "devDependencies": {} + "devDependencies": { + "@babel/preset-env": "^7.21.4", + "@types/node": "^18.16.1", + "@types/sortablejs": "^1.15.0", + "babelify": "^10.0.0", + "browserify": "^17.0.0", + "concurrently": "^7.6.0", + "cp": "^0.2.0", + "esmify": "^2.1.1", + "nodemon": "^2.0.20", + "requirejs": "^2.3.6", + "sortablejs": "^1.15.0", + "tinyify": "^4.0.0", + "tsify": "^5.0.4", + "tslib": "latest", + "typescript": "^4.9.4", + "usng.js": "^0.4.5", + "watchify": "^4.0.0" + } } diff --git a/client/plugins/databasemanager/package.json b/client/plugins/databasemanager/package.json index ea22fcdd..0ef1e86d 100644 --- a/client/plugins/databasemanager/package.json +++ b/client/plugins/databasemanager/package.json @@ -4,10 +4,29 @@ "private": true, "scripts": { "build": "browserify ./src/index.ts -p [ tsify --noImplicitAny] > index.js && copy.bat", + "build-release": "browserify ./src/index.ts -p [ tsify --noImplicitAny] -p [ tinyify ] > index.js && copy.bat" "start": "npm run copy & concurrently --kill-others \"npm run watch\"", "copy": "copy.bat", "watch": "watchify ./src/index.ts --debug -o ../../public/plugins/databasemanager/index.js -t [ babelify --global true --presets [ @babel/preset-env ] --extensions '.js'] -p [ tsify --noImplicitAny ]" }, "dependencies": {}, - "devDependencies": {} + "devDependencies": { + "@babel/preset-env": "^7.21.4", + "@types/node": "^18.16.1", + "@types/sortablejs": "^1.15.0", + "babelify": "^10.0.0", + "browserify": "^17.0.0", + "concurrently": "^7.6.0", + "cp": "^0.2.0", + "esmify": "^2.1.1", + "nodemon": "^2.0.20", + "requirejs": "^2.3.6", + "sortablejs": "^1.15.0", + "tinyify": "^4.0.0", + "tsify": "^5.0.4", + "tslib": "latest", + "typescript": "^4.9.4", + "usng.js": "^0.4.5", + "watchify": "^4.0.0" + } } diff --git a/img/configurator_logo.png b/img/configurator_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ada786e171c53ab47e8455a2256b93ec0a584ab5 GIT binary patch literal 25566 zcmV(uK zaB^>EX>4U6ba`-PAZ2)IW&i+q+NHf~w&u94ZTVlVI86}WWOGDO8l!qp&96DB9gz>G zeXegg?Tm25xAjRRu&@>gK*#g{{y*>WKmYSTp|skMTw1TA)|3C_kw?7vO+UZ?T>IbQ z%=_Q_KPmqFUHI#tAHV-1@<+)}e*d@EpU?mL^YHru-!B)xD}TCBzkmK>{`D_L{<(ht z+l792Hf%fB*WAe}07Wx4%fgzbF3rn{)s9UHsdhU+Mnt=x?j< z|K4}?cRw>vaplTV*Pn;_^(gyyd~R|nzq%jXT0I;8D_o-Oe+K__top_j)_I?kf9^0s zWV_yw!wOe;!?Sa@V`v{T}zV;z|qrSar44 z*I3sR9!%-UPkHLop8kyIdNH*(9dCZiTi^Efcf8l{UHjSAfBEOX*tPJpYjN+CA8fyO zjX!Pe*Cm2*Qrt5(EFL+q{(`Kjkh zeWl}OYuYo*vnt=&@^h{9)PdpEH2JyM7mv}$%@uF9_3Hfk)>+?oa&zz7$CchE93iaC zZyGDr-u33CK`j>lDXb-5ksIs$@Ystzd23xEaYwU6KA-y&yb2dN{(cn}DC6rQQt!{T zf0x#^=KH)?_5X3NbFu<#LSjMEJu?e^tlHn_URMmP^CzUU>6!zjwM^qr?-} z{@}}Zda!;^79BKyn) zpDVCg6_ktEE8E)V9UJS1i#(Mr=jWal`Gp+;a^CY2NZxVXbG&Wvus0A$u(P9o9}nbdt&+b8}1tTg%98Z&wOD?*NsQ;==Egpt`%Ctws-L{rM4(U(fja5ufM%}H3xf-z zd(msW@DjlIeA30uT;rZ>Av(d&#sIUx|9aTI#*eye+fslK=w14U5B|gF?wdX7aA6`d zcvN*GFb$k}U;(HbexIIr3SZ%6$?)!w(HZyE_%sMqTNqEo(V#edOF*6W?e%;R#5mrg6wEEC8^SHX`2jh7&A9=awf$QAWKf^2!nA2XH+83LZUhXmqERfy= zGMyk{18$cK1E|i_>Rbyf#etDmXMJFCTkmVBpLRx8I1bHRy*yHtUgb>Cv;(oV+vk{ag z+rRq8X6$2ctWfoU;|&_rF;a~1nRkEgQ5sJXptNA3VVbX51b{Har~AV5Sa!H~w&63|$PRIT!y>FuSl znmls`nfo=0fp$WzPj*v{HtWh(2Y4E0oYyx^A$`cB&0{z+OfMzoMNY0!vm6qO&2`sy+LMJ zO($*u=u!>CO@`ZoQ1=eZHIz+UQUU+YzPNFy?!YjPAa>3vhhV9QXtAspd3#|MD2ItgE{{B+x-o}Fd+2;^*XgK8d#UKfjyf8Wm)+dHK|Ko?eh-NO3h_PO@Fci2S# zRJXHx5ilOL@Bk6d(Xc5{nx9`2*kup+KjLk}E`fU3gqFhJ6^!A264xeF{m{jW8%TiZ z+YYSv4fSG6?i1+-R6qQRWZ*~E#6RIVP%xnQ#EF(f90cqb7SVu!nc7~+9c1v6(WpMU>}V}AqyO;C7g zClLG^S?(_;{W&825s&^HwSGQv{KH35TwJunn%_Ty6`C0(nVLEV6Kis!B^hSL&wIr~ z?s2-i#CM#T&41A_#OuQ9LnJ_niDPU(2C)$m6Tpj*_;I!pBci5@$jjK4Q>VX5}_J! z8hi%^-k(z@4c5ViS?pE{kpNuDWpN##G~H|6>_KaTs5XVMxfRllx#My8&^qBguS~rY z`UWx9*uUm_gdZYcXnYG!Ls%%)jNIh*04l^kJ^?W_M+Cou-oLmBZi=988CN}C|K`Cd zhK4x>Vw`$4!~?sbc&pqOH=l?%w=_aU%ewXoLV?y7OPw}m=N%wHhr+e_iL<~GfMYIz z?ObP%=aah$*ydd|2w-XJBv!)^7uNy3kr2(ef3oE`J@KBfhZC^k3wnkQdCNRs2>l}3 z4I)09EVn|(VRa+Lo1g-5fgfR{XkCCg^5j5nhI%}5U+fI4S%L3_uJBXQBpOi|TwC!v zk)I8+@}@czdBioMGaR=JIOn>q013DtT@V9q9}?VGNuhn5160O8i8%=GYr=RcEE-vs z@;r!)dyOK$n9{+T*z*BVxKbigfm_&3DV1=to;x7l628#zJ}jF}%LQA0A?yW(Tcv$i z9A-~o0H_FOEFAw^P`|VF?Oi3{kqC$jT=zmPg4cLE42UR#M115|#2Z4L+6*rta-t4k zNIdH`*y^C9!$RPq2;GOcf#>fSz{8fZu6lI%cEL9uV<~^r^PEr-9yrUZc9eu-uuz%* zhcw8jcj(AX{JzcX1F`8U?I0}G8tX|2VcEGS{joz3c@&^yy$vQ|?1H}JAMKdsX7{J@ zu$Do9X~!rjiBq%mZM5>li~Z_Af(DP*518!p5IY`d05}B|AyV^WxVzaJEFrDqt=$}W znEi>9Kp43_qTbtb8~mA^7#a*3OhT?MU18F2K~qiJUHJ@Xunx>uW7$-Y$Uc390Fb%( z7c`0u;&zC>>`X@|z0n*d0(kaG>?AfJd=Ua(7K7El^&GdHhlHrk`;J#V*}oFtMj-DAi~+R) z=3H1(+_~^`;TgnYST_E6Z4hPkgrO_P1d0%k2=cHBC=i&oq_x9D;el)n^C>ldr=a6G zw=PVOXP*;5G42qOBtqGALjms|!ZNa(eFr5oRG=MDaN_(*5ddNTZ*xPK3CIG6eKxB# z14XF5UFL2gnfv&c&m4dI5StA(BL+eRH`T*nz{GCSgvIjoX{RlqBB~ss^aaB~e;xnk zBjZFcUK-9%0H5gLN8DE13YIluKqtB~@Yt;%_uV8ocn2yOUA6{0S57>JsL*xztu4mj zryx4#Q}_b*ZxN&t6b*FDQ1g12e9-UVf=VWAMNE>08H!;@XbZ?olMxctCK?CC4!w$z zQ8ob8EAni7rH(;VopSl~Wrk$Ms#bVC!6CQQQB>M256hBdh&-Q|64g|~EIA(|Cm3W0 zI!>tL`u05Mbq5G*IZhu@|u6BATY7ikTOr1}9RkmzDw!ju@Obrr9Hrar`w$ z6H%%+_rfkgI!YW}l37+Zc4A%N|3>KR8q`WY7c8je}CvXI~AVafB!!vBXW*WCF?TGNA zu+J_w!HK{CB?1CU;}TQtU3lWMAt_&oijgiwo zF-}M{;EAEdm~q&qfzc3-6CyBhQ9>d+J z13S4Ev<9w7zFBuFSycT=0?tTnG7OCUhW!e%x5}gSZ2CU9;G!z z3c?%S0md}p7V&tpdyz=NLWM^~pEG#RWp08;%*VVTIp5LVbw&adw+9(sxEI@*TByc> zcxJiBFq3up52S{bU#5GxTQKo3?4foms{*^)2W0H_#Hl=v$HBmUmc0_G@&1X)r&CCW zrRN7iat|0Aq2(~_KA8((Y{64DG~=}@5*wos=+=r5^~vhQg2*Jej-BN~tQi~F>{Ce% z&&Gukv7AUr4B%_QCsq>33^*J}i&GE}QA$QVH|TG`rSI1vM(eo3E!v8@i8YjDODW!1mJ0AZeH<2ua>~ppg9Rml)?b6$! ze*5wS<|pXZJa;^KMk056kB;y*o%!YNByvv)Q2U#3a+>N*aGS}>S+zmf@w9@d6A5@* z={?+=tn@%t=rHK~u~#O<+oabG`-RMe9Ppeq?ymRac-gbkb9plRyqH3SufcWKb!3l? zaaC9cZZp&K9aW%>5(*Oj`T%>77f+fN)@B+9Z{QLQHOA`0aL+Rlj-u5;9#BCg3V;Ew z_WF}ki{q05=piG83xFnusM+8DAP6-l`8G8c1KNuRLZ}{wxPoK5t1g< z@PJN4NDNqoZf@lCR5eA@rRJtyPtCD&r~x|gC5Qk~DoU)z6ZRZ%Q8oZw0FV9%Jl6yK z3703=c)O|+ZGLsIgVk_B@Tbj6uV;aDh$nFRGSHe@L31XcuwVTAl@3H46y<6LHP|*N zGl`=3X_S%_;1L0KWq47uu%_+YDWL-S!s0hsKVFA8zS4>7g$H5m8LB4du?g}BgRZb* zycg{hBsst&I=_TvUd9t9kP{inX2%I*gO9Q79;xORs{r~v69IMS1(O*q14iik^LZzv z1+-C*%~`hM>7L}_K)?tw1q(p4J*ld&P~cNef{_xLcyOrpYxd}j7wnij*Wd!O>#aCJ z9x*2H=78InoSep@dfoeUa>C6(91PbZ5v<^bS_5EU_!L}|RX^N?e8Xpk(A`I5p*tV} zal9W>f2_~XDdU3NEMU-6(s{R>d-bdi^w4D9io#4aV@ufW`JJq2CV40r?rJwCccJ!ci@d# z6;(GYwot2xWyk{?Ep#H+iEI0)i>-ndq>Az_CdO|M2ce4PQi2kRi4ADTa%Of259%nX z2L&?Ko2b1jRI~_oVYSwrCoWok0>cUBvfrqbW(tz^6Yldsbio6N;U+2qcT_+YyrJ$o zwh+%ZnRkRlU?BL~8k+>LSkP<`0Y!$hgy&=pujD~ZVPm-*Oyoq;U;QX|$oxH*18_VM z2kvpd2F~}gq@3&^Vev*tgffu9AUNI>jo)YY=;Ah;eC(rA*21$X;v59yeu-m{8;{)~ zjvyUA5trpqJlberk+~6YMh0B=SI>etu2UCb#Y%?L5=19ndKzto6^x!3k$EEEM?2=f zECrv?mkCX&`WfDR0awZyENXem(!H6RmQgP>ueu}$1eZ8#w%amtKp4!02b>TPZI zgFAcFq*?fN3g!tpKgGc}q!Y9Duba7C2%Qf2KC(c7 z0i9a}Q96NBE9K7DN-m9_k+8zQkxVduXr5x3Sc#ch6DU zU3R!eej!Ra7Yc;Xkvu#y4ee=Mj^==0j~P9!^d`9_XeGD=h~VH>#t~mST5#Zb$&|*X zZ_jNQLruMSd$w-FYK#7uZ>Ve|B6OPQ1o#oOY7Y|{ShQrxOh`DuOar;ciL69z&>r|2 zZU9}h6wczgJHu2fz63_rK^P$RGmyLu4EwG#4-FG62#pHqT3GK%~ zVDz9h&JB|0?^MgQ5u1%o@P{uh!o3Yd)gw7!gTP7yyYTtLyDB{r?SHfWX2d5 z;%B}G22%FX0id5uHf-j37n88~{37yBvn239f}3$Q6w_252`)lWUjg2xfylm^#k^R3%fj zL^+gAE?kB$NwXmKh{dQtNG;*^LgzR6D|~UisH1VuV$#DxzJkZ~*L2VFG3xnz>DCu* z0_qH04ETU~?*t0lhwDxyZf{3LuwElxH+BdtU~VfBVxN7WhSr%^w7!a6IE@BMb07(2 z44LReM>r6Nf0i`H>!oGVYLlVRnOKj(P^;)sO70_8>Z)Rn;8j*Fz<(N zT+cDtvBmP=(5{?7Q?B2kc1W4v4e%hI-hLGNzS$5@gIF;z2RH%$TDn=X<1Xd{C**k` zxLNRe6++V1@0XQp@56)T)C>()ut8B9T2^Pod6LBR!u}5|eVx!=jN1bktPCl55zzQr zzThMlAtO)1G0Ri2p5UPtB(?MGuQfAaQ)CvK0A5WNw!+Oz-ik*gNjgnnE#V#>%shr` zOqh_AFTNU&L1t$utH;8G>{}njIiX+hZG8V(a0bmS^W-xG-9Y4!B5 z-|A#UQf>36QVXa-Bm%`VEDu>cUV8^i^rZHrV|q$pRT0<;JF1@Hb<~GByazPsmVCu~ zE1bLgG;AhZ2M!H_^Ent_Me!eS-V@7aGf|zwJB%}f!Qki0mvYO9dYWSA|3RwYpi)^V zOaf+MTnJ$V@&U!fGqK`V{ZCA=E?{})9SAel4?-hN^*_Rs^&B_Ph#7byU+`MYr$U_% z>yqCAZ8Ud&$B=K&w4wEEJW(qV$tKG;^G^PZwjXDCR#`WQaRYo4y9T7PnrHwXHM`8y z1f8`kXYyElSt7j;sqRfks->RyW+FRx05U9#+>UI8kcT=e+~#m#sRE$~RO<5}CoP^u zdT_kVUf)(Fz|#WKXmd?G_htLT7wi4{4BknEE{{oBD)iJK;6R=rgqF+TvYRKQAD%FO z|7<=Uizj5Ay|JF_;+6hM@0WQ1BoC6Sl_OZP@X82S zH*T2CBb2ca5YYB<84HYY@=y>sgQg=|f~P>E$|w$t048>KTUyX=!P=va)~6XD z$PN!n7{imi`VHhgn&V~@(}eyF8zp`p+2c#W9^fEIyb@@DVC(;~3tWYeuLg2%?zA+@ z3J^oIg-dBYzJ{=|&YpD}_-aLyzgCYRq=;|fr@jsGoULzz$D>IVN{fKobC!mwqt|`# zzxG<|Ix!D?XeQqzKgV{}mDD94zv1xN(p6$!8pE#Vb}V9@X(lCAG#G)Zi}1Qn46`fGf$ zItt`Myhh})36zAW2_{k$MK!x94<52CeySHsV-ZX|fx&g{vjM_^RgY>wJQG%l!-stw zVKp?2rein5j9uJiBfHKleVe_m%i3VD$}E5gK$x|F4a|7?_d<*ls@OH*=4B-T8X_$b zejzqIw!>-{T&;{Vn>-in+;1IG@xh^Yw5OPLfXxrJ~WqvQq*fx}Y8?^|51}5Bi2I-Gqfoio}x3$**Y3oNcy#g~^{P?X0nIwLYvCIFCtIYtvi-Z)`em=+%Y!_P$*O{!;mB{A_ z_*?Hv(DH0a_FxjdC$4GB2|7i^hvSyu5iH=DWzhhzRn9yL94zIT`TU`@HV8v*v0|80 zAJ#RqRWJt2-%*ph)Q)v#VP7b5+eIV@YxX=MS_bfU#16p` z@3yuqq3^?mWv6{iaUh9a@cRzzc(M2hEmrlt(=r=tjcvl|crTcJSyC9a_}50Rjk_VY zPT)ECv;}C*ynw6#meS-rimDzRXi6dF>Mpg68?gUUG{p ze?l~z250vRB_zboWby$u2!NeLcr$@e4^wSyQOAto0uAp6K&mOWDHfqwFAsI*qi6?I z2`#U!O*r&8ffT%J*Ohq;GyATcuBK)W3stavkItK_WOzQucUDhlyvw&)`~hXR^u=uQ>9ZPrwH-s`m9JCqaA#2{nj@}++?D$ReKBmVL1aAznU)M^fO+yA#tC$Tj5CK@_ z+ij^J2-|5YfPI+?NJmu*WbCM~+PU}q1=#_S0?XJ4R_*a@oR3D&L*dX-mfwtXR_=KE z0-$0~73)7RFstklRMYZ*OS)qHivB^b^gAPGTxlkGQr7q3uz& z&P`}}Y!G^h#?ku6WT}oRt`IG5CDH*Va7tuJ z2q)@~UCirDEOD>9%Bbhw&p<32+$-=0)M9mt8vEsL871B^FJm(SA9IkBTf>kwNwnzXT`dzo5rg_ORt-TM&0);oJoRMC^hlS<6+e;Rp!a zc%Qu@wyIVCaLeeCY4)rJcRd7MqP2}@$QL#rO98R2fV?=WxBqS-jVUcFv`FKt0rJ}6eL{M;_st!ydU(O zIfCL>hB7x|+WVE^W7LA18A{db38vzK zD7>Eyeq?>YZBuF*{MlLaF3mP+wNA_4Jj%Pw=bzR>%G2I;;<#L)EnpYpJ22mV}F#vYx%! zGR1oK^TsFHJ4M6rnBgKyt=&Ck0Tw@k*pCT09~qtVRP=fvy00ZZ$sJs!RxX><1tSNX?l zgP8rae77C!?9A;61MITELvV=TxrB)#s9%B4K$m1bk=uG@V$I4|qbhEFcsfGN6ioRO z^~+@gHXe>W@E31Hgk~auPyb?*7Pb<7B;@-bFlZ65XTlRSBt*eS2h z>-HR3lJGo)kkw(tPqLNpK47fxiSUD(LDBb(0j!Y2*ZSpG?2EtHhV>=o#vuBcVV4$i!G{q_mR9p{H2uXMn4-VAe6c_7L_cN`Uk#{$h8n^y;yI z)%Lfr^Bkdm=_10#=Q=nokD$fd9c@L;S-NE{Djlc{!qfRa2KK0O)CpI*N$iL1k&39KJGYWm0S2aGD)JWbn4`ifpEzzRof0NG3Qvh;#dMAYEv80y{r! zwtrw3`#gu)S1=uYXsp@C0~Tv@iG_(-LZ2@)6cv)@iP%S$S8DfZ;uH(~awo@6-vRcC z6=8(@Kz6E4Hb*Ydds=~{EjwKYV~p1MeuYlB+&uApTbYjy_K?^c+gjm$OmBhG{TE8l zzoPWCA(Dt~vmP<`!p!zA&cm`&>lZ9ilcM5j5IJkRQm~R4)?>b(b@KQWAxRWj`j`>o z9%?J>KEys}csdU}#2!9Owok7e`I)&aoif#J&v#Y^P-$vWl( z;BJbkW+UX;U^*yyJ0;+Y_^2IoCPyKA-AY)ilj8_h5QE(S71kd#+N0-cz;QIgS&1k~ zmegkS_=BYl&JIEpm$--oOFyJZ$LRHX)htur3dpwMN=jj> zm%TJ!_c7m6of83%S)=c)q5X((M)W9M}c_9TGI;eO9;Hhxr9Q9Q;am|6u$tApYT^ z#h}F-xIIqby92u4LQB~{Xp7G250m|`w-$Gc#TurLl_~7VtTuz7?pP<&_{X!)Cv9H4yZLLo z@4I?bS__5}c0I2*zX8RuG>i2{>`!+IatW~+%hL1d88<>I1uILDiKvz{TN&uFI8vvS z6?X4Cn~e2jM<=j`wvburf0=Ug2pSN*Q~}VP(pCGx$q=9btOvm95#o69aM;ZCM<|2K z4YL~tDx zT#JRo1VE*yVTZ+71ag|&gi=_~i$ocYwBU2iazaSN@CVs;z`;pkNtbhfiBH|;?yqrI z>b*_ODl1#-Qn!XYazKpLUb))aX@wPh zMkN-A7VXpfX17Y0(&pNoT!H$TU}hN(i^;Z3vY0O`jeu_%KtrkD=_6#=Ho@ncEHP}= zohisy;&C^&a195QSZdWROx&WCe_ZxTyi2=n<8CqU;9X5Mm3IJz#8qrFFM@*GY zd>GgP9DwLVRS$twXKa-v8J4HBxK**X=d2}*^m%aj7PQn8s>e}F?IHkxz=w^6p5Oa>2-iZ`;1Q1PiLYNfe(LR!YkRnqzBt2u7i&H&dc47GwxjNrObo`8TOP>~ZM*Tp z3Q%V?*_<=Y7@fi3xZV&P7$*TLwqS-8j`4AfYF^)__GfW_6{Vd)9*7e(y!l3*lEg(A>2AgG7E*i7$ zNkwoX>rQSf6Nn-yqD4GhM!NQ5$9L;NKu->qMQVAdnolBSk@>%N_?)(q!9yn!m1RH# zdMF;3!|yJ{(e(gNra<=86+qV0kk z5O*BZ^!nv19?s4IeTg*}{(DMHO=nB2I>t*VLa1j8o1kF8@Z32mYaMwIBRRSY*2DIn zx96``5wckT6QUX>;=rF>Bj&V7Zph?Z_YCFvh5(#T$-V_&>9d~{Ivz+mgt*E@l z-c#EwoI;gm&JVH?xNCu(_wg~8VSx!)_83dyCiNgfoHi2tJZ#~fPTO>GP%A28)ur5nz9p=?bJ|QN_!2@lN&#?gXTsHoDI+`31dYQ5E zc)40PbzQq(uN~b7vDndyJ~&Q812+@>0aX-o&H;T8zsV?`nQHV;F$aQO!b48$mwHM^ zcDPlxB4Ra@Ys>b8_|Bh#tJl8tzDF+Zay0@Dp#%wr9O$od!Q4JVmALk*vH)KBtjEcF z1noDNXwN6Ir&~&CzVuvdd$f8PImkVS7%iPm4!*Sw+%F2@n$85VA>DdCPyGUfmH1P+ z6~{ER%TgPZty86d91Uqah>fkXQw{d-5nWE_v9=wGolH_Z$ux^Jf;n5vg4J#gJ~mFY zV)WE;mac<-rd zeSRmQ*Ur2K=nMqc3Tr2BfJ3qD#=h7s*7r;#APIA z^2pWAd$uYJR+{Ds1xQ~3&3!a@i3!$fH}hAzasR5^a0J#V{dK@__I%VXr$9`zvMuBE z*h*}k*YxAWsMd3RErF&piI3Ip>}kgy239r~1?<>*i;vSTBw(@e-C@NbQmYCh1br)` zq4aR{n#;4zzzN^a&5!Ss+G%0WUnU!P2HbYGCfL+f+kqLvl%N(45!*v}f>p`x75t#5 zJ#8>sDdp*>hbqbPq`BJ=E~m_mQ~7crEV>PWgJ?gK-FDrQoeOHUo+wmU-D@jce`+^# zj)Hs~$NW0QrU)B^*!L)w2-+lT)(Hk$g}LV!%(0vDYSljGR~PWBrC9N7&#iSu=kB>p z$1b}dB-znEepHB{>QL_|xxv)FXZ;WBnSB?0^6}w@s~u_utRd zI2@`$V1cbbd0-!QJ_jtX*UZD8PS3rXmB=invz*H)CxKIa()MT!gcwd(4$LPY`*nW@ zY&ae(*`#72yojH&1~qNJt%mlzOXi-ji*V3glb`dRjxYM~bEQg@!<9~tYKx-Ou?^ia zCb0Yx6oNg^&g5vuuXS4H{6!xV<0d7WwrruyGi@mvY@8x??YAjZC+!WfLXrQ%A>m}U zwc0K4UX?G5mY)#^tv2Pav>@OPaj55YuvV9{W4uGFVm6C~Y1;nqMnR>aXEgo2K{ z>?X<9%`tE{mijE7#R3J)mD@Woaf1e-Sp%r=faRIX*v+G?nNwlfK61LxxT|XKU7T-a zQE+54w+^0H1LV3-7#O>{yg1UrQDjQY+ivmdFc(KF1HyUiLM9Jil~iJelRM%rWXiTo zIwArzj*vVXdL&cdpdZf$Z%g{ODcY3$V~Xv^6qDiDiA>!Fu!>3c42=F^aM&ykvc3r! zPm=8rV2zN=F$n=)M-*5#UFn)bRo+CkNFwkEXD=$62^`U*TzbWf>k{>`lEbEcYCNwTVt!2)=Uw z7wHe7BG{4_tfhY+Sck_i>>pIWTfW7;qCtZ7*-N$Ne3&mC-K}PW90F{7z=7RnaWE|h z%3+zf3?M-?B2GznEhWTS@r&xoAK00#JB)YCyH}&G!_34B*Su`PYfEuQOmj*T&h9`` z6M*(nvK!}gV7&*$*`Y~wAHkiwxb{BwX#cS@GtKV(W#njc&(O<`hcCbc@SG4ryYBWx zpqe@i1<#1pLr~zXA5eNi7kAK|Y`w7i3vNX)hD5>(!rHSbtuNkV=bmU{(D%+1hb~~k zY?4a&cw87H)gHEFR?pe}>~!qD+Qo4Ikc{0&>oLJ2doLezhTai#pwIUJsg73|TZjxi zFNNw!M#Ez~N&xW#zT?S~JtEx!1GU!CBT#gs=n{Vm5LiHfuR*j-gTtgyQ!!l{ov*2} z_p0nE63d?Dv~%Wt*8(EjGoc%EL~{19Gg*h{;qij!&F+X5SXXwANVe}WD*AcaCAY(0 zu01z=z_dpNKK@BX_KEp@pbTl|n}=k8ACIwykT*kz<1|6pOZz6p-t>kEqF z#gm<>9(>D%4cY(96g=^BmhILX|M(GGZJSdTvN;*YUp--`E`AahyXSaU{Q~~d6$f<{ z2X+19hyL`LFuoQBXGLxP@z}`}_IQWY9X9riZc&99_WCr3vF$E*un6;108G|SwqQVX z+-Xr(`hp|`-1+3AD?f-M(H2T6C&IR3m6s&~xGC&xLS+9UVZ z`?IsOLp#}Dt$kW75!TtAe(3N=!c093Tpp!f(}v-9N*^7}+C25zU#y@78qCW=zEQE( zOyiS0g@MkLz;v<~=w*9#5YB_eP?88ma zwjDN$IY-nn&iQs7K+i6j0kM=DK_0G3>IN{OG8zKMjR}@}2mPhfdOxmaQkKI3E=#UA_ zdaT~trv&A6>cb!+?%C&-^zF9TZ$>R4^VrAf9=azBkvv7Jw)8m?2{AjH>eNxTG45GZ z_QkTtmsPAR_~nAvn}s{pH?;LDRc!|nHwO-quxBfG0Pz}ty=xEBf~Kj{7o zpoUoSqX0cbN$>)~u@q|(lV?Si3MxK{ui2)_(3VD!!o}(nexL`3C+f{ZSC$L~cU#rt zlx)kY*(id5Q;9IB7FXIs*MIsO-`(H1ED<1_Iv%uSfwnqRA3&+q;Z~+4_SoxZcdJ?? z5hoT852JUs&|?#n$38V7bg5oqqW? z4Thq_L)T4FTpb$TZQ`4#*&RO0ZL0m92mHhOVVyxCHeaBA z&p};weVBP3&sT-uB#}Ld-*(^WXj^Q~j$2y`-b4OgvIobLD9WEAK5E?atIc|%Ye44~ z_Cx;~azDRu^F)4!U9GRbe^@2|eC&fC#G=gS6JY^7zGIsA@o1hUw^zDb+v~2}CJk-j ztlwKmjuF2p{k|&28U-idXA4jsdn$OsuT2(h_J-Xof4$&j{LA&tzFEiCt91m+`SA;l z50g!;GSUu*7$8|(X;b>$xT?mLRlZdGDGiB~3LSYl}4>(Pj8 z7vZm#GY#-GlnXv%$(ka17YZHz;jm>5M>wk$1=dmEHPxd?Smrl+iqHToz+Q)y#e4Mr z2|2Ziz{01i9D{G)MqZl1LQ#lXo znyvJ3;^nhP8qICKP=9>3ISj2Sy}82_=kBPvY%9;c)yne?A`)(DO+=l7$L*X8Cv4lC z*|*}gQ^A^?@z&a>6M7x5(D(RpNg`Y^e3Si3jR(BNiY#B|VQSZ-EVPUBd*9>Z)7bI^ z5katVhR#IOnv)p26|_XBLX76S+aAX$jC_rOC^I!Z5Z@b>k+f9_h}`|lX^ZSaX~p7a%Ba7i9PeBsArhkD%;37!qECK zz>U#!H$anb)r(rj*EoUZyY#T2j4t!U$D*+KCipXE)mxXVy|$va8zY%Nh_QcdENJBA z+_~uaW_MarBn7zbRk*#~xLfe@cp`H#t-*Ha@RBR1&q4dQwhmKDn&aJ7*%gx&U1?9w zk3Sj}7S~7iF>=Clez(V*ek`6x9fpTy-l6pS~u2#%1aAC<=wu+qU#e(_?6v?gkxOZ*MWddAqn$sha5`*eMFl~ zl;4M;!^Zxl`uw5yfi6^IHd}$_CQPOQRqo6k?kc?|pwA)E@};eKc;(c(Hac4LoiWJK$@kOZ#fF0#-X{L1Bc(f)qU3sX zx(C%yZJY5R>4c$}_YMq$cks*JPiDq@+H~2r*{{X2`1mMRr%Ml;d%Cx~?bQ^!HD`9w z_+2;+ygwsw>Y@Il&r2n|dcJ$(gVI>Ioe6YxlS&|>cf4aYE$Qm{U#awn`+7-=XU?-J zv_XDQG~hOO60#?$B+YIePvpDJ1zI9HqQLkVT$P43RP*INarZkwW;>> z6J;U~#Je%ZKBmeFY1yq&=*61Wx5&4>m*ENV{b=RoNH$>ERbx2ms%fi>U8x7Mjv$%% zq&?m^8frT79lu&LXbQGTEw^{3&Xfp_@$uVnQUB1``!d#ON41dtb?{x?kH&~&+{}#4 z@t#6`*`PzI7Z-k?G@tRs^>fom|8=87r7@eA2}gQ>T_#)H(Y_dk#aL9qamP;AY5T}` zI-IfgX}D&`=?U2GLls@&3GrX`Q>w1hjg>(1roga`w;pfRnm7G_C0qY>LiR?%6NRj; z-Qo;<-`*F&!N4eQKAxB~T}_{=N#vq!t$X`|AF^z`WI5zmz8W#onRR{g@KblQ*`u{F z$g8rMQ*!T~_TKaw0F;D;G!&z(tgor8{6|I(Vjhn4fQJZ;w~9P%HimhsBD^O09`E!s zM8hMcud_$lW>vDA-v-xyr%Q$M3yZ~sIJdOKwiVrtswiPB2?6YpPA^aAF7jSE0SQ-z z|CoApd3_DBHbHvrMXOPTJ()hNOGAav4qkEfzbWi-Ad_;<`Xl?SfvCZ2|Og8Ip zo-M=T_}nYCVQg`_3+`eaJKqm94juPf))PZ@E!R;>Q0U1q)XHRP_^ zRdGEY{tMec(HgJ_=haQ9hlT;HljDP!NP3O*^E_JTFOQnRaYH8YmIX2)LW#`EJiI6) zeHEGuZz^x)CTsNH$&C*DwAu0g%A@DhYB7|Lv##NerUEzWEg({`B>_ra#f2!>zz1Ya zR!^;~R@d#vN-{|%9H*{3A9TTNcOHGeWk`34v~lcp+ik-~yFp!-Y&SHM=-)qVfQDK! zdMo5$J4udf6h~6WEbK2AFeygXnKzL#G6t8)p4oR(dahdlsqAG}~ zQ#dii6e(sp+HiZUs~8f6wL^<}ySfuosF0AzDR{dh?VZsCfF0Tq~5zgb4hMm} zyu8G`AYxdYBS>6EMg|0y07*yyi4s7(j~fB$4Rpivok9GDp@PQS<1p?74Au>BhKaPp z-X_;rmZvqLhvfTm@@?`>c7IDhS>) z`*0N29)p7aJe87yNu!W54nUM73=D)yLuG(6Qcyb}1PYZwi^HHO8A z2Fsw(P^82^(eYRZf)^5pR&peIO7w;pLO;C$2>ni`@IU3foX}@Xfh8b7adDu8xDi+e zE+Gkr$nb)GcNTOurvLC(4)p)oQ;s4?1_kQ?4 zv_ORZ&&a>x_dmM+qw8NW@UMjbi?09Z`d1A6E8+j5>;D^Fw0}MBpxuZoATQ#>jKJk- zA>xA&m7SKl3d!l&_i1CnBVq}SyT(mC2?-tR*^iVYHJy`Kc#fc{qk3+Ej-8rYu)CT@ zjD+Mozov?kk<-L@st@7ukJ=7}b=h^76d+_2LZcbPEM!3v5oG%+pZPnG!>2tnk*=l3eu*vo3FFx~`SKX$R>JJj7iYpaB(%f@-#Z$Ste#?RO3ys}bDzd%!=L;*-N z;-c>&__F$cWVf%867~`{FQ82eS_rx{P}e!Dz!qLxJwWk=%KwECNc*&g_W9bfFr&aL zU~)8^>WHQxnBt^VTkaW&ZT~lSGk!}+#3&=*X6|)o(`474J5MmQS36igD>3{+`XqMP zxLw{DfJw8t`ns=3w2q6Z+lwYDzgFKUx}BA@x{Bfx0e)Zb+4P875|RU;$Fk>AmhxQ0 zr8{-%wG;EG$EPl=C%w~UiUe|Qe^&2Zod5M#^vo%*`)F^!S^m7QyL2G3y~y=obHpm( zsO*Y%Qg(poqjw`TUtr>QEf(hVAKTBrKm>dY00T1Ps}#s49}F8G$cqE!Ker2$xtJw5 zChun?s3z;cPb%}$CZS;)v0uAQ9F}gHyItWlGz%1ZhuQb{WNiMx?M5JP`|wFVIt^ z$=`LpFqQAmH)*!k?!qR6gWnsDd&OrgEXQD;2o@2(quqZyr{Yh-6{~q1ySs>Z&F$ z4!`VxoK>?>Vwm_A!MCegnCj%Xv|^e6phCP+ z`tHSiS?^oxfM#df?C+}5{oJotB{tgC$r}bC5($N`t0yS3dcn_=>QZt$j)s@s(Pq^V z-)%OR1a@;133H&`xU)(a>rO?t$sN@g9xZ#{>+)FOF_=mkLCusdrpQn9whWU^cFxBb_eSRj*!*M$2TM%rq24tAYOy(>wc)+>e|551_p&+d#Bo_hwg zI@)s&?~2wu&v5dY8>y@n_o(CeXx}}k$>@5EP!QQY=>1s%SfS^#2cRDz%IQCw^q#u) zCf@4&v1{{X6md(2LLd*fTd#ZfkUl+b%Mb4*vR+iJBjHPGOB-_=kbUzgp z)Y^*v6i<5z8M?=*Sfygr&^g-I<{Mng7!mvm{@ss#G5ndO4eAY$rc$N1$iWdCBC^6O zWjt5vaXO`)*(p|gXFP%~)dX(8?&}hapD&k@`SR*SI&4}v_+>y-oU;R(kNR2WyU6zU zYhVjT`VAHPptl~kjb6~aUZqsKpi^oar$QB?Den~J4lOM8PfxkO#yO_!Xpl--m@zjM zF4zvSa*TbZ4JzGyLbKwsRW^Toa?IU*v6qCf;4~9+(_yn|ebR{c2&2UTqG!#e6EHJL z3DwmmJ+B%pS|2Pkmr|TMXJ?Q|5zH_6wv$?+l&g24P|Simwv9uQsdVYzOQT=nY8nY>9VJJarf`u^(kQe>_K$+WIHIA zW{Oq8I@vf5^Kh?o451QsX|pUYWPl@we=NKw`|^!El4N?g0Gqj)cvoAe1f6P8XGAas zDf{&6h+#kqJldt6w89_^5Y*)cSd2BO>F5}TtUMT@`yx9S3@hnpHj*A?pRpL3!#4o6 z)g`JP-kso=O0*F6S`JOpy{DD8oGLhXaC?~=aIl=J>XxxF#bk0J3beL}&T-8B(Up7c z+gP-G@q7MJPlQPY6m^RPZU7j;pjy}jpF2n=I}ahFMOH3pZ+#hHwn=t*`;=q<1ph*= zA}3biaxAkEGSKwFsd;)=q{#N>em2i`>(cciPF~Hmm%Vd8=1IgESb`vlv%}A~d;-=L zV@$syYVTN$QC}tw2Kf`)(7bt(uBgI0D?+YYZ8Ju}x>H(n7fLc`>~1}~l!N^KIJb!V z#67I{9y3dUX7U|zWlmSe(7#uY?##U#^lH>?hWhQ zH-@IHxW?5JoTSUPe!W7en7OIXDRUgbfIyhh3B3|YD`K-$hvH`m4s#e4CUDcVvAew# zYjyb;Eev($=0~xs4uLP;$fxT6c)`}OB6BiuHV2V4ZTywHz7@MJI@6_BQ_gpZ?W9~T zmZv`WN?%RQGqA9^X$tdTxd=|R#cHj(eA~%ZJ58Lrl#m}~JQP~oRPEgjxS^W(WfM6o2< zZb*~y`4cHU)%I#G2J111qN5F)u~tf737_>&HT~8{+0|mdoM;5_u8Q534|3F{zbyM| zY{K?-7$YE2-}}Xt)^*SC74AikXnc{>Qxy#4-G>hzE#-gooV*ol_c5yb_EH`J6a6?5 zaoalUyp533Ath%P#h0&=n??(x)2m@&A;q#R*`2~jHcIOyEsuQ2O{K{x`)bt=S3_5$ zgfU@YX&h#NkDBa_%&Z0r<&y?KxuX0m%tjP?{|Kc8VnBx0__7u=T&ZPtLRn~w&>$s?TIeF3`F$_fu|zEfenIwwZHzBg+SU`C!@mV5uL?=U&` z-7vl*+cJ?do_~_KO((Y$SZG;J<@2@L&LK&*f2kD-o!_e0%?PIO+#bd2-eQjILU9^C z>?#~NuahulpvXE1OuB;=ia;oHPm8|X5gaXTObVM^MLKFIHJHix`jB2$tqgo^`go+$j&>mM)G1DzlMx>4{|7vgDx3x&>}=o$D=s@avphrE{F{OmT6uWKy>Ql#jZf!(b!V zpM+E+oGh#^n@Ex>yQePU{*pULr@?w3gA?NQ*S_+Ow1xgxE<+V3(*iL(Qsvn=OUtu zD!~O7*RK2WwA8ZOnQF{z4?dU$JtJ&R%U^zo+>uoRZLEyXq{#KEdFDTK2ltM6`j%17 zbf?;?e~2#O))WL=>&pyZE|ATNeyTVoYv1h|-Yw>ZTcziy>2r7QI+Ej8nn~dcKA(R< zvk3KcbMV{v3SxdCw&U%&pwE!JwK%m8%8BZ~xN?4Uafo=?SIHnVL7ViXz=Yk<#8z{V zJi&2yUq7ho@aX7Zs5+}|+LCo3g3P9_I^47w9%|E#kLkaze>ZgmvEsIA*B|w&q9;5% zD7#R3)HloOngNt0vb|ZaI(`AV`APRBm7Ih>nBc~dm!~&i5@Y!I2qfBFFoTK=*M%8{T^@nf}yUX!)b~uv0yJw zPNkrD9#*EN;ZXTRTix2bkv!yqh*`mWhS=~8C48I+-Gj%o7G`qeZ9{onE3S+iC3^X7 znX@BZTcs)dYXL7T7;hEF3>#Nl77cn!WE;$4nELitpn~-l{`6F=vncL}D@JZ7h9dQh zheDO%Mmm+7onI@`K2KySu4)B~=OzoARNNb*hFKhNx-f~0b%n#8m3PUO-{;bYR!dTv zO-ULgy9$gUQ3e<)zf|(#{Rh!~#&hL6p^~1I34%fDpizm0ZzCAus>fA5XBl^FD|*`Q z<8$QmJnVjs{M9d9asyLnFO9GJ`2cIZ$A!fM3Zl&`JR0#E_iD?(1dB7|^Mmf{JBF+4 zseI~Zo87R*eKdJ)8rq{n>for!wt#w?M8VP`{XFTy=3$NOo{lp?!Ck$wL;{{)7Gl{f zmjANk+2m;Et1AjAl@r8OwruJ#&uV084=Z0$o`xk}g^P5$`__g)glA~7u>++Nfb-!d zeXDl`=}Idy?+$oAy!_Z zVzad`to&(mK*LQ;Gwh-@SZ^-WPS!J21Af#9oR- zC*GO&GOc^>!8ux5m1eWX^r7HZCN)VC^{Mz!yHyk&wHoTqck^?g9|H2V$i>>3B^Lv; z;|v+brTOPu)M{vJ?BW7b7+IwNOr9~9Mboy&=%Q42Pdi#_W4Yv)J9}ArYX-EI>#i6=ghAy~m0TNP@$~muD0n4sbzEXg z6fRsWx@k|eotIPWGl+WvrWZzM&gU5pFmA=xz40j1g1z2yF>u%GWzO3V6=+9ux!?Se z{DBRT_>q&otI}^~WjS(??Z&LN@weGbpJ(%@-+9h+&Uw!BJZE{&Iq#b!>Cs>JA0+y1 zBDL-*Nwp+NYE9@)uqH77|DkvftTe4D`OIu6`OMOdLzL$`yPBRg-Qo#JiQow@7(n-djjitZ>1X0X*=-#ddq0>W;cIJ;f+F24d6I=_hiFuqS z%DA^Pmg~uKSSAI1f>9ypvo5R?>&7~=uEHL+Ne5P%)?j(+aFEI+IJGJkiR)WQ$s1Zr zDH~f$Y0j;s^i6G~JDb}`nJ#UlEY~*DUBW%LwgUIJw3QxgXVbRPy@XT(N{JLI zzlUUuU|FPWBSH!xkMN=ZOs5bUvQDfU>&Uv^T30*{&S*&0-iJ@c(-?I{cEH#`nUTG zrr+obFwH!|^#1`LRHCsk{jO`5g{V)&h13Je32{ayv@r&Uh;W73E7CvX0=hFtb|p+RmXZ0V*#d_M?P>b z>;vMJBUINl9zNwb$Z%;hisnNG0e5!}MoyeRSa%M0(~@x^*bn>dXJPFSqhhg!^3A`m zDEhTwRXuE)I~LI=eUX)th_`RwV&VL`Xi`lNYX-gd0n<$k^tetm+bquoqFWF$37q#Q zp-f?4d?Ft-xwENF5UmNw@aT5V+W_GUvJCgNPow7229p&rEzWCU2@NCBy z((R3{9cj!V&7&XkGH&4AySKO+5ek=aT{QG_B0rP_4ugzP?K6pVEd#s$Mrs+WX|DHg zR~{q&Rsjx*@h{t6IOcgVlFIgKSq`=eIV_W9ll}RGy8ns~lGeAXNH|E(9%LL|jQree zJbUs8J`VG-VW@GjD6FqCy^{Kh`>$`?@@o5)`JaL|{aRlh3tfuyfykph!YwVJy+cJp zI02c**W%rqe5BvH3ODNejYDhbfN=qzW8FSlPkB9>mxCVp!MszYPwofHAF9aDjwJGR zSzSKxp3y+M;n-3usPCnljx7(~T-OSB!?xkw+c&s%{w&-ry26?4{}}9DG!C(WhjB5; z7m-KyV)K*%Xjik0nA1EiwDtYEA;$Q#cQuTqwPVm1R z{jsdCN+y*%QP@7VSsA>hH;}HbX;}nU99j$`K9ao`i}BC>??N_59@-_;_gOJj_=A1I za3AwEeC#YWcyb=chgZ)Q&kxylIS%l2K?Sn^`zB?J*l*Y05d2(VdpkBPixvIekCPp? z^I&E+M&xlBE-TwF$DK(g)#YdB=SmydW@Xqrt-f?=bqfu|uWHeRc+amo_r+^k|L)NI z58m#CJ2$V$s^jRoMQ|Nn3vQ#D;v9|XXOADk+hzj!sg?pYh2Q))*x>cc7wWpa@5#)} z#0g&?^rQ8V^ud&_l{IW|pl3sCW7RX#vRhSb8mjU&`}2gWz1VxQoY2rvQNMMKGT=J0 z{Txs2T1DiM{6NBBLIbvyZB~ZeQ|e1`D_ays5b=QR2jAJG^=QTCRqioE%J>Hci$|#JmSA{0yAjrLxE~?^s#Gr@>p- zkp1~;c`u&lz-q+LqAb@@`heF2-glC{O7On2w$cZ?CfAcL*f)Oz&zR$ z74APLTIb|B;5ev;+NUAg*WxWbmmb_nK}NzgWIwz|W6uIyhVA4!TvzD_-Xl!wRs}=8 z)W_F#)q5`&r4M#Yswc(RHW!Fq(YzAT8L?}7BA?DKcjLoAX~bH3!ap(a~%ZPUyhn%cr*>n*w%1anb`yE~r3inw{)&2%)x08ezo|}omyK%vFJTfkZ;`NK? zI6S?z(C?^KBO$X*4ZR|Ac>Is)P!V05s`jJYF2RAI4zA}M9!mXR(ludJ3(%y>Y%P9$?1f@$3y8+@1skHS&^zHZA5Da z;|m8?N6^A1Mf3??+#CxB*B14^saF(D>zN;kicI?=WupRa|v7qr=vek%fRt9IY zI#STWrlSbRyb^_{nYXFErlm$gxc7(5)|ww5ei9An&ZK?)vUJ|oe6I1>__l%S4xmfR z&#-QEZS0y{Ux4XutyIqfE>n0Mu`m8k{ARSzO1*Xw_Y>n~n})K@%CO;&+H^18WDfx^ zX^tmF_=D+>!6o0#VlHVlRvYu(JNPZ1gb`m=6lX`CyUKoKn(vEvFUe~M>8%0gah~#i zNv#{6DOB+MA({pF||PGXyt;iy$(W52nL5${L$VsBo<&#EyvtqmuZbU|`-AkyN` zAYf@vt!0$;9;GL0*jzYq>p~>HtW{R*g>1Bp0ok69jTiPdfFZ4k-_acf@2Rf_?h`tb z&DE4Xp!YMK2uO|zLH7L&FkKu@+7Cte<{8D7k?Y6ocPwnSMmp@Mj~Lsd+gB(u2Y9bv zczyVgFSN}GzK6fEqz1u5&aA;N|a{@AMT*RGg7r?XDLS?`XGw6ArAeZlKt=O(H<2Hp$G`Fw|9@R=TJ)0&%f zF#-=#Z^?FyRrGLak`4yI)sS=<9RBLa|oAsok+|EA{4`6Y?t1NLb2 zy)uz{={%P9HWv0arhOj!f$xx&>z`41J#=nd7Ly8{3E9r^^z38Xt5X^F8KYJOJ#iLW zMtkOFhAO_@@EW)lc9?9;l5Loz^ud11hMNc?|5D%qFfHTch8ajaABN0?O93=SpmhuMJ{Tjvs|*8L|M`A+-H`Xs z|F!hIXhU}f%^KFhoCzafPh}lO)k0T#hRSj{UTRW9=p9eCJ%4gvw!u;9gT2!lxDx1& zAPaFP4}fVU4lU`6fDN-Wc*jBWga|#?QS1y)=A4KHtQC=W!5A<(Srm0}Fpa)FF3q zE$;cGueLyyC@qlLX^yf&)& zu>m|69?0pn%5kuLV*Tj^JiVWVTQQ+vS{H)1+2eXth?vufw9bZkI_fN|OUB3W>0F25 z9V+3kw4eTh&IOFGX-{P}-V_fqQ;O(t+RIs--wrG>QRl@4`G|flXkTMZ^suOBPC)AQ zi@1H|Jed9v*!~ZdDQ*7Vg#&SFpEKfu4M<9VSg@rw5R?2o4my60si#zkW1oS!t> z;(Ol9X96^M_fiv)6n{?UY3z|`oK<(Bv3AC18}eVjg3H*t^bYl7P!G{3_Tyf9vN%Wc zcNf8)PKXcpN9f*-@R-&~$n|lUhHK<+-n*7IWThmibvx(pg-fT7tJAX1zU$`;v3r(` z(8zm{`wZv&_X!@^Tva&^toj*A&SrIQ?^~`qGaXzr1C%Z`PHbIO0+TfN2gOy$q4yQs zC(6L@xwp>hg)P&%f^G74D5~qNi;+mZaY;k}Jxj+3F+Ps7nV-NmE5qzxjie2K)Y(lC z@4+t6`!uFYiz^X9YIXVko5#V&1hz9FE(*RI7bDPf9gP>&ot-Qz{GbPY=W!g@qfZsl zaqFCZvDy9a92*6BLcC)Fj%Y)hRVxrgew! zW*h8ZGaEaXj4twCQMTbh>lmHLXmVOwg~@D(ha2Ex+3#U*k)z0 z>|-c7j;?LI_8+z19^c_4RCJ$f0!o(}0iGL>k$kgMX1;j-49~Nl6x4Z#Y?=dd;P-P+ zXx+d))8|E+C*HBPLg5Q(frullx*AqLJju&n0v7e?c zz0Ry1g7X(mT<>eQxTstbgQjZ!r(njr)@G zdM&60tn{gvHN`oi#HmxPb z)zz3Ya$bMpOKh_;O!~<{vKwAYvNx@zM{&CI%t6Sf^(^eLCn&8I5yuaLZ7NAfr@44^ znt-ETms3Z*1noM{R6~yYLNlZ#-hhMIHyV7d7kqFB z&4V{^u^PsCNvmlLP%N>{$}q7{abD1-v&<9U z=+U=YuJcD})K$u1I)lDH)E2n@>0<{(-N5}@agg3!7Ou-_hjHKGCavRZExHxSw;S0+ zjDhR1k#gQ7sw3=Vo0Y-h$7<42lbQm{hSsb|bn4oPJ?VSVJX|;(NaydG8n}Jq{Wl1O z^}m~*f|I1P?Wk57bqdRn(>v^DA&z`?gT_DOe0TtkY;(d2(xt?za@miKSBz?hovW;{+_bq)nIZH&%*Ht*wC1}l zwh;5{G|gGofow9NSZyQQtPEp+s46WURHHCX5D)3e33&4GK5WgpfYbj8toZ#~*p2O4 zY+HUiH^O#|cAb`uY=;MTGmw>jTb6OGuzhT^GMII%DlPoYSObfGGj2@0XKSYq!E<`% zCR~XFr9U}XzVm{yC6_zU7;ZLGv1m|Dopr8Vj282F<2*AilTEfXENma!tPFp2sVXfP zU|bXfjRzASyVozLag~pAp~u1Le-&$I3_~cb@u&O`;$B7?p66s^+3#ISB-du-m&KL~ z^Ya$p4(;1yuPQgtc%U}h*k)xI-MNZ1uYYx2SVej8+v6sdzmOyQ!Re31&b3R(?sSc% zl-Cq@JF6lx=TbY|r>m!%6v@-pelY3AA=uYTE^kZawA#fsE5kp&uOeCXt*#Ygf2bx| z^{ehl`H54;- zs^0eo`R-Sh?N@y(mDOq!^Vw!);PhbK9SPIayI*3GxTefr-R-p6=uw3o|l zC0#z_vvG0w7#~o-NxYU?{%o|80K2Kfkd~Y%#zaI&0Ok#A59XH^)@D5s=1<=)N1ehk zuk9tOKdWCuoIXkWA6iE;(r#n*>@jk^6*K5e%(@n5Kj(d{4_LlsA0ug6AHzX(?#dw` z;LtwN4?JFv?cWK?1M~k~@blV%CyyTDHQg@-`yG_q$)4WFZ~*yV`Vaa*n%dj2(bQgs z$EWl%#Nx4iaq(P)7!&M^Q0mtu=KaBWp8^a2=!GC!^PbSX0-sUiVXdj05MF2KF=mz;W;0 zNKUvR?B+QiOYc&aO)`ZdVj2oBZ zgg6hYM_n6Kj%u7wWh4}O5aNK7voUCVwx&<=wNv1EM|0J@T+v4;8|Dq2_M~OjtOXGhu zFd_^c|6{csghT>Li3BRYjbxY*3|Xcu|KH(*K40idBWcf297cRsSu*WZSsLE4vNWti zC28p2D@j8b-&T?a69%=fDDd0gDoTuj3JmzBqGaB^S~Ws@f*D~VVGY5x08BG)41vp3 zzcP`))Db?x59B^@}U`;=G$)sdpO+R?bWC0zfpskD0jhV$S*eM7(?^LwltHewC z*2F8I^_W&QB?(&9R8cyG%25zyQUqC)4pZ^VT2ovSn#)lTGOY#q-=)J;I+R%d6jgcQ zPc5|Qy8?d}p$mMj>=)5r1^uGzyCv4tPC=hS(EKCOH&^s4eq=g~7*bgkUo>o>qD5nk jRkUb89+O-iDn9?}$uw0qkZG#WO{QsVzaQsBsrdf{mDC

xn@Qlh_a zNQ1tTq#lwa4I+F&*h1j^|KZSHl7@UFNt(kO@cK~V+Vg*b@5qrOyA2yQY>+DSe|!0` z7y5_h|8-;r+KK$CD+w`CD%3TagNH| z*7lVytm`Lv81|Dqf9fZB5ib7RPr9_epX9w>L-PJbL-Jw#sv-F*;72i|)LOF}VR)&H z=7Kvmng)cU1PcX@a2}V5I@X$9<#r1fF8s5eo}S~HRjW!=VT$(A@>hN>!#5GYNCn>a zsYSOzQIAyB=e#A07nckjI#i#izu-c=Gt36Ih|B{6rR;-)q})S;q`bp}r2Hd;rGle_ zr6TjeQnAHgsf2LTa)`h!t0B^Dt0CP8y0@)|I1p|S&_?7^{nJGj|D3g9-J0-FcXz15 z{=K2-e5ew$V}ZE}jEt~b5hDzzSiwMtah=YHIrou4Q7muc=-mRJlaB7k%NWqzip&Wu8Bbp<%oK7NGK;zDF3 z#^P#35W+mpBFtR@dQJ`x5M`ys1$g|ZMzpD`zK6=p7#!cX8R5afDsk|5BD$Y^1kZB7 z|84`e=hWlvxwll-=YDLhtT24|@YR2G-V4nK>yq9V5>R3{1@{uXz+>i6l9!D*e-E5B zUIUY@xW+vjI!V%_T4gWnl@ZCNNm$r>Aw_G>*#1B92 z-PCb;W%+wnH5h992%1(8(A(&KUEgV*esku`(N_muU0n_0EMA4zd*j$zZI}|5wnCMRtXEADGOWH|f%@9Vs7wz-(ed%%-=;BmuUh=G z@ma3~1cvA0#Hk?6Sz&yOX!X6mf1soeF01-7^)_?Aad?n6`MXL2N`q}tS5t+Ws!Bw7 zIO6c^_po29%O8d*^jRCZ?Cy%BQG9#!}5qV8ce%EC{B$8c%usG6|Lmyvhv8iL&1 zuu5OQ_<3``f8y^_&Y?l3@Wdv)aag^4IgTGW0{2s=VDOx|XB`;Wp5Q|39172G!sDt6+%LZa*S+g; za9Yn@>qVdAFpcY3;IMH%;(gEKik}-IE;zt$ zt(F@3b;BO5LD;p{0KOg`NQ{X=X;BgBTRHCCxr2hjT=*qj#I3>tWL&v|EB^k7x^xLv z`}bq+r0*Y$`s}lHT{?8=Oyg$`P2fVDIXD@-E?qNuM;%P54Edh>1n&g@3plFX9qBQ| zf9_x$q30*jO_9fOQ#fr~jOzOhYoJ&N>CeLl)iBo`pi+*;+8-e-AOK}IZ=$TE1b2vg zX+Z&Q<>%vOZZ3+mvr$Ake?2x9SEyb>U?38Mg5c}wig~&^bt8rivnPtZoAYDN92{4^ zE~V^y=LuZh`?faaBinhC&~u(|bK)9t?xYyD>&_KI4lE0X_1yR2y33$Ro?OQ9`8{jJ zdLVO_<8bQlN%=L%)Ob2^_w_|dP7aE)vQS9-vV78a_USiLQ;~c1DzZu6uSG@*?#w%h ze139hD1u2>c5K*yu_H%@fAYZx-xJlp$UK=d2M7Jvq@+D>H$md=x8I<=%9O)n@re9d z0ok|zaWfR8UzLXp_x&4TF}(*Yb^9ZVboYK)DV(=1Ci(PegziFKUI(}0QOyHoTlt|V zD_xYcOi!%%0Wn@qh;nyO%I~-7!*KcHMZuA6Ix8^|nWW#>F88G(*ns?@& zOx&*$_muE(T%moOy`^RS%qdd}|1ogjI-=W=xiV)Cr-Duj^*3rJ@ zLFGLhU-A{qsSn1U8UI4Sg$qcFiV}0nG3$3uN{Z0;n|XP-dE*AIMMtaTevR8vncJB& zSgfa4H|q1xZ3n;kW`CmHj=7&))<=pn9`HMM4bY7@9)Mh58<3Hs^jak9Xq?T%qnc`E zRyFN6jxQVmtLZ%jEGcF=c$*uGy}YtwqlZM=?{XdHEr%fc!y=FK8O+_+#YN0_0qJ@P z*?1|f>%#6SzD>4&n`}R=1@2tNdJ;vxVBfA?k0*~A6aL;i@30O0`NYybQjF06f#{tB zUZ&^5c$07O_(2s)5`#c#BplMht(0&vH}W_e$Dt0Eu%6Mg34B`MU3s?*$Ml9G#=}Y3 zO@3OkQg*To_Yrp=@>_Rr-$wbZTPP==#}Iz6xVS+Ey1+QTxQ`UI<1HC0=^4dW`~~-zz2AV-G7>H4<6d#La=iR-zw9<_X7p+T zUkml~EjO;E{l6TlD$3!odSVmVu`Eqy(!8HLC)TtITG#HDmi{gWl7;O5(-nSR_I0wo zrz*H}c}9G^@Ea+l0~5!LN%>GyQ^RIaZz+8HTTG(tBUUmYdpFreq zpW|o&(o@WNxY57BX;p|dUqt*H&gONswTQWJ8pnux$VoG`cF|k{3Er+sdC78X z9$V;ZBZ$_js(bfPRZ$^iAml(YV9pGdf#6Pi8(!aK?mYLY z&vwuJ<47-L?&kA)NdX)CcMIIqzdp%%pBQSmnGPuZ^w>2)oaxl@RF!`tISxsF7r<-8 z37yx399V`jlIe_=P5YT(;$B6(dA__(oPZy#SK*`!%!Bq9!}bDWQl*w-d1=AQRB zvfcCCv+gth7%HDOVS}{(_Cs+T%o=m9y^xeByn$yvf_NC z2RPx>>Q50uoNB7*K8WVg@9bFw&|PB)o!NNLa+iF4O?9>49!2^g&%M0fiT!P3{^a{u ze%cc!3hriedeS|+#*N?u3&e;btPMeFweZ>eF@pB#s4w608PbDXQGK^mW~eqUxRwNa z-9All#nTaKfzG0TdxK9AN@sJ{`3ttT@TYxFB5^6AGfW}b1F!RsYHE;1emsKgAe#2S zakT&EGo3iskZmjZE9^gt%4bfRlrmIPQ^Va*qpQbH8c6h@`={DR@G#T>r&Zz7<`Kw_ z_C;P|D7?3QtFlhxc6ahK)$-78ke{BT-Ac^Gk1qsuM4;={}f(ZM>Y8!+Z7GmAJg3C(>cAG zbia9E8Kjc!2a`R7o4tU=!+1ma$dBwr`+vkaeutB@HRgrbZj z_#RrL%$LibHck$3MR{=^oeS%m(8we1jD6tn*hq`42~b%6Ds?4SJ~`~PV25wT?F><9Us+|ucj?l5-;{nsrBTm|@H77fS@EIbY%93y^;O%K`H}|iZ0|Se zyjn!}H@v4~-h3u&jucwIFO$v(5&z3{{$m|r8&JxC^dOkzvTVlWvUiF5spYR*5Cr!t z#GRj8Lt2Dyt94rIe0u!h~T*NzYb_juyY&+6c`;Ri&Xvle@+*_*1ZtFDh{$+ucG06XT7gQbxXl4x&QNV;E0XPTB! zKy`A`)8S8i{fTb?`NANY^Go#ZW|@w55p%a$)Mo(!H?CbF`-ufVw+80jTAj9*J8YPU z%V!QF!T&t%)k()w;^``=&w@U*mYl`S{A_Wat)=@-e|s||274jU;Sg-}hl_q)_v#~+ z)OUvr>1Q~uvvgRm zcg~p|4QCmbeXBs}Hsg}*?x&zq{}go^s@y9p6?4(J0l)XPT{8++`k&J}e;=oI>0|rc z(XcVyhXm4rQd;-R=uSt*ZQA>06W;_{Coa?a?__U}eVaGcEto$2;0GUk@bcO*ouz|6 z_Burn?~CH-y%RsT6<5Rkl*8n^cAocV3Cu4eArfwfHo@0^Kj}xq-I&~0u!{|S-*A!k z@Rt>1?2X;C-^GSSbKy?hGUn@%!6GOB9Neh&2Gra8&qA)wXP4pgA-bW?fQ8$EoRFJOAf!|}5(>tNZ4;#Ke zlJn)5zrn~zjDoe{RM@Q7MkS>!)=gdbA#R)`kt{=rseTRTyz%idiT%&2bZ}K1ZU>H zd{js2x0yW{QwWF;zC`Ecd)PBe1DsX|v&EkymEO(Pl5IatxKHn5qUdh&u))|T`rJ2H zlkT1>MK{;!JGASGG4OY?X;LrH^(5uliaJ?zuitoFmrfl;T6|=aJW)QQhtQ)Gx)W5? zA5XF1%-olb>?rM;-a|5;(c=Y*^AE3{jK}1sg3jB6(kc;t(S`1d%btcZ^2yfRkC{?G z-Jj^|=sGQA(0wico~qzM?|yj?s=m|W_9325qOI>)Te#4>z2y?6d6NGJbnvgnH^%6I9!A?EyA ze1u%Kl-dZM%$dWYuRBQFw7LsypVqxSJ>M`{@-1rUdx*FYUr@RUa?*Z(2QPD#JGFN4J zq@TOk9~>~4!sVI7?L~?OPv*>F!B?+JTc&nXV(Zjy(e={wN)P=8o$S)!~X*L~J_r>-XKb{k^Hi~(x<4505d4y~K1vfOghB4I}% zWScw&;-p2fk|T5GFz?G(rA?E&HOD2&Lw_XYq~9 znIpyx^(JvTGDE`wZ({ zhEMeQ6a5a);hvRRPn45en#K6^7pMROE z_*1oCGp;W}d}!Z7exfih2Yc4emD}xHMQ2kUYfHSjtgYO+UxU$|CH>KzCezvP9s%Cx z&Iq})UV5Ij1C@dE|6TBKJc05%rFcYlYyKWC^6ylv9NlRG$zA#naF zAJqw)=8eS_`u{Av4zdgaX&yH(7!NLc9@y~XDEN^tE2nckpBWQlBCvJQWYIT`!IQ?) zmt-#e2f5QZu#>cGWG8JxHUV2`JkcR^2TA7;{th)aGhOJ#?sfCQK}2@`4qA< z(ga_&>G;SHY+tG+_me^WP318Vch<%K26t)cw;lhw{HiwaxoFL@D zj=Q?568X7VNRE#|fY&*ApFi6K{vNJW7A<^872V@-V7?jGuEOcKISeKY0rySFA}pcb ze37^d`TtkB)A^sqBe3|JjuQwM7JbvPmH>w7#+C4LK8=Lv2;^j><5mfM3wrw|*=&tC zXO+=;f%9%;T}NVU6fU|tz--GJ(N@vNW9rk5Fn%fV<=^5vhyPF9X>1aM#w#uSx?^X; zw1r=HI6=rHppD3&`p2jbEkY;mQ||wHav%Nomn0op>s!LiPhOE`41YzM{_!i4_P<`1 zrVV>pn#%a-WoZgw@`vpOCJk*bF(x*`gb&)&Ik`gz!iNMs!V?@|Xv+)i{uWw{OI$~Z`oZXRz@ z~$#Nt)i}n<6;fI$L qa@SDI!x!}p^Rk&fMxx>uK=VrRpE%ByBn^(~7dCT@Eicj6ApZw9K3(?! literal 0 HcmV?d00001 diff --git a/installer/olympus.iss b/installer/olympus.iss index 55b94165..91033c46 100644 --- a/installer/olympus.iss +++ b/installer/olympus.iss @@ -1,4 +1,5 @@ #define nwjsFolder "C:\Users\dpass\Documents\nwjs\" +#define nodejsFolder "D:\Documents\node\" #define version "v0.4.7-alpha" [Setup] @@ -25,27 +26,44 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{ [Files] ; NOTE: Don't use "Flags: ignoreversion" on any shared system files -; Source: "..\scripts\OlympusHook.lua"; DestDir: "{app}\Scripts\Hooks"; Flags: ignoreversion +Source: "..\scripts\OlympusHook.lua"; DestDir: "{app}\Scripts\Hooks"; Flags: ignoreversion Source: "..\olympus.json"; DestDir: "{app}\Mods\Services\Olympus"; Flags: onlyifdoesntexist -; Source: "..\scripts\OlympusCommand.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion -; Source: "..\scripts\unitPayloads.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion -; Source: "..\scripts\templates.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion -; Source: "..\scripts\mist.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion -; Source: "..\mod\*"; DestDir: "{app}\Mods\Services\Olympus"; Flags: ignoreversion recursesubdirs; -; Source: "..\bin\*.dll"; DestDir: "{app}\Mods\Services\Olympus\bin"; Flags: ignoreversion; -; Source: "..\client\bin\*"; DestDir: "{app}\Mods\Services\Olympus\client\bin"; Flags: ignoreversion; -; Source: "..\client\node_modules\*"; DestDir: "{app}\Mods\Services\Olympus\client\node_modules"; Flags: ignoreversion recursesubdirs; -; Source: "..\client\public\*"; DestDir: "{app}\Mods\Services\Olympus\client\public"; Flags: ignoreversion recursesubdirs; -; Source: "..\client\routes\*"; DestDir: "{app}\Mods\Services\Olympus\client\routes"; Flags: ignoreversion recursesubdirs; -; Source: "..\client\views\*"; DestDir: "{app}\Mods\Services\Olympus\client\views"; Flags: ignoreversion recursesubdirs; -; Source: "..\client\*.*"; DestDir: "{app}\Mods\Services\Olympus\client"; Flags: ignoreversion; -; Source: "..\img\olympus.ico"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: ignoreversion; -; Source: "{#nwjsFolder}\*.*"; DestDir: "{app}\Mods\Services\Olympus\client"; Flags: ignoreversion recursesubdirs; -Source: "..\scripts\python\dist\configurator.exe"; DestDir: "{app}\Mods\Services\Olympus"; Flags: ignoreversion +Source: "..\scripts\OlympusCommand.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion +Source: "..\scripts\unitPayloads.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion +Source: "..\scripts\templates.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion +Source: "..\scripts\mist.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion +Source: "..\mod\*"; DestDir: "{app}\Mods\Services\Olympus"; Flags: ignoreversion recursesubdirs; +Source: "..\bin\*.dll"; DestDir: "{app}\Mods\Services\Olympus\bin"; Flags: ignoreversion; +Source: "..\client\bin\*"; DestDir: "{app}\Mods\Services\Olympus\client\bin"; Flags: ignoreversion; +Source: "..\client\node_modules\*"; DestDir: "{app}\Mods\Services\Olympus\client\node_modules"; Flags: ignoreversion recursesubdirs; +Source: "..\client\public\*"; DestDir: "{app}\Mods\Services\Olympus\client\public"; Flags: ignoreversion recursesubdirs; +Source: "..\client\routes\*"; DestDir: "{app}\Mods\Services\Olympus\client\routes"; Flags: ignoreversion recursesubdirs; +Source: "..\client\views\*"; DestDir: "{app}\Mods\Services\Olympus\client\views"; Flags: ignoreversion recursesubdirs; +Source: "..\client\*.*"; DestDir: "{app}\Mods\Services\Olympus\client"; Flags: ignoreversion; +Source: "..\img\olympus.ico"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: ignoreversion; +Source: "..\img\olympus_server.ico"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: ignoreversion; +Source: "..\img\olympus_configurator.ico"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: ignoreversion; +Source: "..\img\configurator_logo.png"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: ignoreversion; +; Source: "{#nwjsFolder}\*.*"; DestDir: "{app}\Mods\Services\Olympus\client\bin\nw"; Flags: ignoreversion recursesubdirs; Check: CheckLocalInstall +Source: "{#nodejsFolder}\*.*"; DestDir: "{app}\Mods\Services\Olympus\client\bin\node"; Flags: ignoreversion recursesubdirs; Check: CheckServerInstall +Source: "..\scripts\python\configurator\dist\configurator.exe"; DestDir: "{app}\Mods\Services\Olympus"; Flags: ignoreversion; Check: CheckServerInstall [Run] Filename: "{app}\Mods\Services\Olympus\configurator.exe"; Parameters: -a {code:GetAddress} -c {code:GetClientPort} -b {code:GetBackendPort} -p {code:GetPassword} -bp {code:GetBluePassword} -rp {code:GetRedPassword} +[Registry] +Root: HKCU; Subkey: "Environment"; ValueType: string; ValueName: "DCSOLYMPUS_PATH"; ValueData: "{app}\Mods\Services\Olympus"; Flags: preservestringtype +Root: HKCU; Subkey: "Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};%DCSOLYMPUS_PATH%\bin"; Check: NeedsAddPath('%DCSOLYMPUS_PATH%\bin'); + +[Setup] +; Tell Windows Explorer to reload the environment +ChangesEnvironment=yes + +[Icons] +Name: "{userdesktop}\DCS Olympus Client"; Filename: "{app}\Mods\Services\Olympus\client\bin\nw\nw.exe"; Tasks: desktopicon; IconFilename: "{app}\Mods\Services\Olympus\img\olympus.ico"; Check: CheckLocalInstall +Name: "{userdesktop}\DCS Olympus Server"; Filename: "{app}\Mods\Services\Olympus\client\bin\node\node.exe"; Tasks: desktopicon; IconFilename: "{app}\Mods\Services\Olympus\img\olympus_server.ico"; WorkingDir: "{app}\Mods\Services\Olympus\client"; Parameters: ".\bin\www"; Check: CheckServerInstall +Name: "{userdesktop}\DCS Olympus Configurator"; Filename: "{app}\Mods\Services\Olympus\configurator.exe"; Tasks: desktopicon; IconFilename: "{app}\Mods\Services\Olympus\img\olympus_configurator.ico"; Check: CheckServerInstall + [Code] function NeedsAddPath(Param: string): boolean; var @@ -63,17 +81,6 @@ begin Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0; end; -[Registry] -Root: HKCU; Subkey: "Environment"; ValueType: string; ValueName: "DCSOLYMPUS_PATH"; ValueData: "{app}\Mods\Services\Olympus"; Flags: preservestringtype -Root: HKCU; Subkey: "Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};%DCSOLYMPUS_PATH%\bin"; Check: NeedsAddPath('%DCSOLYMPUS_PATH%\bin'); - -[Setup] -; Tell Windows Explorer to reload the environment -ChangesEnvironment=yes - -[Icons] -Name: "{userdesktop}\DCS Olympus Client"; Filename: "{app}\Mods\Services\Olympus\client\nw.exe"; Tasks: desktopicon; IconFilename: "{app}\Mods\Services\Olympus\img\olympus.ico" - [Code] var lblLocalInstall: TLabel; @@ -201,7 +208,7 @@ begin Width := ScaleX(340); Height := ScaleY(13); WordWrap := True; - Caption := 'Select this to install DCS Olympus on a dedicated server. DCS Olympus will be reachable by external clients. NOTE: to enable external connections, port forwarding must be enabled. By default, ports 3000 and 30000 must be forwarded on TCP and UDP.'; + Caption := 'Select this to install DCS Olympus on a dedicated server. DCS Olympus will be reachable by external clients. NOTE: to enable external connections, TCP port forwarding must be enabled on the selected ports.'; end; { txtServerInstall } @@ -424,6 +431,26 @@ begin PasswordPage:= frmPassword_CreatePage(AddressPage); end; +function CheckLocalInstall(): boolean; +begin + if txtLocalInstall.Checked then begin + Result := True + end else + begin + Result := False + end +end; + +function CheckServerInstall(): boolean; +begin + if txtLocalInstall.Checked then begin + Result := False + end else + begin + Result := True + end +end; + function GetAddress(Value: string): string; begin if txtLocalInstall.Checked then begin diff --git a/olympus.json b/olympus.json index 209d3da7..026732e5 100644 --- a/olympus.json +++ b/olympus.json @@ -1,19 +1,19 @@ { - "server": { - "address": "localhost", - "port": 30000 - }, - "authentication": { - "gameMasterPassword": "password", - "blueCommanderPassword": "bluepassword", - "redCommanderPassword": "redpassword" - }, - "client": { - "port": 3000, - "elevationProvider": { - "provider": "https://srtm.fasma.org/{lat}{lng}.SRTMGL3S.hgt.zip", - "username": null, - "password": null - } - } -} + "server": { + "address": "localhost", + "port": 3001 + }, + "authentication": { + "gameMasterPassword": "4b8823ed9e5c2392ab4a791913bb8ce41956ea32e308b760eefb97536746dd33", + "blueCommanderPassword": "b0ea4230c1558c5313165eda1bdb7fced008ca7f2ca6b823fb4d26292f309098", + "redCommanderPassword": "b0ea4230c1558c5313165eda1bdb7fced008ca7f2ca6b823fb4d26292f309098" + }, + "client": { + "port": 3000, + "elevationProvider": { + "provider": "https://srtm.fasma.org/{lat}{lng}.SRTMGL3S.hgt.zip", + "username": null, + "password": null + } + } +} \ No newline at end of file diff --git a/scripts/python/.vscode/launch.json b/scripts/python/.vscode/launch.json index f60a1b52..306f58eb 100644 --- a/scripts/python/.vscode/launch.json +++ b/scripts/python/.vscode/launch.json @@ -10,8 +10,7 @@ "request": "launch", "program": "${file}", "console": "integratedTerminal", - "justMyCode": true, - "args": ["groundunit"] + "justMyCode": true } ] } \ No newline at end of file diff --git a/scripts/python/build_configurator.bat b/scripts/python/build_configurator.bat deleted file mode 100644 index 60934864..00000000 --- a/scripts/python/build_configurator.bat +++ /dev/null @@ -1,4 +0,0 @@ -python -m venv venv -call ./venv/Scripts/activate -pip install pyinstaller -python -m PyInstaller configurator.py --onefile \ No newline at end of file diff --git a/scripts/python/configurator.py b/scripts/python/configurator.py deleted file mode 100644 index 3fcbcda3..00000000 --- a/scripts/python/configurator.py +++ /dev/null @@ -1,67 +0,0 @@ -import argparse, json - -def main(): - parser = argparse.ArgumentParser( - prog='DCS Olympus configurator', - description='This software allows to edit the DCS Olympus configuration file', - epilog='') - - parser.add_argument('-a', '--address') - parser.add_argument('-c', '--clientPort') - parser.add_argument('-b', '--backendPort') - parser.add_argument('-p', '--password') - parser.add_argument('-bp', '--bluePassword') - parser.add_argument('-rp', '--redPassword') - - args = parser.parse_args() - - with open("olympus.json", "r") as fp: - config = json.load(fp) - - if (args.address is not None): - config["server"]["address"] = args.address - print(f"Address set to {args.address}") - else: - print("No address provided, skipping...") - - if args.backendPort is not None: - if args.backendPort.isdecimal(): - config["server"]["port"] = int(args.backendPort) - print(f"Backend port set to {args.backendPort}") - else: - print(f"Invalid backend port provided {args.backendPort}") - else: - print("No backend port provided, skipping...") - - if (args.password is not None): - config["authentication"]["gameMasterPassword"] = args.password - print(f"Game Master password set to {args.password}") - else: - print("No Game Master password provided, skipping...") - - if (args.bluePassword is not None): - config["authentication"]["blueCommanderPassword"] = args.bluePassword - print(f"Blue Commander password set to {args.bluePassword}") - else: - print("No Blue Commander password provided, skipping...") - - if (args.redPassword is not None): - config["authentication"]["redCommanderPassword"] = args.redPassword - print(f"Red Commander password set to {args.redPassword}") - else: - print("No Red Commander password provided, skipping...") - - if args.clientPort is not None: - if args.clientPort.isdecimal(): - config["client"]["port"] = int(args.clientPort) - print(f"Client port set to {args.clientPort}") - else: - print(f"Invalid client port provided {args.clientPort}") - else: - print("No client port provided, skipping...") - - with open("olympus.json", "w") as fp: - json.dump(config, fp, indent = 4) - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/scripts/python/configurator/build_configurator.bat b/scripts/python/configurator/build_configurator.bat new file mode 100644 index 00000000..8377f8b3 --- /dev/null +++ b/scripts/python/configurator/build_configurator.bat @@ -0,0 +1,5 @@ +python -m venv venv +call ./venv/Scripts/activate +pip install pyinstaller +pip install PySimpleGUI +python -m PyInstaller configurator.py --onefile --noconsole \ No newline at end of file diff --git a/scripts/python/configurator/configurator.py b/scripts/python/configurator/configurator.py new file mode 100644 index 00000000..c3df820f --- /dev/null +++ b/scripts/python/configurator/configurator.py @@ -0,0 +1,136 @@ +import argparse, json +import PySimpleGUI as sg +import hashlib + +# Apply the values to the olympus.json config file +def apply_values(args): + with open("olympus.json", "r") as fp: + config = json.load(fp) + + if args.address is not None and args.address != "": + config["server"]["address"] = args.address + print(f"Address set to {args.address}") + else: + print("No address provided, skipping...") + + if args.backendPort is not None and args.backendPort != "": + # The backend port must be a numerical value + if args.backendPort.isdecimal(): + config["server"]["port"] = int(args.backendPort) + print(f"Backend port set to {args.backendPort}") + else: + print(f"Invalid backend port provided: {args.backendPort}") + else: + print("No backend port provided, skipping...") + + if args.clientPort is not None and args.clientPort != "": + # The client port must be a numerical value + if args.clientPort.isdecimal(): + config["client"]["port"] = int(args.clientPort) + print(f"Client port set to {args.clientPort}") + else: + print(f"Invalid client port provided: {args.clientPort}") + else: + print("No client port provided, skipping...") + + if args.password is not None and args.password != "": + config["authentication"]["gameMasterPassword"] = hashlib.sha256(args.password.encode()).hexdigest() + print(f"Game Master password set to {args.password}") + else: + print("No Game Master password provided, skipping...") + + if args.bluePassword is not None and args.bluePassword != "": + config["authentication"]["blueCommanderPassword"] = hashlib.sha256(args.redPassword.encode()).hexdigest() + print(f"Blue Commander password set to {args.bluePassword}") + else: + print("No Blue Commander password provided, skipping...") + + if args.redPassword is not None and args.redPassword != "": + config["authentication"]["redCommanderPassword"] = hashlib.sha256(args.redPassword.encode()).hexdigest() + print(f"Red Commander password set to {args.redPassword}") + else: + print("No Red Commander password provided, skipping...") + + with open("olympus.json", "w") as fp: + json.dump(config, fp, indent = 4) + +def main(): + # Parse the input arguments + parser = argparse.ArgumentParser( + prog="DCS Olympus configurator", + description="This software allows to edit the DCS Olympus configuration file", + epilog="") + + parser.add_argument("-a", "--address") + parser.add_argument("-c", "--clientPort") + parser.add_argument("-b", "--backendPort") + parser.add_argument("-p", "--password") + parser.add_argument("-bp", "--bluePassword") + parser.add_argument("-rp", "--redPassword") + + args = parser.parse_args() + + # If no argument was provided, start the GUI + if args.address is None and \ + args.backendPort is None and \ + args.clientPort is None and \ + args.password is None and \ + args.bluePassword is None and \ + args.redPassword is None: + print(f"No arguments provided, starting in graphical mode") + + with open("olympus.json", "r") as fp: + config = json.load(fp) + + old_values = {} + window = sg.Window("DCS Olympus configurator", + [[sg.T("DCS Olympus configurator", font=("Helvetica", 14, "bold")), sg.Push(), sg.Image(".\\img\\configurator_logo.png", size = (50, 50))], + [sg.T("")], + [sg.T("Address"), sg.Push(), sg.In(size=(30, 10), default_text=config["server"]["address"], key="address")], + [sg.T("Backend port"), sg.Push(), sg.In(size=(30, 10), default_text=config["server"]["port"], key="backendPort", enable_events=True)], + [sg.T("Webserver port"), sg.Push(), sg.In(size=(30, 10), default_text=config["client"]["port"], key="clientPort", enable_events=True)], + [sg.T("Game Master password"), sg.Push(), sg.In(size=(30, 10), password_char="*", key="password")], + [sg.T("Blue Commander password"), sg.Push(), sg.In(size=(30, 10), password_char="*", key="bluePassword")], + [sg.T("Red Commander password"), sg.Push(), sg.In(size=(30, 10), password_char="*", key="redPassword")], + [sg.T("Note: Empty fields will retain their original values")], + [sg.T("")], + [sg.B("Apply"), sg.B("Exit"), sg.T("Remember to restart DCS Server and any running mission", font=("Helvetica", 10, "bold"))]], + icon = ".\\img\\olympus_configurator.ico") + + while True: + event, values = window.read() + + # The backend and client ports must be numerical. Enforce it. + if event == "backendPort": + if values["backendPort"].isdecimal() or values["backendPort"] == "": + old_values["backendPort"] = values["backendPort"] + else: + window["backendPort"].update(old_values["backendPort"] if "backendPort" in old_values else config["server"]["port"]) + + if event == "clientPort": + if values["clientPort"].isdecimal() or values["clientPort"] == "": + old_values["clientPort"] = values["clientPort"] + else: + window["clientPort"].update(old_values["clientPort"] if "clientPort" in old_values else config["client"]["port"]) + + # Update the config file + if event == "Apply": + args.address = values["address"] + args.backendPort = values["backendPort"] + args.clientPort = values["clientPort"] + args.password = values["password"] + args.bluePassword = values["bluePassword"] + args.redPassword = values["redPassword"] + apply_values(args) + sg.Popup("DCS Olympus configuration updated") + + if event == sg.WIN_CLOSED or event == "Exit": + window.close() + break + + # If any argument was provided, run in headless mode + else: + apply_values(args) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/scripts/python/configurator.spec b/scripts/python/configurator/configurator.spec similarity index 97% rename from scripts/python/configurator.spec rename to scripts/python/configurator/configurator.spec index 70674949..48ea3c25 100644 --- a/scripts/python/configurator.spec +++ b/scripts/python/configurator/configurator.spec @@ -35,7 +35,7 @@ exe = EXE( upx=True, upx_exclude=[], runtime_tmpdir=None, - console=True, + console=False, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, diff --git a/scripts/python/data.csv b/scripts/python/data.csv deleted file mode 100644 index 6147bce6..00000000 --- a/scripts/python/data.csv +++ /dev/null @@ -1,424 +0,0 @@ -Name,Enabled,Database,Type,Label,Short label,Coalition,Era,Can target point,Can rearm,Acquisition range [m],Engagement range [m],Description,Abilities (comma separate values),Notes,ChatGPT description -A-10C_2,yes,Aircraft,Aircraft,A-10C Warthog,10,blue,Late Cold War,yes,no,,,"2 jet engine, straight wing, 1 crew, attack aircraft. Warthog",Boom AAR,"Fox 2, gun, Dumb bombs, smart bombs, rockets, ATGMs, can AAR, subsonic,", -A-20G,yes,Aircraft,Aircraft,A-20G Havoc,A20,blue,WW2,yes,no,,,"2 propeller, straight wing, 3 crew, medium attack bomber. Havoc",,"Dumb bomb, gun, subsonic,", -A-50,yes,Aircraft,Aircraft,A-50 Mainstay,A50,red,Late Cold War,no,no,,,"4 jet engine, swept wing, 15 crew. NATO reporting name: Mainstay",Airbourne early warning,"Airbourne early warning, subsonic,", -AJS37,yes,Aircraft,Aircraft,AJS37 Viggen,37,blue,Mid Cold War,yes,no,,,"Single jet engine, delta wing, 1 crew, attack aircraft. Viggen",,"Fox 2, dumb bombs, rockets and ATGMs, antiship, supersonic", -An-26B,yes,Aircraft,Aircraft,An-26B Curl,26,red,Mid Cold War,no,no,,,"2 turboprop, straight wing, 5 crew, cargo and passenger aircraft. NATO reporting name: Curl",,"Subsonic,", -An-30M,yes,Aircraft,Aircraft,An-30M Clank,30,red,Mid Cold War,no,no,,,"2 turboprop, straight wing, 7 crew, weather reseach aircraft. NATO reporting name: Clank",,"Subsonic,", -AV8BNA,yes,Aircraft,Aircraft,AV8BNA Harrier,8,blue,Late Cold War,yes,no,,,"Single jet engine, swept wing, 1 crew, all weather, VTOL attack aircraft. Harrier",Drogue AAR,"Fox 2 and gunpod, Dumb and smart bombs, ATGMs, SEAD, can AAR, transonic,", -B-1B,yes,Aircraft,Aircraft,B-1B Lancer,1,blue,Late Cold War,yes,no,,,"4 jet engine, swing wing, 2 crew bomber. Lancer",,"dumb and smart bombs, supersonic,", -B-52H,yes,Aircraft,Aircraft,B-52H Stratofortress,52,blue,Early Cold War,yes,no,,,"8 jet engine, swept wing, 6 crew bomber. Stratofortress",,"Dumb and smart bombs, subsonic,", -Bf-109K-4,yes,Aircraft,Aircraft,Bf-109K-4 Fritz,109,red,WW2,yes,no,,,"Single propeller, straight wing, 1 crew. 109",,"Guns, Subsonic,", -C-101CC,yes,Aircraft,Aircraft,C-101CC,101,blue,Late Cold War,yes,no,,,"Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet",,"Fox 2, Dumb bombs, rockets, gunpod, subsonic,", -C-130,yes,Aircraft,Aircraft,C-130 Hercules,130,blue,Early Cold War,no,no,,,"4 turboprop, stright wing, 3 crew. Hercules",,Subsonic, -C-17A,yes,Aircraft,Aircraft,C-17A Globemaster,C17,blue,Modern,no,no,,,"4 jet engine, swept wing, 3 crew. Globemaster",,Subsonic, -E-2C,yes,Aircraft,Aircraft,E-2C Hawkeye,2C,blue,Mid Cold War,no,no,,,"2 turboprop, straight wing, 5 crew. Hawkeye",Airbourne early warning,Subsonic, -E-3A,yes,Aircraft,Aircraft,E-3A Sentry,E3,blue,Mid Cold War,no,no,,,"4 jet engine, swept wing, 17 crew. Sentry",Airbourne early warning,Subsonic, -F-117A,yes,Aircraft,Aircraft,F-117A Nighthawk,117,blue,Late Cold War,yes,no,,,"2 jet engine, delta wing, 1 crew. Nighthawk",,"Smart bombs, Subsonic", -F-14A-135-GR,yes,Aircraft,Aircraft,F-14A-135-GR Tomcat,14A,blue,Mid Cold War,yes,no,,,"2 Jet engine, swing wing, 2 crew. Tomcat",Drogue AAR,"Fox 1,2,3, Gun, Dumb bombs, laser bombs and rockets, Can AAR, supersonic", -F-14B,yes,Aircraft,Aircraft,F-14B Tomcat,14B,blue,Late Cold War,yes,no,,,"2 Jet engine, swing wing, 2 crew. Tomcat",Drogue AAR,"Fox 1,2,3, Gun, Dumb bombs, laser bombs and rockets, Can AAR, supersonic", -F-15C,yes,Aircraft,Aircraft,F-15C Eagle,15,blue,Late Cold War,yes,no,,,"2 Jet engine, swept wing, 2 crew, all weather fighter. Eagle.",Boom AAR,"Fox 1,2,3, Gun, Can AAR, supersonic", -F-15E,yes,Aircraft,Aircraft,F-15E Strike Eagle,15,blue,Late Cold War,yes,no,,,"2 Jet engine, swept wing, 2 crew, all weather fighter and strike. Strike Eagle.",Boom AAR,"Fox 1,2,3, Gun, Dumb bombs, smart bombs, standoff, Can AAR, supersonic", -F-16C_50,yes,Aircraft,Aircraft,F-16C Viper,16,blue,Late Cold War,yes,no,,,"Single jet engine, swept wing, 1 crew, all weather fighter and strike. Viper.",Boom AAR,"Fox 2, 3 and gun, Dumb and smart bombs, rockets and ATGMs, standoff, Can AAR, supersonic,", -F-4E,yes,Aircraft,Aircraft,F-4E Phantom II,4,blue,Mid Cold War,yes,no,,,"2 Jet engine, swept wing, 2 crew. Phantom",Drogue AAR,"Fox 1,2, and Gun, Dumb bombs, laser bombs and rockets, Can AAR, supersonic", -F-5E-3,yes,Aircraft,Aircraft,F-5E Tiger,5,blue,Mid Cold War,yes,no,,,"2 Jet engine, swept wing, single crew. Tiger",,"Fox 1,2, and Gun, Dumb bombs, laser bombs and rockets, supersonic", -F-86F Sabre,yes,Aircraft,Aircraft,F-86F Sabre,86,blue,Early Cold War,yes,no,,,"Single engine, swept wing, 1 crew. Sabre",,"Fox 2 and Gun, Dumb bombs and rockets, Transonic", -FA-18C_hornet,yes,Aircraft,Aircraft,F/A-18C,18,blue,Late Cold War,yes,no,,,"2 Jet engine, swept wing, 1 crew, fighter and strike. Hornet",Drogue AAR,"Fox 1,2,3, Gun, Dumb bombs and smart bombs, rockets and ATGMs, antiship, SEAD, standoff, Can AAR, Supersonic", -FW-190A8,yes,Aircraft,Aircraft,FW-190A8 Bosch,190A8,red,WW2,yes,no,,,"Single propellor, straight wing, 1 crew. Shrike",,"Guns, dumb bombs and rockets, Subsonic", -FW-190D9,yes,Aircraft,Aircraft,FW-190D9 Jerry,190D9,red,WW2,yes,no,,,"Single propellor, straight wing, 1 crew. Shrike",,"Guns, dumb bombs and rockets, Subsonic", -H-6J,yes,Aircraft,Aircraft,H-6J Badger,H6,red,Mid Cold War,yes,no,,,"2 jet engine, swept wing, 4 crew bomber. Badger",,"Dumb bombs, standoff, antiship, Subsonic", -I-16,yes,Aircraft,Aircraft,I-16,I16,red,WW2,yes,no,,,"Single propellor, straight wing, 1 crew. Ishak",,"Guns, dumb bombs and rockets, Subsonic", -IL-76MD,yes,Aircraft,Aircraft,IL-76MD Candid,76,red,Mid Cold War,no,no,,,"4 jet engine, swept wing, 5 crew. Cargo and passenger aircraft. NATO reporting name: Candid",,Subsonic, -IL-78M,yes,Aircraft,Aircraft,IL-78M Midas,78,red,Late Cold War,no,no,,,"4 jet engine, swept wing, 6 crew. Tanker aircraft. NATO reporting name: Midas","Tanker, Drogue AAR","Droge tanker, Subsonic", -J-11A,yes,Aircraft,Aircraft,J-11A Flaming Dragon,11,red,Modern,yes,no,,,"2 Jet engine, swept wing, 1 crew, fighter and strike. NATO reporting name: Flanker",,"Fox 1, 2, 3, and Gun, Dumb bombs and rockets, Supersonic", -JF-17,yes,Aircraft,Aircraft,JF-17 Thunder,17,red,Modern,yes,no,,,"Single jet engine, swept wing, 1 crew, fighter and strike. Geoff",Drogue AAR,"Fox 1,2,3, Gun, Dumb bombs and smart bombs, rockets and ATGMs, antiship, SEAD, standoff, Can AAR, Supersonic", -KC-135,yes,Aircraft,Aircraft,KC-135 Stratotanker,35,blue,Early Cold War,no,no,,,"4 jet engine, swept wing, 3 crew. Tanker aircraft. Stratotanker","Tanker, Boom AAR","Boom tanker, Subsonic", -KC135MPRS,yes,Aircraft,Aircraft,KC-135 MPRS Stratotanker,35M,blue,Early Cold War,no,no,,,"4 jet engine, swept wing, 3 crew. Tanker aircraft. Stratotanker","Tanker, Drogue AAR","Droge tanker, Subsonic", -L-39ZA,yes,Aircraft,Aircraft,L-39ZA,39,red,Mid Cold War,yes,no,,,"Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet",,"Fox 2, Dumb bombs, rockets, gunpod, subsonic,", -M-2000C,yes,Aircraft,Aircraft,M-2000C Mirage,M2,blue,Late Cold War,yes,no,,,"Single jet engine, swept wing, 1 crew, fighter and strike.",Drogue AAR,"Fox 1, 2, gun, Dumb bombs and laser bombs, Can AAR Supersonic", -MB-339A,yes,Aircraft,Aircraft,MB-339A,39,blue,Mid Cold War,yes,no,,,"Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet",,"Fox 2, Dumb bombs, rockets, gunpod, subsonic,", -MiG-15bis,yes,Aircraft,Aircraft,MiG-15 Fagot,M15,red,Early Cold War,yes,no,,,"Single jet engine, swept wing, 1 crew. Fagot",,"Gun, Dumb bombs, Transonic", -MiG-19P,yes,Aircraft,Aircraft,MiG-19 Farmer,19,red,Early Cold War,yes,no,,,"Single jet engine, swept wing, 1 crew. Farmer",,"Fox 2, gun, Dumb bombs and rockets, Supersonic", -MiG-21Bis,yes,Aircraft,Aircraft,MiG-21 Fishbed,21,red,Mid Cold War,yes,no,,,"Single jet engine, swept wing, 1 crew. Fishbed",,"Fox 1, fox 2, gun, Dumb bombs, nukes, ATGMs, and rockets, Supersonic", -MiG-23MLD,yes,Aircraft,Aircraft,MiG-23 Flogger,23,red,Mid Cold War,yes,no,,,"Single jet engine, swing wing, 1 crew. Flogger",,"Fox1, fox 2, gun, Dumb bombs and rockets, Supersonic", -MiG-25PD,yes,Aircraft,Aircraft,MiG-25PD Foxbat,25,red,Mid Cold War,yes,no,,,"2 jet engine, swept wing, 1 crew. Foxbat",,"Fox1, fox 2, Supersonic", -MiG-25RBT,yes,Aircraft,Aircraft,MiG-25RBT Foxbat,25,red,Mid Cold War,yes,no,,,"2 jet engine, swept wing, 1 crew. Foxbat",,"Fox 2, Dumb bombs, Supersonic", -MiG-27K,yes,Aircraft,Aircraft,MiG-27K Flogger-D,27,red,Mid Cold War,yes,no,,,"Single jet engine, swing wing, 1 crew. Flogger",,"Fox 2 and gun, Dumb bombs and laser bombs, ATGMs, SEAD, Rockets, Supersonic", -MiG-29A,yes,Aircraft,Aircraft,MiG-29A Fulcrum,29A,red,Late Cold War,yes,no,,,"2 jet engine, swept wing, 1 crew. Flanker",Drogue AAR,"Fox 1 and fox 2, Gun, Dumb bombs, Rockets, Can AAR, Supersonic", -MiG-29S,yes,Aircraft,Aircraft,MiG-29S Fulcrum,29S,red,Late Cold War,yes,no,,,"2 jet engine, swept wing, 1 crew. Flanker",Drogue AAR,"Fox 1 and fox 2, Gun, Dumb bombs, Rockets, Can AAR, Supersonic", -MiG-31,yes,Aircraft,Aircraft,MiG-31 Foxhound,31,red,Late Cold War,yes,no,,,"2 jet engine, swept wing, 2 crew. Foxhound",Drogue AAR,"Fox 1 and fox 2, Gun, Can AAR, Supersonic", -Mirage-F1EE,yes,Aircraft,Aircraft,Mirage-F1EE,F1EE,blue,Mid Cold War,yes,no,,,"Single Jet engine, swept wing, 1 crew.",Drogue AAR,"Fox 1, fox 2, and gun, Dumb and laser bombs, and rockets, Can AAR, Supersonic", -MosquitoFBMkVI,yes,Aircraft,Aircraft,Mosquito FB MkVI,Mo,blue,WW2,yes,no,,,"2 propeller, straight wing, 2 crew. Mosquito.",,"Gun, dumb bomb, and rockets, Subsonic", -MQ-9 Reaper,yes,Aircraft,Aircraft,MQ-9 Reaper,9,blue,Modern,yes,no,,,"Single turboprop, straight wing, attack aircraft. Reaper",,"Laser bombs, smart bombs, ATGMs, subsonic", -P-47D-40,yes,Aircraft,Aircraft,P-47D Thunderbolt,P47,blue,WW2,yes,no,,,"Single propellor, straight wing, 1 crew. Thunderbolt",,"Gun, dumb bomb, and rockets, Subsonic", -P-51D-30-NA,yes,Aircraft,Aircraft,P-51D Mustang,P51,blue,WW2,yes,no,,,"Single propellor, straight wing, 1 crew. Mustang",,"Gun, dumb bomb, and rockets, Subsonic", -S-3B Tanker,yes,Aircraft,Aircraft,S-3B Tanker,S3B,blue,Early Cold War,no,no,,,"2 jet engine, straight wing, 4 crew. Viking","Tanker, Drogue AAR",Subsonic, -Su-17M4,yes,Aircraft,Aircraft,Su-17M4 Fitter,17M,red,Mid Cold War,yes,no,,,"Single jet engine, swept wing, 1 crew. Fitter",,"Fox 2 and gun, dumb bombs and rockets, Transonic", -Su-24M,yes,Aircraft,Aircraft,Su-24M Fencer,24,red,Mid Cold War,yes,no,,,"2 jet engine, swing wing, 2 crew. Fencer",,"Fox 2 and gun, Dumb and laser bombs, and rockets, Supersonic", -Su-25,yes,Aircraft,Aircraft,Su-25A Frogfoot,S25,red,Late Cold War,yes,no,,,"2 jet engine, swept wing, 1 crew. Frogfoot",,"Fox 2 and gun, Dumb bombs, rockets, and ATGMs, Subsonic", -Su-25,yes,Aircraft,Aircraft,Su-25T Frogfoot,S25,red,Late Cold War,yes,no,,,"2 jet engine, swept wing, 1 crew. Frogfoot",,"Fox 2 and gun, Dumb bombs, rockets, SEAD and ATGMs, Subsonic", -Su-27,yes,Aircraft,Aircraft,Su-27 Flanker,27,red,Late Cold War,yes,no,,,"2 jet engine, swept wing, 1 crew. Flanker",Drogue AAR,"Fox 1 and fox 2, Gun, Dumb bombs, Rockets, Can AAR, Supersonic", -Su-30,yes,Aircraft,Aircraft,Su-30 Super Flanker,30,red,Late Cold War,yes,no,,,"2 jet engine, swept wing, 1 crew. Flanker",Drogue AAR,"Fox 1,2,3, Gun, Dumb bombs, smart bombs, ATGMS, anti-ship and SEAD, Can AAR, supersonic", -Su-33,yes,Aircraft,Aircraft,Su-33 Navy Flanker,33,red,Late Cold War,yes,no,,,"2 jet engine, swept wing, 1 crew. Flanker",Drogue AAR,"Fox 1 and fox 2, Gun, Dumb bombs, Rockets, Can AAR, Supersonic", -Su-34,yes,Aircraft,Aircraft,Su-34 Hellduck,34,red,Modern,yes,no,,,"2 Jet engine, swept wing, 2 crew, all weather fighter and strike. Fullback",Drogue AAR,"Fox 1,2,3, Gun, Dumb bombs, smart bombs, anti-ship, SEAD, Can AAR, supersonic", -Tornado GR4,yes,Aircraft,Aircraft,Tornado GR4,GR4,blue,Late Cold War,yes,no,,,"2 jet engine, swing wing, 2 crew, all weather strike.",Drogue AAR,"Fox 2 and gun, Dumb and laser bombs, Anti-ship and SEAD, Can AAR", -Tornado IDS,yes,Aircraft,Aircraft,Tornado IDS,IDS,blue,Late Cold War,yes,no,,,"2 jet engine, swing wing, 2 crew, all weather strike.",Drogue AAR,"Fox 2 and gun, Dumb and laser bombs, Anti-ship and SEAD, Can AAR", -Tu-142,yes,Aircraft,Aircraft,Tu-142 Bear,142,red,Mid Cold War,yes,no,,,"4 turboprop, swept wing, 11 crew, bomber. Bear",,"Anti-ship missiles, Subsonic", -Tu-160,yes,Aircraft,Aircraft,Tu-160 Blackjack,160,red,Late Cold War,yes,no,,,"4 jet engine, swing wing, 4 crew bomber. Blackjack",,"Anti-ship missiles, Supersonic", -Tu-22M3,yes,Aircraft,Aircraft,Tu-22M3 Backfire,T22,red,Late Cold War,yes,no,,,"2 jet engine, swing wing, 4 crew bomber. Backfire",,"Dumb bombs and anti-ship missiles, Supersonic", -Tu-95MS,yes,Aircraft,Aircraft,Tu-95MS Bear,95,red,Mid Cold War,yes,no,,,"4 turboprop, swept wing, 6 crew, bomber. Bear",,"Anti-ship missiles, Subsonic", -1L13 EWR,yes,Ground Unit,EW Radar,Box Spring,1L13 EWR,red,Late Cold War,no,no,300000,0,EWR built on a truck trailer,,"500km range, 40km altitude",Box Spring: Mobile electronic warfare system designed to disrupt enemy communication and Radar systems. -2B11 mortar,yes,Ground Unit,Artillery,2B11 mortar,2B11 mortar,red,Late Cold War,yes,no,0,7000,Man portable 120mm mortar,,"0,5km-7km 12-15 rpm","2B11 mortar: Soviet 120mm towed mortar, known for its portability and effective indirect fire support." -2S6 Tunguska,yes,Ground Unit,AAA,SA-19 Tunguska,SA-19,red,Late Cold War,yes,no,18000,8000,2K22 Tunguska. Tracked self-propelled anti-aircraft 30mm guns and missiles,,"Can move, Radar gun, optical missiles, 5nm/12,000ft","SA-19 Tunguska: Russian self-propelled anti-aircraft weapon system, combining both guns and missiles for air defense." -55G6 EWR,yes,Ground Unit,EW Radar,Tall Rack,55G6 EWR,red,Early Cold War,no,no,400000,0,EWR built on a truck trailer,,"500km range, 40km altitude",Tall Rack: Naval electronic warfare system designed for electronic countermeasures. -5p73 s-125 ln,yes,Ground Unit,SAM Launcher,SA-3 Launcher,5p73 s-125 ln,red,Early Cold War,yes,no,0,18000,4 SA-3 missiles on a static emplacement. Requires grouping with SA-3 components,,10nm range,"SA-3 Launcher: Soviet surface-to-air missile launcher, part of the SA-3 Goa air defense system." -AA8,yes,Ground Unit,Unarmed,Firefighter Vehicle AA-7.2/60,Firefighter Vehicle AA-7.2/60,,,no,no,0,0,,,,Firefighter Vehicle AA-7.2/60: Firefighting vehicle equipped with a 7.2m telescopic ladder. -AAV7,yes,Ground Unit,Armoured Personnel Carrier,AAV7,AAV7,blue,Mid Cold War,yes,no,0,1200,Amphibious assault vehicle. Tracked,,"12,7mm machine gun, 64 km/h road, 13,5 km/h water",AAV7: Amphibious Assault Vehicle used by the United States Marine Corps for troop transport. -Allies_Director,no,Ground Unit,Unarmed,Allies Rangefinder (DRT),Allies Rangefinder (DRT),,,no,no,30000,0,,,,Allies Rangefinder (DRT): Allied artillery rangefinder for accurate target distance measurement. -ATMZ-5,yes,Ground Unit,Unarmed,ATMZ-5,ATMZ-5,red,Early Cold War,no,no,0,0,Refueler truck. Wheeled,,"unarmed, 75 km/h on road",ATMZ-5: Soviet pontoon bridge and ferry system used for river crossings. -ATZ-10,yes,Ground Unit,Unarmed,ATZ-10,ATZ-10,red,Early Cold War,no,no,0,0,Refueler truck. Wheeled,,"unarmed, 75 km/h on road",ATZ-10: Soviet military refueling vehicle used to refuel tanks and other military vehicles. -ATZ-5,yes,Ground Unit,Unarmed,Refueler ATZ-5,Refueler ATZ-5,,,no,no,0,0,,,,Refueler ATZ-5: Mobile refueling vehicle used for fueling military vehicles. -ATZ-60_Maz,yes,Ground Unit,Unarmed,Refueler ATZ-60 Tractor (MAZ-7410),Refueler ATZ-60 Tractor (MAZ-7410),,,no,no,0,0,,,,Refueler ATZ-60 Tractor (MAZ-7410): Military refueling tractor used for ground vehicle refueling. -Bedford_MWD,yes,Ground Unit,Unarmed,Truck Bedford,Truck Bedford,,,no,no,0,0,,,,Truck Bedford: British military truck used for various logistical purposes. -Blitz_36-6700A,yes,Ground Unit,Unarmed,Truck Opel Blitz,Truck Opel Blitz,,,no,yes,0,0,,,,Truck Opel Blitz: German military truck used during World War II. -BMD-1,yes,Ground Unit,Infantry Fighting Vehicle,BMD-1,BMD-1,red,Mid Cold War,yes,no,0,3000,Infantry fighting vehicle. Tracked. Amphibious,,"73mm gun, 7,62 gun, 70 km/h road, 10 km/h water",BMD-1: Airborne infantry fighting vehicle with amphibious capabilities used by the Soviet Union. -BMP-1,yes,Ground Unit,Infantry Fighting Vehicle,BMP-1,BMP-1,red,Mid Cold War,yes,no,0,3000,Infantry fighting vehicle. Tracked. Amphibious,,"ATGM, 73mm gun, 7,62 gun, 65 km/h road, 7 km/h water","BMP-1: Soviet infantry fighting vehicle, a pioneer in combining heavy firepower with troop transport." -BMP-2,yes,Ground Unit,Infantry Fighting Vehicle,BMP-2,BMP-2,red,Mid Cold War,yes,no,0,3000,Infantry fighting vehicle. Tracked. Amphibious,,"ATGM, 30mm gun, 7,62 gun, 65 km/h road, 7 km/h water","BMP-2: Upgraded version of the BMP-1, featuring enhanced weaponry and protection." -BMP-3,yes,Ground Unit,Infantry Fighting Vehicle,BMP-3,BMP-3,red,Late Cold War,yes,no,0,4000,Infantry fighting vehicle. Tracked. Amphibious,,"ATGM, 100mm gun, 30mm gun, 7,62 gun, 65 km/h road, 7 km/h water",BMP-3: Modern Russian infantry fighting vehicle with significant improvements in firepower and mobility. -bofors40,yes,Ground Unit,AAA,AAA Bofors 40mm,AAA Bofors 40mm,,,yes,no,0,4000,,,,AAA Bofors 40mm: Swedish-designed anti-aircraft gun with a 40mm caliber. -Boxcartrinity,yes,Ground Unit,Carriage,Flatcar,Flatcar,,,no,no,0,0,,,,Flatcar: Railway wagon with a flat platform for transporting heavy equipment. -BRDM-2,yes,Ground Unit,Armoured Car,BRDM-2,BRDM-2,red,Early Cold War,no,no,0,1600,Scout car. Wheeled. Amphibious,,"14,5mm gun, 7,62mm gun, 100 km/h road, 10 km/h water",BRDM-2: Amphibious armored reconnaissance vehicle used by various countries. -BTR_D,yes,Ground Unit,Armoured Personnel Carrier,BTR_D,BTR_D,red,Mid Cold War,yes,no,0,3000,Armoured persononel carrier. Tracked.,,"ATGM, 7,62mm gun, 61 km/h road",BTR-D: Soviet airborne multi-purpose tracked vehicle designed for troop transport. -BTR-80,yes,Ground Unit,Armoured Personnel Carrier,BTR-80,BTR-80,red,Late Cold War,yes,no,0,1600,Armoured persononel carrier. Wheeled. Amphibious,,"14,5mm gun, 7,62mm gun, 80 km/h road, 10 km/h water",BTR-80: 8x8 wheeled armored personnel carrier known for its versatility and mobility. -BTR-82A,yes,Ground Unit,Infantry Fighting Vehicle,Infantry Fighting Vehicle BTR-82A,Infantry Fighting Vehicle BTR-82A,,,yes,no,0,2000,,,,Infantry Fighting Vehicle BTR-82A: Russian infantry fighting vehicle known for its versatility. -Bunker,yes,Ground Unit,Structure,Bunker,Bunker,,,no,no,0,800,Concrete bunker. Structure. Fixed Position.,,"12,7 mm machine gun,",Bunker: Fortified military structure providing protection and strategic position. -CCKW_353,no,Ground Unit,Unarmed,"Truck GMC ""Jimmy"" 6x6","Truck GMC ""Jimmy"" 6x6",,,no,no,0,0,,,,"Truck GMC ""Jimmy"" 6x6: American military truck used for various logistical purposes." -Centaur_IV,no,Ground Unit,Tank,Tk Centaur IV CS,Tk Centaur IV CS,,,yes,no,0,6000,,,,Tk Centaur IV CS: British cruiser tank variant with close support modifications. -Challenger2,yes,Ground Unit,Tank,Challenger2,Challenger2,blue,Modern,yes,no,0,3500,Main battle tank. Tracked. Modern and heavily armoured.,,"120mm gun, 7,62 mm gun x 2, 59 km/h road, 40 km/h off,",Challenger 2: British main battle tank known for its armor protection and firepower. -Chieftain_mk3,yes,Ground Unit,Tank,Tank Chieftain Mk.3,Tank Chieftain Mk.3,,,yes,no,0,3500,,,,Tank Chieftain Mk.3: British main battle tank known for its heavy armor. -Churchill_VII,no,Ground Unit,Tank,Tk Churchill VII,Tk Churchill VII,,,yes,no,0,3000,,,,Tk Churchill VII: British infantry tank known for its heavy armor. -Coach a passenger,yes,Ground Unit,Carriage,Passenger Car,Passenger Car,,,no,no,0,0,,,,Passenger Car: Railway carriage for passenger transport. -Coach a platform,yes,Ground Unit,Carriage,Coach Platform,Coach Platform,,,no,no,0,0,,,,Coach Platform: Railway wagon with a flat platform for transporting heavy equipment. -Coach a tank blue,yes,Ground Unit,Carriage,Tank Car blue,Tank Car blue,,,no,no,0,0,,,,Tank Car blue: Railway tank car used for transporting liquids. -Coach a tank yellow,yes,Ground Unit,Carriage,Tank Car yellow,Tank Car yellow,,,no,no,0,0,,,,Tank Car yellow: Railway tank car used for transporting liquids. -Coach cargo,yes,Ground Unit,Carriage,Freight Van,Freight Van,,,no,no,0,0,,,,Freight Van: Railway wagon used for transporting goods. -Coach cargo open,yes,Ground Unit,Carriage,Open Wagon,Open Wagon,,,no,no,0,0,,,,Open Wagon: Open railway wagon for bulk cargo. -Cobra,yes,Ground Unit,Armoured Car,Otokar Cobra,Cobra,blue,Modern,yes,no,0,1200,"Armoured car, MRAP. Wheeled.",,"12,7 mm machine gun,","Otokar Cobra: Turkish armored vehicle used for reconnaissance, patrol, and security missions." -Cromwell_IV,no,Ground Unit,Tank,Tk Cromwell IV,Tk Cromwell IV,,,yes,no,0,3000,,,,Tk Cromwell IV: British cruiser tank used during World War II. -Daimler_AC,no,Ground Unit,Armoured Car,Car Daimler Armored,Car Daimler Armored,,,yes,no,0,2000,,,,Car Daimler Armored: British armored car used for reconnaissance. -Dog Ear radar,yes,Ground Unit,SAM Track Radar,Dog Ear,Dog Ear Radar,red,Mid Cold War,no,no,35000,0,9S80-1 Sborka Mobile. Tracked fire control Radar that can integrate with missile and gun systems.,,"90 km detection range, 35 km tracking range,",Dog Ear: Mobile Radar system used for early warning and target acquisition. -DR_50Ton_Flat_Wagon,no,Ground Unit,Carriage,DR 50-ton flat wagon,DR 50-ton flat wagon,,,no,no,0,0,,,,DR 50-ton flat wagon: Railway flat wagon with a capacity for heavy loads. -DRG_Class_86,no,Ground Unit,Locomotive,Loco DRG Class 86,Loco DRG Class 86,,,no,no,0,0,,,,Loco DRG Class 86: German steam locomotive used for transportation. -Electric locomotive,yes,Ground Unit,Locomotive,Loco VL80 Electric,Loco VL80 Electric,,,no,no,0,0,,,,Loco VL80 Electric: Electric locomotive used for transportation. -Elefant_SdKfz_184,no,Ground Unit,Tank,Self Propelled Gun Elefant TD,Self Propelled Gun Elefant TD,,,yes,no,0,6000,,,,Self Propelled Gun Elefant TD: German tank destroyer with heavy armor. -ES44AH,yes,Ground Unit,Locomotive,Loco ES44AH,Loco ES44AH,,,no,no,0,0,,,,Loco ES44AH: Diesel-electric locomotive used for freight transportation. -fire_control,no,Ground Unit,Structure,Bunker with Fire Control Center,Bunker with Fire Control Center,,,no,no,0,1100,,,,Bunker with Fire Control Center: Fortified bunker with integrated fire control. -flak18,yes,Ground Unit,AAA,"AAA 8,8cm Flak 18","AAA 8,8cm Flak 18",,,yes,no,0,5000,,,,"AAA 8,8cm Flak 18: German anti-aircraft gun with an 88mm caliber." -Flakscheinwerfer_37,no,Ground Unit,AAA,SL Flakscheinwerfer 37,SL Flakscheinwerfer 37,,,yes,no,15000,15000,,,,SL Flakscheinwerfer 37: German searchlight used for anti-aircraft defense. -FPS-117,yes,Ground Unit,EW Radar,EW Radar,EWR AN/FPS-117 Radar,,,no,no,463000,0,,,,EWR AN/FPS-117 Radar: Early warning Radar system used for surveillance. -FPS-117 Dome,yes,Ground Unit,EW Radar,EWR AN/FPS-117 Radar (domed),EWR AN/FPS-117 Radar (domed),,,no,no,400000,0,,,,EWR AN/FPS-117 Radar (domed): Early warning Radar system with a domed radome. -FPS-117 ECS,yes,Ground Unit,EW Radar,EWR AN/FPS-117 ECS,EWR AN/FPS-117 ECS,,,no,no,0,0,,,,EWR AN/FPS-117 ECS: Early warning Radar system with an environmental control system. -FuMG-401,no,Ground Unit,EW Radar,EWR FuMG-401 Freya LZ,EWR FuMG-401 Freya LZ,,,no,no,160000,0,,,,EWR FuMG-401 Freya LZ: German early warning Radar system. -FuSe-65,no,Ground Unit,EW Radar,EWR FuSe-65 Würzburg-Riese,EWR FuSe-65 Würzburg-Riese,,,no,no,60000,0,,,,EWR FuSe-65 Würzburg-Riese: German Radar system used for target acquisition. -GAZ-3307,yes,Ground Unit,Unarmed,GAZ-3307,GAZ-3307,red,Early Cold War,no,no,0,0,"Civilian truck, single axle, wheeled",,56 mph,GAZ-3307: Soviet/Russian military truck used for various logistics purposes. -GAZ-3308,yes,Ground Unit,Unarmed,GAZ-3308,GAZ-3308,red,Early Cold War,no,yes,0,0,"Military truck, single axle, canvas covered cargo bay. wheeled",,"Rearms ground units of same coaltion, 56 mph","GAZ-3308: Military version of the GAZ-3307, widely used for transportation." -GAZ-66,yes,Ground Unit,Unarmed,GAZ-66,GAZ-66,red,Early Cold War,no,yes,0,0,"Military truck, single axle, open cargo bay. wheeled",,90 km/h,GAZ-66: Soviet/Russian military truck known for its off-road capabilities. -generator_5i57,yes,Ground Unit,Unarmed,Diesel Power Station 5I57A,Diesel Power Station 5I57A,,,no,no,0,0,,,,Diesel Power Station 5I57A: Mobile diesel power station used for electricity generation. -Gepard,yes,Ground Unit,AAA,Gepard,Gepard,blue,Late Cold War,yes,no,15000,4000,Tracked self-propelled anti-aircraft 35mm guns,,"65 km/h road, Range 3km",Gepard: German anti-aircraft tank designed to protect armored formations. -German_covered_wagon_G10,no,Ground Unit,Carriage,Wagon G10 (Germany),Wagon G10 (Germany),,,no,no,0,0,,,,Wagon G10 (Germany): German railway wagon for transporting goods. -German_tank_wagon,no,Ground Unit,Carriage,Tank Car (Germany),Tank Car (Germany),,,no,no,0,0,,,,Tank Car (Germany): German railway tank car for transporting liquids. -Grad_FDDM,yes,Ground Unit,Artillery,Grad MRL FDDM (FC),Grad MRL FDDM (FC),,,yes,no,0,1000,,,,Grad MRL FDDM (FC): Multiple rocket launcher system with fire direction and control module. -Grad-URAL,yes,Ground Unit,Unarmed,Grad,Grad,red,Mid Cold War,no,no,0,19000,"Military truck, single axle, open cargo bay. wheeled",,"80 km/h, Rearms ground units of same coaltion?",Grad: Multiple rocket launcher system capable of delivering devastating firepower. -Hawk cwar,yes,Ground Unit,SAM Search Radar,Hawk Continous Wave Acquisition Radar,Hawk cwar,blue,Early Cold War,no,no,70000,0,Hawk site Aquisition Radar,,70km range,"Hawk Continuous Wave Acquisition Radar: Part of the Hawk air defense system, used for target acquisition." -Hawk ln,yes,Ground Unit,SAM Launcher,Hawk Launcher,Hawk ln,blue,Late Cold War,no,no,0,45000,Hawk site missile laucher. 3 missiles. Needs rest of site to fuction,,,Hawk Launcher: Mobile launcher for the Hawk surface-to-air missile system. -Hawk pcp,yes,Ground Unit,SAM Support vehicle,Hawk Platoon Command Post,Hawk pcp,blue,Late Cold War,no,no,0,0,Hawk site command post. Medium sized trailer.,,,Hawk Platoon Command Post: Command and control center for the Hawk air defense system. -Hawk SAM Battery,yes,Ground Unit,SAM Site,Hawk SAM Battery,Hawk SAM Battery,blue,Early Cold War,no,no,90000,0,Multiple unit SAM site,,"25nm range, >50,000ft alititude",Hawk SAM Battery: Surface-to-air missile system providing air defense capabilities. -Hawk sr,yes,Ground Unit,SAM Search Radar,Hawk Search Radar,Hawk sr,blue,Early Cold War,no,no,90000,0,Hawk site search Radar. Medium sized trailer,,,Hawk Search Radar: Radar system used in conjunction with the Hawk air defense system. -Hawk tr,yes,Ground Unit,SAM Track Radar,Hawk Track Radar,Hawk tr,blue,Early Cold War,no,no,90000,0,Hawk site track Radar. Medium sized trailer,,,Hawk Track Radar: Radar system used for tracking targets in the Hawk air defense system. -HEMTT TFFT,yes,Ground Unit,Unarmed,HEMTT TFFT,HEMTT TFFT,blue,Late Cold War,no,no,0,0,"Military truck, 2 axle, firefigther. wheeled",,40kn on road,HEMTT TFFT: Heavy Expanded Mobility Tactical Truck used for transport and logistics. -HL_B8M1,yes,Ground Unit,Artillery,MLRS HL with B8M1 80mm,MLRS HL with B8M1 80mm,,,yes,no,5000,5000,,,,MLRS HL with B8M1 80mm: Self-propelled multiple rocket launcher system with 80mm rockets. -HL_DSHK,yes,Ground Unit,Armoured Car,Scout HL with DSHK 12.7mm,Scout HL with DSHK 12.7mm,,,yes,no,5000,1200,,,,Scout HL with DSHK 12.7mm: Scout vehicle with a mounted DShK heavy machine gun. -HL_KORD,yes,Ground Unit,Armoured Car,Scout HL with KORD 12.7mm,Scout HL with KORD 12.7mm,,,yes,no,5000,1200,,,,Scout HL with KORD 12.7mm: Scout vehicle with a mounted KORD heavy machine gun. -HL_ZU-23,yes,Ground Unit,AAA,SPAAA HL with ZU-23,SPAAA HL with ZU-23,,,yes,no,5000,2500,,,,SPAAA HL with ZU-23: Self-propelled anti-aircraft artillery with dual ZU-23 autocannons. -Horch_901_typ_40_kfz_21,yes,Ground Unit,Unarmed,LUV Horch 901 Staff Car,LUV Horch 901 Staff Car,,,no,no,0,0,,,,LUV Horch 901 Staff Car: German military staff car. -house1arm,yes,Ground Unit,Structure,house1arm,house1arm,,,no,no,0,800,,,,house1arm: Fortified building with additional armor. -house2arm,yes,Ground Unit,Structure,house2arm,house2arm,,,no,no,0,800,,,,house2arm: Fortified building with additional armor. -houseA_arm,yes,Ground Unit,Structure,houseA_arm,houseA_arm,,,no,no,0,800,,,,houseA_arm: Fortified building with additional armor. -HQ-7_LN_EO,yes,Ground Unit,SAM Track Radar,HQ-7 LN Electro-Optics,HQ-7 LN Electro-Optics,,,no,no,8000,12000,,,,HQ-7 LN Electro-Optics: Chinese air defense system with electro-optical tracking. -HQ-7_LN_SP,yes,Ground Unit,SAM Launcher,HQ-7 Self-Propelled LN,HQ-7 Self-Propelled LN,,,no,no,15000,15000,,,,HQ-7 Self-Propelled LN: Chinese self-propelled air defense system. -HQ-7_STR_SP,yes,Ground Unit,SAM Track Radar,HQ-7 Self-Propelled STR,HQ-7 Self-Propelled STR,,,no,no,30000,0,,,,HQ-7 Self-Propelled STR: Chinese air defense system with Radar tracking. -Hummer,yes,Ground Unit,Armoured Car,Hummer,Hummer,blue,Mid Cold War,no,no,0,0,"Military car, single axle, wheeled",,113 km/h road,"Hummer: Versatile military vehicle used for various purposes, including transport and reconnaissance." -hy_launcher,yes,Ground Unit,Missile system,AShM SS-N-2 Silkworm,AShM SS-N-2 Silkworm,,,yes,no,100000,100000,,,,AShM SS-N-2 Silkworm: Soviet anti-ship missile system. -Igla manpad INS,yes,Ground Unit,MANPADS,SA-18 Igla manpad INS,Igla manpad INS,red,Late Cold War,no,no,5000,5200,9K38/SA-18 Man portable air defence. Heatseaker,,"5,2km range, 3,5km altitude","SA-18 Igla manpad INS: Portable, man-portable air defense system designed for infantry use." -IKARUS Bus,yes,Ground Unit,Unarmed,IKARUS Bus,IKARUS Bus,red,Mid Cold War,no,no,0,0,Civilian Bus. Yellow. Bendy bus,,80km/h road,IKARUS Bus: Military transport bus used for troop movement. -Infantry AK,yes,Ground Unit,Infantry,Infantry AK,Infantry AK,red,Mid Cold War,yes,no,0,500,Single infantry carrying AK-74,,8kn max speed,"Infantry AK: Standard issue assault rifle for infantry, known for its reliability and firepower." -Infantry AK Ins,yes,Ground Unit,Infantry,Insurgent AK-74,Insurgent AK-74,,,yes,no,0,500,,,,Insurgent AK-74: Variant of the AK-74 rifle used by insurgent forces. -Infantry AK ver2,yes,Ground Unit,Infantry,Infantry AK-74 Rus ver2,Infantry AK-74 Rus ver2,,,yes,no,0,500,,,,Infantry AK-74 Rus ver2: Variant of the AK-74 rifle used by Russian infantry. -Infantry AK ver3,yes,Ground Unit,Infantry,Infantry AK-74 Rus ver3,Infantry AK-74 Rus ver3,,,yes,no,0,500,,,,Infantry AK-74 Rus ver3: Variant of the AK-74 rifle used by Russian infantry. -Infantry Animated,yes,Ground Unit,Infantry,Infantry,Infantry,,,yes,no,0,500,,,,Infantry: Standard infantry equipped for ground combat. -Jagdpanther_G1,no,Ground Unit,Tank,Self Propelled Gun Jagdpanther TD,Self Propelled Gun Jagdpanther TD,,,yes,no,0,5000,,,,Self Propelled Gun Jagdpanther TD: German tank destroyer based on the Panther chassis. -JagdPz_IV,no,Ground Unit,Tank,Self Propelled Gun Jagdpanzer IV TD,Self Propelled Gun Jagdpanzer IV TD,,,yes,no,0,3000,,,,Self Propelled Gun Jagdpanzer IV TD: German tank destroyer based on the Panzer IV chassis. -JTAC,yes,Ground Unit,Infantry,JTAC,JTAC,,,no,no,0,0,,,,JTAC: Joint Terminal Attack Controller responsible for coordinating air support. -KAMAZ Truck,yes,Ground Unit,Unarmed,KAMAZ Truck,KAMAZ Truck,red,Mid Cold War,no,yes,0,0,"Military truck, 2 axle, wheeled",,"Rearms ground units of same coaltion, 85 km/h on road,",KAMAZ Truck: Russian military truck used for various logistical purposes. -KDO_Mod40,no,Ground Unit,AAA,AAA Kdo.G.40,AAA Kdo.G.40,,,yes,no,30000,0,,,,AAA Kdo.G.40: German mobile anti-aircraft command vehicle. -KrAZ6322,yes,Ground Unit,Unarmed,Truck KrAZ-6322 6x6,Truck KrAZ-6322 6x6,,,no,yes,0,0,,,,Truck KrAZ-6322 6x6: Ukrainian military truck used for various logistical purposes. -KS-19,yes,Ground Unit,AAA,AAA KS-19 100mm,AAA KS-19 100mm,,,yes,no,0,20000,,,,AAA KS-19 100mm: Soviet towed anti-aircraft gun with a 100mm caliber. -Kub 1S91 str,yes,Ground Unit,SAM Search/Track Radar,SA-6 Straight flush,Kub 1S91 str,red,Mid Cold War,no,no,70000,0,"SA-6/Kub search and track Radar, tracked.",,"75km detection, 28km tracking, 44 km/h on road",SA-6 Straight flush: Soviet mobile surface-to-air missile system with Radar guidance. -Kub 2P25 ln,yes,Ground Unit,SAM Launcher,SA-6 Launcher,Kub 2P25 ln,red,Late Cold War,no,no,0,25000,SA-6/Kub launcher. 3 missiles. Tracked. Needs rest of site to function,,"24km range 14km altitude, 44 km/h on road",SA-6 Launcher: Mobile launcher for the SA-6 Straight flush surface-to-air missile system. -Kubelwagen_82,yes,Ground Unit,Unarmed,LUV Kubelwagen Jeep,LUV Kubelwagen Jeep,,,no,no,0,0,,,,LUV Kubelwagen Jeep: German military vehicle used for reconnaissance. -Land_Rover_101_FC,yes,Ground Unit,Unarmed,Truck Land Rover 101 FC,Truck Land Rover 101 FC,,,no,no,0,0,,,,Truck Land Rover 101 FC: Military truck based on the Land Rover platform. -Land_Rover_109_S3,yes,Ground Unit,Unarmed,LUV Land Rover 109,LUV Land Rover 109,,,no,no,0,0,,,,LUV Land Rover 109: Light utility vehicle based on the Land Rover platform. -LARC-V,yes,Ground Unit,Unarmed,LARC-V,LARC-V,,,no,no,500,0,,,,"LARC-V: Lighter Amphibious Resupply Cargo, amphibious cargo vehicle." -LAV-25,yes,Ground Unit,Infantry Fighting Vehicle,LAV-25,LAV-25,blue,Late Cold War,yes,no,0,2500,Infantry fighter vehicle. Wheeled. Amphibious,,"25mm gun, 7,62 gun, 100 km/h road, 9,6 km/h water",LAV-25: Light armored vehicle used for reconnaissance and security missions. -LAZ Bus,yes,Ground Unit,Unarmed,LAZ Bus,LAZ Bus,red,Early Cold War,no,no,0,0,Civilian bus. Single Axle. Wheeled,,80 km/h road,LAZ Bus: Military transport bus used for troop movement. -Leclerc,yes,Ground Unit,Tank,Leclerc,Leclerc,blue,Modern,yes,no,0,3500,Main battle tank. Tracked. Modern and heavily armoured.,,"120mm gun, 12,7mm gun, 72 km/h road",Leclerc: French main battle tank known for its advanced features and firepower. -LeFH_18-40-105,no,Ground Unit,Artillery,FH LeFH-18 105mm,FH LeFH-18 105mm,,,yes,no,0,10500,,,,FH LeFH-18 105mm: German towed field howitzer with a 105mm caliber. -Leopard-2,yes,Ground Unit,Tank,Leopard-2,Leopard-2,blue,Late Cold War,yes,no,0,3500,Main battle tank. Tracked. Modern and heavily armoured.,,"120mm gun, 7,62 mm gun x 2, 72 km/h road",Leopard-2: German main battle tank recognized for its high level of protection and mobility. -leopard-2A4,yes,Ground Unit,Tank,Tank Leopard-2A4,Tank Leopard-2A4,,,yes,no,0,3500,,,,Tank Leopard-2A4: Earlier version of the German Leopard 2 main battle tank. -leopard-2A4_trs,yes,Ground Unit,Tank,Tank Leopard-2A4 Trs,Tank Leopard-2A4 Trs,,,yes,no,0,3500,,,,Tank Leopard-2A4 Trs: Leopard 2 main battle tank with additional armor. -Leopard-2A5,yes,Ground Unit,Tank,Tank Leopard-2A5,Tank Leopard-2A5,,,yes,no,0,3500,,,,Tank Leopard-2A5: Upgraded version of the German Leopard 2 main battle tank. -Leopard1A3,yes,Ground Unit,Tank,Leopard1A3,Leopard1A3,blue,Mid Cold War,yes,no,0,2500,Main battle tank. Tracked. Heavily armoured.,,"105mm gun, 7,62 mm gun x 2, 65 km/h road",Leopard1A3: Earlier version of the German Leopard main battle tank series. -LiAZ Bus,yes,Ground Unit,Unarmed,Bus LiAZ-677,Bus LiAZ-677,,,no,no,0,0,,,,Bus LiAZ-677: Military transport bus used for troop movement. -Locomotive,yes,Ground Unit,Locomotive,Loco CHME3T,Loco CHME3T,,,no,no,0,0,,,,Loco CHME3T: Diesel-electric shunting locomotive. -M 818,yes,Ground Unit,Unarmed,M 818,M 818,blue,Early Cold War,no,yes,0,0,???,,,M 818: Military truck used for various logistical purposes. -M-1 Abrams,yes,Ground Unit,Tank,M-1 Abrams,M-1 Abrams,blue,Late Cold War,yes,no,0,3500,Main battle tank. Tracked. Modern and heavily armoured.,,"120mm gun, 12,7mm gun, 7,62 mm gun x 2, 66,7 km/h road","M-1 Abrams: Iconic U.S. main battle tank, known for its firepower and armor." -M-109,yes,Ground Unit,Artillery,M-109 Paladin,M-109,blue,Early Cold War,yes,no,0,22000,???,,,M-109 Paladin: Self-propelled howitzer used for artillery support. -M-113,yes,Ground Unit,Armoured Personnel Carrier,M-113,M-113,blue,Early Cold War,yes,no,0,1200,Armoured personnel carrier. Tracked. Amphibious,,"12,7mm gun, 60,7 km/h road, 5,8 km/h water",M-113: Armored personnel carrier used by various armed forces. -M-2 Bradley,yes,Ground Unit,Infantry Fighting Vehicle,M-2A2 Bradley,M-2 Bradley,blue,Late Cold War,yes,no,0,3800,Infantry fighting vehicle. Tracked.,,"ATGM, 100mm gun, 25mm gun, 7,62 gun, 66 km/h road",M-2A2 Bradley: Infantry fighting vehicle used by the U.S. Army. -M-60,yes,Ground Unit,Tank,M-60,M-60,blue,Early Cold War,yes,no,0,8000,Main battle tank. Tracked. Heavily armoured.,,"105mm gun, 12,7mm gun, 7,62 mm gun, 48 km/h road, 19 km/h off,",M-60: Main battle tank used by the United States and other countries. -M1_37mm,no,Ground Unit,AAA,AAA M1 37mm,AAA M1 37mm,,,yes,no,0,5700,,,,AAA M1 37mm: American towed anti-aircraft gun with a 37mm caliber. -M10_GMC,no,Ground Unit,Tank,Self Propelled Gun M10 GMC TD,Self Propelled Gun M10 GMC TD,,,yes,no,0,6000,,,,Self Propelled Gun M10 GMC TD: American tank destroyer based on the M4 Sherman chassis. -M1043 HMMWV Armament,yes,Ground Unit,Armoured Car,HMMWV M2 Browning,HMMWV M2,blue,Late Cold War,yes,no,0,1200,"Military car, single axle, wheeled",,"12,7mm gun, 113 km/h road",HMMWV M2 Browning: Humvee variant equipped with a heavy machine gun for firepower. -M1045 HMMWV TOW,yes,Ground Unit,Armoured Car,HMMWV TOW,HMMWV TOW,red,Late Cold War,yes,no,0,3800,"Military car, single axle, wheeled",,"ATGM, 113 km/h road",HMMWV TOW: Humvee variant equipped with TOW anti-tank missiles. -M1097 Avenger,yes,Ground Unit,SAM,M1097 Avenger,M1097 Avenger,blue,Modern,yes,no,5200,4500,"Military car, single axle, wheeled",,"Stinger SAM, 12,7mm gun, 113 km/h road",M1097 Avenger: Mobile air defense system based on the HMMWV platform. -M1126 Stryker ICV,yes,Ground Unit,Armoured Personnel Carrier,Stryker MG,Stryker MG,blue,Modern,yes,no,0,1200,Armoured personnel carrier. Wheeled.,,"12,7mm gun, 96 km/h road",Stryker MG: Infantry carrier vehicle with a mounted machine gun for support. -M1128 Stryker MGS,yes,Ground Unit,Self Propelled Gun,M1128 Stryker MGS,M1128 Stryker MGS,blue,Modern,yes,no,0,4000,Self propelled gun. Wheeled.,,"105mm gun, 7,62mm gun, 96 km/h road",M1128 Stryker MGS: Mobile gun system variant of the Stryker used for fire support. -M1134 Stryker ATGM,yes,Ground Unit,Armoured Personnel Carrier,Stryker ATGM,Stryker ATGM,blue,Modern,yes,no,0,3800,Armoured personnel carrier. Wheeled.,,"ATGM, 12,7mm gun, 96 km/h road",Stryker ATGM: Stryker variant equipped with anti-tank guided missiles. -M12_GMC,no,Ground Unit,Artillery,SPH M12 GMC 155mm,SPH M12 GMC 155mm,,,yes,no,0,18300,,,,SPH M12 GMC 155mm: American self-propelled howitzer with a 155mm gun. -M2A1_halftrack,yes,Ground Unit,Armoured Personnel Carrier,Armoured Personnel Carrier M2A1 Halftrack,Armoured Personnel Carrier M2A1 Halftrack,,,yes,no,0,1200,,,,Armoured Personnel Carrier M2A1 Halftrack: Armored personnel carrier with both tracks and wheels. -M2A1-105,no,Ground Unit,Artillery,FH M2A1 105mm,FH M2A1 105mm,,,yes,no,0,11500,,,,FH M2A1 105mm: American towed field howitzer with a 105mm caliber. -M30_CC,no,Ground Unit,Unarmed,Ammo M30 Cargo Carrier,Ammo M30 Cargo Carrier,,,no,no,0,1200,,,,Ammo M30 Cargo Carrier: Ammunition carrier used for transporting artillery ammunition. -M4_Sherman,yes,Ground Unit,Tank,Tk M4 Sherman,Tk M4 Sherman,,,yes,no,0,3000,,,,Tk M4 Sherman: American medium tank used during World War II. -M4_Tractor,no,Ground Unit,Unarmed,Tractor M4 High Speed,Tractor M4 High Speed,,,no,no,0,1200,,,,Tractor M4 High Speed: American high-speed tractor used for towing artillery. -M45_Quadmount,no,Ground Unit,AAA,AAA M45 Quadmount HB 12.7mm,AAA M45 Quadmount HB 12.7mm,,,yes,no,0,1500,,,,AAA M45 Quadmount HB 12.7mm: American anti-aircraft weapon with four 12.7mm machine guns. -M48 Chaparral,yes,Ground Unit,SAM,M48 Chaparral,M48 Chaparral,blue,Late Cold War,no,no,10000,8500,,,,M48 Chaparral: Surface-to-air missile system mounted on a tracked vehicle. -M4A4_Sherman_FF,no,Ground Unit,Tank,Tk M4A4 Sherman Firefly,Tk M4A4 Sherman Firefly,,,yes,no,0,3000,,,,Tk M4A4 Sherman Firefly: British modified version of the M4 Sherman tank with a 17-pounder gun. -M6 Linebacker,yes,Ground Unit,SAM,M6 Linebacker,M6 Linebacker,blue,Late Cold War,no,no,8000,4500,,,,M6 Linebacker: Anti-aircraft variant of the M2 Bradley infantry fighting vehicle. -M8_Greyhound,no,Ground Unit,Armoured Car,Scout M8 Greyhound AC,Scout M8 Greyhound AC,,,yes,no,0,2000,,,,Scout M8 Greyhound AC: American armored car used for reconnaissance. -M978 HEMTT Tanker,yes,Ground Unit,Unarmed,M978 HEMTT Tanker,M978 HEMTT Tanker,blue,Mid Cold War,no,no,0,0,,,,M978 HEMTT Tanker: Heavy Expanded Mobility Tactical Truck used for fuel transportation. -Marder,yes,Ground Unit,Infantry Fighting Vehicle,Marder,Marder,blue,Late Cold War,yes,no,0,1500,,,,Marder: German infantry fighting vehicle used by the German Army. -Maschinensatz_33,no,Ground Unit,AAA,Maschinensatz 33 Gen,Maschinensatz 33 Gen,,,yes,no,0,0,,,,Maschinensatz 33 Gen: German power generator. -MAZ-6303,yes,Ground Unit,Unarmed,MAZ-6303,MAZ-6303,red,Mid Cold War,no,no,0,0,,,,MAZ-6303: Soviet/Russian military truck used for various logistical purposes. -MCV-80,yes,Ground Unit,Infantry Fighting Vehicle,Warrior Infantry Fighting Vehicle,Warrior,blue,Late Cold War,yes,no,0,2500,,,,Warrior Infantry Fighting Vehicle: British infantry fighting vehicle known for its versatility and protection. -Merkava_Mk4,yes,Ground Unit,Tank,Tank Merkava IV,Tank Merkava IV,,,yes,no,0,3500,,,,Tank Merkava IV: Israeli main battle tank known for its advanced features and protection. -MLRS,yes,Ground Unit,Rocket Artillery,M270,M270,blue,Late Cold War,yes,no,0,32000,,,,M270: Multiple rocket launcher system capable of launching various types of rockets. -MLRS FDDM,yes,Ground Unit,Artillery,MRLS FDDM (FC),MRLS FDDM (FC),,,yes,no,0,1200,,,,MRLS FDDM (FC): Multiple rocket launcher system with fire direction and control module. -MTLB,yes,Ground Unit,Armoured Personnel Carrier,MT-LB,MT-LB,red,Mid Cold War,yes,no,0,1000,,,,MT-LB: Soviet multi-purpose tracked vehicle used for troop transport and logistics. -NASAMS_Command_Post,yes,Ground Unit,SAM Support vehicle,SAM NASAMS C2,SAM NASAMS C2,,,no,no,0,0,,,,SAM NASAMS C2: Command and control system for the NASAMS surface-to-air missile system. -NASAMS_LN_B,yes,Ground Unit,SAM Launcher,SAM NASAMS LN AIM-120B,SAM NASAMS LN AIM-120B,,,no,no,0,15000,,,,SAM NASAMS LN AIM-120B: Launcher unit for the NASAMS surface-to-air missile system with AIM-120B missiles. -NASAMS_LN_C,yes,Ground Unit,SAM Launcher,SAM NASAMS LN AIM-120C,SAM NASAMS LN AIM-120C,,,no,no,0,15000,,,,SAM NASAMS LN AIM-120C: Launcher unit for the NASAMS surface-to-air missile system with AIM-120C missiles. -NASAMS_radar_MPQ64F1,yes,Ground Unit,SAM Search Radar,SAM NASAMS SR MPQ64F1,SAM NASAMS SR MPQ64F1,,,no,no,50000,0,,,,SAM NASAMS SR MPQ64F1: Surface-to-air missile system with Radar guidance. -Osa 9A33 ln,yes,Ground Unit,SAM Launcher,SA-8 Launcher,Osa 9A33 ln,red,Mid Cold War,no,no,30000,10300,,,,SA-8 Launcher: Mobile launcher for the SA-8 Gecko surface-to-air missile system. -outpost,yes,Ground Unit,Structure,outpost,outpost,,,no,no,0,800,,,,outpost: Military outpost for surveillance and control. -outpost_road,yes,Ground Unit,Structure,outpost_road,outpost_road,,,no,no,0,800,,,,outpost_road: Military outpost with a roadblock. -p-19 s-125 sr,yes,Ground Unit,SAM Search Radar,SA-3 Flat Face B,Flat Face B,red,Mid Cold War,no,no,160000,0,,,,SA-3 Flat Face B: Mobile Radar system used in conjunction with the SA-3 Goa air defense system. -Pak40,no,Ground Unit,Artillery,FH Pak 40 75mm,FH Pak 40 75mm,,,yes,no,0,3000,,,,FH Pak 40 75mm: German towed anti-tank gun with a 75mm caliber. -Paratrooper AKS-74,yes,Ground Unit,Infantry,Paratrooper AKS-74,Paratrooper AKS-74,red,Modern,yes,no,0,500,,,,Paratrooper AKS-74: Modified version of the AK-74 for use by airborne forces. -Paratrooper RPG-16,yes,Ground Unit,Infantry,Paratrooper RPG-16,Paratrooper RPG-16,red,Modern,yes,no,0,500,,,,Paratrooper RPG-16: Anti-tank rocket launcher used by airborne forces. -Patriot AMG,yes,Ground Unit,SAM Support vehicle,Patriot Antenna Mast Group,Patriot AMG,blue,Modern,no,no,0,0,,,,"Patriot Antenna Mast Group: Part of the Patriot missile system, used for communication." -Patriot cp,yes,Ground Unit,SAM Support vehicle,Patriot Command Post,Patriot cp,blue,Late Cold War,no,no,0,0,,,,Patriot Command Post: Mobile command post for the Patriot missile system. -Patriot ECS,yes,Ground Unit,SAM Support vehicle,Patriot Engagement Control Station,Patriot ECS,blue,Modern,no,no,0,0,,,,Patriot Engagement Control Station: Command and control center for the Patriot missile system. -Patriot EPP,yes,Ground Unit,SAM Support vehicle,Patriot Electric Power Plant,Patriot EPP,blue,Late Cold War,no,no,0,0,,,,Patriot Electric Power Plant: Power generation unit for the Patriot missile system. -Patriot ln,yes,Ground Unit,SAM Launcher,Patriot Launcher,Patriot ln,blue,Late Cold War,no,no,0,100000,,,,Patriot Launcher: Mobile launcher for the Patriot surface-to-air missile system. -Patriot site,yes,Ground Unit,SAM Site,Patriot site,Patriot site,blue,Late Cold War,no,no,160000,0,,,,Patriot site: Operational site for the Patriot missile system. -Patriot str,yes,Ground Unit,SAM Search/Track Radar,Patriot Search/Track Radar,Patriot str,blue,Late Cold War,no,no,160000,0,,,,Patriot Search/Track Radar: Radar system used for target tracking in the Patriot missile system. -PLZ05,yes,Ground Unit,Artillery,PLZ-05,PLZ-05,,,yes,no,0,23500,,,,PLZ-05: Chinese self-propelled howitzer with a 155mm gun. -Predator GCS,yes,Ground Unit,Unarmed,Predator GCS,Predator GCS,blue,Late Cold War,no,no,0,0,,,,Predator GCS: Ground Control Station for the MQ-1 Predator unmanned aerial vehicle. -Predator TrojanSpirit,yes,Ground Unit,Unarmed,Predator TrojanSpirit,Predator TrojanSpirit,blue,Late Cold War,no,no,0,0,,,,Predator TrojanSpirit: Electronic warfare system used for intelligence and reconnaissance. -PT_76,yes,Ground Unit,Tank,LT PT-76,LT PT-76,,,yes,no,0,2000,,,,LT PT-76: Soviet amphibious light tank used for reconnaissance. -Pz_IV_H,yes,Ground Unit,Tank,Tk PzIV H,Tk PzIV H,,,yes,no,0,3000,,,,Tk PzIV H: German medium tank used during World War II. -Pz_V_Panther_G,no,Ground Unit,Tank,Tk Panther G (Pz V),Tk Panther G (Pz V),,,yes,no,0,3000,,,,Tk Panther G (Pz V): German medium tank used during World War II. -QF_37_AA,no,Ground Unit,AAA,"AAA QF 3.7""","AAA QF 3.7""",,,yes,no,0,9000,,,,"AAA QF 3.7"": British anti-aircraft gun with a 3.7-inch caliber." -rapier_fsa_blindfire_radar,yes,Ground Unit,SAM Track Radar,SAM Rapier Blindfire TR,SAM Rapier Blindfire TR,,,no,no,30000,0,,,,SAM Rapier Blindfire TR: Vehicle used for target acquisition in the Rapier air defense system. -rapier_fsa_launcher,yes,Ground Unit,SAM Launcher,SAM Rapier LN,SAM Rapier LN,,,no,no,30000,6800,,,,SAM Rapier LN: Self-propelled anti-aircraft missile system with Radar guidance. -rapier_fsa_optical_tracker_unit,yes,Ground Unit,SAM Track Radar,SAM Rapier Tracker,SAM Rapier Tracker,,,no,no,20000,0,,,,SAM Rapier Tracker: Vehicle used for tracking targets in the Rapier air defense system. -RD_75,yes,Ground Unit,EW Radar,SAM SA-2 S-75 RD-75 Amazonka RF,SAM SA-2 S-75 RD-75 Amazonka RF,,,no,no,100000,0,,,,SAM SA-2 S-75 RD-75 Amazonka RF: Soviet surface-to-air missile system with Amazonka RF Radar. -RLS_19J6,yes,Ground Unit,SAM Search Radar,SA-5 Thin Shield,RLS 19J6,Red,Mid Cold War,no,no,150000,0,,,,SA-5 Thin Shield: Soviet long-range surface-to-air missile system. -Roland ADS,yes,Ground Unit,SAM,Roland ADS,Roland ADS,blue,Late Cold War,no,no,12000,8000,,,,Roland ADS: Mobile short-range air defense system. -Roland radar,yes,Ground Unit,SAM Search Radar,Roland Search Radar,Roland Radar,blue,Mid Cold War,no,no,35000,0,,,,Roland Search Radar: Radar system used in conjunction with the Roland air defense system. -RPC_5N62V,yes,Ground Unit,SAM Track Radar,SA-5 Square Pair,RPC 5N62V,Red,Mid Cold War,no,no,400000,0,,,,SA-5 Square Pair: Mobile launcher for the SA-5 Thin Shield surface-to-air missile system. -S_75_ZIL,yes,Ground Unit,Unarmed,S-75 Tractor (ZIL-131),S-75 Tractor (ZIL-131),,,no,no,0,0,,,,S-75 Tractor (ZIL-131): Tractor used for transporting components of the S-75 surface-to-air missile system. -S_75M_Volhov,yes,Ground Unit,SAM Launcher,SA-2 Launcher,S75M Volhov,Red,Early Cold War,no,no,0,43000,,,,SA-2 Launcher: Mobile launcher for the SA-2 Guideline surface-to-air missile system. -S-200_Launcher,yes,Ground Unit,SAM Launcher,SA-5 Launcher,S-200 Launcher,Red,Mid Cold War,no,no,0,255000,,,,SA-5 Launcher: Mobile launcher for the SA-5 Thin Shield surface-to-air missile system. -S-300PS 40B6M tr,yes,Ground Unit,SAM Track Radar,SA-10 Tin Shield,S-300PS 40B6M tr,red,Late Cold War,no,no,160000,0,,,,SA-10 Tin Shield: Radar system used in conjunction with the SA-10 Grumble air defense system. -S-300PS 40B6MD sr,yes,Ground Unit,SAM Search Radar,SA-10 Clam Shell,S-300PS 40B6MD sr,red,Late Cold War,no,no,60000,0,,,,SA-10 Clam Shell: Mobile launcher for the SA-10 Grumble surface-to-air missile system. -S-300PS 54K6 cp,yes,Ground Unit,SAM Support vehicle,SA-10 Command Post,S-300PS 54K6 cp,red,Late Cold War,no,no,0,0,,,,SA-10 Command Post: Command and control center for the SA-10 Grumble air defense system. -S-300PS 5P85C ln,yes,Ground Unit,SAM Launcher,SA-10 Launcher (5P85C),S-300PS 5P85C ln,red,Late Cold War,no,no,0,120000,,,,SA-10 Launcher (5P85C): Mobile launcher for the SA-10 Grumble surface-to-air missile system. -S-300PS 5P85D ln,yes,Ground Unit,SAM Launcher,SA-10 Launcher (5P85D),S-300PS 5P85D ln,red,Late Cold War,no,no,0,120000,,,,SA-10 Launcher (5P85D): Mobile launcher for the SA-10 Grumble surface-to-air missile system. -S-300PS 64H6E sr,yes,Ground Unit,SAM Search Radar,SA-10 Big Bird,S-300PS 64H6E sr,red,Late Cold War,no,no,160000,0,,,,SA-10 Big Bird: Early warning Radar system used in conjunction with the SA-10 Grumble system. -S-60_Type59_Artillery,yes,Ground Unit,AAA,AAA S-60 57mm,AAA S-60 57mm,,,yes,no,5000,6000,,,,AAA S-60 57mm: Soviet towed anti-aircraft gun with a 57mm caliber. -SA-10 SAM Battery,yes,Ground Unit,SAM Site,SA-10 SAM Battery,SA-10 SAM Battery,red,Late Cold War,no,no,,,,,,SA-10 SAM Battery: Operational site for the SA-10 Grumble air defense system. -SA-11 Buk CC 9S470M1,yes,Ground Unit,SAM Support vehicle,SA-11 Command Post,SA-11 Buk CC 9S470M1,red,Late Cold War,no,no,0,0,,,,SA-11 Command Post: Command and control center for the SA-11 Gadfly air defense system. -SA-11 Buk LN 9A310M1,yes,Ground Unit,SAM Launcher,SA-11 Launcher,SA-11 Buk LN 9A310M1,red,Late Cold War,no,no,50000,35000,,,,SA-11 Launcher: Mobile launcher for the SA-11 Gadfly surface-to-air missile system. -SA-11 Buk SR 9S18M1,yes,Ground Unit,SAM Search Radar,SA-11 Snown Drift,SA-11 Buk SR 9S18M1,red,Mid Cold War,no,no,100000,0,,,,SA-11 Snown Drift: Early warning Radar system used in conjunction with the SA-11 Gadfly system. -SA-11 SAM Battery,yes,Ground Unit,SAM Site,SA-11 SAM Battery,SA-11 SAM Battery,red,Late Cold War,no,no,,,,,,SA-11 SAM Battery: Operational site for the SA-11 Gadfly air defense system. -SA-18 Igla comm,yes,Ground Unit,MANPADS,"MANPADS SA-18 Igla ""Grouse"" C2","MANPADS SA-18 Igla ""Grouse"" C2",,,no,no,5000,0,,,,"MANPADS SA-18 Igla ""Grouse"" C2: Portable, man-portable air defense system with command and control." -SA-18 Igla manpad,yes,Ground Unit,MANPADS,SA-18 Igla manpad,SA-18 Igla manpad,red,Late Cold War,no,no,5000,5200,,,,"SA-18 Igla manpad: Portable, man-portable air defense system designed for infantry use." -SA-18 Igla-S comm,yes,Ground Unit,MANPADS,"MANPADS SA-18 Igla-S ""Grouse"" C2","MANPADS SA-18 Igla-S ""Grouse"" C2",,,no,no,5000,0,,,,"MANPADS SA-18 Igla-S ""Grouse"" C2: Upgraded version of the SA-18 Igla manpad with command and control." -SA-18 Igla-S manpad,yes,Ground Unit,MANPADS,SA-18 Igla-S manpad,SA-18 Igla-S manpad,red,Late Cold War,no,no,5000,5200,,,,SA-18 Igla-S manpad: Upgraded version of the SA-18 Igla manpad with improved capabilities. -SA-2 SAM Battery,yes,Ground Unit,SAM Site,SA-2 SAM Battery,SA-2 SAM Battery,red,Early Cold War,no,no,,,,,,SA-2 SAM Battery: Operational site for the SA-2 Guideline surface-to-air missile system. -SA-3 SAM Battery,yes,Ground Unit,SAM Site,SA-3 SAM Battery,SA-3 SAM Battery,red,Early Cold War,no,no,,,,,,SA-3 SAM Battery: Operational site for the SA-3 Goa surface-to-air missile system. -SA-5 SAM Battery,yes,Ground Unit,SAM Site,SA-5 SAM Battery,SA-5 SAM Battery,Red,Mid Cold War,no,no,,,,,,SA-5 SAM Battery: Operational site for the SA-5 Gammon surface-to-air missile system. -SA-6 SAM Battery,yes,Ground Unit,SAM Site,SA-6 SAM Battery,SA-6 SAM Battery,red,Mid Cold War,no,no,,,"2K12 Kub. Tracked self propelled straight fush Radars, and TELs. 3 missiles per TEL.",,"Can move, Semi Active Radar guided, 22nm/26,000ft",SA-6 SAM Battery: Operational site for the SA-6 Gainful surface-to-air missile system. -Sandbox,yes,Ground Unit,Structure,Sandbox,Sandbox,,,no,no,0,800,,,,Sandbox: Mobile Radar system used for tracking and fire control. -SAU 2-C9,yes,Ground Unit,Artillery,SAU Nona,SAU Nona,red,Mid Cold War,yes,no,0,7000,,,,SAU Nona: Self-propelled artillery system featuring a 120mm smoothbore mortar. -SAU Akatsia,yes,Ground Unit,Artillery,SAU Akatsia,SAU Akatsia,red,Mid Cold War,yes,no,0,17000,,,,SAU Akatsia: Soviet self-propelled howitzer with a 152mm gun. -SAU Gvozdika,yes,Ground Unit,Artillery,SAU Gvozdika,SAU Gvozdika,red,Mid Cold War,yes,no,0,15000,,,,SAU Gvozdika: Self-propelled artillery system with a 122mm gun. -SAU Msta,yes,Ground Unit,Artillery,SAU Msta,SAU Msta,red,Late Cold War,yes,no,0,23500,,,,SAU Msta: Russian self-propelled howitzer featuring a 152mm gun. -Scud_B,yes,Ground Unit,Missile system,SSM SS-1C Scud-B,SSM SS-1C Scud-B,,,yes,no,0,320000,,,,SSM SS-1C Scud-B: Tactical ballistic missile system used for ground attack. -Sd_Kfz_2,yes,Ground Unit,Unarmed,LUV Kettenrad,LUV Kettenrad,,,no,no,0,0,,,,LUV Kettenrad: German tracked motorcycle used for reconnaissance. -Sd_Kfz_234_2_Puma,no,Ground Unit,Armoured Car,Scout Puma AC,Scout Puma AC,,,yes,no,0,2000,,,,Scout Puma AC: German armored reconnaissance vehicle. -Sd_Kfz_251,yes,Ground Unit,Armoured Personnel Carrier,Armoured Personnel Carrier Sd.Kfz.251 Halftrack,Armoured Personnel Carrier Sd.Kfz.251 Halftrack,,,yes,no,0,1100,,,,Armoured Personnel Carrier Sd.Kfz.251 Halftrack: German armored personnel carrier with tracks and wheels. -Sd_Kfz_7,yes,Ground Unit,Unarmed,Tractor Sd.Kfz.7 Art'y Tractor,Tractor Sd.Kfz.7 Art'y Tractor,,,no,no,0,0,,,,Tractor Sd.Kfz.7 Art'y Tractor: German half-track used for towing artillery. -Self Propelled GunH_Dana,yes,Ground Unit,Artillery,SPH Dana vz77 152mm,SPH Dana vz77 152mm,,,yes,no,0,18700,,,,SPH Dana vz77 152mm: Self-propelled howitzer with a 152mm gun used by the Czech military. -Silkworm_SR,yes,Ground Unit,Missile system,AShM Silkworm SR,AShM Silkworm SR,,,yes,no,200000,0,,,,AShM Silkworm SR: Mobile launcher for the SS-N-2 Silkworm anti-ship missile. -SK_C_28_naval_gun,no,Ground Unit,Artillery,Gun 15cm SK C/28 Naval in Bunker,Gun 15cm SK C/28 Naval in Bunker,,,no,no,0,20000,,,,Gun 15cm SK C/28 Naval in Bunker: Naval gun emplaced in a bunker for coastal defense. -SKP-11,yes,Ground Unit,Unarmed,SKP-11,SKP-11,red,Early Cold War,no,no,0,0,,,,SKP-11: Mobile Radar system used for target acquisition and tracking. -Smerch,yes,Ground Unit,Rocket Artillery,Smerch,Smerch,red,Late Cold War,yes,no,0,70000,,,,Smerch: Multiple rocket launcher system capable of launching large-caliber rockets. -Smerch_HE,yes,Ground Unit,Artillery,MLRS 9A52 Smerch HE 300mm,MLRS 9A52 Smerch HE 300mm,,,yes,no,0,70000,,,,MLRS 9A52 Smerch HE 300mm: Heavy multiple rocket launcher system with a 300mm caliber. -snr s-125 tr,yes,Ground Unit,SAM Track Radar,SA-3 Low Blow,snr s-125 tr,red,Early Cold War,no,no,100000,0,,,,SA-3 Low Blow: Mobile launcher for the SA-3 Goa surface-to-air missile system. -SNR_75V,yes,Ground Unit,SAM Track Radar,SA-2 Fan Song,SNR 75V,Red,Early Cold War,no,no,100000,0,,,,SA-2 Fan Song: Radar system used in conjunction with the SA-2 Guideline surface-to-air missile system. -Soldier AK,yes,Ground Unit,Infantry,Soldier AK,Soldier AK,red,Early Cold War,yes,no,0,500,,,,"Soldier AK: Standard issue assault rifle for infantry, known for its reliability and firepower." -Soldier M249,yes,Ground Unit,Infantry,Soldier M249,Soldier M249,blue,Late Cold War,yes,no,0,700,,,,Soldier M249: Light machine gun used by infantry for sustained firepower. -Soldier M4,yes,Ground Unit,Infantry,Soldier M4,Soldier M4,blue,Mid Cold War,yes,no,0,500,,,,Soldier M4: Standard issue carbine used by infantry. -Soldier M4 GRG,yes,Ground Unit,Infantry,Soldier M4 GRG,Soldier M4 GRG,blue,Mid Cold War,yes,no,0,500,,,,"Soldier M4 GRG: Grenadier variant of the M4 carbine, equipped for grenade launching." -Soldier RPG,yes,Ground Unit,Infantry,Soldier RPG,Soldier RPG,red,Mid Cold War,yes,no,0,500,,,,Soldier RPG: Portable rocket launcher used for anti-armor purposes. -Soldier stinger,yes,Ground Unit,MANPADS,MANPADS Stinger,MANPADS Stinger,,,no,no,5000,4500,,,,"MANPADS Stinger: Portable, man-portable air defense system designed for infantry use." -soldier_mauser98,no,Ground Unit,Infantry,Infantry Mauser 98,Infantry Mauser 98,,,yes,no,0,500,,,,Infantry Mauser 98: German bolt-action rifle used during World War II. -soldier_wwii_br_01,no,Ground Unit,Infantry,Infantry SMLE No.4 Mk-1,Infantry SMLE No.4 Mk-1,,,yes,no,0,500,,,,Infantry SMLE No.4 Mk-1: British bolt-action rifle used during World War II. -soldier_wwii_us,no,Ground Unit,Infantry,Infantry M1 Garand,Infantry M1 Garand,,,yes,no,0,500,,,,Infantry M1 Garand: Standard issue semi-automatic rifle used by the U.S. military. -SON_9,yes,Ground Unit,AAA,AAA Fire Can SON-9,AAA Fire Can SON-9,,,yes,no,55000,0,,,,AAA Fire Can SON-9: Mobile anti-aircraft Radar system. -Stinger comm,yes,Ground Unit,MANPADS,Stinger comm,Stinger comm,blue,Late Cold War,no,no,5000,0,,,,Stinger comm: Mobile communication system used in conjunction with Stinger air defense. -Stinger comm dsr,yes,Ground Unit,MANPADS,Stinger comm dsr,Stinger comm dsr,red,Late Cold War,no,no,5000,0,,,,Stinger comm dsr: Ground-based air defense system with a MANPADS launcher. -Strela-1 9P31,yes,Ground Unit,SAM,SA-9 Strela-1 9P31,Strela-1 9P31,red,Late Cold War,no,no,5000,4200,,,,SA-9 Strela-1 9P31: Mobile short-range air defense system with infrared homing missiles. -Strela-10M3,yes,Ground Unit,SAM,SA-13 Strela-10M3,Strela-10M3,red,Late Cold War,no,no,8000,5000,,,,SA-13 Strela-10M3: Mobile short-range air defense system with infrared homing missiles. -Stug_III,no,Ground Unit,Tank,Self Propelled Gun StuG III G AG,Self Propelled Gun StuG III G AG,,,yes,no,0,3000,,,,Self Propelled Gun StuG III G AG: German assault gun based on the Sturmgeschütz III chassis. -Stug_IV,no,Ground Unit,Tank,Self Propelled Gun StuG IV AG,Self Propelled Gun StuG IV AG,,,yes,no,0,3000,,,,Self Propelled Gun StuG IV AG: German assault gun based on the Panzer IV chassis. -SturmPzIV,no,Ground Unit,Tank,Self Propelled Gun Brummbaer AG,Self Propelled Gun Brummbaer AG,,,yes,no,0,4500,,,,Self Propelled Gun Brummbaer AG: German assault gun with a 150mm gun. -Suidae,yes,Ground Unit,Unarmed,Suidae,Suidae,,Modern,no,no,0,0,,,,Suidae: Chinese 6x6 wheeled armored personnel carrier. -T-55,yes,Ground Unit,Tank,T-55,T-55,red,Early Cold War,yes,no,0,2500,,,,"T-55: Soviet main battle tank with a 100mm gun, widely used during the Cold War." -T-72B,yes,Ground Unit,Tank,T-72B,T-72B,red,Mid Cold War,yes,no,0,4000,,,,"T-72B: Soviet main battle tank with various upgrades, including composite armor." -T-72B3,yes,Ground Unit,Tank,Tank T-72B3,Tank T-72B3,,,yes,no,0,4000,,,,Tank T-72B3: Modernized version of the Soviet T-72B main battle tank. -T-80UD,yes,Ground Unit,Tank,T-80UD,T-80UD,red,Mid Cold War,yes,no,0,5000,,,,T-80UD: Ukrainian main battle tank known for its mobility and firepower. -T-90,yes,Ground Unit,Tank,T-90,T-90,red,Late Cold War,yes,no,0,5000,,,,"T-90: Russian main battle tank, an upgraded version of the T-72 series." -T155_Firtina,yes,Ground Unit,Artillery,SPH T155 Firtina 155mm,SPH T155 Firtina 155mm,,,yes,no,0,41000,,,,SPH T155 Firtina 155mm: Turkish self-propelled howitzer with a 155mm gun. -TACAN_beacon,yes,Ground Unit,Structure,Beacon TACAN Portable TTS 3030,Beacon TACAN Portable TTS 3030,,,no,no,0,0,,,,Beacon TACAN Portable TTS 3030: Portable TACAN (Tactical Air Navigation) beacon for navigation. -tacr2a,yes,Ground Unit,Unarmed,RAF Rescue,RAF Rescue,,,no,no,0,0,,,,RAF Rescue: Search and rescue helicopter used by the Royal Air Force. -Tankcartrinity,yes,Ground Unit,Carriage,Tank Cartrinity,Tank Cartrinity,,,no,no,0,0,,,,Tank Cartrinity: Railway tank car used for transporting liquids. -Tetrarch,no,Ground Unit,Armoured Car,Tk Tetrach,Tk Tetrach,,,yes,no,0,2000,,,,Tk Tetrach: British light tank used during World War II. -Tiger_I,no,Ground Unit,Tank,Tk Tiger 1,Tk Tiger 1,,,yes,no,0,3000,,,,Tk Tiger 1: German heavy tank used during World War II. -Tiger_II_H,no,Ground Unit,Tank,Tk Tiger II,Tk Tiger II,,,yes,no,0,6000,,,,"Tk Tiger II: German heavy tank, also known as King Tiger." -Tigr_233036,yes,Ground Unit,Unarmed,Tigr_233036,Tigr_233036,red,Late Cold War,no,no,0,0,,,,Tigr_233036: Russian 4x4 wheeled armored vehicle used for various purposes. -Tor 9A331,yes,Ground Unit,SAM,SA-15 Tor 9A331,Tor 9A331,red,Late Cold War,no,no,25000,12000,,,,SA-15 Tor 9A331: Russian short-range air defense system with Radar guidance. -TPZ,yes,Ground Unit,Armoured Personnel Carrier,TPz Fuchs,TPz Fuchs,blue,Late Cold War,yes,no,0,1000,,,,TPz Fuchs: German 6x6 wheeled armored personnel carrier. -Trolley bus,yes,Ground Unit,Unarmed,Trolley bus,Trolley bus,blue,Late Cold War,no,no,0,0,,,,"Trolley bus: Electric bus powered by overhead wires, used for public transport." -tt_B8M1,yes,Ground Unit,Artillery,MLRS LC with B8M1 80mm,MLRS LC with B8M1 80mm,,,yes,no,5000,5000,,,,MLRS LC with B8M1 80mm: Light multiple rocket launcher system with 80mm rockets. -tt_DSHK,yes,Ground Unit,Armoured Car,Scout LC with DSHK 12.7mm,Scout LC with DSHK 12.7mm,,,yes,no,5000,1200,,,,Scout LC with DSHK 12.7mm: Armored reconnaissance vehicle with a mounted DShK heavy machine gun. -tt_KORD,yes,Ground Unit,Armoured Car,Scout LC with KORD 12.7mm,Scout LC with KORD 12.7mm,,,yes,no,5000,1200,,,,Scout LC with KORD 12.7mm: Armored reconnaissance vehicle with a mounted KORD heavy machine gun. -tt_ZU-23,yes,Ground Unit,AAA,SPAAA LC with ZU-23,SPAAA LC with ZU-23,,,yes,no,0,2500,,,,SPAAA LC with ZU-23: Light armored anti-aircraft vehicle with dual ZU-23 autocannons. -TYPE-59,yes,Ground Unit,Tank,MT Type 59,MT Type 59,,,yes,no,0,2500,,,,MT Type 59: Chinese medium tank based on the Soviet T-54. -TZ-22_KrAZ,yes,Ground Unit,Unarmed,Refueler TZ-22 Tractor (KrAZ-258B1),Refueler TZ-22 Tractor (KrAZ-258B1),,,no,no,0,0,,,,Refueler TZ-22 Tractor (KrAZ-258B1): Military refueling tractor used for aircraft refueling. -UAZ-469,yes,Ground Unit,Unarmed,UAZ-469,UAZ-469,red,Mid Cold War,no,no,0,0,,,,UAZ-469: Soviet/Russian light utility vehicle used for reconnaissance and transport. -Uragan_BM-27,yes,Ground Unit,Rocket Artillery,Uragan,Uragan,red,Late Cold War,yes,no,0,35800,,,,Uragan: Soviet multiple rocket launcher system with a 220mm caliber. -Ural ATsP-6,yes,Ground Unit,Unarmed,Ural ATsP-6,Ural ATsP-6,red,Mid Cold War,no,no,0,0,,,,Ural ATsP-6: Mobile command post based on the Ural truck platform. -Ural-375,yes,Ground Unit,Unarmed,Ural-375,Ural-375,red,Mid Cold War,no,yes,0,0,,,,Ural-375: Soviet/Russian military truck used for various logistical purposes. -Ural-375 PBU,yes,Ground Unit,Unarmed,Ural-375 PBU,Ural-375 PBU,red,Mid Cold War,no,no,0,0,,,,Ural-375 PBU: Mobile communication vehicle based on the Ural truck platform. -Ural-375 ZU-23,yes,Ground Unit,AAA,Ural-375 ZU-23,Ural-375 ZU-23,red,Early Cold War,yes,no,5000,2500,,,,Ural-375 ZU-23: Anti-aircraft vehicle based on the Ural truck platform. -Ural-375 ZU-23 Insurgent,yes,Ground Unit,AAA,Ural-375 ZU-23 Insurgent,Ural-375 ZU-23 Insurgent,red,Early Cold War,yes,no,5000,2500,,,,Ural-375 ZU-23 Insurgent: Improvised anti-aircraft vehicle based on the Ural truck platform. -Ural-4320 APA-5D,yes,Ground Unit,Unarmed,Ural-4320 APA-5D,Ural-4320 APA-5D,red,Early Cold War,no,yes,0,0,Lightly armoured,,"Rearms ground units of same coaltion,",Ural-4320 APA-5D: Mobile power station based on the Ural truck platform. -Ural-4320-31,yes,Ground Unit,Unarmed,Ural-4320-31,Ural-4320-31,red,Late Cold War,no,yes,0,0,,,"Rearms ground units of same coaltion,",Ural-4320-31: Military truck used for various logistical purposes. -Ural-4320T,yes,Ground Unit,Unarmed,Ural-4320T,Ural-4320T,red,Late Cold War,no,yes,0,0,,,"Rearms ground units of same coaltion,",Ural-4320T: Military truck used for troop transport and logistics. -v1_launcher,no,Ground Unit,Missile System,V-1 Launch Ramp,V-1 Launch Ramp,,,yes,no,0,0,,,,V-1 Launch Ramp: Launch ramp for the German V-1 flying bomb. -VAB_Mephisto,yes,Ground Unit,Armoured Car,ATGM VAB Mephisto,ATGM VAB Mephisto,,,yes,no,0,3800,,,,ATGM VAB Mephisto: French armored vehicle equipped with anti-tank guided missiles. -VAZ Car,yes,Ground Unit,Unarmed,VAZ Car,VAZ Car,red,Early Cold War,no,no,0,0,,,,VAZ Car: Russian military staff car based on the Lada Niva platform. -Vulcan,yes,Ground Unit,AAA,Vulcan,Vulcan,blue,Late Cold War,yes,no,5000,2000,,,,Vulcan: Self-propelled anti-aircraft gun system featuring the M61 Vulcan cannon. -Wellcarnsc,yes,Ground Unit,Carriage,Well Car,Well Car,,,no,no,0,0,,,,Well Car: Railway car designed to transport intermodal containers. -Wespe124,no,Ground Unit,Artillery,SPH Sd.Kfz.124 Wespe 105mm,SPH Sd.Kfz.124 Wespe 105mm,,,yes,no,0,10500,,,,SPH Sd.Kfz.124 Wespe 105mm: German self-propelled howitzer used during World War II. -Willys_MB,no,Ground Unit,Unarmed,Car Willys Jeep,Car Willys Jeep,,,no,no,0,0,,,,Car Willys Jeep: Iconic American military jeep used for reconnaissance and transport. -ZBD04A,yes,Ground Unit,Infantry Fighting Vehicle,ZBD-04A,ZBD-04A,,,yes,no,0,4800,,,,ZBD-04A: Chinese amphibious infantry fighting vehicle. -ZiL-131 APA-80,yes,Ground Unit,Unarmed,ZiL-131 APA-80,ZiL-131 APA-80,red,Early Cold War,no,no,0,0,,,,ZiL-131 APA-80: Mobile power station based on the ZiL-131 truck platform. -ZIL-131 KUNG,yes,Ground Unit,Unarmed,ZIL-131 KUNG,ZIL-131 KUNG,red,Early Cold War,no,no,0,0,,,,ZIL-131 KUNG: Military truck with a covered cargo area based on the ZIL-131 platform. -ZIL-135,yes,Ground Unit,Unarmed,Truck ZIL-135,Truck ZIL-135,,,no,no,0,0,,,,Truck ZIL-135: Soviet military truck used for various logistical purposes. -ZIL-4331,yes,Ground Unit,Unarmed,ZIL-4331,ZIL-4331,red,Early Cold War,no,no,0,0,,,,ZIL-4331: Soviet/Russian military truck used for various logistical purposes. -ZSU_57_2,yes,Ground Unit,AAA,SPAAA ZSU-57-2,SPAAA ZSU-57-2,,,yes,no,5000,7000,,,,SPAAA ZSU-57-2: Self-propelled anti-aircraft gun with dual 57mm autocannons. -ZSU-23-4 Shilka,yes,Ground Unit,AAA,ZSU-23-4 Shilka,ZSU-23-4 Shilka,red,Late Cold War,yes,no,5000,2500,Ship,,"2nm 7,000ft range",ZSU-23-4 Shilka: Soviet self-propelled anti-aircraft gun system with four 23mm autocannons. -ZTZ96B,yes,Ground Unit,Tank,ZTZ-96B,ZTZ-96B,,,yes,no,0,5000,,,,ZTZ-96B: Chinese main battle tank with a 125mm smoothbore gun. -ZU-23 Closed Insurgent,yes,Ground Unit,AAA,ZU-23 Closed Insurgent,ZU-23 Closed Insurgent,red,Early Cold War,yes,no,5000,2500,,,,ZU-23 Closed Insurgent: Improvised anti-aircraft vehicle with ZU-23 autocannons. -ZU-23 Emplacement,yes,Ground Unit,AAA,ZU-23 Emplacement,ZU-23 Emplacement,red,Early Cold War,yes,no,5000,2500,,,,ZU-23 Emplacement: Fixed emplacement with ZU-23 autocannons. -ZU-23 Emplacement Closed,yes,Ground Unit,AAA,ZU-23 Emplacement Closed,ZU-23 Emplacement Closed,red,Early Cold War,yes,no,5000,2500,,,,ZU-23 Emplacement Closed: Fixed emplacement with ZU-23 autocannons. -ZU-23 Insurgent,yes,Ground Unit,AAA,ZU-23 Insurgent,ZU-23 Insurgent,red,Early Cold War,yes,no,5000,2500,,,,ZU-23 Insurgent: Improvised anti-aircraft vehicle with ZU-23 autocannons. -AH-1W,yes,Helicopter,Helicopter,AH-1W Cobra,AH1,blue,Mid Cold War,yes,no,,,"2 engine, 2 crew attack helicopter. Cobra",,"Gun, rockets and ATGMs", -AH-64D_BLK_II,yes,Helicopter,Helicopter,AH-64D Apache,AH64,blue,Modern,yes,no,,,"2 engine, 2 crew attack helicopter. Apache",,"Gun, rockets and ATGMs", -Ka-50_3,yes,Helicopter,Helicopter,Ka-50 Hokum A,K50,red,Late Cold War,yes,no,,,"2 engine, 1 crew attack helicopter. Blackshark",,"Fox 2 and gun, Rockets and ATGMs", -Mi-24P,yes,Helicopter,Helicopter,Mi-24P Hind,Mi24,red,Mid Cold War,yes,no,,,"2 engine, 2 crew attack helicopter. Hind",,"Fox 2 and gun, Rockets and ATGMs", -Mi-26,yes,Helicopter,Helicopter,Mi-26 Halo,M26,red,Late Cold War,no,no,,,"2 engine, 5 crew transport helicopter. Halo",,, -Mi-28N,yes,Helicopter,Helicopter,Mi-28N Havoc,M28,red,Modern,yes,no,,,"2 engine, 2 crew attack helicopter. Havoc",,"Gun, Rockets and ATGMs", -Mi-8MT,yes,Helicopter,Helicopter,Mi-8MT Hip,Mi8,red,Mid Cold War,no,no,,,"2 engine, 3 crew transport helicopter. Hip",,"Gun and rockets,", -SA342L,yes,Helicopter,Helicopter,SA342L Gazelle,342,blue,Mid Cold War,no,no,,,"1 engine, 2 crew scout helicopter. Gazelle",,"Fox 2 and gun, Rockets and ATGMs", -SA342M,yes,Helicopter,Helicopter,SA342M Gazelle,342,blue,Mid Cold War,no,no,,,"1 engine, 2 crew scout helicopter. Gazelle",,ATGMs, -SA342Mistral,yes,Helicopter,Helicopter,SA342Mistral Gazelle,342,blue,Mid Cold War,no,no,,,"1 engine, 2 crew scout helicopter. Gazelle",,Fox 2, -SH-60B,yes,Helicopter,Helicopter,SH-60B Seahawk,S60,blue,Mid Cold War,no,no,,,"2 engine, 3 crew transport helicopter. Seahawk",,, -UH-1H,yes,Helicopter,Helicopter,UH-1H Huey,UH1,blue,Early Cold War,no,no,,,"2 engine, 2 crew transport helicopter. Huey",,"Gun and rockets,", -UH-60A,yes,Helicopter,Helicopter,UH-60A Blackhawk,U60,blue,Mid Cold War,no,no,,,"2 engine, 3 crew transport helicopter. Blackhawk",,, -albatros,yes,Navy Unit,Frigate,Albatros (Grisha-5),Albatros,red,Early Cold War,yes,no,30000,16000,,,,"Albatros (Grisha-5): Grisha-class corvette Albatros, designed for anti-submarine warfare and patrol duties." -ara_vdm,yes,Navy Unit,Aircraft Carrier,ARA Vienticinco de Mayo,ARA Vienticinco de Mayo,,Mid Cold War,yes,no,18000,5000,ARA Vienticinco de Mayo. Conventional CATOBAR carrier,,"24kn, 9x40mm AA gun, 3nm range 9,000ft","ARA Vienticinco de Mayo: Aircraft carrier Vienticinco de Mayo, serving the Argentine Navy." -BDK-775,yes,Navy Unit,Landing Ship,LS Ropucha,LS Ropucha,blue,Mid Cold War,yes,no,25000,6000,Landing ship Ropucha,,"2 57mm gun, rockets, Strela SAM, 8nm, 9,000ft range",LS Ropucha: Ropucha-class landing ship designed for transporting and landing amphibious forces. -CastleClass_01,yes,Navy Unit,Patrol,HMS Leeds Castle (P-258),HMS Leeds Castle (P-258),blue,Mid Cold War,yes,no,25000,3000,HMS Leeds Castle. Smaller. Patrol craft,,"20mm gun, 12,7mm gun x 4, 3nm 4,000ft range",HMS Leeds Castle (P-258): Castle-class patrol vessel used for offshore patrol duties and maritime security. -CV_1143_5,yes,Navy Unit,Aircraft Carrier,CV Admiral Kuznetsov(2017),Admiral Kuznetsov(2017),red,Modern,no,no,25000,12000,Admiral Kuznetsov. Conventional STOBAR carrier,,"12 granit anti ship missiles, kynshal & Kashtan SAM, 30mm gun x 6, 9nm 20,000ft range, 29kn","CV Admiral Kuznetsov(2017): Russian aircraft carrier Admiral Kuznetsov, serving as a mobile airbase for naval aviation." -CVN_71,yes,Navy Unit,Super Aircraft Carrier,CVN-71 Theodore Roosevelt,CVN-71,blue,Late Cold War,no,no,50000,25000,Ship,,"6nm 16,000ft range",CVN-71 Theodore Roosevelt: Nimitz-class aircraft carrier serving as a flagship with a focus on power projection. -CVN_72,yes,Navy Unit,Super Aircraft Carrier,CVN-72 Abraham Lincoln,CVN-72,blue,Late Cold War,no,no,50000,25000,Ship,,"6nm 16,000ft range","CVN-72 Abraham Lincoln: Nimitz-class aircraft carrier, a key component of naval force projection and air superiority." -CVN_73,yes,Navy Unit,Super Aircraft Carrier,CVN-73 George Washington,CVN-73,blue,Late Cold War,no,no,50000,25000,Ship,,"6nm 16,000ft range",CVN-73 George Washington: Nimitz-class aircraft carrier providing strategic naval capabilities and air support. -CVN_75,yes,Navy Unit,Aircraft Carrier,CVN-75 Harry S. Truman,CVN-75,blue,Late Cold War,no,no,50000,25000,Ship,,"6nm 16,000ft range",CVN-75 Harry S. Truman: Nimitz-class aircraft carrier playing a crucial role in power projection and global security. -Dry-cargo ship-1,yes,Navy Unit,Cargoship,Bulker Yakushev,Bulker Yakushev,,,no,no,0,0,,,,"Bulker Yakushev: Bulk carrier ship Yakushev, specializing in the transport of dry bulk cargo." -Dry-cargo ship-2,yes,Navy Unit,Cargoship,Cargo Ivanov,Cargo Ivanov,,,no,no,0,0,,,,Cargo Ivanov: Ivanov-class cargo ship designed for transporting goods and equipment. -elnya,yes,Navy Unit,Tanker,Elnya tanker,Elnya tanker,red,Late Cold War,no,no,0,0,,,,"Elnya tanker: Elnya-class tanker, supporting naval operations by providing fuel replenishment." -Forrestal,yes,Navy Unit,Aircraft Carrier,CV-59 Forrestal,CV-59 Forrestal,,,no,no,50000,25000,,,,"CV-59 Forrestal: Forrestal-class aircraft carrier, a historic vessel with a significant role in naval aviation." -HandyWind,yes,Navy Unit,Cargoship,Bulker Handy Wind,Bulker Handy Wind,blue,Late Cold War,no,no,0,0,,,,"Bulker Handy Wind: Bulk carrier ship designed for transporting unpackaged cargo, such as grains or minerals." -HarborTug,yes,Navy Unit,Tug,Harbor Tug,Harbor Tug,,Mid Cold War,no,no,0,0,,,,"Harbor Tug: Tugboat specialized in maneuvering ships in harbors, assisting in docking and undocking." -Higgins_boat,yes,Navy Unit,Landing Ship,Boat LCVP Higgins,Boat LCVP Higgins,,,yes,no,3000,1000,,,,"Boat LCVP Higgins: Landing Craft, Vehicle, Personnel (LCVP) Higgins, designed for troop and vehicle transport." -hms_invincible,yes,Navy Unit,Aircraft Carrier,HMS Invincible (R05),HMS Invincible,blue,Mid Cold War,yes,no,100000,74000,Ship,,"46nm >50,000ft range","HMS Invincible (R05): Invincible-class aircraft carrier, a key asset in the Royal Navy's fleet." -IMPROVED_KILO,yes,Navy Unit,Submarine,SSK 636 Improved Kilo,SSK 636 Improved Kilo,,,no,no,0,0,,,,"SSK 636 Improved Kilo: Upgraded version of the Kilo-class submarine, known for its stealth capabilities." -kilo,yes,Navy Unit,Submarine,Project 636 Varshavyanka Basic,Varshavyanka Basic,red,Late Cold War,no,no,0,0,,,,Project 636 Varshavyanka Basic: Improved Kilo-class submarine designed for stealth and anti-submarine warfare. -kuznecow,yes,Navy Unit,Aircraft Carrier,Admiral Kuznetsov,Admiral Kuznetsov,red,Late Cold War,no,no,25000,12000,,,,"Admiral Kuznetsov: Russian aircraft carrier Admiral Kuznetsov, a key element of Russia's naval aviation." -La_Combattante_II,yes,Navy Unit,Fast Attack Craft,FAC La Combattante lla,FAC La Combattante,blue,Mid Cold War,yes,no,19000,4000,,,,FAC La Combattante lla: Fast Attack Craft designed for high-speed naval operations and coastal defense. -leander-gun-achilles,yes,Navy Unit,Frigate,HMS Achilles (F12),HMS Achilles,blue,Mid Cold War,yes,no,180000,8000,Ship,,"7nm 6,000ft range","HMS Achilles (F12): Leander-class frigate HMS Achilles, providing anti-submarine and anti-air capabilities." -leander-gun-andromeda,yes,Navy Unit,Frigate,HMS Andromeda (F57),HMS Andromeda,blue,Mid Cold War,yes,no,180000,140000,Ship,,"7nm 6,000ft range","HMS Andromeda (F57): Leander-class frigate HMS Andromeda, serving in anti-submarine and anti-air roles." -leander-gun-ariadne,yes,Navy Unit,Frigate,HMS Ariadne (F72),HMS Ariadne,blue,Mid Cold War,yes,no,150000,100000,Ship,,"7nm 6,000ft range","HMS Ariadne (F72): Leander-class frigate HMS Ariadne, contributing to the Royal Navy's anti-submarine capabilities." -leander-gun-condell,yes,Navy Unit,Frigate,Almirante Condell PFG-06,Almirante Condell,,Mid Cold War,yes,no,150000,100000,Ship,,"7nm 6,000ft range","Almirante Condell PFG-06: Condell-class frigate, part of the Chilean Navy, with anti-submarine and anti-ship capabilities." -leander-gun-lynch,yes,Navy Unit,Frigate,CNS Almirante Lynch (PFG-07),CNS Almirante Lynch,,Mid Cold War,yes,no,180000,140000,Ship,,"7nm 6,000ft range","CNS Almirante Lynch (PFG-07): Lynch-class frigate, enhancing the naval capabilities of the Chilean Navy." -LHA_Tarawa,yes,Navy Unit,Aircraft Carrier,LHA-1 Tarawa,LHA-1 Tarawa,blue,Mid Cold War,yes,no,150000,20000,Ship,,"8nm 13,000ft range",LHA-1 Tarawa: Wasp-class amphibious assault ship capable of deploying Marines and their equipment. -LST_Mk2,yes,Navy Unit,Landing Ship,LST Mk.II,LST Mk.II,,,yes,no,0,4000,,,,"LST Mk.II: Landing Ship, Tank (LST) Mk.II, designed for transporting tanks and vehicles for amphibious assaults." -molniya,yes,Navy Unit,Corvette,Molniya (Tarantul-3),Molniya,,Late Cold War,yes,no,21000,2000,,,,"Molniya (Tarantul-3): Tarantul-class corvette Molniya, a fast attack craft specializing in anti-ship warfare." -moscow,yes,Navy Unit,Cruiser,Moscow,Moscow,red,Late Cold War,yes,no,160000,75000,,,,"Moscow: Slava-class cruiser Moscow, serving as a guided missile cruiser with anti-ship and anti-air capabilities." -neustrash,yes,Navy Unit,Frigate,Neustrashimy,Neustrashimy,red,Late Cold War,yes,no,27000,12000,,,,"Neustrashimy: Neustrashimy-class frigate, designed for anti-submarine warfare and escort missions." -perry,yes,Navy Unit,Frigate,Oliver H. Perry,Oliver H. Perry,blue,Mid Cold War,yes,no,150000,100000,,,,"Oliver H. Perry: Oliver Hazard Perry-class frigate, providing anti-submarine and anti-air capabilities." -PIOTR,yes,Navy Unit,Cruiser,Battlecruiser 1144.2 Pyotr Velikiy,Battlecruiser 1144.2 Pyotr Velikiy,,,yes,no,250000,190000,,,,"Battlecruiser 1144.2 Pyotr Velikiy: Kirov-class battlecruiser Pyotr Velikiy, a heavily armed surface warfare vessel." -Rezky (Krivak-2),yes,Navy Unit,Frigate,Rezky (Krivak-2),Rezky,red,Early Cold War,yes,no,30000,16000,,,,"Rezky (Krivak-2): Krivak II-class frigate Rezky, providing anti-submarine and anti-surface capabilities." -santafe,yes,Navy Unit,Submarine,ARA Santa Fe S-21,ARA Santa,,Early Cold War,no,no,0,0,,,,"ARA Santa Fe S-21: Santa Fe-class submarine, a conventional diesel-electric submarine in service with the Argentine Navy." -Schnellboot_type_S130,yes,Navy Unit,Torpedo Boat,Boat Schnellboot type S130,Boat Schnellboot type S130,,,yes,no,10000,4000,,,,"Boat Schnellboot type S130: Schnellboot-type torpedo boat S130, a high-speed vessel used for fast attack and patrol." -Seawise_Giant,yes,Navy Unit,Tanker,Tanker Seawise Giant,Seawise Giant,blue,Late Cold War,no,no,0,0,,,,"Tanker Seawise Giant: Supertanker Seawise Giant, one of the largest ships ever built, used for transporting crude oil." -Ship_Tilde_Supply,yes,Navy Unit,Transport,Supply Ship MV Tilde,Supply Ship Tilde,blue,Late Cold War,no,no,0,0,,,,"Supply Ship MV Tilde: Supply ship MV Tilde designed to replenish naval vessels at sea with fuel, ammunition, and supplies." -SOM,yes,Navy Unit,Submarine,SSK 641B Tango,SSK 641B Tango,,,no,no,0,0,,,,"SSK 641B Tango: Tango-class submarine, a diesel-electric attack submarine used for various roles." -speedboat,yes,Navy Unit,Speedboat,Boat Armed Hi-speed,Boat Armed Hi-speed,,,yes,no,5000,1000,,,,Boat Armed Hi-speed: High-speed armed patrol boat designed for coastal defense and interception. -Stennis,yes,Navy Unit,Aircraft Carrier,CVN-74 John C. Stennis,CVN-74,blue,Late Cold War,yes,no,50000,25000,,,,"CVN-74 John C. Stennis: Nimitz-class aircraft carrier, a vital element in power projection and global stability." -TICONDEROG,yes,Navy Unit,Cruiser,Ticonderoga,Ticonderoga,blue,Late Cold War,yes,no,150000,100000,Ship,,"55nm >50,000ft range",Ticonderoga: Ticonderoga-class cruiser equipped with advanced Radar and missile systems for air defense. -Type_052B,yes,Navy Unit,Destroyer,052B DDG-168 Guangzhou,Type 52B,red,Modern,yes,no,100000,30000,Ship,,"27nm 48,000ft range","052B DDG-168 Guangzhou: Luyang I-class destroyer Guangzhou, part of the People's Liberation Army Navy." -Type_052C,yes,Navy Unit,Destroyer,052C DDG-171 Haikou,Type 52C,red,Modern,yes,no,260000,100000,Ship,,"64nm >50,000ft range","052C DDG-171 Haikou: Luyang II-class destroyer Haikou, featuring advanced air defense and anti-submarine capabilities." -Type_071,yes,Navy Unit,Transport,Type 071,Type 071,red,Modern,yes,no,300000,150000,Ship,,"4nm 9,000ft range","Type 071: Amphibious transport dock ship designed for carrying troops, vehicles, and helicopters." -Type_093,yes,Navy Unit,Submarine,Type 093,Type 093,red,Modern,yes,no,40000,40000,,,,Type 093: Chinese nuclear-powered attack submarine providing strategic underwater capabilities. -Uboat_VIIC,yes,Navy Unit,Submarine,U-boat VIIC U-flak,U-boat VIIC U-flak,,,yes,no,20000,4000,,,,"U-boat VIIC U-flak: German U-boat Type VIIC, a World War II submarine designed for naval warfare." -USS_Arleigh_Burke_IIa,yes,Navy Unit,Destroyer,DDG Arleigh Burke lla,DDG Arleigh Burke,blue,Late Cold War,yes,no,150000,100000,,,"57nm >50,000ft range",DDG Arleigh Burke lla: Arleigh Burke-class destroyer equipped with advanced anti-aircraft and anti-submarine systems. -USS_Samuel_Chase,yes,Navy Unit,Landing SHip,LS Samuel Chase,LS Samuel Chase,,,yes,no,0,7000,,,,"LS Samuel Chase: Samuel Chase-class landing ship, a vessel used for amphibious warfare and logistics support." -VINSON,yes,Navy Unit,Aircraft Carrier,CVN-70 Carl Vinson,CVN-70 Carl Vinson,,,no,no,30000,15000,,,,CVN-70 Carl Vinson: Nimitz-class aircraft carrier with a focus on power projection and naval air operations. -zwezdny,yes,Navy Unit,Civilian Boat,Zwezdny,Zwezdny,,Modern,no,no,0,0,,,,"Zwezdny: Zwezdny-class transport ship, supporting naval operations with cargo and troop transport." -,yes,Navy Unit,Frigate,054A FFG-538 Yantai,Type 54A,red,Modern,yes,no,160000,45000,Ship,,"35nm >50,000ft range","054A FFG-538 Yantai: Jiangkai I-class frigate Yantai, serving as a versatile and multi-role surface combatant." \ No newline at end of file diff --git a/scripts/python/downloadSRTM.py b/scripts/python/downloadSRTM.py deleted file mode 100644 index 9db7ac22..00000000 --- a/scripts/python/downloadSRTM.py +++ /dev/null @@ -1,86 +0,0 @@ -import math -import urllib.request -import os -import multiprocessing - -try: - os.mkdir("hgt") -except Exception as e: - print(e) - -def download_file(latlng): - lat = latlng[0] - lng = latlng[1] - - if lat < 0: - lat = f"S{abs(lat):02}" - else: - lat = f"N{lat:02}" - - if lng < 0: - lng = f"W{abs(lng):03}" - else: - lng = f"E{lng:03}" - - url = f"https://srtm.fasma.org/{lat}{lng}.SRTMGL3S.hgt.zip" - urllib.request.urlretrieve(url, f"hgt/{lat}{lng}.SRTMGL3S.hgt.zip") - print(f"{url} downloaded") - -boundaries = [ - [ # NTTR - 39.7982463, -119.985425, - 34.4037128, -119.7806729, - 34.3483316, -112.4529351, - 39.7372411, -112.1130805, - 39.7982463, -119.985425 - ], - [ # Syria - 37.3630556, 29.2686111, - 31.8472222, 29.8975, - 32.1358333, 42.1502778, - 37.7177778, 42.3716667, - 37.3630556, 29.2686111 - ], - [ # Caucasus - 39.6170191, 27.634935, - 38.8735863, 47.1423108, - 47.3907982, 49.3101946, - 48.3955879, 26.7753625, - 39.6170191, 27.634935 - ], - [ # Persian Gulf - 32.9355285, 46.5623682, - 21.729393, 47.572675, - 21.8501348, 63.9734737, - 33.131584, 64.7313594, - 32.9355285, 46.5623682 - ], - [ # Marianas - 22.09, 135.0572222, - 10.5777778, 135.7477778, - 10.7725, 149.3918333, - 22.5127778, 149.5427778, - 22.09, 135.0572222 - ] -] - -latlngs = [] -if __name__ == '__main__': - pool = multiprocessing.Pool(32) - for boundary_set in boundaries: - lats = [boundary_set[i] for i in range(0, len(boundary_set), 2)] - lngs = [boundary_set[i] for i in range(1, len(boundary_set), 2)] - minLat = math.floor(min(lats)) - minLng = math.floor(min(lngs)) - maxLat = math.ceil(max(lats)) - maxLng = math.ceil(max(lngs)) - - index = 1 - for lat in range(minLat, maxLat + 1): - for lng in range(minLng, maxLng + 1): - latlngs.append((lat, lng)) - - print(len(latlngs)) - #pool.map(download_file, latlngs) - - \ No newline at end of file From ad5cb83abff5b5f3f70941a18d9fc883efd28a3b Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Tue, 21 Nov 2023 17:35:09 +0100 Subject: [PATCH 23/41] Completed server version --- client/app.js | 2 +- client/bin/www | 16 +- client/demo.js | 10 +- client/package-lock.json | 158 +------ client/package.json | 3 +- client/plugins/controltips/index.js | 1 - client/plugins/controltips/package-lock.json | 435 +++++++++---------- client/plugins/controltips/package.json | 4 +- client/plugins/databasemanager/package.json | 2 +- client/src/olympusapp.ts | 4 +- client/views/other/dialogs.ejs | 4 +- installer/olympus.iss | 2 +- olympus.json | 2 +- scripts/python/configurator/configurator.py | 4 +- 14 files changed, 249 insertions(+), 398 deletions(-) delete mode 100644 client/plugins/controltips/index.js diff --git a/client/app.js b/client/app.js index bc1834bb..b2915423 100644 --- a/client/app.js +++ b/client/app.js @@ -43,7 +43,7 @@ if (config["server"] != undefined) module.exports = app; const DemoDataGenerator = require('./demo.js'); -var demoDataGenerator = new DemoDataGenerator(app); +var demoDataGenerator = new DemoDataGenerator(app, config); diff --git a/client/bin/www b/client/bin/www index 8f0be3a5..3cd2f8c1 100644 --- a/client/bin/www +++ b/client/bin/www @@ -1,5 +1,18 @@ #!/usr/bin/env node +console.log('\x1b[36m%s\x1b[0m', "*********************************************************************"); +console.log('\x1b[36m%s\x1b[0m', "* _____ _____ _____ ____ _ *"); +console.log('\x1b[36m%s\x1b[0m', "* | __ \\ / ____|/ ____| / __ \\| | *"); +console.log('\x1b[36m%s\x1b[0m', "* | | | | | | (___ | | | | |_ _ _ __ ___ _ __ _ _ ___ *"); +console.log('\x1b[36m%s\x1b[0m', "* | | | | | \\___ \\ | | | | | | | | '_ ` _ \\| '_ \\| | | / __| *"); +console.log('\x1b[36m%s\x1b[0m', "* | |__| | |____ ____) | | |__| | | |_| | | | | | | |_) | |_| \\__ \\ *"); +console.log('\x1b[36m%s\x1b[0m', "* |_____/ \\_____|_____/ \\____/|_|\\__, |_| |_| |_| .__/ \\__,_|___/ *"); +console.log('\x1b[36m%s\x1b[0m', "* __/ | | | *"); +console.log('\x1b[36m%s\x1b[0m', "* |___/ |_| *"); +console.log('\x1b[36m%s\x1b[0m', "*********************************************************************"); +console.log('\x1b[36m%s\x1b[0m', ""); +console.log("Please wait while DCS Olympus Server starts up..."); + var fs = require('fs'); let rawdata = fs.readFileSync('../olympus.json'); let config = JSON.parse(rawdata); @@ -99,4 +112,5 @@ function onListening() { debug('Listening on ' + bind); } -console.log("DCS Olympus server v0.4.7 started correctly, happy flying!") +console.log("DCS Olympus server v0.4.7 started correctly!") +console.log("Waiting for connections...") diff --git a/client/demo.js b/client/demo.js index 5589ac23..91b35c28 100644 --- a/client/demo.js +++ b/client/demo.js @@ -14,7 +14,7 @@ const DEMO_WEAPONS_DATA = { } class DemoDataGenerator { - constructor(app) + constructor(app, config) { app.get('/demo/units', (req, res) => this.units(req, res)); app.get('/demo/weapons', (req, res) => this.weapons(req, res)); @@ -25,11 +25,13 @@ class DemoDataGenerator { app.get('/demo/commands', (req, res) => this.command(req, res)); app.put('/demo', (req, res) => this.put(req, res)); + console.log(config["authentication"]["gameMasterPassword"]) + app.use('/demo', basicAuth({ users: { - 'admin': 'password', - 'blue': 'bluepassword', - 'red': 'redpassword' + 'admin': config["authentication"]["gameMasterPassword"], + 'blue': config["authentication"]["blueCommanderPassword"], + 'red': config["authentication"]["redCommanderPassword"] }, })) diff --git a/client/package-lock.json b/client/package-lock.json index f042eede..05085e5b 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -2767,12 +2767,6 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -3091,15 +3085,6 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "binary-split": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/binary-split/-/binary-split-1.0.5.tgz", - "integrity": "sha512-AQ5fcBrUU5hoIafkEvNKqxT+2xbqlSqAXef6IdCQr5wpHu9E7NGM6rTAlYJYbtxvAvjfx8nJkBy6rNlbPPI+Pw==", - "dev": true, - "requires": { - "through2": "^2.0.3" - } - }, "bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", @@ -3882,15 +3867,6 @@ "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", "dev": true }, - "dbly-linked-list": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/dbly-linked-list/-/dbly-linked-list-0.3.4.tgz", - "integrity": "sha512-327vOlwspi9i1T3Kc9yZhRUR8qDdgMQ4HmXsFDDCQ/HTc3sNe7gnF5b0UrsnaOJ0rvmG7yBZpK0NoOux9rKYKw==", - "dev": true, - "requires": { - "lodash.isequal": "^4.5.0" - } - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -5114,6 +5090,11 @@ "minimatch": "^3.0.4" } }, + "js-sha256": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.10.1.tgz", + "integrity": "sha512-5obBtsz9301ULlsgggLg542s/jqtddfOpV5KJc4hajc9JV8GeY2gZHSVpYBn4nWqAUTJ9v+xwtbJ1mIBgIH5Vw==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5132,12 +5113,6 @@ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -5200,12 +5175,6 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true - }, "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", @@ -5230,12 +5199,6 @@ "yallist": "^3.0.2" } }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, "magic-string": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", @@ -5250,12 +5213,6 @@ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==" }, - "marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -5821,22 +5778,6 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "plantuml-encoder": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz", - "integrity": "sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==", - "dev": true - }, - "plantuml-pipe": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/plantuml-pipe/-/plantuml-pipe-1.6.0.tgz", - "integrity": "sha512-TsEBors7XBhcejh0uVEFPxGWC+94jvGcPhNEs3cwhwgFSFNQaOuoA83X5sH2t5JBUnrGgL/hMHE/kcdKZBa5vw==", - "dev": true, - "requires": { - "binary-split": "^1.0.5", - "split2": "^4.2.0" - } - }, "point-in-polygon": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", @@ -5868,12 +5809,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, "promise": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", @@ -5942,15 +5877,6 @@ "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true }, - "queue-fifo": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/queue-fifo/-/queue-fifo-0.2.6.tgz", - "integrity": "sha512-rwlnZHAaTmWEGKC7ziasK8u4QnZW/uN6kSiG+tHNf/1GA+R32FArZi18s3SYUpKcA0Y6jJoUDn5GT3Anoc2mWw==", - "dev": true, - "requires": { - "dbly-linked-list": "0.3.4" - } - }, "queue-tick": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", @@ -6312,18 +6238,6 @@ "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", "dev": true }, - "shiki": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", - "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", - "dev": true, - "requires": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -6417,12 +6331,6 @@ "through": "2" } }, - "split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true - }, "srtm-elevation": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/srtm-elevation/-/srtm-elevation-2.1.2.tgz", @@ -6878,50 +6786,6 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "typedoc": { - "version": "0.24.8", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", - "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", - "dev": true, - "requires": { - "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.0", - "shiki": "^0.14.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "typedoc-umlclass": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/typedoc-umlclass/-/typedoc-umlclass-0.7.1.tgz", - "integrity": "sha512-nHEPjbda1oIZ5lKNMainzi93UB1FyyMNoFWjNlipjK/Adx/RtepJdaGdIrZ8EgtuWGi7pW+xP8jaRmb40vj/9w==", - "dev": true, - "requires": { - "plantuml-encoder": "^1.4.0", - "plantuml-pipe": "^1.5.0", - "progress": "^2.0.3", - "queue-fifo": "^0.2.6" - } - }, "typescript": { "version": "4.9.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", @@ -7094,18 +6958,6 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, - "vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, "watchify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz", diff --git a/client/package.json b/client/package.json index d5bf4526..d5f6265f 100644 --- a/client/package.json +++ b/client/package.json @@ -21,6 +21,7 @@ "ejs": "^3.1.8", "express": "~4.16.1", "express-basic-auth": "^1.2.1", + "js-sha256": "^0.10.1", "leaflet-gesture-handling": "^1.2.2", "morgan": "~1.9.1", "save": "^2.9.0", @@ -52,8 +53,6 @@ "tinyify": "^4.0.0", "tsify": "^5.0.4", "tslib": "latest", - "typedoc": "^0.24.8", - "typedoc-umlclass": "^0.7.1", "typescript": "^4.9.4", "usng.js": "^0.4.5", "watchify": "^4.0.0" diff --git a/client/plugins/controltips/index.js b/client/plugins/controltips/index.js deleted file mode 100644 index 09835271..00000000 --- a/client/plugins/controltips/index.js +++ /dev/null @@ -1 +0,0 @@ -!function(){var e,t,o,i,s,n,r,a,l={},c=this&&this.__classPrivateFieldSet||function(e,t,o,i,s){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?s.call(e,o):s?s.value=o:t.set(e,o),o},h=this&&this.__classPrivateFieldGet||function(e,t,o,i){if("a"===o&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===o?i:"a"===o?i.call(e):i?i.value:t.get(e)};Object.defineProperty(l,"__esModule",{value:!0}),l.ControlTipsPlugin=void 0,l.ControlTipsPlugin=class{constructor(){e.add(this),t.set(this,void 0),o.set(this,void 0),i.set(this,void 0),s.set(this,!1),n.set(this,!1),r.set(this,void 0),c(this,t,document.createElement("div"),"f"),h(this,t,"f").id="control-tips-panel",document.body.appendChild(h(this,t,"f"))}getName(){return"Control Tips Plugin"}initialize(t){return c(this,o,t,"f"),c(this,i,h(this,o,"f").getShortcutManager(),"f"),h(this,i,"f").onKeyDown(()=>{h(this,e,"m",a).call(this)}),h(this,i,"f").onKeyUp(()=>{h(this,e,"m",a).call(this)}),document.addEventListener("airbaseMouseover",t=>{c(this,n,!0,"f"),h(this,e,"m",a).call(this)}),document.addEventListener("airbaseMouseout",t=>{c(this,n,!1,"f"),h(this,e,"m",a).call(this)}),document.addEventListener("unitDeselection",t=>{h(this,e,"m",a).call(this)}),document.addEventListener("unitMouseover",t=>{c(this,s,!0,"f"),h(this,e,"m",a).call(this)}),document.addEventListener("unitMouseout",t=>{c(this,s,!1,"f"),h(this,e,"m",a).call(this)}),document.addEventListener("unitsSelection",t=>{h(this,e,"m",a).call(this)}),document.addEventListener("mapVisibilityOptionsChanged",()=>{this.toggle(!h(this,o,"f").getMap().getVisibilityOptions()["Show control tips"])}),document.addEventListener("mouseover",t=>{t.target instanceof HTMLElement&&c(this,r,t.target,"f"),h(this,e,"m",a).call(this)}),document.addEventListener("mouseup",t=>{h(this,e,"m",a).call(this)}),h(this,e,"m",a).call(this),h(this,o,"f").getMap().addVisibilityOption("Show control tips",!0),!0}getElement(){return h(this,t,"f")}toggle(e){this.getElement().classList.toggle("hide",e)}},t=new WeakMap,o=new WeakMap,i=new WeakMap,s=new WeakMap,n=new WeakMap,r=new WeakMap,e=new WeakSet,a=function(){const e=[{keys:[],tips:[{key:"SHIFT",action:"Box select",showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1,showIfUnitSelected:!1},{key:"Mouse1",action:"Deselect",showIfUnitSelected:!0},{key:"Mouse1+drag",action:"Move map",showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1,showIfUnitSelected:!1},{key:"Mouse2",action:"Spawn menu",showIfUnitSelected:!1,showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1},{key:"Mouse2",action:"Quick options",showIfUnitSelected:!1,showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!0},{key:"Mouse2",action:"Airbase menu",showIfUnitSelected:!1,showIfHoveringOverAirbase:!0,showIfHoveringOverUnit:!1},{key:"Mouse2",action:"Set first waypoint",showIfHoveringOverAirbase:!1,showIfUnitSelected:!0,unitsMustBeControlled:!0},{key:"Mouse2 (hold)",action:"Interact (ground)",showIfUnitSelected:!0,showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1,unitsMustBeControlled:!0},{key:"Shift",action:" in formation...",showIfUnitSelected:!0,minSelectedUnits:2},{key:"CTRL",action:" ... more",showIfUnitSelected:!0,showIfHoveringOverAirbase:!1,unitsMustBeControlled:!0},{key:"CTRL",action:" Pin tool",showIfUnitSelected:!1,showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1,unitsMustBeControlled:!0},{key:"CTRL+Mouse2",action:" Airbase menu",showIfUnitSelected:!0,showIfHoveringOverAirbase:!0,unitsMustBeControlled:!0},{key:"Mouse1",action:"Toggle Blue/Red",mouseoverSelector:"#coalition-switch .ol-switch-fill"},{key:"Mouse2",action:"Set Neutral",mouseoverSelector:"#coalition-switch .ol-switch-fill"},{key:"Mouse1",action:"Toggle time display",mouseoverSelector:"#connection-status-panel[data-is-connected] #connection-status-message abbr"},{key:"Mouse1 or Z",action:"Change location system",mouseoverSelector:"#coordinates-tool, #coordinates-tool *"},{key:"Comma",action:"Decrease precision",mouseoverSelector:'#coordinates-tool[data-location-system="MGRS"], #coordinates-tool[data-location-system="MGRS"] *'},{key:"Period",action:"Increase precision",mouseoverSelector:'#coordinates-tool[data-location-system="MGRS"], #coordinates-tool[data-location-system="MGRS"] *'}]},{keys:["ControlLeft"],tips:[{key:"Mouse1",action:"Toggle pin",showIfUnitSelected:!1,showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1},{key:"Mouse1",action:"Toggle selection",showIfUnitSelected:!0,showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!0},{key:"Mouse2",action:"Add waypoint",showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!1,showIfUnitSelected:!0,unitsMustBeControlled:!0},{key:"Mouse2",action:"Interact (airbase)",showIfHoveringOverAirbase:!0,showIfUnitSelected:!0,unitsMustBeControlled:!0},{key:"Mouse2",action:"Interact (unit)",showIfHoveringOverAirbase:!1,showIfHoveringOverUnit:!0,showIfUnitSelected:!0,unitsMustBeControlled:!0},{key:"Shift",action:" in formation...",showIfUnitSelected:!0,minSelectedUnits:2},{key:"[Num 1-9]",action:"Set hotgroup",showIfUnitSelected:!0}]},{keys:["ShiftLeft"],tips:[{key:"Mouse1+drag",action:"Box select",showIfUnitSelected:!1},{key:"Mouse2",action:"Set first formation waypoint",showIfUnitSelected:!0,minSelectedUnits:2},{key:"[Num 1-9]",action:"Add to hotgroup",showIfUnitSelected:!0},{key:"CTRL",action:" ... more",minSelectedUnits:2,showIfUnitSelected:!0,showIfHoveringOverAirbase:!1,unitsMustBeControlled:!0}]},{keys:["ControlLeft","ShiftLeft"],tips:[{key:"Mouse2",action:"Add formation waypoint",showIfUnitSelected:!0,minSelectedUnits:2,unitsMustBeControlled:!0},{key:"[Num 1-9]",action:"Add hotgroup to selection",callback:e=>Object.values(h(this,o,"f").getUnitsManager().getUnits()).some(e=>e.getAlive()&&e.getControlled()&&e.getHotgroup()),showIfUnitSelected:!0,minSelectedUnits:1}]}],t=e.find(e=>h(this,i,"f").keyComboMatches(e.keys))||e[0],a=this.getElement();a.innerHTML="";let l=0,c=0,d=!1;if(h(this,o,"f").getUnitsManager()){let e=Object.values(h(this,o,"f").getUnitsManager().getSelectedUnits());l=e.length,c=e.filter(e=>e.getControlled()).length,d=c>0}const f=t.tips.some(e=>!!e.mouseoverSelector&&h(this,r,"f")instanceof HTMLElement!=0&&!!h(this,r,"f").matches(e.mouseoverSelector));t.tips.filter(e=>{if(l>0){if(!1===e.showIfUnitSelected)return!1;if(!0===e.unitsMustBeControlled&&!1===d)return!1;if("number"==typeof e.minSelectedUnits&&c${e.key}${e.action}

`)})};Object.defineProperty({},"__esModule",{value:!0}),globalThis.getOlympusPlugin=()=>new l.ControlTipsPlugin}(); \ No newline at end of file diff --git a/client/plugins/controltips/package-lock.json b/client/plugins/controltips/package-lock.json index 65771e21..4efdafda 100644 --- a/client/plugins/controltips/package-lock.json +++ b/client/plugins/controltips/package-lock.json @@ -1282,6 +1282,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@browserify/envify/-/envify-6.0.0.tgz", "integrity": "sha512-ovxHR0KTsRCyMNwD7MGV0+VCU1sT6Ds+itC4DaQHM41eUId+w5Jd0qlhLVoDkkIVBnkY3BAAM8yb2QfpBlHkPw==", + "dev": true, "requires": { "acorn-node": "^2.0.1", "dash-ast": "^2.0.1", @@ -1293,6 +1294,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -1303,6 +1305,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, "requires": { "readable-stream": "3" } @@ -1313,6 +1316,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@browserify/uglifyify/-/uglifyify-6.0.0.tgz", "integrity": "sha512-48M2a3novsgKhUSo/B3ja10awc7unliK1HfW6aYBJdLFQj3wXDx9BBJVfj6MVYERSQVEVjNHQQ7IK89h4MpCLw==", + "dev": true, "requires": { "convert-source-map": "^1.9.0", "minimatch": "^3.0.2", @@ -1324,12 +1328,14 @@ "acorn": { "version": "8.11.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==" + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true }, "readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -1340,6 +1346,7 @@ "version": "5.24.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "dev": true, "requires": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -1351,6 +1358,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, "requires": { "readable-stream": "3" } @@ -1361,6 +1369,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/@goto-bus-stop/common-shake/-/common-shake-2.4.0.tgz", "integrity": "sha512-LO+7v+UbxE3IyAS4Suf/KYB7Zq9DEIHibwDe6Wph4apNEfDyyxP7BSxzRS/Qa9lUH5gsm9eL9nF8EE1E0/nQkQ==", + "dev": true, "requires": { "acorn-walk": "^7.0.0", "debug": "^3.2.6", @@ -1371,6 +1380,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1380,17 +1390,20 @@ "@jridgewell/resolve-uri": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true }, "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true }, "@jridgewell/source-map": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -1399,12 +1412,14 @@ "@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "@jridgewell/trace-mapping": { "version": "0.3.20", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1429,6 +1444,7 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, "requires": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -1443,12 +1459,14 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true }, "acorn-node": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-2.0.1.tgz", "integrity": "sha512-VLR5sHqjk+8c5hrKeP2fWaIHb8eewsoxnZ8r2qpwRHXMHuC7KyOPflnOx9dLssVQUurzJ7rO0OzIFjHcndafWw==", + "dev": true, "requires": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", @@ -1458,28 +1476,26 @@ "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==" + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true }, "any-promise": { "version": "1.3.0", @@ -1500,7 +1516,8 @@ "array-from": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==" + "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==", + "dev": true }, "asn1.js": { "version": "5.4.1", @@ -1728,7 +1745,8 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "base64-js": { "version": "1.5.1", @@ -1742,15 +1760,6 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "binary-split": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/binary-split/-/binary-split-1.0.5.tgz", - "integrity": "sha512-AQ5fcBrUU5hoIafkEvNKqxT+2xbqlSqAXef6IdCQr5wpHu9E7NGM6rTAlYJYbtxvAvjfx8nJkBy6rNlbPPI+Pw==", - "dev": true, - "requires": { - "through2": "^2.0.3" - } - }, "bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", @@ -1761,6 +1770,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1785,6 +1795,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "dev": true, "requires": { "JSONStream": "^1.0.3", "combine-source-map": "~0.8.0", @@ -1798,6 +1809,7 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/browser-pack-flat/-/browser-pack-flat-3.5.0.tgz", "integrity": "sha512-u3iJUjs+TC/NGIL2GLyIcn5ppoNZXhTWqSW/gQbGIGvQiXXCQQzr5VWfACFraXQn2JrDlyRnKLeOs5AWXzKI6A==", + "dev": true, "requires": { "JSONStream": "^1.3.2", "combine-source-map": "^0.8.0", @@ -1820,6 +1832,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, "requires": { "inherits": "^2.0.4", "readable-stream": "2 || 3" @@ -1830,7 +1843,8 @@ "browser-process-hrtime": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==" + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true }, "browser-resolve": { "version": "2.0.0", @@ -1845,6 +1859,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.4.2.tgz", "integrity": "sha512-uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA==", + "dev": true, "requires": { "acorn-node": "^1.5.2", "concat-stream": "^1.5.0", @@ -1855,6 +1870,7 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, "requires": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", @@ -2036,7 +2052,8 @@ "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "buffer-xor": { "version": "1.0.3", @@ -2054,6 +2071,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.4.0.tgz", "integrity": "sha512-Gd3K3+3KI1Utuk+gwAvuOVOjT/2XLGL8tU6FwDKk04LlOZkYfT0pwQllsG1Dv8RRhgcjNxZSDmmSXb0AOkwSwg==", + "dev": true, "requires": { "browser-pack": "^6.0.2", "browser-unpack": "^1.1.0", @@ -2090,6 +2108,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -2171,6 +2190,7 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==", + "dev": true, "requires": { "convert-source-map": "~1.1.0", "inline-source-map": "~0.6.0", @@ -2181,24 +2201,28 @@ "convert-source-map": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==" + "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==", + "dev": true }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true } } }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "common-shakeify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/common-shakeify/-/common-shakeify-1.1.2.tgz", "integrity": "sha512-r2zRKPCbCx1l9BT8nVGZssZXrH9jeLl5qfHKxUwSBT7Kr9l1jSjZsItZE/jXo+GYDyO3kQfsyV7Poid475MgWQ==", + "dev": true, "requires": { "@goto-bus-stop/common-shake": "^2.3.0", "convert-source-map": "^1.5.1", @@ -2210,12 +2234,14 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -2317,7 +2343,8 @@ "convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, "core-js": { "version": "2.6.12", @@ -2337,12 +2364,14 @@ "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true }, "count-lines": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/count-lines/-/count-lines-0.1.2.tgz", - "integrity": "sha512-YS8P4UYXX/hrDyLU3r/A5OcCNwdNbJFJckbe8j+x2Jhxsr2J4/rYl0sDwOljLZL7Uxc4s7mRSNcQD8dSjobz+g==" + "integrity": "sha512-YS8P4UYXX/hrDyLU3r/A5OcCNwdNbJFJckbe8j+x2Jhxsr2J4/rYl0sDwOljLZL7Uxc4s7mRSNcQD8dSjobz+g==", + "dev": true }, "cp": { "version": "0.2.0", @@ -2418,6 +2447,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, "requires": { "es5-ext": "^0.10.50", "type": "^1.0.1" @@ -2426,7 +2456,8 @@ "dash-ast": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", - "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==" + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true }, "date-fns": { "version": "2.30.0", @@ -2437,19 +2468,11 @@ "@babel/runtime": "^7.21.0" } }, - "dbly-linked-list": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/dbly-linked-list/-/dbly-linked-list-0.3.4.tgz", - "integrity": "sha512-327vOlwspi9i1T3Kc9yZhRUR8qDdgMQ4HmXsFDDCQ/HTc3sNe7gnF5b0UrsnaOJ0rvmG7yBZpK0NoOux9rKYKw==", - "dev": true, - "requires": { - "lodash.isequal": "^4.5.0" - } - }, "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -2457,7 +2480,8 @@ "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true }, "define-data-property": { "version": "1.1.1", @@ -2484,7 +2508,8 @@ "defined": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==" + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true }, "deps-sort": { "version": "2.0.1", @@ -2560,7 +2585,8 @@ "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true }, "duplexer2": { "version": "0.1.4", @@ -2575,6 +2601,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dev": true, "requires": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", @@ -2586,6 +2613,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -2633,6 +2661,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "requires": { "once": "^1.4.0" } @@ -2650,6 +2679,7 @@ "version": "0.10.62", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, "requires": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -2660,6 +2690,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, "requires": { "d": "1", "es5-ext": "^0.10.35", @@ -2670,6 +2701,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dev": true, "requires": { "d": "1", "es5-ext": "~0.10.14", @@ -2683,6 +2715,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dev": true, "requires": { "d": "^1.0.1", "es5-ext": "^0.10.62", @@ -2695,7 +2728,8 @@ "type": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true } } }, @@ -2703,6 +2737,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, "requires": { "d": "^1.0.1", "ext": "^1.1.2" @@ -2712,6 +2747,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, "requires": { "d": "1", "es5-ext": "^0.10.46", @@ -2728,12 +2764,14 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true }, "escodegen": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, "requires": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -2744,7 +2782,8 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true } } }, @@ -2752,6 +2791,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", + "dev": true, "requires": { "es6-map": "^0.1.3", "es6-weak-map": "^2.0.1", @@ -2780,12 +2820,14 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, "esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "requires": { "estraverse": "^5.2.0" }, @@ -2793,34 +2835,40 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true } } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true }, "estree-is-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", - "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==" + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", + "dev": true }, "estree-is-identifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-identifier/-/estree-is-identifier-1.0.0.tgz", - "integrity": "sha512-2BDRGrkQJV/NhCAmmE33A35WAaxq3WQaGHgQuD//7orGWfpFqj8Srkwvx0TH+20yIdOF1yMQwi8anv5ISec2AQ==" + "integrity": "sha512-2BDRGrkQJV/NhCAmmE33A35WAaxq3WQaGHgQuD//7orGWfpFqj8Srkwvx0TH+20yIdOF1yMQwi8anv5ISec2AQ==", + "dev": true }, "estree-is-member-expression": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz", - "integrity": "sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg==" + "integrity": "sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg==", + "dev": true }, "estree-is-require": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-require/-/estree-is-require-1.0.0.tgz", "integrity": "sha512-oWxQdSEmnUwNZsDQYiBNpVxKEhMmsJQSSxnDrwsr1MWtooCLfhgzsNGzmokdmfK0EzEIS5V4LPvqxv1Kmb1vvA==", + "dev": true, "requires": { "estree-is-identifier": "^1.0.0" } @@ -2828,12 +2876,14 @@ "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true }, "event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, "requires": { "d": "1", "es5-ext": "~0.10.14" @@ -2859,6 +2909,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, "requires": { "type": "^2.7.2" }, @@ -2866,7 +2917,8 @@ "type": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true } } }, @@ -2874,6 +2926,7 @@ "version": "2.2.5", "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "dev": true, "requires": { "acorn": "^7.1.1", "isarray": "^2.0.1" @@ -2882,7 +2935,8 @@ "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true } } }, @@ -2914,6 +2968,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -2923,6 +2978,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/from2-string/-/from2-string-1.1.0.tgz", "integrity": "sha512-m8vCh+KnXXXBtfF2VUbiYlQ+nczLcntB0BrtNgpmLkHylhObe9WF1b2LZjBBzrZzA6P4mkEla6ZYQoOUTG8cYA==", + "dev": true, "requires": { "from2": "^2.0.3" } @@ -2952,16 +3008,11 @@ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, - "geodesy": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/geodesy/-/geodesy-1.1.3.tgz", - "integrity": "sha512-H/0XSd1KjKZGZ2YGZcOYzRyY/foYAawwTEumNSo+YUwf+u5d4CfvBRg2i2Qimrx9yUEjWR8hLvMnhghuVFN0Zg==", - "dev": true - }, "get-assigned-identifiers": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true }, "get-caller-file": { "version": "2.0.5", @@ -3029,6 +3080,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3166,12 +3218,14 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "inline-source-map": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==", + "dev": true, "requires": { "source-map": "~0.5.3" }, @@ -3179,7 +3233,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true } } }, @@ -3257,7 +3312,8 @@ "is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true }, "is-callable": { "version": "1.2.7", @@ -3328,7 +3384,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true }, "js-tokens": { "version": "4.0.0", @@ -3348,16 +3405,11 @@ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true }, "labeled-stream-splicer": { "version": "2.0.2", @@ -3381,16 +3433,11 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true - }, "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==" + "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==", + "dev": true }, "loose-envify": { "version": "1.4.0", @@ -3410,26 +3457,15 @@ "yallist": "^3.0.2" } }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, "magic-string": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", "integrity": "sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA==", + "dev": true, "requires": { "sourcemap-codec": "^1.4.1" } }, - "marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -3445,6 +3481,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, "requires": { "source-map": "^0.5.6" }, @@ -3452,7 +3489,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true } } }, @@ -3478,6 +3516,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/minify-stream/-/minify-stream-2.1.0.tgz", "integrity": "sha512-P5xE4EQRkn7Td54VGcgfDMFx1jmKPPIXCdcMfrbXS6cNHK4dO1LXwtYFb48hHrSmZfT+jlGImvHgSZEkbpNtCw==", + "dev": true, "requires": { "concat-stream": "^2.0.0", "convert-source-map": "^1.5.0", @@ -3491,6 +3530,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -3502,6 +3542,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3512,6 +3553,7 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -3536,6 +3578,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3543,7 +3586,8 @@ "minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true }, "mkdirp-classic": { "version": "0.5.3", @@ -3577,12 +3621,14 @@ "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "multi-stage-sourcemap": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz", "integrity": "sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ==", + "dev": true, "requires": { "source-map": "^0.1.34" }, @@ -3591,6 +3637,7 @@ "version": "0.1.43", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dev": true, "requires": { "amdefine": ">=0.0.4" } @@ -3600,12 +3647,14 @@ "multisplice": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/multisplice/-/multisplice-1.0.0.tgz", - "integrity": "sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA==" + "integrity": "sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA==", + "dev": true }, "mutexify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.4.0.tgz", "integrity": "sha512-pbYSsOrSB/AKN5h/WzzLRMFgZhClWccf2XIB4RSMC8JbquiB0e0/SH5AIfdQMdyHmYtv4seU7yV/TvAwPLJ1Yg==", + "dev": true, "requires": { "queue-tick": "^1.0.0" } @@ -3614,6 +3663,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/nanobench/-/nanobench-2.1.1.tgz", "integrity": "sha512-z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A==", + "dev": true, "requires": { "browser-process-hrtime": "^0.1.2", "chalk": "^1.1.3", @@ -3624,7 +3674,8 @@ "next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true }, "node-releases": { "version": "2.0.13", @@ -3716,6 +3767,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "requires": { "wrappy": "1" } @@ -3787,7 +3839,8 @@ "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "path-platform": { "version": "0.11.15", @@ -3820,26 +3873,11 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "plantuml-encoder": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz", - "integrity": "sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==", - "dev": true - }, - "plantuml-pipe": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/plantuml-pipe/-/plantuml-pipe-1.6.0.tgz", - "integrity": "sha512-TsEBors7XBhcejh0uVEFPxGWC+94jvGcPhNEs3cwhwgFSFNQaOuoA83X5sH2t5JBUnrGgL/hMHE/kcdKZBa5vw==", - "dev": true, - "requires": { - "binary-split": "^1.0.5", - "split2": "^4.2.0" - } - }, "pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==" + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true }, "process": { "version": "0.11.10", @@ -3850,12 +3888,7 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "pstree.remy": { @@ -3907,19 +3940,11 @@ "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true }, - "queue-fifo": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/queue-fifo/-/queue-fifo-0.2.6.tgz", - "integrity": "sha512-rwlnZHAaTmWEGKC7ziasK8u4QnZW/uN6kSiG+tHNf/1GA+R32FArZi18s3SYUpKcA0Y6jJoUDn5GT3Anoc2mWw==", - "dev": true, - "requires": { - "dbly-linked-list": "0.3.4" - } - }, "queue-tick": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true }, "randombytes": { "version": "2.1.0", @@ -3953,6 +3978,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4070,7 +4096,8 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -4082,6 +4109,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "dev": true, "requires": { "array-from": "^2.1.1", "dash-ast": "^2.0.1", @@ -4135,18 +4163,6 @@ "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true }, - "shiki": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.5.tgz", - "integrity": "sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==", - "dev": true, - "requires": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -4190,12 +4206,14 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -4204,7 +4222,8 @@ "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true }, "spawn-command": { "version": "0.0.2-1", @@ -4212,12 +4231,6 @@ "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", "dev": true }, - "split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true - }, "stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", @@ -4245,6 +4258,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "dev": true, "requires": { "duplexer": "~0.1.1", "through": "~2.3.4" @@ -4288,7 +4302,8 @@ "stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true }, "stream-splicer": { "version": "2.0.1", @@ -4332,6 +4347,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -4340,6 +4356,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -4371,7 +4388,8 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true }, "supports-preserve-symlinks-flag": { "version": "1.0.0", @@ -4405,6 +4423,7 @@ "version": "3.16.1", "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", + "dev": true, "requires": { "commander": "~2.17.1", "source-map": "~0.6.1", @@ -4414,19 +4433,22 @@ "commander": { "version": "2.17.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true } } }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -4445,6 +4467,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/tinyify/-/tinyify-4.0.0.tgz", "integrity": "sha512-jNDxImwUrJJAU2NyGG144J8aWx2ni39UuBo7ppCXFRmhSH0CbpWL4HgjNvrsAW05WQAgNZePwAlEemNuB+byaA==", + "dev": true, "requires": { "@browserify/envify": "^6.0.0", "@browserify/uglifyify": "^6.0.0", @@ -4462,6 +4485,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4472,6 +4496,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, "requires": { "readable-stream": "3" } @@ -4506,6 +4531,7 @@ "version": "2.4.4", "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", "integrity": "sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ==", + "dev": true, "requires": { "acorn-node": "^1.3.0", "convert-source-map": "^1.5.1", @@ -4520,6 +4546,7 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, "requires": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", @@ -4529,7 +4556,8 @@ "dash-ast": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true } } }, @@ -4580,56 +4608,14 @@ "type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "typedoc": { - "version": "0.24.8", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", - "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", - "dev": true, - "requires": { - "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.0", - "shiki": "^0.14.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "typedoc-umlclass": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/typedoc-umlclass/-/typedoc-umlclass-0.7.1.tgz", - "integrity": "sha512-nHEPjbda1oIZ5lKNMainzi93UB1FyyMNoFWjNlipjK/Adx/RtepJdaGdIrZ8EgtuWGi7pW+xP8jaRmb40vj/9w==", - "dev": true, - "requires": { - "plantuml-encoder": "^1.4.0", - "plantuml-pipe": "^1.5.0", - "progress": "^2.0.3", - "queue-fifo": "^0.2.6" - } + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true }, "typescript": { "version": "4.9.5", @@ -4640,12 +4626,14 @@ "umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==" + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "dev": true }, "unassert": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/unassert/-/unassert-2.0.2.tgz", "integrity": "sha512-P6OOg/aRdQmWH+b0g+T4U+9MgL+DG7w6oQPG+N3F2IMuvvd1WfZ5alT/Rjik2lMFVyhfACUxF7PGP1VCwSHlQA==", + "dev": true, "requires": { "estraverse": "^5.0.0" }, @@ -4653,7 +4641,8 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true } } }, @@ -4661,6 +4650,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/unassertify/-/unassertify-3.0.1.tgz", "integrity": "sha512-461ykSPY3oWU+39J5haiq7S/hcYy1oGJ2nHU92lqdL3jft+pSU6oAbb7o6VVmM7nZGLqppszgyzfpCnRBFgFtw==", + "dev": true, "requires": { "acorn": "^8.0.0", "convert-source-map": "^1.1.1", @@ -4673,7 +4663,8 @@ "acorn": { "version": "8.11.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==" + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true } } }, @@ -4791,7 +4782,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "vm-browserify": { "version": "1.1.2", @@ -4799,18 +4791,6 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, - "vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, "watchify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz", @@ -4916,17 +4896,20 @@ "wrap-comment": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wrap-comment/-/wrap-comment-1.0.1.tgz", - "integrity": "sha512-APccrMwl/ont0RHFTXNAQfM647duYYEfs6cngrIyTByTI0xbWnDnPSptFZhS68L4WCjt2ZxuhCFwuY6Pe88KZQ==" + "integrity": "sha512-APccrMwl/ont0RHFTXNAQfM647duYYEfs6cngrIyTByTI0xbWnDnPSptFZhS68L4WCjt2ZxuhCFwuY6Pe88KZQ==", + "dev": true }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true }, "y18n": { "version": "5.0.8", diff --git a/client/plugins/controltips/package.json b/client/plugins/controltips/package.json index 3862e744..28506544 100644 --- a/client/plugins/controltips/package.json +++ b/client/plugins/controltips/package.json @@ -4,11 +4,11 @@ "private": true, "scripts": { "build": "browserify ./src/index.ts -p [ tsify --noImplicitAny] > index.js && copy.bat", - "build-release": "browserify ./src/index.ts -p [ tsify --noImplicitAny] -p [ tinyify ] > index.js && copy.bat" + "build-release": "browserify ./src/index.ts -p [ tsify --noImplicitAny] -p [ tinyify ] > index.js && copy.bat" }, "dependencies": {}, "devDependencies": { - "@babel/preset-env": "^7.21.4", + "@babel/preset-env": "^7.21.4", "@types/node": "^18.16.1", "@types/sortablejs": "^1.15.0", "babelify": "^10.0.0", diff --git a/client/plugins/databasemanager/package.json b/client/plugins/databasemanager/package.json index 0ef1e86d..7b6208ad 100644 --- a/client/plugins/databasemanager/package.json +++ b/client/plugins/databasemanager/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "build": "browserify ./src/index.ts -p [ tsify --noImplicitAny] > index.js && copy.bat", - "build-release": "browserify ./src/index.ts -p [ tsify --noImplicitAny] -p [ tinyify ] > index.js && copy.bat" + "build-release": "browserify ./src/index.ts -p [ tsify --noImplicitAny] -p [ tinyify ] > index.js && copy.bat", "start": "npm run copy & concurrently --kill-others \"npm run watch\"", "copy": "copy.bat", "watch": "watchify ./src/index.ts --debug -o ../../public/plugins/databasemanager/index.js -t [ babelify --global true --presets [ @babel/preset-env ] --extensions '.js'] -p [ tsify --noImplicitAny ]" diff --git a/client/src/olympusapp.ts b/client/src/olympusapp.ts index 2389d94a..0ab26b3a 100644 --- a/client/src/olympusapp.ts +++ b/client/src/olympusapp.ts @@ -17,6 +17,7 @@ import { WeaponsManager } from "./weapon/weaponsmanager"; import { Manager } from "./other/manager"; import { SVGInjector } from "@tanem/svg-injector"; import { ServerManager } from "./server/servermanager"; +import { sha256 } from 'js-sha256'; import { BLUE_COMMANDER, FILL_SELECTED_RING, GAME_MASTER, HIDE_UNITS_SHORT_RANGE_RINGS, RED_COMMANDER, SHOW_UNITS_ACQUISITION_RINGS, SHOW_UNITS_ENGAGEMENT_RINGS, SHOW_UNIT_LABELS } from "./constants/constants"; import { aircraftDatabase } from "./unit/databases/aircraftdatabase"; @@ -408,8 +409,9 @@ export class OlympusApp { loginForm.addEventListener("submit", (ev:SubmitEvent) => { ev.preventDefault(); ev.stopPropagation(); + var hash = sha256.create(); const username = (loginForm.querySelector("#username") as HTMLInputElement).value; - const password = (loginForm.querySelector("#password") as HTMLInputElement).value; + const password = hash.update((loginForm.querySelector("#password") as HTMLInputElement).value).hex(); // Update the user credentials this.getServerManager().setCredentials(username, password); diff --git a/client/views/other/dialogs.ejs b/client/views/other/dialogs.ejs index 3333b8f8..a981d324 100644 --- a/client/views/other/dialogs.ejs +++ b/client/views/other/dialogs.ejs @@ -7,8 +7,8 @@
-
Name
-
Server password
+
Name
+
Server password
diff --git a/installer/olympus.iss b/installer/olympus.iss index 91033c46..d1776e78 100644 --- a/installer/olympus.iss +++ b/installer/olympus.iss @@ -258,7 +258,7 @@ begin Top := ScaleY(198); Width := ScaleX(46); Height := ScaleY(13); - Caption := 'DCS Olympus port'; + Caption := 'Backend port'; end; { txtBackendPort } diff --git a/olympus.json b/olympus.json index 026732e5..94e7f211 100644 --- a/olympus.json +++ b/olympus.json @@ -5,7 +5,7 @@ }, "authentication": { "gameMasterPassword": "4b8823ed9e5c2392ab4a791913bb8ce41956ea32e308b760eefb97536746dd33", - "blueCommanderPassword": "b0ea4230c1558c5313165eda1bdb7fced008ca7f2ca6b823fb4d26292f309098", + "blueCommanderPassword": "302bcbaf2a3fdcf175b689bf102d6cdf9328f68a13d4096101bba806482bfed9", "redCommanderPassword": "b0ea4230c1558c5313165eda1bdb7fced008ca7f2ca6b823fb4d26292f309098" }, "client": { diff --git a/scripts/python/configurator/configurator.py b/scripts/python/configurator/configurator.py index c3df820f..04e4e189 100644 --- a/scripts/python/configurator/configurator.py +++ b/scripts/python/configurator/configurator.py @@ -40,7 +40,7 @@ def apply_values(args): print("No Game Master password provided, skipping...") if args.bluePassword is not None and args.bluePassword != "": - config["authentication"]["blueCommanderPassword"] = hashlib.sha256(args.redPassword.encode()).hexdigest() + config["authentication"]["blueCommanderPassword"] = hashlib.sha256(args.bluePassword.encode()).hexdigest() print(f"Blue Commander password set to {args.bluePassword}") else: print("No Blue Commander password provided, skipping...") @@ -87,8 +87,8 @@ def main(): [[sg.T("DCS Olympus configurator", font=("Helvetica", 14, "bold")), sg.Push(), sg.Image(".\\img\\configurator_logo.png", size = (50, 50))], [sg.T("")], [sg.T("Address"), sg.Push(), sg.In(size=(30, 10), default_text=config["server"]["address"], key="address")], - [sg.T("Backend port"), sg.Push(), sg.In(size=(30, 10), default_text=config["server"]["port"], key="backendPort", enable_events=True)], [sg.T("Webserver port"), sg.Push(), sg.In(size=(30, 10), default_text=config["client"]["port"], key="clientPort", enable_events=True)], + [sg.T("Backend port"), sg.Push(), sg.In(size=(30, 10), default_text=config["server"]["port"], key="backendPort", enable_events=True)], [sg.T("Game Master password"), sg.Push(), sg.In(size=(30, 10), password_char="*", key="password")], [sg.T("Blue Commander password"), sg.Push(), sg.In(size=(30, 10), password_char="*", key="bluePassword")], [sg.T("Red Commander password"), sg.Push(), sg.In(size=(30, 10), password_char="*", key="redPassword")], From 1cfe6f558325a692c02a5cd9fd2b1b2f57a95395 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Wed, 22 Nov 2023 11:32:13 +0100 Subject: [PATCH 24/41] Added simple loading screen --- client/public/stylesheets/style/style.css | 37 +++++++++++++++++++++++ client/src/olympusapp.ts | 18 ++++++++--- client/views/index.ejs | 6 ++++ 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/client/public/stylesheets/style/style.css b/client/public/stylesheets/style/style.css index 53d8768c..d0f5e530 100644 --- a/client/public/stylesheets/style/style.css +++ b/client/public/stylesheets/style/style.css @@ -823,6 +823,43 @@ nav.ol-panel> :last-child { z-index: 99999; } +#loading-screen { + display: flex; + background-image: linear-gradient(var(--background-steel), var(--background-grey)); + height: 100%; + left: 0px; + position: fixed; + top: 0px; + width: 100%; + z-index: 999999; + justify-content: center; + align-items: center; + flex-direction: column; + row-gap: 20px; +} + +#loading-screen img { + height: 300px; + width: 300px; +} + +#loading-screen div { + color: white; + font-size: 18px; + animation: blinker 3s linear infinite; +} + +@keyframes blinker { + 50% { + opacity: 0; + } +} + +.fade-out { + opacity: 0%; + transition: opacity 1s; +} + #authentication-form { align-items: end; column-gap: 10px; diff --git a/client/src/olympusapp.ts b/client/src/olympusapp.ts index 0ab26b3a..71251942 100644 --- a/client/src/olympusapp.ts +++ b/client/src/olympusapp.ts @@ -232,11 +232,21 @@ export class OlympusApp { this.#setupEvents(); /* Set the splash background image to a random image */ - var splashScreen = document.getElementById("splash-screen"); - if (splashScreen) { - let i = Math.round(Math.random() * 7 + 1); + let splashScreen = document.getElementById("splash-screen") as HTMLElement; + let i = Math.round(Math.random() * 7 + 1); + + new Promise((resolve, reject) => { + const image = new Image(); + image.addEventListener('load', resolve); + image.addEventListener('error', resolve); + image.src = `/resources/theme/images/splash/${i}.jpg`; + }).then(() => { splashScreen.style.backgroundImage = `url('/resources/theme/images/splash/${i}.jpg')`; - } + let loadingScreen = document.getElementById("loading-screen") as HTMLElement; + loadingScreen.classList.add("fade-out"); + window.setInterval(() => { loadingScreen.classList.add("hide"); }, 1000); + + }) } #setupEvents() { diff --git a/client/views/index.ejs b/client/views/index.ejs index 6ecfaba2..6856ec4e 100644 --- a/client/views/index.ejs +++ b/client/views/index.ejs @@ -50,6 +50,12 @@
+ + +
+ +
Loading DCS Olympus...
+
From 4197e4402c1fd917bac9fa050e137138758a4e92 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Wed, 22 Nov 2023 11:33:13 +0100 Subject: [PATCH 25/41] Relative paths for nwjs and node folders --- installer/olympus.iss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/installer/olympus.iss b/installer/olympus.iss index d1776e78..9b23d707 100644 --- a/installer/olympus.iss +++ b/installer/olympus.iss @@ -1,5 +1,5 @@ -#define nwjsFolder "C:\Users\dpass\Documents\nwjs\" -#define nodejsFolder "D:\Documents\node\" +#define nwjsFolder "..\..\nwjs\" +#define nodejsFolder "..\..\node\" #define version "v0.4.7-alpha" [Setup] @@ -44,7 +44,7 @@ Source: "..\img\olympus.ico"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: Source: "..\img\olympus_server.ico"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: ignoreversion; Source: "..\img\olympus_configurator.ico"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: ignoreversion; Source: "..\img\configurator_logo.png"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: ignoreversion; -; Source: "{#nwjsFolder}\*.*"; DestDir: "{app}\Mods\Services\Olympus\client\bin\nw"; Flags: ignoreversion recursesubdirs; Check: CheckLocalInstall +Source: "{#nwjsFolder}\*.*"; DestDir: "{app}\Mods\Services\Olympus\client\bin\nw"; Flags: ignoreversion recursesubdirs; Check: CheckLocalInstall Source: "{#nodejsFolder}\*.*"; DestDir: "{app}\Mods\Services\Olympus\client\bin\node"; Flags: ignoreversion recursesubdirs; Check: CheckServerInstall Source: "..\scripts\python\configurator\dist\configurator.exe"; DestDir: "{app}\Mods\Services\Olympus"; Flags: ignoreversion; Check: CheckServerInstall From d3f8d4eff740d006c76928749219479dece0fd77 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Wed, 22 Nov 2023 13:12:35 +0100 Subject: [PATCH 26/41] Grouped units can be deleted now Also added some performance optimizations on drawing of selected units and removed destination preview icon for single unit selection --- client/demo.js | 8 +- .../controltips/src/controltipsplugin.ts | 2 +- client/public/stylesheets/style/style.css | 2 +- .../{groundunit-other.svg => groundunit.svg} | 0 client/src/constants/constants.ts | 8 +- client/src/dom.d.ts | 2 +- client/src/map/map.ts | 70 ++++---- client/src/panels/unitcontrolpanel.ts | 154 +++++++++--------- .../citiesdatabase.ts} | 0 client/src/unit/unit.ts | 27 +-- client/src/unit/unitsmanager.ts | 45 ++++- client/src/weapon/weapon.ts | 12 +- 12 files changed, 172 insertions(+), 158 deletions(-) rename client/public/themes/olympus/images/buttons/visibility/{groundunit-other.svg => groundunit.svg} (100%) rename client/src/unit/{citiesDatabase.ts => databases/citiesdatabase.ts} (100%) diff --git a/client/demo.js b/client/demo.js index 91b35c28..2bcb808a 100644 --- a/client/demo.js +++ b/client/demo.js @@ -25,8 +25,6 @@ class DemoDataGenerator { app.get('/demo/commands', (req, res) => this.command(req, res)); app.put('/demo', (req, res) => this.put(req, res)); - console.log(config["authentication"]["gameMasterPassword"]) - app.use('/demo', basicAuth({ users: { 'admin': config["authentication"]["gameMasterPassword"], @@ -54,9 +52,9 @@ class DemoDataGenerator { isLeader: true } + /* - - ***************** UNCOMMENT TO TEST ALL UNITS **************** + // UNCOMMENT TO TEST ALL UNITS **************** var databases = Object.assign({}, aircraftDatabase, helicopterDatabase, groundUnitDatabase, navyUnitDatabase); var t = Object.keys(databases).length; @@ -93,6 +91,7 @@ class DemoDataGenerator { } */ + let idx = 1; DEMO_UNIT_DATA[idx] = JSON.parse(JSON.stringify(baseData)); DEMO_UNIT_DATA[idx].name = "S_75M_Volhov"; @@ -116,6 +115,7 @@ class DemoDataGenerator { DEMO_UNIT_DATA[idx].position.lat += idx / 100; DEMO_UNIT_DATA[idx].category = "GroundUnit"; DEMO_UNIT_DATA[idx].isLeader = false; + idx += 1; DEMO_UNIT_DATA[idx] = JSON.parse(JSON.stringify(baseData)); diff --git a/client/plugins/controltips/src/controltipsplugin.ts b/client/plugins/controltips/src/controltipsplugin.ts index 511f89bf..72982b89 100644 --- a/client/plugins/controltips/src/controltipsplugin.ts +++ b/client/plugins/controltips/src/controltipsplugin.ts @@ -64,7 +64,7 @@ export class ControlTipsPlugin implements OlympusPlugin { this.#updateTips(); }); - document.addEventListener("mapVisibilityOptionsChanged", () => { + document.addEventListener("mapOptionsChanged", () => { this.toggle( !this.#app.getMap().getVisibilityOptions()[SHOW_CONTROL_TIPS] ); }); diff --git a/client/public/stylesheets/style/style.css b/client/public/stylesheets/style/style.css index f8f1a1be..e64840c6 100644 --- a/client/public/stylesheets/style/style.css +++ b/client/public/stylesheets/style/style.css @@ -23,7 +23,7 @@ body { } .hidden-cursor { - cursor: none !important; + /*cursor: none !important;*/ } .hidden-cursor * { diff --git a/client/public/themes/olympus/images/buttons/visibility/groundunit-other.svg b/client/public/themes/olympus/images/buttons/visibility/groundunit.svg similarity index 100% rename from client/public/themes/olympus/images/buttons/visibility/groundunit-other.svg rename to client/public/themes/olympus/images/buttons/visibility/groundunit.svg diff --git a/client/src/constants/constants.ts b/client/src/constants/constants.ts index c58e3073..ca0abf39 100644 --- a/client/src/constants/constants.ts +++ b/client/src/constants/constants.ts @@ -157,8 +157,8 @@ export const mapLayers = { export const IDLE = "Idle"; export const MOVE_UNIT = "Move unit"; export const COALITIONAREA_DRAW_POLYGON = "Draw Coalition Area"; -export const visibilityControls: string[] = ["human", "dcs", "aircraft", "helicopter", "groundunit-sam", "groundunit-other", "navyunit", "airbase"]; -export const visibilityControlsTypes: string[][] = [["human"], ["dcs"], ["aircraft"], ["helicopter"], ["groundunit-sam", "groundunit-sam-radar", "groundunit-sam-launcher"], ["groundunit-other", "groundunit-ewr"], ["navyunit"], ["airbase"]]; +export const visibilityControls: string[] = ["human", "dcs", "aircraft", "helicopter", "groundunit-sam", "groundunit", "navyunit", "airbase"]; +export const visibilityControlsTypes: string[][] = [["human"], ["dcs"], ["aircraft"], ["helicopter"], ["groundunit-sam"], ["groundunit"], ["navyunit"], ["airbase"]]; export const visibilityControlsTooltips: string[] = ["Toggle human players visibility", "Toggle DCS controlled units visibility", "Toggle aircrafts visibility", "Toggle helicopter visibility", "Toggle SAM units visibility", "Toggle ground units (not SAM) visibility", "Toggle navy units visibility", "Toggle airbases visibility"]; export const MAP_MARKER_CONTROLS: MapMarkerControl[] = [{ "name": "Human", @@ -188,9 +188,9 @@ export const MAP_MARKER_CONTROLS: MapMarkerControl[] = [{ "toggles": ["groundunit-sam"], "tooltip": "Toggle air defence units' visibility" }, { - "image": "visibility/groundunit-other.svg", + "image": "visibility/groundunit.svg", "name": "Ground units", - "toggles": ["groundunit-other"], + "toggles": ["groundunit"], "tooltip": "Toggle ground units' visibility" }, { "image": "visibility/navyunit.svg", diff --git a/client/src/dom.d.ts b/client/src/dom.d.ts index 15e260f5..0508b6b2 100644 --- a/client/src/dom.d.ts +++ b/client/src/dom.d.ts @@ -18,7 +18,7 @@ interface CustomEventMap { "groupDeletion": CustomEvent, "mapStateChanged": CustomEvent, "mapContextMenu": CustomEvent<>, - "mapVisibilityOptionsChanged": CustomEvent<>, + "mapOptionsChanged": CustomEvent<>, "commandModeOptionsChanged": CustomEvent<>, "contactsUpdated": CustomEvent, "activeCoalitionChanged": CustomEvent<> diff --git a/client/src/map/map.ts b/client/src/map/map.ts index f4df7ecd..2da162ea 100644 --- a/client/src/map/map.ts +++ b/client/src/map/map.ts @@ -198,7 +198,7 @@ export class Map extends L.Map { this.#panToUnit(this.#centerUnit); }); - document.addEventListener("mapVisibilityOptionsChanged", () => { + document.addEventListener("mapOptionsChanged", () => { this.getContainer().toggleAttribute("data-hide-labels", !this.getVisibilityOptions()[SHOW_UNIT_LABELS]); }); @@ -572,7 +572,6 @@ export class Map extends L.Map { else { this.setState(IDLE); } - } #onSelectionStart(e: any) { @@ -766,48 +765,45 @@ export class Map extends L.Map { const singleCursor = !this.#shiftKey; const selectedUnitsCount = getApp().getUnitsManager().getSelectedUnits({ excludeHumans: true, onlyOnePerGroup: true }).length; if (singleCursor) { - if ( this.#destinationPreviewCursors.length != 1) { - this.#hideDestinationCursors(); - var marker = new DestinationPreviewMarker(this.getMouseCoordinates(), { interactive: false }); - marker.addTo(this); - this.#destinationPreviewCursors = [marker]; - } - - this.#destinationPreviewHandleLine.removeFrom(this); - this.#destinationPreviewHandle.removeFrom(this); + this.#hideDestinationCursors(); } else if (!singleCursor) { - while (this.#destinationPreviewCursors.length > selectedUnitsCount) { - this.removeLayer(this.#destinationPreviewCursors[0]); - this.#destinationPreviewCursors.splice(0, 1); + if (selectedUnitsCount > 1) { + while (this.#destinationPreviewCursors.length > selectedUnitsCount) { + this.removeLayer(this.#destinationPreviewCursors[0]); + this.#destinationPreviewCursors.splice(0, 1); + } + + this.#destinationPreviewHandleLine.addTo(this); + this.#destinationPreviewHandle.addTo(this); + + while (this.#destinationPreviewCursors.length < selectedUnitsCount) { + var cursor = new DestinationPreviewMarker(this.getMouseCoordinates(), { interactive: false }); + cursor.addTo(this); + this.#destinationPreviewCursors.push(cursor); + } + + this.#updateDestinationCursors(); } - - this.#destinationPreviewHandleLine.addTo(this); - this.#destinationPreviewHandle.addTo(this); - - while (this.#destinationPreviewCursors.length < selectedUnitsCount) { - var cursor = new DestinationPreviewMarker(this.getMouseCoordinates(), { interactive: false }); - cursor.addTo(this); - this.#destinationPreviewCursors.push(cursor); - } - - this.#updateDestinationCursors(); } } #updateDestinationCursors() { - const groupLatLng = this.#computeDestinationRotation && this.#destinationRotationCenter != null ? this.#destinationRotationCenter : this.getMouseCoordinates(); - if (this.#destinationPreviewCursors.length == 1) - this.#destinationPreviewCursors[0].setLatLng(this.getMouseCoordinates()); - else { - Object.values(getApp().getUnitsManager().computeGroupDestination(groupLatLng, this.#destinationGroupRotation)).forEach((latlng: L.LatLng, idx: number) => { - if (idx < this.#destinationPreviewCursors.length) - this.#destinationPreviewCursors[idx].setLatLng(this.#shiftKey ? latlng : this.getMouseCoordinates()); - }) - }; + const selectedUnitsCount = getApp().getUnitsManager().getSelectedUnits({ excludeHumans: true, onlyOnePerGroup: true }).length; + if (selectedUnitsCount > 1) { + const groupLatLng = this.#computeDestinationRotation && this.#destinationRotationCenter != null ? this.#destinationRotationCenter : this.getMouseCoordinates(); + if (this.#destinationPreviewCursors.length == 1) + this.#destinationPreviewCursors[0].setLatLng(this.getMouseCoordinates()); + else { + Object.values(getApp().getUnitsManager().computeGroupDestination(groupLatLng, this.#destinationGroupRotation)).forEach((latlng: L.LatLng, idx: number) => { + if (idx < this.#destinationPreviewCursors.length) + this.#destinationPreviewCursors[idx].setLatLng(this.#shiftKey ? latlng : this.getMouseCoordinates()); + }) + }; - this.#destinationPreviewHandleLine.setLatLngs([groupLatLng, this.getMouseCoordinates()]); - this.#destinationPreviewHandle.setLatLng(this.getMouseCoordinates()); + this.#destinationPreviewHandleLine.setLatLngs([groupLatLng, this.getMouseCoordinates()]); + this.#destinationPreviewHandle.setLatLng(this.getMouseCoordinates()); + } } #hideDestinationCursors() { @@ -861,7 +857,7 @@ export class Map extends L.Map { #setVisibilityOption(option: string, ev: any) { this.#visibilityOptions[option] = ev.currentTarget.checked; - document.dispatchEvent(new CustomEvent("mapVisibilityOptionsChanged")); + document.dispatchEvent(new CustomEvent("mapOptionsChanged")); } getMapMarkerControls() { diff --git a/client/src/panels/unitcontrolpanel.ts b/client/src/panels/unitcontrolpanel.ts index 6100b84a..ba135fdb 100644 --- a/client/src/panels/unitcontrolpanel.ts +++ b/client/src/panels/unitcontrolpanel.ts @@ -2,16 +2,13 @@ import { SVGInjector } from "@tanem/svg-injector"; import { getApp } from ".."; import { Dropdown } from "../controls/dropdown"; import { Slider } from "../controls/slider"; -import { aircraftDatabase } from "../unit/databases/aircraftdatabase"; import { Unit } from "../unit/unit"; import { Panel } from "./panel"; import { Switch } from "../controls/switch"; import { ROEDescriptions, ROEs, altitudeIncrements, emissionsCountermeasures, emissionsCountermeasuresDescriptions, maxAltitudeValues, maxSpeedValues, minAltitudeValues, minSpeedValues, reactionsToThreat, reactionsToThreatDescriptions, shotsIntensityDescriptions, shotsScatterDescriptions, speedIncrements } from "../constants/constants"; import { ftToM, knotsToMs, mToFt, msToKnots } from "../other/utils"; import { GeneralSettings, Radio, TACAN } from "../interfaces"; -import { PrimaryToolbar } from "../toolbars/primarytoolbar"; import { ContextActionSet } from "../unit/contextactionset"; -import { ContextAction } from "../unit/contextaction"; export class UnitControlPanel extends Panel { #altitudeSlider: Slider; @@ -36,36 +33,36 @@ export class UnitControlPanel extends Panel { * * @param ID - the ID of the HTML element which will contain the context menu */ - constructor(ID: string){ + constructor(ID: string) { super(ID); /* Unit control sliders */ this.#altitudeSlider = new Slider("altitude-slider", 0, 100, "ft", (value: number) => { getApp().getUnitsManager().setAltitude(ftToM(value)); }); - this.#altitudeTypeSwitch = new Switch("altitude-type-switch", (value: boolean) => { getApp().getUnitsManager().setAltitudeType(value? "ASL": "AGL"); }); + this.#altitudeTypeSwitch = new Switch("altitude-type-switch", (value: boolean) => { getApp().getUnitsManager().setAltitudeType(value ? "ASL" : "AGL"); }); this.#speedSlider = new Slider("speed-slider", 0, 100, "kts", (value: number) => { getApp().getUnitsManager().setSpeed(knotsToMs(value)); }); - this.#speedTypeSwitch = new Switch("speed-type-switch", (value: boolean) => { getApp().getUnitsManager().setSpeedType(value? "CAS": "GS"); }); + this.#speedTypeSwitch = new Switch("speed-type-switch", (value: boolean) => { getApp().getUnitsManager().setSpeedType(value ? "CAS" : "GS"); }); /* Option buttons */ // Reversing the ROEs so that the least "aggressive" option is always on the left this.#optionButtons["ROE"] = ROEs.slice(0).reverse().map((option: string, index: number) => { return this.#createOptionButton(option, `roe/${option.toLowerCase()}.svg`, ROEDescriptions.slice(0).reverse()[index], () => { getApp().getUnitsManager().setROE(option); }); - }).filter((button: HTMLButtonElement, index: number) => {return ROEs[index] !== "";}); + }).filter((button: HTMLButtonElement, index: number) => { return ROEs[index] !== ""; }); this.#optionButtons["reactionToThreat"] = reactionsToThreat.map((option: string, index: number) => { - return this.#createOptionButton(option, `threat/${option.toLowerCase()}.svg`, reactionsToThreatDescriptions[index],() => { getApp().getUnitsManager().setReactionToThreat(option); }); + return this.#createOptionButton(option, `threat/${option.toLowerCase()}.svg`, reactionsToThreatDescriptions[index], () => { getApp().getUnitsManager().setReactionToThreat(option); }); }); this.#optionButtons["emissionsCountermeasures"] = emissionsCountermeasures.map((option: string, index: number) => { - return this.#createOptionButton(option, `emissions/${option.toLowerCase()}.svg`, emissionsCountermeasuresDescriptions[index],() => { getApp().getUnitsManager().setEmissionsCountermeasures(option); }); + return this.#createOptionButton(option, `emissions/${option.toLowerCase()}.svg`, emissionsCountermeasuresDescriptions[index], () => { getApp().getUnitsManager().setEmissionsCountermeasures(option); }); }); this.#optionButtons["shotsScatter"] = [1, 2, 3].map((option: number, index: number) => { - return this.#createOptionButton(option.toString(), `scatter/${option.toString().toLowerCase()}.svg`, shotsScatterDescriptions[index],() => { getApp().getUnitsManager().setShotsScatter(option); }); + return this.#createOptionButton(option.toString(), `scatter/${option.toString().toLowerCase()}.svg`, shotsScatterDescriptions[index], () => { getApp().getUnitsManager().setShotsScatter(option); }); }); this.#optionButtons["shotsIntensity"] = [1, 2, 3].map((option: number, index: number) => { - return this.#createOptionButton(option.toString(), `intensity/${option.toString().toLowerCase()}.svg`, shotsIntensityDescriptions[index],() => { getApp().getUnitsManager().setShotsIntensity(option); }); + return this.#createOptionButton(option.toString(), `intensity/${option.toString().toLowerCase()}.svg`, shotsIntensityDescriptions[index], () => { getApp().getUnitsManager().setShotsIntensity(option); }); }); this.getElement().querySelector("#roe-buttons-container")?.append(...this.#optionButtons["ROE"]); @@ -110,48 +107,50 @@ export class UnitControlPanel extends Panel { /* Mouseover of (?) highlights activation buttons */ const operateAsQuestionMark = this.getElement().querySelector("#operate-as h4 img"); operateAsQuestionMark.addEventListener("mouseover", () => { - document.querySelectorAll(`#rapid-controls button.scenic-action`).forEach((btn:Element) => { + document.querySelectorAll(`#rapid-controls button.scenic-action`).forEach((btn: Element) => { btn.classList.add(`pulse`); }); }); operateAsQuestionMark.addEventListener("mouseout", () => { - document.querySelectorAll(`#rapid-controls button.scenic-action.pulse`).forEach((btn:Element) => { + document.querySelectorAll(`#rapid-controls button.scenic-action.pulse`).forEach((btn: Element) => { btn.classList.remove(`pulse`); }); }); /* Advanced settings dialog */ - this.#advancedSettingsDialog = document.querySelector("#advanced-settings-dialog"); + this.#advancedSettingsDialog = document.querySelector("#advanced-settings-dialog"); /* Advanced settings dropdowns */ - this.#TACANXYDropdown = new Dropdown("TACAN-XY", () => {}); + this.#TACANXYDropdown = new Dropdown("TACAN-XY", () => { }); this.#TACANXYDropdown.setOptions(["X", "Y"]); - this.#radioDecimalsDropdown = new Dropdown("radio-decimals", () => {}); + this.#radioDecimalsDropdown = new Dropdown("radio-decimals", () => { }); this.#radioDecimalsDropdown.setOptions([".000", ".250", ".500", ".750"]); - this.#radioCallsignDropdown = new Dropdown("radio-callsign", () => {}); + this.#radioCallsignDropdown = new Dropdown("radio-callsign", () => { }); this.#deleteDropdown = new Dropdown("delete-options", () => { }); /* Events and timer */ - window.setInterval(() => {this.update();}, 25); + window.setInterval(() => { this.update(); }, 25); - document.addEventListener("unitsSelection", (e: CustomEvent) => { - this.show(); + document.addEventListener("unitsSelection", (e: CustomEvent) => { + this.show(); this.addButtons(); - this.#updateRapidControls(); + this.#updateRapidControls(); }); - document.addEventListener("clearSelection", () => { + document.addEventListener("clearSelection", () => { this.hide(); - this.#updateRapidControls(); + this.#updateRapidControls(); }); - document.addEventListener("applyAdvancedSettings", () => {this.#applyAdvancedSettings();}) + document.addEventListener("applyAdvancedSettings", () => { this.#applyAdvancedSettings(); }) document.addEventListener("showAdvancedSettings", () => { this.#updateAdvancedSettingsDialog(getApp().getUnitsManager().getSelectedUnits()); this.#advancedSettingsDialog.classList.remove("hide"); }); + /* This is for when a ctrl-click happens on the map for deselection and we need to remove the selected unit from the panel */ - document.addEventListener( "unitsDeselection", ( ev:CustomEventInit ) => { - this.getElement().querySelector( `button[data-unit-id="${ev.detail.ID}"]` )?.remove(); - this.#updateRapidControls(); + document.addEventListener("unitsDeselection", (ev: CustomEventInit) => { + this.show(); + this.addButtons(); + this.#updateRapidControls(); }); window.addEventListener("resize", (e: any) => this.#calculateMaxHeight()); @@ -159,16 +158,16 @@ export class UnitControlPanel extends Panel { const element = document.getElementById("toolbar-container"); if (element) new ResizeObserver(() => this.#calculateTop()).observe(element); - + this.#calculateMaxHeight() this.hide(); } show() { const context = getApp().getCurrentContext(); - if ( !context.getUseUnitControlPanel() ) + if (!context.getUseUnitControlPanel()) return; - + super.show(); this.#speedTypeSwitch.resetExpectedValue(); this.#altitudeTypeSwitch.resetExpectedValue(); @@ -184,26 +183,26 @@ export class UnitControlPanel extends Panel { addButtons() { this.#units = getApp().getUnitsManager().getSelectedUnits(); this.#selectedUnitsTypes = getApp().getUnitsManager().getSelectedUnitsCategories(); - + if (this.#units.length < 20) { this.getElement().querySelector("#selected-units-container")?.replaceChildren(...this.#units.map((unit: Unit, index: number) => { var button = document.createElement("button"); var callsign = unit.getUnitName() || ""; var label = unit.getDatabase()?.getByName(unit.getName())?.label || unit.getName(); - button.setAttribute("data-unit-id", "" + unit.ID ); + button.setAttribute("data-unit-id", "" + unit.ID); button.setAttribute("data-label", label); button.setAttribute("data-callsign", callsign); button.setAttribute("data-coalition", unit.getCoalition()); button.classList.add("pill", "highlight-coalition") - button.addEventListener("click", ( ev:MouseEventInit ) => { + button.addEventListener("click", (ev: MouseEventInit) => { // Ctrl-click deselection - if ( ev.ctrlKey === true && ev.shiftKey === false && ev.altKey === false ) { - getApp().getUnitsManager().deselectUnit( unit.ID ); + if (ev.ctrlKey === true && ev.shiftKey === false && ev.altKey === false) { + getApp().getUnitsManager().deselectUnit(unit.ID); button.remove(); - // Deselect all + // Deselect all } else { getApp().getUnitsManager().deselectAllUnits(); getApp().getUnitsManager().selectUnit(unit.ID, true); @@ -219,14 +218,14 @@ export class UnitControlPanel extends Panel { } update() { - if (this.getVisible()){ + if (this.getVisible()) { const element = this.getElement(); if (element != null && this.#units.length > 0) { /* Toggle visibility of control elements */ - var isTanker = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.isTanker();}); - var isAWACS = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.isAWACS();}); - var isActiveTanker = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.getIsActiveTanker()}); - var isActiveAWACAS = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.getIsActiveAWACS()}); + var isTanker = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.isTanker(); }); + var isAWACS = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.isAWACS(); }); + var isActiveTanker = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getIsActiveTanker() }); + var isActiveAWACAS = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getIsActiveAWACS() }); element.toggleAttribute("data-show-categories-tooltip", this.#selectedUnitsTypes.length > 1); element.toggleAttribute("data-show-speed-slider", this.#selectedUnitsTypes.length == 1); @@ -236,35 +235,35 @@ export class UnitControlPanel extends Panel { element.toggleAttribute("data-show-emissions-countermeasures", (this.#selectedUnitsTypes.includes("Aircraft") || this.#selectedUnitsTypes.includes("Helicopter")) && !(this.#selectedUnitsTypes.includes("GroundUnit") || this.#selectedUnitsTypes.includes("NavyUnit"))); element.toggleAttribute("data-show-shots-scatter", this.#selectedUnitsTypes.includes("GroundUnit")); //TODO: more refined element.toggleAttribute("data-show-shots-intensity", this.#selectedUnitsTypes.includes("GroundUnit")); //TODO: more refined - element.toggleAttribute("data-show-tanker-button", getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.isTanker();}) === true); - element.toggleAttribute("data-show-AWACS-button", getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.isAWACS();}) === true); + element.toggleAttribute("data-show-tanker-button", getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.isTanker(); }) === true); + element.toggleAttribute("data-show-AWACS-button", getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.isAWACS(); }) === true); element.toggleAttribute("data-show-on-off", (this.#selectedUnitsTypes.includes("GroundUnit") || this.#selectedUnitsTypes.includes("NavyUnit")) && !(this.#selectedUnitsTypes.includes("Aircraft") || this.#selectedUnitsTypes.includes("Helicopter"))); element.toggleAttribute("data-show-follow-roads", (this.#selectedUnitsTypes.length == 1 && this.#selectedUnitsTypes.includes("GroundUnit"))); - element.toggleAttribute("data-show-operate-as", getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.getCoalition()}) === "neutral"); + element.toggleAttribute("data-show-operate-as", getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getCoalition() }) === "neutral"); if (this.#units.length == 1) { - if (isAWACS) + if (isAWACS) element.toggleAttribute("data-show-advanced-settings-button", isActiveAWACAS); - else if (isTanker) + else if (isTanker) element.toggleAttribute("data-show-advanced-settings-button", isActiveTanker); - else + else element.toggleAttribute("data-show-advanced-settings-button", true); } - + if (this.#selectedUnitsTypes.length == 1) { /* Flight controls */ - var desiredAltitude = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.getDesiredAltitude()}); - var desiredAltitudeType = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.getDesiredAltitudeType()}); - var desiredSpeed = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.getDesiredSpeed()}); - var desiredSpeedType = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.getDesiredSpeedType()}); - var isActiveTanker = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.getIsActiveTanker()}); - var isActiveAWACAS = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.getIsActiveAWACS()}); - var onOff = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.getOnOff()}); - var followRoads = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.getFollowRoads()}); - var operateAs = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => {return unit.getOperateAs()}); - - this.#altitudeTypeSwitch.setValue(desiredAltitudeType != undefined? desiredAltitudeType == "ASL": undefined, false); - this.#speedTypeSwitch.setValue(desiredSpeedType != undefined? desiredSpeedType == "CAS": undefined, false); + var desiredAltitude = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getDesiredAltitude() }); + var desiredAltitudeType = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getDesiredAltitudeType() }); + var desiredSpeed = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getDesiredSpeed() }); + var desiredSpeedType = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getDesiredSpeedType() }); + var isActiveTanker = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getIsActiveTanker() }); + var isActiveAWACAS = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getIsActiveAWACS() }); + var onOff = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getOnOff() }); + var followRoads = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getFollowRoads() }); + var operateAs = getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getOperateAs() }); + + this.#altitudeTypeSwitch.setValue(desiredAltitudeType != undefined ? desiredAltitudeType == "ASL" : undefined, false); + this.#speedTypeSwitch.setValue(desiredSpeedType != undefined ? desiredSpeedType == "CAS" : undefined, false); this.#speedSlider.setMinMax(minSpeedValues[this.#selectedUnitsTypes[0]], maxSpeedValues[this.#selectedUnitsTypes[0]]); this.#altitudeSlider.setMinMax(minAltitudeValues[this.#selectedUnitsTypes[0]], maxAltitudeValues[this.#selectedUnitsTypes[0]]); @@ -309,7 +308,7 @@ export class UnitControlPanel extends Panel { this.#AWACSSwitch.setValue(isActiveAWACAS, false); this.#onOffSwitch.setValue(onOff, false); this.#followRoadsSwitch.setValue(followRoads, false); - this.#operateAsSwitch.setValue(operateAs? operateAs === "blue": undefined, false); + this.#operateAsSwitch.setValue(operateAs ? operateAs === "blue" : undefined, false); } } } @@ -318,8 +317,8 @@ export class UnitControlPanel extends Panel { var contextActionSet = new ContextActionSet(); var units = getApp().getUnitsManager().getSelectedUnits(); - var showAltitudeChange = units.some((unit: Unit) => {return ["Aircraft", "Helicopter"].includes(unit.getCategory());}); - this.getElement().querySelector("#climb")?.classList.toggle("hide", !showAltitudeChange); + var showAltitudeChange = units.some((unit: Unit) => { return ["Aircraft", "Helicopter"].includes(unit.getCategory()); }); + this.getElement().querySelector("#climb")?.classList.toggle("hide", !showAltitudeChange); this.getElement().querySelector("#descend")?.classList.toggle("hide", !showAltitudeChange); units.forEach((unit: Unit) => { @@ -347,10 +346,8 @@ export class UnitControlPanel extends Panel { } } - #updateAdvancedSettingsDialog(units: Unit[]) - { - if (units.length == 1) - { + #updateAdvancedSettingsDialog(units: Unit[]) { + if (units.length == 1) { /* HTML Elements */ const unitNameEl = this.#advancedSettingsDialog.querySelector("#unit-name") as HTMLElement; const prohibitJettisonCheckbox = this.#advancedSettingsDialog.querySelector("#prohibit-jettison-checkbox")?.querySelector("input") as HTMLInputElement; @@ -363,7 +360,7 @@ export class UnitControlPanel extends Panel { const TACANCallsignInput = this.#advancedSettingsDialog.querySelector("#tacan-callsign")?.querySelector("input") as HTMLInputElement; const radioMhzInput = this.#advancedSettingsDialog.querySelector("#radio-mhz")?.querySelector("input") as HTMLInputElement; const radioCallsignNumberInput = this.#advancedSettingsDialog.querySelector("#radio-callsign-number")?.querySelector("input") as HTMLInputElement; - + const unit = units[0]; const isTanker = unit.isTanker(); const isAWACS = unit.isAWACS(); @@ -400,7 +397,7 @@ export class UnitControlPanel extends Panel { radioMhzInput.value = String(radioMHz); radioCallsignNumberInput.value = String(unit.getRadio().callsignNumber); this.#radioDecimalsDropdown.setValue("." + radioDecimals); - + if (isTanker) /* Set tanker specific options */ this.#radioCallsignDropdown.setOptions(["Texaco", "Arco", "Shell"]); else if (isAWACS) /* Set AWACS specific options */ @@ -414,8 +411,7 @@ export class UnitControlPanel extends Panel { } } - #applyAdvancedSettings() - { + #applyAdvancedSettings() { /* HTML Elements */ const prohibitJettisonCheckbox = this.#advancedSettingsDialog.querySelector("#prohibit-jettison-checkbox")?.querySelector("input") as HTMLInputElement; const prohibitAfterburnerCheckbox = this.#advancedSettingsDialog.querySelector("#prohibit-afterburner-checkbox")?.querySelector("input") as HTMLInputElement; @@ -431,7 +427,7 @@ export class UnitControlPanel extends Panel { /* TACAN */ const TACAN: TACAN = { - isOn: TACANCheckbox.checked? true: false, + isOn: TACANCheckbox.checked ? true : false, channel: Number(TACANChannelInput.value), XY: this.#TACANXYDropdown.getValue(), callsign: TACANCallsignInput.value as string @@ -443,18 +439,18 @@ export class UnitControlPanel extends Panel { const radio: Radio = { frequency: (radioMHz * 1000 + Number(radioDecimals.substring(1))) * 1000, callsign: this.#radioCallsignDropdown.getIndex() + 1, - callsignNumber: Number(radioCallsignNumberInput.value) + callsignNumber: Number(radioCallsignNumberInput.value) } /* General settings */ const generalSettings: GeneralSettings = { - prohibitJettison: prohibitJettisonCheckbox.checked? true: false, - prohibitAfterburner: prohibitAfterburnerCheckbox.checked? true: false, - prohibitAA: prohibitAACheckbox.checked? true: false, - prohibitAG: prohibitAGCheckbox.checked? true: false, - prohibitAirWpn: prohibitAirWpnCheckbox.checked? true: false + prohibitJettison: prohibitJettisonCheckbox.checked ? true : false, + prohibitAfterburner: prohibitAfterburnerCheckbox.checked ? true : false, + prohibitAA: prohibitAACheckbox.checked ? true : false, + prohibitAG: prohibitAGCheckbox.checked ? true : false, + prohibitAirWpn: prohibitAirWpnCheckbox.checked ? true : false } - + /* Send command and close */ var units = getApp().getUnitsManager().getSelectedUnits(); // TODO: split setAdvancedOptions into setIsTanker, setIsAWACS, setAdvancedOptions diff --git a/client/src/unit/citiesDatabase.ts b/client/src/unit/databases/citiesdatabase.ts similarity index 100% rename from client/src/unit/citiesDatabase.ts rename to client/src/unit/databases/citiesdatabase.ts diff --git a/client/src/unit/unit.ts b/client/src/unit/unit.ts index a35eb8f0..272cbc94 100644 --- a/client/src/unit/unit.ts +++ b/client/src/unit/unit.ts @@ -190,15 +190,17 @@ export abstract class Unit extends CustomMarker { /* Deselect units if they are hidden */ document.addEventListener("toggleCoalitionVisibility", (ev: CustomEventInit) => { - window.setTimeout(() => { this.setSelected(this.getSelected() && !this.getHidden()) }, 300); + this.#updateMarker(); + this.setSelected(this.getSelected() && !this.getHidden()); }); - document.addEventListener("toggleUnitVisibility", (ev: CustomEventInit) => { - window.setTimeout(() => { this.setSelected(this.getSelected() && !this.getHidden()) }, 300); + document.addEventListener("toggleMarkerVisibility", (ev: CustomEventInit) => { + this.#updateMarker(); + this.setSelected(this.getSelected() && !this.getHidden()); }); - /* Update the marker when the visibility options change */ - document.addEventListener("mapVisibilityOptionsChanged", (ev: CustomEventInit) => { + /* Update the marker when the options change */ + document.addEventListener("mapOptionsChanged", (ev: CustomEventInit) => { this.#updateMarker(); /* Circles don't like to be updated when the map is zooming */ @@ -684,14 +686,11 @@ export abstract class Unit extends CustomMarker { /* Hide the unit if it does not belong to the commanded coalition and it is not detected by a method that can pinpoint its location (RWR does not count) */ (!this.belongsToCommandedCoalition() && (this.#detectionMethods.length == 0 || (this.#detectionMethods.length == 1 && this.#detectionMethods[0] === RWR))) || /* Hide the unit if grouping is activated, the unit is not the group leader, it is not selected, and the zoom is higher than the grouping threshold */ - (getApp().getMap().getVisibilityOptions()[HIDE_GROUP_MEMBERS] && !this.#isLeader && this.getCategory() == "GroundUnit" && getApp().getMap().getZoom() < GROUPING_ZOOM_TRANSITION && + (getApp().getMap().getVisibilityOptions()[HIDE_GROUP_MEMBERS] && !this.#isLeader && !this.getSelected() && this.getCategory() == "GroundUnit" && getApp().getMap().getZoom() < GROUPING_ZOOM_TRANSITION && (this.belongsToCommandedCoalition() || (!this.belongsToCommandedCoalition() && this.#detectionMethods.length == 0)))); /* Force dead units to be hidden */ this.setHidden(hidden || !this.getAlive()); - - /* Force hidden units to be unselected */ - this.setSelected(this.getSelected() && !this.getHidden()); } setHidden(hidden: boolean) { @@ -1254,11 +1253,13 @@ export abstract class Unit extends CustomMarker { } #clearPath() { - for (let WP in this.#pathMarkers) { - getApp().getMap().removeLayer(this.#pathMarkers[WP]); + if (this.#pathPolyline.getLatLngs().length != 0) { + for (let WP in this.#pathMarkers) { + getApp().getMap().removeLayer(this.#pathMarkers[WP]); + } + this.#pathMarkers = []; + this.#pathPolyline.setLatLngs([]); } - this.#pathMarkers = []; - this.#pathPolyline.setLatLngs([]); } #drawContacts() { diff --git a/client/src/unit/unitsmanager.ts b/client/src/unit/unitsmanager.ts index 2aa31d09..016446bd 100644 --- a/client/src/unit/unitsmanager.ts +++ b/client/src/unit/unitsmanager.ts @@ -6,7 +6,7 @@ import { CoalitionArea } from "../map/coalitionarea/coalitionarea"; import { groundUnitDatabase } from "./databases/groundunitdatabase"; import { DELETE_CYCLE_TIME, DELETE_SLOW_THRESHOLD, DataIndexes, GAME_MASTER, IADSDensities, IDLE, MOVE_UNIT } from "../constants/constants"; import { DataExtractor } from "../server/dataextractor"; -import { citiesDatabase } from "./citiesDatabase"; +import { citiesDatabase } from "./databases/citiesdatabase"; import { aircraftDatabase } from "./databases/aircraftdatabase"; import { helicopterDatabase } from "./databases/helicopterdatabase"; import { navyUnitDatabase } from "./databases/navyunitdatabase"; @@ -321,11 +321,13 @@ export class UnitsManager { getUnitsVariable(variableGetter: CallableFunction, units: Unit[]) { if (units.length == 0) return undefined; - return units.map((unit: Unit) => { - return variableGetter(unit); - })?.reduce((a: any, b: any) => { - return a === b ? a : undefined + + var value: any = variableGetter(units[0]); + units.forEach((unit: Unit) => { + if (variableGetter(unit) !== value) + return undefined; }); + return value; }; /** For a given unit, it returns if and how it is being detected by other units. NOTE: this function will return how a unit is being detected, i.e. how other units are detecting it. It will not return @@ -353,6 +355,7 @@ export class UnitsManager { * @param latlng Position of the new destination * @param mantainRelativePosition If true, the selected units will mantain their relative positions when reaching the target. This is useful to maintain a formation for groun/navy units * @param rotation Rotation in radians by which the formation will be rigidly rotated. E.g. a ( V ) formation will look like this ( < ) if rotated pi/4 radians (90 degrees) + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ addDestination(latlng: L.LatLng, mantainRelativePosition: boolean, rotation: number, units: Unit[] | null = null) { if (units === null) @@ -412,6 +415,7 @@ export class UnitsManager { /** Instruct all the selected units to land at a specific location * * @param latlng Location where to land at + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ landAt(latlng: LatLng, units: Unit[] | null = null) { if (units === null) @@ -428,6 +432,7 @@ export class UnitsManager { /** Instruct all the selected units to change their speed * * @param speedChange Speed change, either "stop", "slow", or "fast". The specific value depends on the unit category + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ changeSpeed(speedChange: string, units: Unit[] | null = null) { if (units === null) @@ -442,6 +447,7 @@ export class UnitsManager { /** Instruct all the selected units to change their altitude * * @param altitudeChange Altitude change, either "climb" or "descend". The specific value depends on the unit category + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ changeAltitude(altitudeChange: string, units: Unit[] | null = null) { if (units === null) @@ -456,6 +462,7 @@ export class UnitsManager { /** Set a specific speed to all the selected units * * @param speed Value to set, in m/s + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setSpeed(speed: number, units: Unit[] | null = null) { if (units === null) @@ -471,6 +478,7 @@ export class UnitsManager { /** Set a specific speed type to all the selected units * * @param speedType Value to set, either "CAS" or "GS". If "CAS" is selected, the unit will try to maintain the selected Calibrated Air Speed, but DCS will still only maintain a Ground Speed value so errors may arise depending on wind. + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setSpeedType(speedType: string, units: Unit[] | null = null) { if (units === null) @@ -486,6 +494,7 @@ export class UnitsManager { /** Set a specific altitude to all the selected units * * @param altitude Value to set, in m + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setAltitude(altitude: number, units: Unit[] | null = null) { if (units === null) @@ -501,6 +510,7 @@ export class UnitsManager { /** Set a specific altitude type to all the selected units * * @param altitudeType Value to set, either "ASL" or "AGL". If "AGL" is selected, the unit will try to maintain the selected Above Ground Level altitude. Due to a DCS bug, this will only be true at the final position. + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setAltitudeType(altitudeType: string, units: Unit[] | null = null) { if (units === null) @@ -516,6 +526,7 @@ export class UnitsManager { /** Set a specific ROE to all the selected units * * @param ROE Value to set, see constants for acceptable values + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setROE(ROE: string, units: Unit[] | null = null) { if (units === null) @@ -531,6 +542,7 @@ export class UnitsManager { /** Set a specific reaction to threat to all the selected units * * @param reactionToThreat Value to set, see constants for acceptable values + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setReactionToThreat(reactionToThreat: string, units: Unit[] | null = null) { if (units === null) @@ -546,6 +558,7 @@ export class UnitsManager { /** Set a specific emissions & countermeasures to all the selected units * * @param emissionCountermeasure Value to set, see constants for acceptable values + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setEmissionsCountermeasures(emissionCountermeasure: string, units: Unit[] | null = null) { if (units === null) @@ -561,6 +574,7 @@ export class UnitsManager { /** Turn selected units on or off, only works on ground and navy units * * @param onOff If true, the unit will be turned on + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setOnOff(onOff: boolean, units: Unit[] | null = null) { if (units === null) @@ -576,6 +590,7 @@ export class UnitsManager { /** Instruct the selected units to follow roads, only works on ground units * * @param followRoads If true, units will follow roads + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setFollowRoads(followRoads: boolean, units: Unit[] | null = null) { if (units === null) @@ -591,6 +606,7 @@ export class UnitsManager { /** Instruct selected units to operate as a certain coalition * * @param operateAsBool If true, units will operate as blue + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setOperateAs(operateAsBool: boolean, units: Unit[] | null = null) { var operateAs = operateAsBool ? "blue" : "red"; @@ -607,6 +623,7 @@ export class UnitsManager { /** Instruct units to attack a specific unit * * @param ID ID of the unit to attack + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ attackUnit(ID: number, units: Unit[] | null = null) { if (units === null) @@ -620,7 +637,7 @@ export class UnitsManager { } /** Instruct units to refuel at the nearest tanker, if possible. Else units will RTB - * + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ refuel(units: Unit[] | null = null) { if (units === null) @@ -638,6 +655,7 @@ export class UnitsManager { * @param ID ID of the unit to follow * @param offset Optional parameter, defines a static offset. X: front-rear, positive front, Y: top-bottom, positive top, Z: left-right, positive right * @param formation Optional parameter, defines a predefined formation type. Values are: "trail", "echelon-lh", "echelon-rh", "line-abreast-lh", "line-abreast-rh", "front", "diamond" + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ followUnit(ID: number, offset?: { "x": number, "y": number, "z": number }, formation?: string, units: Unit[] | null = null) { if (units === null) @@ -690,6 +708,7 @@ export class UnitsManager { /** Instruct the selected units to perform precision bombing of specific coordinates * * @param latlng Location to bomb + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ bombPoint(latlng: LatLng, units: Unit[] | null = null) { if (units === null) @@ -705,6 +724,7 @@ export class UnitsManager { /** Instruct the selected units to perform carpet bombing of specific coordinates * * @param latlng Location to bomb + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ carpetBomb(latlng: LatLng, units: Unit[] | null = null) { if (units === null) @@ -720,6 +740,7 @@ export class UnitsManager { /** Instruct the selected units to fire at specific coordinates * * @param latlng Location to fire at + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ fireAtArea(latlng: LatLng, units: Unit[] | null = null) { if (units === null) @@ -735,6 +756,7 @@ export class UnitsManager { /** Instruct the selected units to simulate a fire fight at specific coordinates * * @param latlng Location to fire at + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ simulateFireFight(latlng: LatLng, units: Unit[] | null = null) { if (units === null) @@ -756,7 +778,7 @@ export class UnitsManager { } /** Instruct units to enter into scenic AAA mode. Units will shoot in the air without aiming - * + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ scenicAAA(units: Unit[] | null = null) { if (units === null) @@ -770,7 +792,7 @@ export class UnitsManager { } /** Instruct units to enter into miss on purpose mode. Units will aim to the nearest enemy unit but not precisely. - * + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ missOnPurpose(units: Unit[] | null = null) { if (units === null) @@ -786,6 +808,7 @@ export class UnitsManager { /** Instruct units to land at specific point * * @param latlng Point where to land + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ landAtPoint(latlng: LatLng, units: Unit[] | null = null) { if (units === null) @@ -802,6 +825,7 @@ export class UnitsManager { /** Set a specific shots scatter to all the selected units * * @param shotsScatter Value to set + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setShotsScatter(shotsScatter: number, units: Unit[] | null = null) { if (units === null) @@ -817,6 +841,7 @@ export class UnitsManager { /** Set a specific shots intensity to all the selected units * * @param shotsScatter Value to set + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setShotsIntensity(shotsIntensity: number, units: Unit[] | null = null) { if (units === null) @@ -870,6 +895,7 @@ export class UnitsManager { /** Set the hotgroup for the selected units. It will be the only hotgroup of the unit * * @param hotgroup Hotgroup number + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setHotgroup(hotgroup: number, units: Unit[] | null = null) { this.getUnitsByHotgroup(hotgroup).forEach((unit: Unit) => unit.setHotgroup(null)); @@ -879,6 +905,7 @@ export class UnitsManager { /** Add the selected units to a hotgroup. Units can be in multiple hotgroups at the same type * * @param hotgroup Hotgroup number + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ addToHotgroup(hotgroup: number, units: Unit[] | null = null) { if (units === null) @@ -891,6 +918,7 @@ export class UnitsManager { /** Delete the selected units * * @param explosion If true, the unit will be deleted using an explosion + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. * @returns */ delete(explosion: boolean = false, explosionType: string = "", units: Unit[] | null = null) { @@ -929,6 +957,7 @@ export class UnitsManager { * * @param latlng Center of the group after the translation * @param rotation Rotation of the group, in radians + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. * @returns Array of positions for each unit, in order */ computeGroupDestination(latlng: LatLng, rotation: number, units: Unit[] | null = null) { diff --git a/client/src/weapon/weapon.ts b/client/src/weapon/weapon.ts index 57496337..2930f3b4 100644 --- a/client/src/weapon/weapon.ts +++ b/client/src/weapon/weapon.ts @@ -36,17 +36,9 @@ export class Weapon extends CustomMarker { super(new LatLng(0, 0), { riseOnHover: true, keyboard: false }); this.ID = ID; - - /* Deselect units if they are hidden */ - document.addEventListener("toggleCoalitionVisibility", (ev: CustomEventInit) => { - window.setTimeout(() => { !this.getHidden() }, 300); - }); - - document.addEventListener("toggleUnitVisibility", (ev: CustomEventInit) => { - window.setTimeout(() => { !this.getHidden() }, 300); - }); - document.addEventListener("mapVisibilityOptionsChanged", (ev: CustomEventInit) => { + /* Update the marker when the options change */ + document.addEventListener("mapOptionsChanged", (ev: CustomEventInit) => { this.#updateMarker(); }); } From 87957df1fbfff93f951ccdb3aa83caef9a8ffae5 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Wed, 22 Nov 2023 15:04:09 +0100 Subject: [PATCH 27/41] Fixed incorrect behaviour when rotating unit destinations And a minor map code refactoring --- client/src/constants/constants.ts | 4 +- client/src/map/map.ts | 187 +++++++++++++++--------------- client/src/unit/unit.ts | 2 +- client/src/unit/unitsmanager.ts | 4 +- 4 files changed, 101 insertions(+), 96 deletions(-) diff --git a/client/src/constants/constants.ts b/client/src/constants/constants.ts index ca0abf39..374a60e0 100644 --- a/client/src/constants/constants.ts +++ b/client/src/constants/constants.ts @@ -1,5 +1,5 @@ import { LatLng, LatLngBounds } from "leaflet"; -import { MapMarkerControl } from "../map/map"; +import { MapMarkerVisibilityControl } from "../map/map"; export const UNITS_URI = "units"; export const WEAPONS_URI = "weapons"; @@ -160,7 +160,7 @@ export const COALITIONAREA_DRAW_POLYGON = "Draw Coalition Area"; export const visibilityControls: string[] = ["human", "dcs", "aircraft", "helicopter", "groundunit-sam", "groundunit", "navyunit", "airbase"]; export const visibilityControlsTypes: string[][] = [["human"], ["dcs"], ["aircraft"], ["helicopter"], ["groundunit-sam"], ["groundunit"], ["navyunit"], ["airbase"]]; export const visibilityControlsTooltips: string[] = ["Toggle human players visibility", "Toggle DCS controlled units visibility", "Toggle aircrafts visibility", "Toggle helicopter visibility", "Toggle SAM units visibility", "Toggle ground units (not SAM) visibility", "Toggle navy units visibility", "Toggle airbases visibility"]; -export const MAP_MARKER_CONTROLS: MapMarkerControl[] = [{ +export const MAP_MARKER_CONTROLS: MapMarkerVisibilityControl[] = [{ "name": "Human", "image": "visibility/human.svg", "toggles": ["human"], diff --git a/client/src/map/map.ts b/client/src/map/map.ts index 2da162ea..d9145a70 100644 --- a/client/src/map/map.ts +++ b/client/src/map/map.ts @@ -13,7 +13,6 @@ import { TemporaryUnitMarker } from "./markers/temporaryunitmarker"; import { ClickableMiniMap } from "./clickableminimap"; import { SVGInjector } from '@tanem/svg-injector' import { mapLayers, mapBounds, minimapBoundaries, IDLE, COALITIONAREA_DRAW_POLYGON, MOVE_UNIT, SHOW_UNIT_CONTACTS, HIDE_GROUP_MEMBERS, SHOW_UNIT_PATHS, SHOW_UNIT_TARGETS, SHOW_UNIT_LABELS, SHOW_UNITS_ENGAGEMENT_RINGS, SHOW_UNITS_ACQUISITION_RINGS, HIDE_UNITS_SHORT_RANGE_RINGS, FILL_SELECTED_RING, MAP_MARKER_CONTROLS } from "../constants/constants"; -import { TargetMarker } from "./markers/targetmarker"; import { CoalitionArea } from "./coalitionarea/coalitionarea"; import { CoalitionAreaContextMenu } from "../contextmenus/coalitionareacontextmenu"; import { DrawingCursor } from "./coalitionarea/drawingcursor"; @@ -27,9 +26,9 @@ var hasTouchScreen = false; //if ("maxTouchPoints" in navigator) // hasTouchScreen = navigator.maxTouchPoints > 0; -if (hasTouchScreen) +if (hasTouchScreen) L.Map.addInitHook('addHandler', 'boxSelect', TouchBoxSelect); -else +else L.Map.addInitHook('addHandler', 'boxSelect', BoxSelect); L.Map.addInitHook("addHandler", "gestureHandling", GestureHandling); @@ -38,10 +37,10 @@ L.Map.addInitHook("addHandler", "gestureHandling", GestureHandling); require("../../public/javascripts/leaflet.nauticscale.js") require("../../public/javascripts/L.Path.Drag.js") -export type MapMarkerControl = { +export type MapMarkerVisibilityControl = { "image": string; "isProtected"?: boolean, - "name":string, + "name": string, "protectable"?: boolean, "toggles": string[], "tooltip": string @@ -75,7 +74,6 @@ export class Map extends L.Map { #destinationRotationCenter: L.LatLng | null = null; #coalitionAreas: CoalitionArea[] = []; - #targetCursor: TargetMarker = new TargetMarker(new L.LatLng(0, 0), { interactive: false }); #destinationPreviewCursors: DestinationPreviewMarker[] = []; #drawingCursor: DrawingCursor = new DrawingCursor(); #destinationPreviewHandle: DestinationPreviewHandle = new DestinationPreviewHandle(new L.LatLng(0, 0)); @@ -90,7 +88,7 @@ export class Map extends L.Map { #coalitionAreaContextMenu: CoalitionAreaContextMenu = new CoalitionAreaContextMenu("coalition-area-contextmenu"); #mapSourceDropdown: Dropdown; - #mapMarkerControls:MapMarkerControl[] = MAP_MARKER_CONTROLS; + #mapMarkerVisibilityControls: MapMarkerVisibilityControl[] = MAP_MARKER_CONTROLS; #mapVisibilityOptionsDropdown: Dropdown; #optionButtons: { [key: string]: HTMLButtonElement[] } = {} #visibilityOptions: { [key: string]: boolean } = {} @@ -100,21 +98,21 @@ export class Map extends L.Map { * * @param ID - the ID of the HTML element which will contain the context menu */ - constructor(ID: string){ + constructor(ID: string) { /* Init the leaflet map */ - super(ID, { - preferCanvas: true, - doubleClickZoom: false, - zoomControl: false, - boxZoom: false, + super(ID, { + preferCanvas: true, + doubleClickZoom: false, + zoomControl: false, + boxZoom: false, //@ts-ignore Needed because the boxSelect option is non-standard - boxSelect: true, - zoomAnimation: true, + boxSelect: true, + zoomAnimation: true, maxBoundsViscosity: 1.0, - minZoom: 7, + minZoom: 7, keyboard: true, keyboardPanDelta: 0, - gestureHandling: hasTouchScreen + gestureHandling: hasTouchScreen }); this.setView([37.23, -115.8], 10); @@ -205,8 +203,8 @@ export class Map extends L.Map { /* Pan interval */ this.#panInterval = window.setInterval(() => { if (this.#panUp || this.#panDown || this.#panRight || this.#panLeft) - this.panBy(new L.Point(((this.#panLeft ? -1 : 0) + (this.#panRight ? 1 : 0)) * this.#deafultPanDelta, - ((this.#panUp ? -1 : 0) + (this.#panDown ? 1 : 0)) * this.#deafultPanDelta)); + this.panBy(new L.Point(((this.#panLeft ? -1 : 0) + (this.#panRight ? 1 : 0)) * this.#deafultPanDelta * (this.#shiftKey ? 3 : 1), + ((this.#panUp ? -1 : 0) + (this.#panDown ? 1 : 0)) * this.#deafultPanDelta * (this.#shiftKey ? 3 : 1))); }, 20); /* Option buttons */ @@ -257,7 +255,7 @@ export class Map extends L.Map { /* Operations to perform if you are NOT in a state */ if (this.#state !== COALITIONAREA_DRAW_POLYGON) { - this.#deselectCoalitionAreas(); + this.#deselectSelectedCoalitionArea(); } /* Operations to perform if you ARE in a state */ @@ -291,7 +289,6 @@ export class Map extends L.Map { else { this.#hiddenTypes.push(key); } - Object.values(getApp().getUnitsManager().getUnits()).forEach((unit: Unit) => unit.updateVisibility()); } getHiddenTypes() { @@ -377,11 +374,6 @@ export class Map extends L.Map { this.#coalitionAreaContextMenu.hide(); } - isZooming() { - return this.#isZooming; - } - - /* Mouse coordinates */ getMousePosition() { return this.#lastMousePosition; } @@ -390,11 +382,6 @@ export class Map extends L.Map { return this.containerPointToLatLng(this.#lastMousePosition); } - /* Spawn from air base */ - spawnFromAirbase(e: any) { - //this.#aircraftSpawnMenu(e); - } - centerOnUnit(ID: number | null) { if (ID != null) { this.options.scrollWheelZoom = 'center'; @@ -407,7 +394,7 @@ export class Map extends L.Map { this.#updateCursor(); } - getCenterUnit() { + getCenteredOnUnit() { return this.#centerUnit; } @@ -420,7 +407,6 @@ export class Map extends L.Map { } this.setView(bounds.getCenter(), 8); - //this.setMaxBounds(bounds); if (this.#miniMap) this.#miniMap.remove(); @@ -502,10 +488,35 @@ export class Map extends L.Map { return this.#visibilityOptions; } + isZooming() { + return this.#isZooming; + } + getPreviousZoom() { return this.#previousZoom; } + getIsUnitProtected(unit: Unit) { + const toggles = this.#mapMarkerVisibilityControls.reduce((list, control: MapMarkerVisibilityControl) => { + if (control.isProtected) { + list = list.concat(control.toggles); + } + return list; + }, [] as string[]); + + if (toggles.length === 0) + return false; + + return toggles.some((toggle: string) => { + // Specific coding for robots - extend later if needed + return (toggle === "dcs" && !unit.getControlled() && !unit.getHuman()); + }); + } + + getMapMarkerVisibilityControls() { + return this.#mapMarkerVisibilityControls; + } + /* Event handlers */ #onClick(e: any) { if (!this.#preventLeftClick) { @@ -560,14 +571,16 @@ export class Map extends L.Map { } } else if (this.#state === MOVE_UNIT) { - if (!e.originalEvent.ctrlKey) { - getApp().getUnitsManager().clearDestinations(); + if (!e.originalEvent.shiftKey) { + if (!e.originalEvent.ctrlKey) { + getApp().getUnitsManager().clearDestinations(); + } + getApp().getUnitsManager().addDestination(this.#computeDestinationRotation && this.#destinationRotationCenter != null ? this.#destinationRotationCenter : e.latlng, this.#shiftKey, this.#destinationGroupRotation) + + this.#destinationGroupRotation = 0; + this.#destinationRotationCenter = null; + this.#computeDestinationRotation = false; } - getApp().getUnitsManager().addDestination(this.#computeDestinationRotation && this.#destinationRotationCenter != null ? this.#destinationRotationCenter : e.latlng, this.#shiftKey, this.#destinationGroupRotation) - - this.#destinationGroupRotation = 0; - this.#destinationRotationCenter = null; - this.#computeDestinationRotation = false; } else { this.setState(IDLE); @@ -615,7 +628,7 @@ export class Map extends L.Map { units.forEach((unit: Unit) => { unit.appendContextActions(contextActionSet, null, e.latlng); }) - + if (Object.keys(contextActionSet.getContextActions()).length > 0) { getApp().getMap().showUnitContextMenu(e.originalEvent.x, e.originalEvent.y, e.latlng); getApp().getMap().getUnitContextMenu().setContextActions(contextActionSet); @@ -625,6 +638,16 @@ export class Map extends L.Map { } #onMouseUp(e: any) { + if (this.#state === MOVE_UNIT && e.originalEvent.button == 2 && e.originalEvent.shiftKey) { + if (!e.originalEvent.ctrlKey) { + getApp().getUnitsManager().clearDestinations(); + } + getApp().getUnitsManager().addDestination(this.#computeDestinationRotation && this.#destinationRotationCenter != null ? this.#destinationRotationCenter : e.latlng, this.#shiftKey, this.#destinationGroupRotation) + + this.#destinationGroupRotation = 0; + this.#destinationRotationCenter = null; + this.#computeDestinationRotation = false; + } } #onMouseMove(e: any) { @@ -676,6 +699,7 @@ export class Map extends L.Map { this.#isZooming = false; } + /* */ #panToUnit(unit: Unit) { var unitPosition = new L.LatLng(unit.getPosition().lat, unit.getPosition().lng); this.setView(unitPosition, this.getZoom(), { animate: false }); @@ -690,10 +714,10 @@ export class Map extends L.Map { #createUnitMarkerControlButtons() { const unitVisibilityControls = document.getElementById("unit-visibility-control"); - const makeTitle = (isProtected:boolean) => { - return ( isProtected ) ? "Unit type is protected and will ignore orders" : "Unit is NOT protected and will respond to orders"; + const makeTitle = (isProtected: boolean) => { + return (isProtected) ? "Unit type is protected and will ignore orders" : "Unit is NOT protected and will respond to orders"; } - this.getMapMarkerControls().forEach( (control:MapMarkerControl) => { + this.getMapMarkerVisibilityControls().forEach((control: MapMarkerVisibilityControl) => { const toggles = `["${control.toggles.join('","')}"]`; const div = document.createElement("div"); div.className = control.protectable === true ? "protectable" : ""; @@ -706,7 +730,7 @@ export class Map extends L.Map { `; unitVisibilityControls.appendChild(div); - if ( control.protectable ) { + if (control.protectable) { div.innerHTML += ` `; const btn = div.querySelector("button.lock"); - btn.addEventListener("click", (ev:MouseEventInit) => { + btn.addEventListener("click", (ev: MouseEventInit) => { control.isProtected = !control.isProtected; btn.toggleAttribute("data-protected", control.isProtected); - btn.title = makeTitle( control.isProtected ); + btn.title = makeTitle(control.isProtected); document.dispatchEvent(new CustomEvent("toggleMarkerProtection", { detail: { "_element": btn, @@ -731,28 +755,32 @@ export class Map extends L.Map { unitVisibilityControls.querySelectorAll(`img[src$=".svg"]`).forEach(img => SVGInjector(img)); } - unitIsProtected(unit:Unit) { - const toggles = this.#mapMarkerControls.reduce((list, control:MapMarkerControl) => { - if (control.isProtected) { - list = list.concat(control.toggles); - } - return list; - }, [] as string[]); - - if (toggles.length === 0) - return false; - - return toggles.some((toggle:string) => { - // Specific coding for robots - extend later if needed - return (toggle === "dcs" && !unit.getControlled() && !unit.getHuman()); - }); - } - - #deselectCoalitionAreas() { + #deselectSelectedCoalitionArea() { this.getSelectedCoalitionArea()?.setSelected(false); } /* Cursors */ + #updateCursor() { + /* If the ctrl key is being pressed or we are performing an area selection, show the default cursor */ + if (this.#ctrlKey || this.#selecting) { + /* Hide all non default cursors */ + this.#hideDestinationCursors(); + this.#hideDrawingCursor(); + + this.#showDefaultCursor(); + } else { + /* Hide all the unnecessary cursors depending on the active state */ + if (this.#state !== IDLE) this.#hideDefaultCursor(); + if (this.#state !== MOVE_UNIT) this.#hideDestinationCursors(); + if (this.#state !== COALITIONAREA_DRAW_POLYGON) this.#hideDrawingCursor(); + + /* Show the active cursor depending on the active state */ + if (this.#state === IDLE) this.#showDefaultCursor(); + else if (this.#state === MOVE_UNIT) this.#showDestinationCursors(); + else if (this.#state === COALITIONAREA_DRAW_POLYGON) this.#showDrawingCursor(); + } + } + #showDefaultCursor() { document.getElementById(this.#ID)?.classList.remove("hidden-cursor"); } @@ -786,7 +814,7 @@ export class Map extends L.Map { this.#updateDestinationCursors(); } } -} + } #updateDestinationCursors() { const selectedUnitsCount = getApp().getUnitsManager().getSelectedUnits({ excludeHumans: true, onlyOnePerGroup: true }).length; @@ -803,6 +831,8 @@ export class Map extends L.Map { this.#destinationPreviewHandleLine.setLatLngs([groupLatLng, this.getMouseCoordinates()]); this.#destinationPreviewHandle.setLatLng(this.getMouseCoordinates()); + } else { + this.#hideDestinationCursors(); } } @@ -834,34 +864,9 @@ export class Map extends L.Map { this.#drawingCursor.removeFrom(this); } - #updateCursor() { - /* If the ctrl key is being pressed or we are performing an area selection, show the default cursor */ - if (this.#ctrlKey || this.#selecting) { - /* Hide all non default cursors */ - this.#hideDestinationCursors(); - this.#hideDrawingCursor(); - - this.#showDefaultCursor(); - } else { - /* Hide all the unnecessary cursors depending on the active state */ - if (this.#state !== IDLE) this.#hideDefaultCursor(); - if (this.#state !== MOVE_UNIT) this.#hideDestinationCursors(); - if (this.#state !== COALITIONAREA_DRAW_POLYGON) this.#hideDrawingCursor(); - - /* Show the active cursor depending on the active state */ - if (this.#state === IDLE) this.#showDefaultCursor(); - else if (this.#state === MOVE_UNIT) this.#showDestinationCursors(); - else if (this.#state === COALITIONAREA_DRAW_POLYGON) this.#showDrawingCursor(); - } - } - #setVisibilityOption(option: string, ev: any) { this.#visibilityOptions[option] = ev.currentTarget.checked; document.dispatchEvent(new CustomEvent("mapOptionsChanged")); } - - getMapMarkerControls() { - return this.#mapMarkerControls; - } } diff --git a/client/src/unit/unit.ts b/client/src/unit/unit.ts index 272cbc94..320a3f7d 100644 --- a/client/src/unit/unit.ts +++ b/client/src/unit/unit.ts @@ -325,7 +325,7 @@ export abstract class Unit extends CustomMarker { } /* If the unit is selected or if the view is centered on this unit, sent the update signal so that other elements like the UnitControlPanel can be updated. */ - if (this.getSelected() || getApp().getMap().getCenterUnit() === this) + if (this.getSelected() || getApp().getMap().getCenteredOnUnit() === this) document.dispatchEvent(new CustomEvent("unitUpdated", { detail: this })); } diff --git a/client/src/unit/unitsmanager.ts b/client/src/unit/unitsmanager.ts index 016446bd..9d17119b 100644 --- a/client/src/unit/unitsmanager.ts +++ b/client/src/unit/unitsmanager.ts @@ -1319,7 +1319,7 @@ export class UnitsManager { const map = getApp().getMap(); const units = this.getSelectedUnits(); const numSelectedUnits = units.length; - const numProtectedUnits = units.filter((unit: Unit) => map.unitIsProtected(unit)).length; + const numProtectedUnits = units.filter((unit: Unit) => map.getIsUnitProtected(unit)).length; if (numProtectedUnits === 1 && numSelectedUnits === numProtectedUnits) (getApp().getPopupsManager().get("infoPopup") as Popup).setText(`Notice: unit is protected`); @@ -1329,6 +1329,6 @@ export class UnitsManager { } #unitIsProtected(unit: Unit) { - return getApp().getMap().unitIsProtected(unit) + return getApp().getMap().getIsUnitProtected(unit) } } \ No newline at end of file From 1b17e172902e12fde36f49b9cb2e9617161e636f Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Wed, 22 Nov 2023 15:12:28 +0100 Subject: [PATCH 28/41] Added some TODO comments And very minor refactoring --- client/src/server/servermanager.ts | 2 ++ client/src/unit/unit.ts | 10 ++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/client/src/server/servermanager.ts b/client/src/server/servermanager.ts index f1ec0a54..0f173803 100644 --- a/client/src/server/servermanager.ts +++ b/client/src/server/servermanager.ts @@ -339,12 +339,14 @@ export class ServerManager { this.PUT(data, callback); } + // TODO: Remove coalition scenicAAA(ID: number, coalition: string, callback: CallableFunction = () => {}) { var command = { "ID": ID, "coalition": coalition } var data = { "scenicAAA": command } this.PUT(data, callback); } + // TODO: Remove coalition missOnPurpose(ID: number, coalition: string, callback: CallableFunction = () => {}) { var command = { "ID": ID, "coalition": coalition } var data = { "missOnPurpose": command } diff --git a/client/src/unit/unit.ts b/client/src/unit/unit.ts index 320a3f7d..223edfcf 100644 --- a/client/src/unit/unit.ts +++ b/client/src/unit/unit.ts @@ -417,7 +417,7 @@ export abstract class Unit extends CustomMarker { else { this.#clearContacts(); this.#clearPath(); - this.#clearTarget(); + this.#clearTargetPosition(); } /* When the group leader is selected, if grouping is active, all the other group members are also selected */ @@ -774,7 +774,7 @@ export abstract class Unit extends CustomMarker { return this.getDatabaseEntry()?.canAAA === true; } - indirectFire() { + isIndirectFire() { return this.getDatabaseEntry()?.indirectFire === true; } @@ -931,6 +931,7 @@ export abstract class Unit extends CustomMarker { }); } + // TODO: Remove coalition scenicAAA() { var coalition = "neutral"; if (this.getCoalition() === "red") @@ -940,6 +941,7 @@ export abstract class Unit extends CustomMarker { getApp().getServerManager().scenicAAA(this.ID, coalition); } + // TODO: Remove coalition missOnPurpose() { var coalition = "neutral"; if (this.getCoalition() === "red") @@ -1413,7 +1415,7 @@ export abstract class Unit extends CustomMarker { } } else - this.#clearTarget(); + this.#clearTargetPosition(); } #drawTargetPosition(targetPosition: LatLng) { @@ -1425,7 +1427,7 @@ export abstract class Unit extends CustomMarker { this.#targetPositionPolyline.setLatLngs([new LatLng(this.#position.lat, this.#position.lng), new LatLng(targetPosition.lat, targetPosition.lng)]) } - #clearTarget() { + #clearTargetPosition() { if (getApp().getMap().hasLayer(this.#targetPositionMarker)) this.#targetPositionMarker.removeFrom(getApp().getMap()); From 1022fc2f0c5662b26c9a5dc1b633b9ac4ca27356 Mon Sep 17 00:00:00 2001 From: PeekabooSteam Date: Wed, 22 Nov 2023 17:15:23 +0000 Subject: [PATCH 29/41] Fixed UCP toggles, added copy-paste control for plugins --- client/@types/olympus/index.d.ts | 106 +++++++++++------- client/plugins/databasemanager/index.js | 12 +- .../src/databasemanagerplugin.ts | 14 ++- .../public/stylesheets/panels/unitcontrol.css | 14 +++ client/public/stylesheets/style/style.css | 38 +++++-- client/src/context/context.ts | 14 +++ client/src/unit/unitsmanager.ts | 6 + 7 files changed, 156 insertions(+), 48 deletions(-) diff --git a/client/@types/olympus/index.d.ts b/client/@types/olympus/index.d.ts index a5ec72f6..4c1626d2 100644 --- a/client/@types/olympus/index.d.ts +++ b/client/@types/olympus/index.d.ts @@ -83,7 +83,7 @@ declare module "controls/switch" { } declare module "constants/constants" { import { LatLng, LatLngBounds } from "leaflet"; - import { MapMarkerControl } from "map/map"; + import { MapMarkerVisibilityControl } from "map/map"; export const UNITS_URI = "units"; export const WEAPONS_URI = "weapons"; export const LOGS_URI = "logs"; @@ -195,7 +195,7 @@ declare module "constants/constants" { export const visibilityControls: string[]; export const visibilityControlsTypes: string[][]; export const visibilityControlsTooltips: string[]; - export const MAP_MARKER_CONTROLS: MapMarkerControl[]; + export const MAP_MARKER_CONTROLS: MapMarkerVisibilityControl[]; export const IADSTypes: string[]; export const IADSDensities: { [key: string]: number; @@ -776,7 +776,7 @@ declare module "other/utils" { ranges?: string[]; eras?: string[]; }): UnitBlueprint | null; - export function getMarkerCategoryByName(name: string): "aircraft" | "helicopter" | "groundunit-sam" | "groundunit-other" | "navyunit"; + export function getMarkerCategoryByName(name: string): "aircraft" | "helicopter" | "groundunit-sam" | "navyunit" | "groundunit-other"; export function getUnitDatabaseByCategory(category: string): import("unit/databases/aircraftdatabase").AircraftDatabase | import("unit/databases/helicopterdatabase").HelicopterDatabase | import("unit/databases/groundunitdatabase").GroundUnitDatabase | import("unit/databases/navyunitdatabase").NavyUnitDatabase | null; export function base64ToBytes(base64: string): ArrayBufferLike; export function enumToState(state: number): string; @@ -1233,7 +1233,7 @@ declare module "unit/unit" { canTargetPoint(): boolean; canRearm(): boolean; canAAA(): boolean; - indirectFire(): boolean; + isIndirectFire(): boolean; isTanker(): boolean; isAWACS(): boolean; /********************** Unit commands *************************/ @@ -1529,7 +1529,7 @@ declare module "map/map" { import { CoalitionArea } from "map/coalitionarea/coalitionarea"; import { CoalitionAreaContextMenu } from "contextmenus/coalitionareacontextmenu"; import { AirbaseSpawnContextMenu } from "contextmenus/airbasespawnmenu"; - export type MapMarkerControl = { + export type MapMarkerVisibilityControl = { "image": string; "isProtected"?: boolean; "name": string; @@ -1569,12 +1569,10 @@ declare module "map/map" { showCoalitionAreaContextMenu(x: number, y: number, latlng: L.LatLng, coalitionArea: CoalitionArea): void; getCoalitionAreaContextMenu(): CoalitionAreaContextMenu; hideCoalitionAreaContextMenu(): void; - isZooming(): boolean; getMousePosition(): L.Point; getMouseCoordinates(): L.LatLng; - spawnFromAirbase(e: any): void; centerOnUnit(ID: number | null): void; - getCenterUnit(): Unit | null; + getCenteredOnUnit(): Unit | null; setTheatre(theatre: string): void; getMiniMapLayerGroup(): L.LayerGroup; handleMapPanning(e: any): void; @@ -1584,9 +1582,10 @@ declare module "map/map" { getVisibilityOptions(): { [key: string]: boolean; }; + isZooming(): boolean; getPreviousZoom(): number; - unitIsProtected(unit: Unit): boolean; - getMapMarkerControls(): MapMarkerControl[]; + getIsUnitProtected(unit: Unit): boolean; + getMapMarkerVisibilityControls(): MapMarkerVisibilityControl[]; } } declare module "mission/bullseye" { @@ -1600,6 +1599,8 @@ declare module "mission/bullseye" { } declare module "context/context" { export interface ContextInterface { + allowUnitCopying?: boolean; + allowUnitPasting?: boolean; useSpawnMenu?: boolean; useUnitControlPanel?: boolean; useUnitInfoPanel?: boolean; @@ -1607,6 +1608,8 @@ declare module "context/context" { export class Context { #private; constructor(config: ContextInterface); + getAllowUnitCopying(): boolean; + getAllowUnitPasting(): boolean; getUseSpawnMenu(): boolean; getUseUnitControlPanel(): boolean; getUseUnitInfoPanel(): boolean; @@ -1751,30 +1754,6 @@ declare module "panels/serverstatuspanel" { update(frameRate: number, load: number): void; } } -declare module "toolbars/toolbar" { - export class Toolbar { - #private; - /** - * - * @param ID - the ID of the HTML element which will contain the context menu - */ - constructor(ID: string); - show(): void; - hide(): void; - toggle(): void; - getElement(): HTMLElement; - getVisible(): boolean; - } -} -declare module "toolbars/primarytoolbar" { - import { Dropdown } from "controls/dropdown"; - import { Toolbar } from "toolbars/toolbar"; - export class PrimaryToolbar extends Toolbar { - #private; - constructor(ID: string); - getMainDropdown(): Dropdown; - } -} declare module "panels/unitcontrolpanel" { import { Panel } from "panels/panel"; export class UnitControlPanel extends Panel { @@ -1837,12 +1816,36 @@ declare module "shortcut/shortcutmanager" { onKeyUp(callback: CallableFunction): void; } } +declare module "toolbars/toolbar" { + export class Toolbar { + #private; + /** + * + * @param ID - the ID of the HTML element which will contain the context menu + */ + constructor(ID: string); + show(): void; + hide(): void; + toggle(): void; + getElement(): HTMLElement; + getVisible(): boolean; + } +} declare module "toolbars/commandmodetoolbar" { import { Toolbar } from "toolbars/toolbar"; export class CommandModeToolbar extends Toolbar { } } -declare module "unit/citiesDatabase" { +declare module "toolbars/primarytoolbar" { + import { Dropdown } from "controls/dropdown"; + import { Toolbar } from "toolbars/toolbar"; + export class PrimaryToolbar extends Toolbar { + #private; + constructor(ID: string); + getMainDropdown(): Dropdown; + } +} +declare module "unit/databases/citiesdatabase" { export var citiesDatabase: { lat: number; lng: number; @@ -1964,6 +1967,7 @@ declare module "unit/unitsmanager" { * @param latlng Position of the new destination * @param mantainRelativePosition If true, the selected units will mantain their relative positions when reaching the target. This is useful to maintain a formation for groun/navy units * @param rotation Rotation in radians by which the formation will be rigidly rotated. E.g. a ( V ) formation will look like this ( < ) if rotated pi/4 radians (90 degrees) + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ addDestination(latlng: L.LatLng, mantainRelativePosition: boolean, rotation: number, units?: Unit[] | null): void; /** Clear the destinations of all the selected units @@ -1973,75 +1977,89 @@ declare module "unit/unitsmanager" { /** Instruct all the selected units to land at a specific location * * @param latlng Location where to land at + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ landAt(latlng: LatLng, units?: Unit[] | null): void; /** Instruct all the selected units to change their speed * * @param speedChange Speed change, either "stop", "slow", or "fast". The specific value depends on the unit category + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ changeSpeed(speedChange: string, units?: Unit[] | null): void; /** Instruct all the selected units to change their altitude * * @param altitudeChange Altitude change, either "climb" or "descend". The specific value depends on the unit category + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ changeAltitude(altitudeChange: string, units?: Unit[] | null): void; /** Set a specific speed to all the selected units * * @param speed Value to set, in m/s + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setSpeed(speed: number, units?: Unit[] | null): void; /** Set a specific speed type to all the selected units * * @param speedType Value to set, either "CAS" or "GS". If "CAS" is selected, the unit will try to maintain the selected Calibrated Air Speed, but DCS will still only maintain a Ground Speed value so errors may arise depending on wind. + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setSpeedType(speedType: string, units?: Unit[] | null): void; /** Set a specific altitude to all the selected units * * @param altitude Value to set, in m + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setAltitude(altitude: number, units?: Unit[] | null): void; /** Set a specific altitude type to all the selected units * * @param altitudeType Value to set, either "ASL" or "AGL". If "AGL" is selected, the unit will try to maintain the selected Above Ground Level altitude. Due to a DCS bug, this will only be true at the final position. + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setAltitudeType(altitudeType: string, units?: Unit[] | null): void; /** Set a specific ROE to all the selected units * * @param ROE Value to set, see constants for acceptable values + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setROE(ROE: string, units?: Unit[] | null): void; /** Set a specific reaction to threat to all the selected units * * @param reactionToThreat Value to set, see constants for acceptable values + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setReactionToThreat(reactionToThreat: string, units?: Unit[] | null): void; /** Set a specific emissions & countermeasures to all the selected units * * @param emissionCountermeasure Value to set, see constants for acceptable values + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setEmissionsCountermeasures(emissionCountermeasure: string, units?: Unit[] | null): void; /** Turn selected units on or off, only works on ground and navy units * * @param onOff If true, the unit will be turned on + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setOnOff(onOff: boolean, units?: Unit[] | null): void; /** Instruct the selected units to follow roads, only works on ground units * * @param followRoads If true, units will follow roads + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setFollowRoads(followRoads: boolean, units?: Unit[] | null): void; /** Instruct selected units to operate as a certain coalition * * @param operateAsBool If true, units will operate as blue + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setOperateAs(operateAsBool: boolean, units?: Unit[] | null): void; /** Instruct units to attack a specific unit * * @param ID ID of the unit to attack + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ attackUnit(ID: number, units?: Unit[] | null): void; /** Instruct units to refuel at the nearest tanker, if possible. Else units will RTB - * + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ refuel(units?: Unit[] | null): void; /** Instruct the selected units to follow another unit in a formation. Only works for aircrafts and helicopters. @@ -2049,6 +2067,7 @@ declare module "unit/unitsmanager" { * @param ID ID of the unit to follow * @param offset Optional parameter, defines a static offset. X: front-rear, positive front, Y: top-bottom, positive top, Z: left-right, positive right * @param formation Optional parameter, defines a predefined formation type. Values are: "trail", "echelon-lh", "echelon-rh", "line-abreast-lh", "line-abreast-rh", "front", "diamond" + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ followUnit(ID: number, offset?: { "x": number; @@ -2058,44 +2077,51 @@ declare module "unit/unitsmanager" { /** Instruct the selected units to perform precision bombing of specific coordinates * * @param latlng Location to bomb + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ bombPoint(latlng: LatLng, units?: Unit[] | null): void; /** Instruct the selected units to perform carpet bombing of specific coordinates * * @param latlng Location to bomb + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ carpetBomb(latlng: LatLng, units?: Unit[] | null): void; /** Instruct the selected units to fire at specific coordinates * * @param latlng Location to fire at + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ fireAtArea(latlng: LatLng, units?: Unit[] | null): void; /** Instruct the selected units to simulate a fire fight at specific coordinates * * @param latlng Location to fire at + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ simulateFireFight(latlng: LatLng, units?: Unit[] | null): void; /** Instruct units to enter into scenic AAA mode. Units will shoot in the air without aiming - * + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ scenicAAA(units?: Unit[] | null): void; /** Instruct units to enter into miss on purpose mode. Units will aim to the nearest enemy unit but not precisely. - * + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ missOnPurpose(units?: Unit[] | null): void; /** Instruct units to land at specific point * * @param latlng Point where to land + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ landAtPoint(latlng: LatLng, units?: Unit[] | null): void; /** Set a specific shots scatter to all the selected units * * @param shotsScatter Value to set + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setShotsScatter(shotsScatter: number, units?: Unit[] | null): void; /** Set a specific shots intensity to all the selected units * * @param shotsScatter Value to set + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setShotsIntensity(shotsIntensity: number, units?: Unit[] | null): void; /*********************** Control operations on selected units ************************/ @@ -2117,16 +2143,19 @@ declare module "unit/unitsmanager" { /** Set the hotgroup for the selected units. It will be the only hotgroup of the unit * * @param hotgroup Hotgroup number + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ setHotgroup(hotgroup: number, units?: Unit[] | null): void; /** Add the selected units to a hotgroup. Units can be in multiple hotgroups at the same type * * @param hotgroup Hotgroup number + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. */ addToHotgroup(hotgroup: number, units?: Unit[] | null): void; /** Delete the selected units * * @param explosion If true, the unit will be deleted using an explosion + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. * @returns */ delete(explosion?: boolean, explosionType?: string, units?: Unit[] | null): void; @@ -2134,6 +2163,7 @@ declare module "unit/unitsmanager" { * * @param latlng Center of the group after the translation * @param rotation Rotation of the group, in radians + * @param units (Optional) Array of units to apply the control to. If not provided, the operation will be completed on all selected units. * @returns Array of positions for each unit, in order */ computeGroupDestination(latlng: LatLng, rotation: number, units?: Unit[] | null): { diff --git a/client/plugins/databasemanager/index.js b/client/plugins/databasemanager/index.js index 2e282c1a..d6173231 100644 --- a/client/plugins/databasemanager/index.js +++ b/client/plugins/databasemanager/index.js @@ -148,7 +148,7 @@ const navyuniteditor_1 = require("./navyuniteditor"); class DatabaseManagerPlugin { constructor() { _DatabaseManagerPlugin_instances.add(this); - _DatabaseManagerPlugin_app.set(this, null); + _DatabaseManagerPlugin_app.set(this, void 0); _DatabaseManagerPlugin_element.set(this, void 0); _DatabaseManagerPlugin_mainContentContainer.set(this, void 0); _DatabaseManagerPlugin_contentDiv1.set(this, void 0); @@ -263,6 +263,14 @@ class DatabaseManagerPlugin { initialize(app) { var _a; __classPrivateFieldSet(this, _DatabaseManagerPlugin_app, app, "f"); + const contextManager = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f").getContextManager(); + contextManager.add("databaseManager", { + "allowUnitCopying": false, + "allowUnitPasting": false, + "useSpawnMenu": false, + "useUnitControlPanel": false, + "useUnitInfoPanel": false + }); /* Load the databases and initialize the editors */ __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_loadDatabases).call(this); /* Add a button to the main Olympus App to allow the users to open the dialog */ @@ -299,6 +307,8 @@ class DatabaseManagerPlugin { this.getElement().classList.toggle("hide", !bool); else this.getElement().classList.toggle("hide"); + if (__classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) + __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f").getContextManager().setContext(this.getElement().classList.contains("hide") ? "olympus" : "databaseManager"); } } exports.DatabaseManagerPlugin = DatabaseManagerPlugin; diff --git a/client/plugins/databasemanager/src/databasemanagerplugin.ts b/client/plugins/databasemanager/src/databasemanagerplugin.ts index 44537f7e..e83e1a13 100644 --- a/client/plugins/databasemanager/src/databasemanagerplugin.ts +++ b/client/plugins/databasemanager/src/databasemanagerplugin.ts @@ -16,7 +16,7 @@ import { NavyUnitEditor } from "./navyuniteditor"; */ export class DatabaseManagerPlugin implements OlympusPlugin { - #app: OlympusApp | null = null; + #app!: OlympusApp; #element: HTMLElement; #mainContentContainer: HTMLElement; @@ -157,6 +157,15 @@ export class DatabaseManagerPlugin implements OlympusPlugin { */ initialize(app: any) { this.#app = app; + + const contextManager = this.#app.getContextManager(); + contextManager.add( "databaseManager", { + "allowUnitCopying": false, + "allowUnitPasting": false, + "useSpawnMenu": false, + "useUnitControlPanel": false, + "useUnitInfoPanel": false + }); /* Load the databases and initialize the editors */ this.#loadDatabases(); @@ -197,6 +206,9 @@ export class DatabaseManagerPlugin implements OlympusPlugin { this.getElement().classList.toggle("hide", !bool); else this.getElement().classList.toggle("hide"); + + if ( this.#app ) + this.#app.getContextManager().setContext( this.getElement().classList.contains("hide") ? "olympus" : "databaseManager" ); } /** Hide all the editors diff --git a/client/public/stylesheets/panels/unitcontrol.css b/client/public/stylesheets/panels/unitcontrol.css index c7ada90f..902622e6 100644 --- a/client/public/stylesheets/panels/unitcontrol.css +++ b/client/public/stylesheets/panels/unitcontrol.css @@ -264,6 +264,20 @@ body.feature-forceShowUnitControlPanel #unit-control-panel { content: "GS"; } +#unit-control-panel .switch-control .ol-switch { + height: 23px; + width: 40px; +} + +#unit-control-panel .switch-control .ol-switch[data-value="true"]>.ol-switch-fill::before { + content: "YES"; +} + +#unit-control-panel .switch-control .ol-switch[data-value="false"]>.ol-switch-fill::before { + content: "NO"; +} + + #unit-control-panel .ol-slider-value { color: var(--accent-light-blue); cursor: pointer; diff --git a/client/public/stylesheets/style/style.css b/client/public/stylesheets/style/style.css index a5f7ba88..5eb11f5b 100644 --- a/client/public/stylesheets/style/style.css +++ b/client/public/stylesheets/style/style.css @@ -1461,20 +1461,42 @@ input[type=number]::-webkit-outer-spin-button { transform: translateX(calc((var(--width) - var(--height)) * 0.5)); } -.ol-contexmenu-panel { - padding: 20px; +.switch-control.yes-no .ol-switch[data-value="true"] .ol-switch-fill { + background-color: var(--accent-light-blue); } -.ol-coalition-switch[data-value="false"]>.ol-switch-fill { - background-color: var(--primary-blue); +.switch-control.yes-no .ol-switch[data-value="false"] .ol-switch-fill { + background-color: var(--ol-switch-off); } -.ol-coalition-switch[data-value="true"]>.ol-switch-fill { - background-color: var(--primary-red); +.switch-control.coalition .ol-switch>.ol-switch-fill::before, +.switch-control.yes-no .ol-switch>.ol-switch-fill::before { + translate:-100% 0; + transform: none; } -.ol-coalition-switch[data-value="undefined"]>.ol-switch-fill { - background-color: var(--primary-neutral); +.switch-control.yes-no .ol-switch[data-value="true"]>.ol-switch-fill::before { + content: "YES"; +} + +.switch-control.yes-no .ol-switch[data-value="false"]>.ol-switch-fill::before { + content: "NO"; +} + +.switch-control.coalition [data-value="true"] .ol-switch-fill { + background-color: var(--accent-light-blue); +} + +.switch-control.coalition [data-value="false"] .ol-switch-fill { + background-color: var(--primary-red); +} + +.switch-control.coalition [data-value="true"]>.ol-switch-fill::before { + content: "BLUE" !important; +} + +.switch-control.coalition [data-value="false"]>.ol-switch-fill::before { + content: "RED" !important; } .ol-context-menu>ul { diff --git a/client/src/context/context.ts b/client/src/context/context.ts index 4fe02f5f..9b96341b 100644 --- a/client/src/context/context.ts +++ b/client/src/context/context.ts @@ -1,4 +1,6 @@ export interface ContextInterface { + allowUnitCopying?: boolean; + allowUnitPasting?: boolean; useSpawnMenu?: boolean; useUnitControlPanel?: boolean; useUnitInfoPanel?: boolean; @@ -6,16 +8,28 @@ export interface ContextInterface { export class Context { + #allowUnitCopying:boolean; + #allowUnitPasting:boolean; #useSpawnMenu:boolean; #useUnitControlPanel:boolean; #useUnitInfoPanel:boolean; constructor( config:ContextInterface ) { + this.#allowUnitCopying = ( config.allowUnitCopying !== false ); + this.#allowUnitPasting = ( config.allowUnitPasting !== false ); this.#useSpawnMenu = ( config.useSpawnMenu !== false ); this.#useUnitControlPanel = ( config.useUnitControlPanel !== false ); this.#useUnitInfoPanel = ( config.useUnitInfoPanel !== false ); } + getAllowUnitCopying() { + return this.#allowUnitCopying; + } + + getAllowUnitPasting() { + return this.#allowUnitPasting; + } + getUseSpawnMenu() { return this.#useSpawnMenu; } diff --git a/client/src/unit/unitsmanager.ts b/client/src/unit/unitsmanager.ts index 9d17119b..f2168c7a 100644 --- a/client/src/unit/unitsmanager.ts +++ b/client/src/unit/unitsmanager.ts @@ -1001,6 +1001,9 @@ export class UnitsManager { * */ copy(units: Unit[] | null = null) { + if ( !getApp().getContextManager().getCurrentContext().getAllowUnitCopying() ) + return; + if (units === null) units = this.getSelectedUnits({ excludeHumans: true }); @@ -1018,6 +1021,9 @@ export class UnitsManager { * @returns True if units were pasted successfully */ paste() { + if ( !getApp().getContextManager().getCurrentContext().getAllowUnitPasting() ) + return; + let spawnPoints = 0; /* If spawns are restricted, check that the user has the necessary spawn points */ From 912ab75a961d47bc4d375ee627c6447dc82dc965 Mon Sep 17 00:00:00 2001 From: PeekabooSteam Date: Wed, 22 Nov 2023 17:55:39 +0000 Subject: [PATCH 30/41] Moved Database Manager Link --- client/plugins/databasemanager/index.js | 2 +- client/plugins/databasemanager/src/databasemanagerplugin.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/plugins/databasemanager/index.js b/client/plugins/databasemanager/index.js index d6173231..4039ea7f 100644 --- a/client/plugins/databasemanager/index.js +++ b/client/plugins/databasemanager/index.js @@ -281,7 +281,7 @@ class DatabaseManagerPlugin { var toolbar = (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getToolbarsManager().get("primaryToolbar"); var elements = toolbar.getMainDropdown().getOptionElements(); var arr = Array.prototype.slice.call(elements); - arr.splice(arr.length - 1, 0, mainButtonDiv); + arr.splice(arr.length - 3, 0, mainButtonDiv); toolbar.getMainDropdown().setOptionsElements(arr); mainButton.onclick = () => { var _a; diff --git a/client/plugins/databasemanager/src/databasemanagerplugin.ts b/client/plugins/databasemanager/src/databasemanagerplugin.ts index e83e1a13..f21bda93 100644 --- a/client/plugins/databasemanager/src/databasemanagerplugin.ts +++ b/client/plugins/databasemanager/src/databasemanagerplugin.ts @@ -178,7 +178,7 @@ export class DatabaseManagerPlugin implements OlympusPlugin { var toolbar: PrimaryToolbar = this.#app?.getToolbarsManager().get("primaryToolbar") as PrimaryToolbar; var elements = toolbar.getMainDropdown().getOptionElements(); var arr = Array.prototype.slice.call(elements); - arr.splice(arr.length - 1, 0, mainButtonDiv); + arr.splice(arr.length - 3, 0, mainButtonDiv); toolbar.getMainDropdown().setOptionsElements(arr); mainButton.onclick = () => { toolbar.getMainDropdown().close(); From dcbfdf8666f20eb8abcda6cac3888d3b0a8b5481 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Thu, 23 Nov 2023 16:40:18 +0100 Subject: [PATCH 31/41] Added effect of acquisition range to wake units up Note: alertness time constant suppressed --- client/package-lock.json | 6369 +++++++++++------ .../databases/units/groundunitdatabase.json | 17 +- client/src/panels/unitcontrolpanel.ts | 17 +- src/core/include/groundunit.h | 2 +- src/core/src/groundunit.cpp | 62 +- 5 files changed, 4202 insertions(+), 2265 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 05085e5b..feb55304 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,40 +1,97 @@ { "name": "DCSOlympus", "version": "v0.4.7-alpha", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@ampproject/remapping": { + "packages": { + "": { + "name": "DCSOlympus", + "version": "v0.4.7-alpha", + "dependencies": { + "@turf/turf": "^6.5.0", + "body-parser": "^1.20.2", + "cookie-parser": "~1.4.4", + "debug": "~2.6.9", + "ejs": "^3.1.8", + "express": "~4.16.1", + "express-basic-auth": "^1.2.1", + "js-sha256": "^0.10.1", + "leaflet-gesture-handling": "^1.2.2", + "morgan": "~1.9.1", + "save": "^2.9.0", + "srtm-elevation": "^2.1.2" + }, + "devDependencies": { + "@babel/preset-env": "^7.21.4", + "@tanem/svg-injector": "^10.1.55", + "@types/formatcoords": "^1.1.0", + "@types/geojson": "^7946.0.10", + "@types/leaflet": "^1.9.0", + "@types/node": "^18.16.1", + "@types/sortablejs": "^1.15.0", + "@types/svg-injector": "^0.0.29", + "babelify": "^10.0.0", + "browserify": "^17.0.0", + "concurrently": "^7.6.0", + "cp": "^0.2.0", + "esmify": "^2.1.1", + "formatcoords": "^1.1.3", + "geodesy": "^1.1.2", + "leaflet": "^1.9.3", + "leaflet-control-mini-map": "^0.4.0", + "leaflet-path-drag": "*", + "leaflet.nauticscale": "^1.1.0", + "nodemon": "^2.0.20", + "requirejs": "^2.3.6", + "sortablejs": "^1.15.0", + "tinyify": "^4.0.0", + "tsify": "^5.0.4", + "tslib": "latest", + "typescript": "^4.9.4", + "usng.js": "^0.4.5", + "watchify": "^4.0.0" + } + }, + "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/code-frame": { + "node_modules/@babel/code-frame": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", "dev": true, - "requires": { + "dependencies": { "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/compat-data": { + "node_modules/@babel/compat-data": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/core": { + "node_modules/@babel/core": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", "dev": true, - "requires": { + "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.21.4", "@babel/generator": "^7.21.4", @@ -51,80 +108,108 @@ "json5": "^2.2.2", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/generator": { + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/generator": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.21.4", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-annotate-as-pure": { + "node_modules/@babel/helper-annotate-as-pure": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-compilation-targets": { + "node_modules/@babel/helper-compilation-targets": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.21.4", "@babel/helper-validator-option": "^7.21.0", "browserslist": "^4.21.3", "lru-cache": "^5.1.1", "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-create-class-features-plugin": { + "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.21.0", @@ -133,24 +218,36 @@ "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-create-regexp-features-plugin": { + "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz", "integrity": "sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "regexpu-core": "^5.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-define-polyfill-provider": { + "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", @@ -158,82 +255,109 @@ "resolve": "^1.14.2", "semver": "^6.1.2" }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/helper-environment-visitor": { + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-explode-assignable-expression": { + "node_modules/@babel/helper-explode-assignable-expression": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-function-name": { + "node_modules/@babel/helper-function-name": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, - "requires": { + "dependencies": { "@babel/template": "^7.20.7", "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-hoist-variables": { + "node_modules/@babel/helper-hoist-variables": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-member-expression-to-functions": { + "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-imports": { + "node_modules/@babel/helper-module-imports": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.21.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-transforms": { + "node_modules/@babel/helper-module-transforms": { "version": "7.21.2", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", "@babel/helper-simple-access": "^7.20.2", @@ -242,544 +366,803 @@ "@babel/template": "^7.20.7", "@babel/traverse": "^7.21.2", "@babel/types": "^7.21.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-optimise-call-expression": { + "node_modules/@babel/helper-optimise-call-expression": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-plugin-utils": { + "node_modules/@babel/helper-plugin-utils": { "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-remap-async-to-generator": { + "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-wrap-function": "^7.18.9", "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-replace-supers": { + "node_modules/@babel/helper-replace-supers": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", "@babel/template": "^7.20.7", "@babel/traverse": "^7.20.7", "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-simple-access": { + "node_modules/@babel/helper-simple-access": { "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-skip-transparent-expression-wrappers": { + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-split-export-declaration": { + "node_modules/@babel/helper-split-export-declaration": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-string-parser": { + "node_modules/@babel/helper-string-parser": { "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-identifier": { + "node_modules/@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-option": { + "node_modules/@babel/helper-validator-option": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-wrap-function": { + "node_modules/@babel/helper-wrap-function": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", "@babel/traverse": "^7.20.5", "@babel/types": "^7.20.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helpers": { + "node_modules/@babel/helpers": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dev": true, - "requires": { + "dependencies": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.21.0", "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/highlight": { + "node_modules/@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "engines": { + "node": ">=6.9.0" } }, - "@babel/parser": { + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", - "dev": true + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-proposal-optional-chaining": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "@babel/plugin-proposal-async-generator-functions": { + "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-class-properties": { + "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-class-static-block": { + "node_modules/@babel/plugin-proposal-class-static-block": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "@babel/plugin-proposal-dynamic-import": { + "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-export-namespace-from": { + "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-json-strings": { + "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-logical-assignment-operators": { + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-numeric-separator": { + "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-catch-binding": { + "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-chaining": { + "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-private-methods": { + "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-private-property-in-object": { + "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-unicode-property-regex": { + "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-async-generators": { + "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-properties": { + "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-static-block": { + "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-dynamic-import": { + "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-export-namespace-from": { + "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-import-assertions": { + "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-json-strings": { + "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-numeric-separator": { + "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-object-rest-spread": { + "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-catch-binding": { + "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-chaining": { + "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-private-property-in-object": { + "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-top-level-await": { + "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-arrow-functions": { + "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-async-to-generator": { + "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-remap-async-to-generator": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoped-functions": { + "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoping": { + "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-classes": { + "node_modules/@babel/plugin-transform-classes": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", @@ -789,274 +1172,442 @@ "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-computed-properties": { + "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/template": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-destructuring": { + "node_modules/@babel/plugin-transform-destructuring": { "version": "7.21.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-dotall-regex": { + "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-duplicate-keys": { + "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-exponentiation-operator": { + "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-for-of": { + "node_modules/@babel/plugin-transform-for-of": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-function-name": { + "node_modules/@babel/plugin-transform-function-name": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-compilation-targets": "^7.18.9", "@babel/helper-function-name": "^7.18.9", "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-literals": { + "node_modules/@babel/plugin-transform-literals": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-member-expression-literals": { + "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-amd": { + "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.20.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.20.11", "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-commonjs": { + "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.21.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.21.2", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-simple-access": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-systemjs": { + "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.20.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-module-transforms": "^7.20.11", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-validator-identifier": "^7.19.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-umd": { + "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.20.5", "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-new-target": { + "node_modules/@babel/plugin-transform-new-target": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-object-super": { + "node_modules/@babel/plugin-transform-object-super": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-parameters": { + "node_modules/@babel/plugin-transform-parameters": { "version": "7.21.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-property-literals": { + "node_modules/@babel/plugin-transform-property-literals": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-regenerator": { + "node_modules/@babel/plugin-transform-regenerator": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-reserved-words": { + "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-shorthand-properties": { + "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-spread": { + "node_modules/@babel/plugin-transform-spread": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-sticky-regex": { + "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-template-literals": { + "node_modules/@babel/plugin-transform-template-literals": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-typeof-symbol": { + "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-escapes": { + "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-regex": { + "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-env": { + "node_modules/@babel/preset-env": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.4.tgz", "integrity": "sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.21.4", "@babel/helper-compilation-targets": "^7.21.4", "@babel/helper-plugin-utils": "^7.20.2", @@ -1132,53 +1683,68 @@ "babel-plugin-polyfill-regenerator": "^0.4.1", "core-js-compat": "^3.25.1", "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-modules": { + "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/regjsgen": { + "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", "dev": true }, - "@babel/runtime": { + "node_modules/@babel/runtime": { "version": "7.21.5", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", "dev": true, - "requires": { + "dependencies": { "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/template": { + "node_modules/@babel/template": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/traverse": { + "node_modules/@babel/traverse": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.21.4", "@babel/generator": "^7.21.4", "@babel/helper-environment-visitor": "^7.18.9", @@ -1190,442 +1756,533 @@ "debug": "^4.1.0", "globals": "^11.1.0" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/types": { + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/types": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@browserify/envify": { + "node_modules/@browserify/envify": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@browserify/envify/-/envify-6.0.0.tgz", "integrity": "sha512-ovxHR0KTsRCyMNwD7MGV0+VCU1sT6Ds+itC4DaQHM41eUId+w5Jd0qlhLVoDkkIVBnkY3BAAM8yb2QfpBlHkPw==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^2.0.1", "dash-ast": "^2.0.1", "multisplice": "^1.0.0", "through2": "^4.0.2" }, - "dependencies": { - "acorn-node": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-2.0.1.tgz", - "integrity": "sha512-VLR5sHqjk+8c5hrKeP2fWaIHb8eewsoxnZ8r2qpwRHXMHuC7KyOPflnOx9dLssVQUurzJ7rO0OzIFjHcndafWw==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "dash-ast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", - "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", - "dev": true - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } + "bin": { + "envify": "bin/envify" } }, - "@browserify/uglifyify": { + "node_modules/@browserify/envify/node_modules/acorn-node": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-2.0.1.tgz", + "integrity": "sha512-VLR5sHqjk+8c5hrKeP2fWaIHb8eewsoxnZ8r2qpwRHXMHuC7KyOPflnOx9dLssVQUurzJ7rO0OzIFjHcndafWw==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/@browserify/envify/node_modules/dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "node_modules/@browserify/envify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@browserify/envify/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/@browserify/uglifyify": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@browserify/uglifyify/-/uglifyify-6.0.0.tgz", "integrity": "sha512-48M2a3novsgKhUSo/B3ja10awc7unliK1HfW6aYBJdLFQj3wXDx9BBJVfj6MVYERSQVEVjNHQQ7IK89h4MpCLw==", "dev": true, - "requires": { + "dependencies": { "convert-source-map": "^1.9.0", "minimatch": "^3.0.2", "terser": "^5.15.1", "through2": "^4.0.2", "xtend": "^4.0.1" - }, - "dependencies": { - "acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "terser": { - "version": "5.24.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", - "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } } }, - "@goto-bus-stop/common-shake": { + "node_modules/@browserify/uglifyify/node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@browserify/uglifyify/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@browserify/uglifyify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@browserify/uglifyify/node_modules/terser": { + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@browserify/uglifyify/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/@goto-bus-stop/common-shake": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@goto-bus-stop/common-shake/-/common-shake-2.4.0.tgz", "integrity": "sha512-LO+7v+UbxE3IyAS4Suf/KYB7Zq9DEIHibwDe6Wph4apNEfDyyxP7BSxzRS/Qa9lUH5gsm9eL9nF8EE1E0/nQkQ==", "dev": true, - "requires": { + "dependencies": { "acorn-walk": "^7.0.0", "debug": "^3.2.6", "escope": "^3.6.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } } }, - "@jridgewell/gen-mapping": { + "node_modules/@goto-bus-stop/common-shake/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@goto-bus-stop/common-shake/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@jridgewell/resolve-uri": { + "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0.0" + } }, - "@jridgewell/set-array": { + "node_modules/@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0.0" + } }, - "@jridgewell/source-map": { + "node_modules/@jridgewell/source-map": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, - "@jridgewell/sourcemap-codec": { + "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, - "@jridgewell/trace-mapping": { + "node_modules/@jridgewell/trace-mapping": { "version": "0.3.18", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - } } }, - "@tanem/svg-injector": { + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@tanem/svg-injector": { "version": "10.1.55", "resolved": "https://registry.npmjs.org/@tanem/svg-injector/-/svg-injector-10.1.55.tgz", "integrity": "sha512-xh8ejdvjDaH1eddZC0CdI45eeid4BIU2ppjNEhiTiWMYcLGT19KWjbES/ttDS4mq9gIAQfXx57g5zimEVohqYA==", "dev": true, - "requires": { + "dependencies": { "@babel/runtime": "^7.21.5", "content-type": "^1.0.5", "tslib": "^2.5.0" } }, - "@turf/along": { + "node_modules/@turf/along": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/along/-/along-6.5.0.tgz", "integrity": "sha512-LLyWQ0AARqJCmMcIEAXF4GEu8usmd4Kbz3qk1Oy5HoRNpZX47+i5exQtmIWKdqJ1MMhW26fCTXgpsEs5zgJ5gw==", - "requires": { + "dependencies": { "@turf/bearing": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/angle": { + "node_modules/@turf/angle": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/angle/-/angle-6.5.0.tgz", "integrity": "sha512-4pXMbWhFofJJAOvTMCns6N4C8CMd5Ih4O2jSAG9b3dDHakj3O4yN1+Zbm+NUei+eVEZ9gFeVp9svE3aMDenIkw==", - "requires": { + "dependencies": { "@turf/bearing": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/rhumb-bearing": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/area": { + "node_modules/@turf/area": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.5.0.tgz", "integrity": "sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/bbox": { + "node_modules/@turf/bbox": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.5.0.tgz", "integrity": "sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/bbox-clip": { + "node_modules/@turf/bbox-clip": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/bbox-clip/-/bbox-clip-6.5.0.tgz", "integrity": "sha512-F6PaIRF8WMp8EmgU/Ke5B1Y6/pia14UAYB5TiBC668w5rVVjy5L8rTm/m2lEkkDMHlzoP9vNY4pxpNthE7rLcQ==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/bbox-polygon": { + "node_modules/@turf/bbox-polygon": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/bbox-polygon/-/bbox-polygon-6.5.0.tgz", "integrity": "sha512-+/r0NyL1lOG3zKZmmf6L8ommU07HliP4dgYToMoTxqzsWzyLjaj/OzgQ8rBmv703WJX+aS6yCmLuIhYqyufyuw==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/bearing": { + "node_modules/@turf/bearing": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.5.0.tgz", "integrity": "sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/bezier-spline": { + "node_modules/@turf/bezier-spline": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/bezier-spline/-/bezier-spline-6.5.0.tgz", "integrity": "sha512-vokPaurTd4PF96rRgGVm6zYYC5r1u98ZsG+wZEv9y3kJTuJRX/O3xIY2QnTGTdbVmAJN1ouOsD0RoZYaVoXORQ==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/boolean-clockwise": { + "node_modules/@turf/boolean-clockwise": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-6.5.0.tgz", "integrity": "sha512-45+C7LC5RMbRWrxh3Z0Eihsc8db1VGBO5d9BLTOAwU4jR6SgsunTfRWR16X7JUwIDYlCVEmnjcXJNi/kIU3VIw==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/boolean-contains": { + "node_modules/@turf/boolean-contains": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.5.0.tgz", "integrity": "sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/boolean-point-on-line": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/boolean-crosses": { + "node_modules/@turf/boolean-crosses": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-crosses/-/boolean-crosses-6.5.0.tgz", "integrity": "sha512-gvshbTPhAHporTlQwBJqyfW+2yV8q/mOTxG6PzRVl6ARsqNoqYQWkd4MLug7OmAqVyBzLK3201uAeBjxbGw0Ng==", - "requires": { + "dependencies": { "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/line-intersect": "^6.5.0", "@turf/polygon-to-line": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/boolean-disjoint": { + "node_modules/@turf/boolean-disjoint": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-disjoint/-/boolean-disjoint-6.5.0.tgz", "integrity": "sha512-rZ2ozlrRLIAGo2bjQ/ZUu4oZ/+ZjGvLkN5CKXSKBcu6xFO6k2bgqeM8a1836tAW+Pqp/ZFsTA5fZHsJZvP2D5g==", - "requires": { + "dependencies": { "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/line-intersect": "^6.5.0", "@turf/meta": "^6.5.0", "@turf/polygon-to-line": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/boolean-equal": { + "node_modules/@turf/boolean-equal": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-equal/-/boolean-equal-6.5.0.tgz", "integrity": "sha512-cY0M3yoLC26mhAnjv1gyYNQjn7wxIXmL2hBmI/qs8g5uKuC2hRWi13ydufE3k4x0aNRjFGlg41fjoYLwaVF+9Q==", - "requires": { + "dependencies": { "@turf/clean-coords": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "geojson-equality": "0.1.6" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/boolean-intersects": { + "node_modules/@turf/boolean-intersects": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-intersects/-/boolean-intersects-6.5.0.tgz", "integrity": "sha512-nIxkizjRdjKCYFQMnml6cjPsDOBCThrt+nkqtSEcxkKMhAQj5OO7o2CecioNTaX8EayqwMGVKcsz27oP4mKPTw==", - "requires": { + "dependencies": { "@turf/boolean-disjoint": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/boolean-overlap": { + "node_modules/@turf/boolean-overlap": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.5.0.tgz", "integrity": "sha512-8btMIdnbXVWUa1M7D4shyaSGxLRw6NjMcqKBcsTXcZdnaixl22k7ar7BvIzkaRYN3SFECk9VGXfLncNS3ckQUw==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/line-intersect": "^6.5.0", "@turf/line-overlap": "^6.5.0", "@turf/meta": "^6.5.0", "geojson-equality": "0.1.6" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/boolean-parallel": { + "node_modules/@turf/boolean-parallel": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-parallel/-/boolean-parallel-6.5.0.tgz", "integrity": "sha512-aSHJsr1nq9e5TthZGZ9CZYeXklJyRgR5kCLm5X4urz7+MotMOp/LsGOsvKvK9NeUl9+8OUmfMn8EFTT8LkcvIQ==", - "requires": { + "dependencies": { "@turf/clean-coords": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/line-segment": "^6.5.0", "@turf/rhumb-bearing": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/boolean-point-in-polygon": { + "node_modules/@turf/boolean-point-in-polygon": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.5.0.tgz", "integrity": "sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/boolean-point-on-line": { + "node_modules/@turf/boolean-point-on-line": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.5.0.tgz", "integrity": "sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/boolean-within": { + "node_modules/@turf/boolean-within": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/boolean-within/-/boolean-within-6.5.0.tgz", "integrity": "sha512-YQB3oU18Inx35C/LU930D36RAVe7LDXk1kWsQ8mLmuqYn9YdPsDQTMTkLJMhoQ8EbN7QTdy333xRQ4MYgToteQ==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/boolean-point-on-line": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/buffer": { + "node_modules/@turf/buffer": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/buffer/-/buffer-6.5.0.tgz", "integrity": "sha512-qeX4N6+PPWbKqp1AVkBVWFerGjMYMUyencwfnkCesoznU6qvfugFHNAngNqIBVnJjZ5n8IFyOf+akcxnrt9sNg==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/center": "^6.5.0", "@turf/helpers": "^6.5.0", @@ -1633,144 +2290,186 @@ "@turf/projection": "^6.5.0", "d3-geo": "1.7.1", "turf-jsts": "*" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/center": { + "node_modules/@turf/center": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/center/-/center-6.5.0.tgz", "integrity": "sha512-T8KtMTfSATWcAX088rEDKjyvQCBkUsLnK/Txb6/8WUXIeOZyHu42G7MkdkHRoHtwieLdduDdmPLFyTdG5/e7ZQ==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/center-mean": { + "node_modules/@turf/center-mean": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/center-mean/-/center-mean-6.5.0.tgz", "integrity": "sha512-AAX6f4bVn12pTVrMUiB9KrnV94BgeBKpyg3YpfnEbBpkN/znfVhL8dG8IxMAxAoSZ61Zt9WLY34HfENveuOZ7Q==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/center-median": { + "node_modules/@turf/center-median": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/center-median/-/center-median-6.5.0.tgz", "integrity": "sha512-dT8Ndu5CiZkPrj15PBvslpuf01ky41DEYEPxS01LOxp5HOUHXp1oJxsPxvc+i/wK4BwccPNzU1vzJ0S4emd1KQ==", - "requires": { + "dependencies": { "@turf/center-mean": "^6.5.0", "@turf/centroid": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/center-of-mass": { + "node_modules/@turf/center-of-mass": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/center-of-mass/-/center-of-mass-6.5.0.tgz", "integrity": "sha512-EWrriU6LraOfPN7m1jZi+1NLTKNkuIsGLZc2+Y8zbGruvUW+QV7K0nhf7iZWutlxHXTBqEXHbKue/o79IumAsQ==", - "requires": { + "dependencies": { "@turf/centroid": "^6.5.0", "@turf/convex": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/centroid": { + "node_modules/@turf/centroid": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-6.5.0.tgz", "integrity": "sha512-MwE1oq5E3isewPprEClbfU5pXljIK/GUOMbn22UM3IFPDJX0KeoyLNwghszkdmFp/qMGL/M13MMWvU+GNLXP/A==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/circle": { + "node_modules/@turf/circle": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/circle/-/circle-6.5.0.tgz", "integrity": "sha512-oU1+Kq9DgRnoSbWFHKnnUdTmtcRUMmHoV9DjTXu9vOLNV5OWtAAh1VZ+mzsioGGzoDNT/V5igbFOkMfBQc0B6A==", - "requires": { + "dependencies": { "@turf/destination": "^6.5.0", "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/clean-coords": { + "node_modules/@turf/clean-coords": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/clean-coords/-/clean-coords-6.5.0.tgz", "integrity": "sha512-EMX7gyZz0WTH/ET7xV8MyrExywfm9qUi0/MY89yNffzGIEHuFfqwhcCqZ8O00rZIPZHUTxpmsxQSTfzJJA1CPw==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/clone": { + "node_modules/@turf/clone": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-6.5.0.tgz", "integrity": "sha512-mzVtTFj/QycXOn6ig+annKrM6ZlimreKYz6f/GSERytOpgzodbQyOgkfwru100O1KQhhjSudKK4DsQ0oyi9cTw==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/clusters": { + "node_modules/@turf/clusters": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/clusters/-/clusters-6.5.0.tgz", "integrity": "sha512-Y6gfnTJzQ1hdLfCsyd5zApNbfLIxYEpmDibHUqR5z03Lpe02pa78JtgrgUNt1seeO/aJ4TG1NLN8V5gOrHk04g==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/clusters-dbscan": { + "node_modules/@turf/clusters-dbscan": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/clusters-dbscan/-/clusters-dbscan-6.5.0.tgz", "integrity": "sha512-SxZEE4kADU9DqLRiT53QZBBhu8EP9skviSyl+FGj08Y01xfICM/RR9ACUdM0aEQimhpu+ZpRVcUK+2jtiCGrYQ==", - "requires": { + "dependencies": { "@turf/clone": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0", "density-clustering": "1.3.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/clusters-kmeans": { + "node_modules/@turf/clusters-kmeans": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/clusters-kmeans/-/clusters-kmeans-6.5.0.tgz", "integrity": "sha512-DwacD5+YO8kwDPKaXwT9DV46tMBVNsbi1IzdajZu1JDSWoN7yc7N9Qt88oi+p30583O0UPVkAK+A10WAQv4mUw==", - "requires": { + "dependencies": { "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "skmeans": "0.9.7" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/collect": { + "node_modules/@turf/collect": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/collect/-/collect-6.5.0.tgz", "integrity": "sha512-4dN/T6LNnRg099m97BJeOcTA5fSI8cu87Ydgfibewd2KQwBexO69AnjEFqfPX3Wj+Zvisj1uAVIZbPmSSrZkjg==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/helpers": "^6.5.0", "rbush": "2.x" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/combine": { + "node_modules/@turf/combine": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/combine/-/combine-6.5.0.tgz", "integrity": "sha512-Q8EIC4OtAcHiJB3C4R+FpB4LANiT90t17uOd851qkM2/o6m39bfN5Mv0PWqMZIHWrrosZqRqoY9dJnzz/rJxYQ==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/concave": { + "node_modules/@turf/concave": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/concave/-/concave-6.5.0.tgz", "integrity": "sha512-I/sUmUC8TC5h/E2vPwxVht+nRt+TnXIPRoztDFvS8/Y0+cBDple9inLSo9nnPXMXidrBlGXZ9vQx/BjZUJgsRQ==", - "requires": { + "dependencies": { "@turf/clone": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", @@ -1779,147 +2478,192 @@ "@turf/tin": "^6.5.0", "topojson-client": "3.x", "topojson-server": "3.x" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/convex": { + "node_modules/@turf/convex": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/convex/-/convex-6.5.0.tgz", "integrity": "sha512-x7ZwC5z7PJB0SBwNh7JCeCNx7Iu+QSrH7fYgK0RhhNop13TqUlvHMirMLRgf2db1DqUetrAO2qHJeIuasquUWg==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0", "concaveman": "*" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/destination": { + "node_modules/@turf/destination": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.5.0.tgz", "integrity": "sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/difference": { + "node_modules/@turf/difference": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-6.5.0.tgz", "integrity": "sha512-l8iR5uJqvI+5Fs6leNbhPY5t/a3vipUF/3AeVLpwPQcgmedNXyheYuy07PcMGH5Jdpi5gItOiTqwiU/bUH4b3A==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "polygon-clipping": "^0.15.3" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/dissolve": { + "node_modules/@turf/dissolve": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/dissolve/-/dissolve-6.5.0.tgz", "integrity": "sha512-WBVbpm9zLTp0Bl9CE35NomTaOL1c4TQCtEoO43YaAhNEWJOOIhZMFJyr8mbvYruKl817KinT3x7aYjjCMjTAsQ==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "polygon-clipping": "^0.15.3" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/distance": { + "node_modules/@turf/distance": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.5.0.tgz", "integrity": "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/distance-weight": { + "node_modules/@turf/distance-weight": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/distance-weight/-/distance-weight-6.5.0.tgz", "integrity": "sha512-a8qBKkgVNvPKBfZfEJZnC3DV7dfIsC3UIdpRci/iap/wZLH41EmS90nM+BokAJflUHYy8PqE44wySGWHN1FXrQ==", - "requires": { + "dependencies": { "@turf/centroid": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/ellipse": { + "node_modules/@turf/ellipse": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/ellipse/-/ellipse-6.5.0.tgz", "integrity": "sha512-kuXtwFviw/JqnyJXF1mrR/cb496zDTSbGKtSiolWMNImYzGGkbsAsFTjwJYgD7+4FixHjp0uQPzo70KDf3AIBw==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/rhumb-destination": "^6.5.0", "@turf/transform-rotate": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/envelope": { + "node_modules/@turf/envelope": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/envelope/-/envelope-6.5.0.tgz", "integrity": "sha512-9Z+FnBWvOGOU4X+fMZxYFs1HjFlkKqsddLuMknRaqcJd6t+NIv5DWvPtDL8ATD2GEExYDiFLwMdckfr1yqJgHA==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/bbox-polygon": "^6.5.0", "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/explode": { + "node_modules/@turf/explode": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/explode/-/explode-6.5.0.tgz", "integrity": "sha512-6cSvMrnHm2qAsace6pw9cDmK2buAlw8+tjeJVXMfMyY+w7ZUi1rprWMsY92J7s2Dar63Bv09n56/1V7+tcj52Q==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/flatten": { + "node_modules/@turf/flatten": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/flatten/-/flatten-6.5.0.tgz", "integrity": "sha512-IBZVwoNLVNT6U/bcUUllubgElzpMsNoCw8tLqBw6dfYg9ObGmpEjf9BIYLr7a2Yn5ZR4l7YIj2T7kD5uJjZADQ==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/flip": { + "node_modules/@turf/flip": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/flip/-/flip-6.5.0.tgz", "integrity": "sha512-oyikJFNjt2LmIXQqgOGLvt70RgE2lyzPMloYWM7OR5oIFGRiBvqVD2hA6MNw6JewIm30fWZ8DQJw1NHXJTJPbg==", - "requires": { + "dependencies": { "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/great-circle": { + "node_modules/@turf/great-circle": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/great-circle/-/great-circle-6.5.0.tgz", "integrity": "sha512-7ovyi3HaKOXdFyN7yy1yOMa8IyOvV46RC1QOQTT+RYUN8ke10eyqExwBpL9RFUPvlpoTzoYbM/+lWPogQlFncg==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/helpers": { + "node_modules/@turf/helpers": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz", - "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==" + "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==", + "funding": { + "url": "https://opencollective.com/turf" + } }, - "@turf/hex-grid": { + "node_modules/@turf/hex-grid": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/hex-grid/-/hex-grid-6.5.0.tgz", "integrity": "sha512-Ln3tc2tgZT8etDOldgc6e741Smg1CsMKAz1/Mlel+MEL5Ynv2mhx3m0q4J9IB1F3a4MNjDeVvm8drAaf9SF33g==", - "requires": { + "dependencies": { "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/intersect": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/interpolate": { + "node_modules/@turf/interpolate": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/interpolate/-/interpolate-6.5.0.tgz", "integrity": "sha512-LSH5fMeiGyuDZ4WrDJNgh81d2DnNDUVJtuFryJFup8PV8jbs46lQGfI3r1DJ2p1IlEJIz3pmAZYeTfMMoeeohw==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/centroid": "^6.5.0", "@turf/clone": "^6.5.0", @@ -1931,31 +2675,40 @@ "@turf/point-grid": "^6.5.0", "@turf/square-grid": "^6.5.0", "@turf/triangle-grid": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/intersect": { + "node_modules/@turf/intersect": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-6.5.0.tgz", "integrity": "sha512-2legGJeKrfFkzntcd4GouPugoqPUjexPZnOvfez+3SfIMrHvulw8qV8u7pfVyn2Yqs53yoVCEjS5sEpvQ5YRQg==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "polygon-clipping": "^0.15.3" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/invariant": { + "node_modules/@turf/invariant": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.5.0.tgz", "integrity": "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/isobands": { + "node_modules/@turf/isobands": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/isobands/-/isobands-6.5.0.tgz", "integrity": "sha512-4h6sjBPhRwMVuFaVBv70YB7eGz+iw0bhPRnp+8JBdX1UPJSXhoi/ZF2rACemRUr0HkdVB/a1r9gC32vn5IAEkw==", - "requires": { + "dependencies": { "@turf/area": "^6.5.0", "@turf/bbox": "^6.5.0", "@turf/boolean-point-in-polygon": "^6.5.0", @@ -1964,86 +2717,110 @@ "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "object-assign": "*" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/isolines": { + "node_modules/@turf/isolines": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/isolines/-/isolines-6.5.0.tgz", "integrity": "sha512-6ElhiLCopxWlv4tPoxiCzASWt/jMRvmp6mRYrpzOm3EUl75OhHKa/Pu6Y9nWtCMmVC/RcWtiiweUocbPLZLm0A==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "object-assign": "*" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/kinks": { + "node_modules/@turf/kinks": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/kinks/-/kinks-6.5.0.tgz", "integrity": "sha512-ViCngdPt1eEL7hYUHR2eHR662GvCgTc35ZJFaNR6kRtr6D8plLaDju0FILeFFWSc+o8e3fwxZEJKmFj9IzPiIQ==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/length": { + "node_modules/@turf/length": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/length/-/length-6.5.0.tgz", "integrity": "sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig==", - "requires": { + "dependencies": { "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/line-arc": { + "node_modules/@turf/line-arc": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-arc/-/line-arc-6.5.0.tgz", "integrity": "sha512-I6c+V6mIyEwbtg9P9zSFF89T7QPe1DPTG3MJJ6Cm1MrAY0MdejwQKOpsvNl8LDU2ekHOlz2kHpPVR7VJsoMllA==", - "requires": { + "dependencies": { "@turf/circle": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/line-chunk": { + "node_modules/@turf/line-chunk": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-chunk/-/line-chunk-6.5.0.tgz", "integrity": "sha512-i1FGE6YJaaYa+IJesTfyRRQZP31QouS+wh/pa6O3CC0q4T7LtHigyBSYjrbjSLfn2EVPYGlPCMFEqNWCOkC6zg==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/length": "^6.5.0", "@turf/line-slice-along": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/line-intersect": { + "node_modules/@turf/line-intersect": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.5.0.tgz", "integrity": "sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/line-segment": "^6.5.0", "@turf/meta": "^6.5.0", "geojson-rbush": "3.x" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/line-offset": { + "node_modules/@turf/line-offset": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-offset/-/line-offset-6.5.0.tgz", "integrity": "sha512-CEXZbKgyz8r72qRvPchK0dxqsq8IQBdH275FE6o4MrBkzMcoZsfSjghtXzKaz9vvro+HfIXal0sTk2mqV1lQTw==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/line-overlap": { + "node_modules/@turf/line-overlap": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.5.0.tgz", "integrity": "sha512-xHOaWLd0hkaC/1OLcStCpfq55lPHpPNadZySDXYiYjEz5HXr1oKmtMYpn0wGizsLwrOixRdEp+j7bL8dPt4ojQ==", - "requires": { + "dependencies": { "@turf/boolean-point-on-line": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", @@ -2052,44 +2829,56 @@ "@turf/nearest-point-on-line": "^6.5.0", "deep-equal": "1.x", "geojson-rbush": "3.x" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/line-segment": { + "node_modules/@turf/line-segment": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.5.0.tgz", "integrity": "sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/line-slice": { + "node_modules/@turf/line-slice": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-slice/-/line-slice-6.5.0.tgz", "integrity": "sha512-vDqJxve9tBHhOaVVFXqVjF5qDzGtKWviyjbyi2QnSnxyFAmLlLnBfMX8TLQCAf2GxHibB95RO5FBE6I2KVPRuw==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/nearest-point-on-line": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/line-slice-along": { + "node_modules/@turf/line-slice-along": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-slice-along/-/line-slice-along-6.5.0.tgz", "integrity": "sha512-KHJRU6KpHrAj+BTgTNqby6VCTnDzG6a1sJx/I3hNvqMBLvWVA2IrkR9L9DtsQsVY63IBwVdQDqiwCuZLDQh4Ng==", - "requires": { + "dependencies": { "@turf/bearing": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/line-split": { + "node_modules/@turf/line-split": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-split/-/line-split-6.5.0.tgz", "integrity": "sha512-/rwUMVr9OI2ccJjw7/6eTN53URtGThNSD5I0GgxyFXMtxWiloRJ9MTff8jBbtPWrRka/Sh2GkwucVRAEakx9Sw==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", @@ -2100,73 +2889,94 @@ "@turf/square": "^6.5.0", "@turf/truncate": "^6.5.0", "geojson-rbush": "3.x" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/line-to-polygon": { + "node_modules/@turf/line-to-polygon": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/line-to-polygon/-/line-to-polygon-6.5.0.tgz", "integrity": "sha512-qYBuRCJJL8Gx27OwCD1TMijM/9XjRgXH/m/TyuND4OXedBpIWlK5VbTIO2gJ8OCfznBBddpjiObLBrkuxTpN4Q==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/mask": { + "node_modules/@turf/mask": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/mask/-/mask-6.5.0.tgz", "integrity": "sha512-RQha4aU8LpBrmrkH8CPaaoAfk0Egj5OuXtv6HuCQnHeGNOQt3TQVibTA3Sh4iduq4EPxnZfDjgsOeKtrCA19lg==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "polygon-clipping": "^0.15.3" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/meta": { + "node_modules/@turf/meta": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.5.0.tgz", "integrity": "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/midpoint": { + "node_modules/@turf/midpoint": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/midpoint/-/midpoint-6.5.0.tgz", "integrity": "sha512-MyTzV44IwmVI6ec9fB2OgZ53JGNlgOpaYl9ArKoF49rXpL84F9rNATndbe0+MQIhdkw8IlzA6xVP4lZzfMNVCw==", - "requires": { + "dependencies": { "@turf/bearing": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/moran-index": { + "node_modules/@turf/moran-index": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/moran-index/-/moran-index-6.5.0.tgz", "integrity": "sha512-ItsnhrU2XYtTtTudrM8so4afBCYWNaB0Mfy28NZwLjB5jWuAsvyV+YW+J88+neK/ougKMTawkmjQqodNJaBeLQ==", - "requires": { + "dependencies": { "@turf/distance-weight": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/nearest-point": { + "node_modules/@turf/nearest-point": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/nearest-point/-/nearest-point-6.5.0.tgz", "integrity": "sha512-fguV09QxilZv/p94s8SMsXILIAMiaXI5PATq9d7YWijLxWUj6Q/r43kxyoi78Zmwwh1Zfqz9w+bCYUAxZ5+euA==", - "requires": { + "dependencies": { "@turf/clone": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/nearest-point-on-line": { + "node_modules/@turf/nearest-point-on-line": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz", "integrity": "sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==", - "requires": { + "dependencies": { "@turf/bearing": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/distance": "^6.5.0", @@ -2174,57 +2984,72 @@ "@turf/invariant": "^6.5.0", "@turf/line-intersect": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/nearest-point-to-line": { + "node_modules/@turf/nearest-point-to-line": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/nearest-point-to-line/-/nearest-point-to-line-6.5.0.tgz", "integrity": "sha512-PXV7cN0BVzUZdjj6oeb/ESnzXSfWmEMrsfZSDRgqyZ9ytdiIj/eRsnOXLR13LkTdXVOJYDBuf7xt1mLhM4p6+Q==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "@turf/point-to-line-distance": "^6.5.0", "object-assign": "*" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/planepoint": { + "node_modules/@turf/planepoint": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/planepoint/-/planepoint-6.5.0.tgz", "integrity": "sha512-R3AahA6DUvtFbka1kcJHqZ7DMHmPXDEQpbU5WaglNn7NaCQg9HB0XM0ZfqWcd5u92YXV+Gg8QhC8x5XojfcM4Q==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/point-grid": { + "node_modules/@turf/point-grid": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/point-grid/-/point-grid-6.5.0.tgz", "integrity": "sha512-Iq38lFokNNtQJnOj/RBKmyt6dlof0yhaHEDELaWHuECm1lIZLY3ZbVMwbs+nXkwTAHjKfS/OtMheUBkw+ee49w==", - "requires": { + "dependencies": { "@turf/boolean-within": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/point-on-feature": { + "node_modules/@turf/point-on-feature": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/point-on-feature/-/point-on-feature-6.5.0.tgz", "integrity": "sha512-bDpuIlvugJhfcF/0awAQ+QI6Om1Y1FFYE8Y/YdxGRongivix850dTeXCo0mDylFdWFPGDo7Mmh9Vo4VxNwW/TA==", - "requires": { + "dependencies": { "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/center": "^6.5.0", "@turf/explode": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/nearest-point": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/point-to-line-distance": { + "node_modules/@turf/point-to-line-distance": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/point-to-line-distance/-/point-to-line-distance-6.5.0.tgz", "integrity": "sha512-opHVQ4vjUhNBly1bob6RWy+F+hsZDH9SA0UW36pIRzfpu27qipU18xup0XXEePfY6+wvhF6yL/WgCO2IbrLqEA==", - "requires": { + "dependencies": { "@turf/bearing": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", @@ -2233,153 +3058,198 @@ "@turf/projection": "^6.5.0", "@turf/rhumb-bearing": "^6.5.0", "@turf/rhumb-distance": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/points-within-polygon": { + "node_modules/@turf/points-within-polygon": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/points-within-polygon/-/points-within-polygon-6.5.0.tgz", "integrity": "sha512-YyuheKqjliDsBDt3Ho73QVZk1VXX1+zIA2gwWvuz8bR1HXOkcuwk/1J76HuFMOQI3WK78wyAi+xbkx268PkQzQ==", - "requires": { + "dependencies": { "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/polygon-smooth": { + "node_modules/@turf/polygon-smooth": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/polygon-smooth/-/polygon-smooth-6.5.0.tgz", "integrity": "sha512-LO/X/5hfh/Rk4EfkDBpLlVwt3i6IXdtQccDT9rMjXEP32tRgy0VMFmdkNaXoGlSSKf/1mGqLl4y4wHd86DqKbg==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/polygon-tangents": { + "node_modules/@turf/polygon-tangents": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/polygon-tangents/-/polygon-tangents-6.5.0.tgz", "integrity": "sha512-sB4/IUqJMYRQH9jVBwqS/XDitkEfbyqRy+EH/cMRJURTg78eHunvJ708x5r6umXsbiUyQU4eqgPzEylWEQiunw==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/boolean-within": "^6.5.0", "@turf/explode": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/nearest-point": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/polygon-to-line": { + "node_modules/@turf/polygon-to-line": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/polygon-to-line/-/polygon-to-line-6.5.0.tgz", "integrity": "sha512-5p4n/ij97EIttAq+ewSnKt0ruvuM+LIDzuczSzuHTpq4oS7Oq8yqg5TQ4nzMVuK41r/tALCk7nAoBuw3Su4Gcw==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/polygonize": { + "node_modules/@turf/polygonize": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/polygonize/-/polygonize-6.5.0.tgz", "integrity": "sha512-a/3GzHRaCyzg7tVYHo43QUChCspa99oK4yPqooVIwTC61npFzdrmnywMv0S+WZjHZwK37BrFJGFrZGf6ocmY5w==", - "requires": { + "dependencies": { "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/envelope": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/projection": { + "node_modules/@turf/projection": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/projection/-/projection-6.5.0.tgz", "integrity": "sha512-/Pgh9mDvQWWu8HRxqpM+tKz8OzgauV+DiOcr3FCjD6ubDnrrmMJlsf6fFJmggw93mtVPrZRL6yyi9aYCQBOIvg==", - "requires": { + "dependencies": { "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/random": { + "node_modules/@turf/random": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/random/-/random-6.5.0.tgz", "integrity": "sha512-8Q25gQ/XbA7HJAe+eXp4UhcXM9aOOJFaxZ02+XSNwMvY8gtWSCBLVqRcW4OhqilgZ8PeuQDWgBxeo+BIqqFWFQ==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/rectangle-grid": { + "node_modules/@turf/rectangle-grid": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/rectangle-grid/-/rectangle-grid-6.5.0.tgz", "integrity": "sha512-yQZ/1vbW68O2KsSB3OZYK+72aWz/Adnf7m2CMKcC+aq6TwjxZjAvlbCOsNUnMAuldRUVN1ph6RXMG4e9KEvKvg==", - "requires": { + "dependencies": { "@turf/boolean-intersects": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/rewind": { + "node_modules/@turf/rewind": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/rewind/-/rewind-6.5.0.tgz", "integrity": "sha512-IoUAMcHWotBWYwSYuYypw/LlqZmO+wcBpn8ysrBNbazkFNkLf3btSDZMkKJO/bvOzl55imr/Xj4fi3DdsLsbzQ==", - "requires": { + "dependencies": { "@turf/boolean-clockwise": "^6.5.0", "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/rhumb-bearing": { + "node_modules/@turf/rhumb-bearing": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/rhumb-bearing/-/rhumb-bearing-6.5.0.tgz", "integrity": "sha512-jMyqiMRK4hzREjQmnLXmkJ+VTNTx1ii8vuqRwJPcTlKbNWfjDz/5JqJlb5NaFDcdMpftWovkW5GevfnuzHnOYA==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/rhumb-destination": { + "node_modules/@turf/rhumb-destination": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/rhumb-destination/-/rhumb-destination-6.5.0.tgz", "integrity": "sha512-RHNP1Oy+7xTTdRrTt375jOZeHceFbjwohPHlr9Hf68VdHHPMAWgAKqiX2YgSWDcvECVmiGaBKWus1Df+N7eE4Q==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/rhumb-distance": { + "node_modules/@turf/rhumb-distance": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/rhumb-distance/-/rhumb-distance-6.5.0.tgz", "integrity": "sha512-oKp8KFE8E4huC2Z1a1KNcFwjVOqa99isxNOwfo4g3SUABQ6NezjKDDrnvC4yI5YZ3/huDjULLBvhed45xdCrzg==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/sample": { + "node_modules/@turf/sample": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/sample/-/sample-6.5.0.tgz", "integrity": "sha512-kSdCwY7el15xQjnXYW520heKUrHwRvnzx8ka4eYxX9NFeOxaFITLW2G7UtXb6LJK8mmPXI8Aexv23F2ERqzGFg==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/sector": { + "node_modules/@turf/sector": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/sector/-/sector-6.5.0.tgz", "integrity": "sha512-cYUOkgCTWqa23SOJBqxoFAc/yGCUsPRdn/ovbRTn1zNTm/Spmk6hVB84LCKOgHqvSF25i0d2kWqpZDzLDdAPbw==", - "requires": { + "dependencies": { "@turf/circle": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/line-arc": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/shortest-path": { + "node_modules/@turf/shortest-path": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/shortest-path/-/shortest-path-6.5.0.tgz", "integrity": "sha512-4de5+G7+P4hgSoPwn+SO9QSi9HY5NEV/xRJ+cmoFVRwv2CDsuOPDheHKeuIAhKyeKDvPvPt04XYWbac4insJMg==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/bbox-polygon": "^6.5.0", "@turf/boolean-point-in-polygon": "^6.5.0", @@ -2389,83 +3259,107 @@ "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "@turf/transform-scale": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/simplify": { + "node_modules/@turf/simplify": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/simplify/-/simplify-6.5.0.tgz", "integrity": "sha512-USas3QqffPHUY184dwQdP8qsvcVH/PWBYdXY5am7YTBACaQOMAlf6AKJs9FT8jiO6fQpxfgxuEtwmox+pBtlOg==", - "requires": { + "dependencies": { "@turf/clean-coords": "^6.5.0", "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/square": { + "node_modules/@turf/square": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/square/-/square-6.5.0.tgz", "integrity": "sha512-BM2UyWDmiuHCadVhHXKIx5CQQbNCpOxB6S/aCNOCLbhCeypKX5Q0Aosc5YcmCJgkwO5BERCC6Ee7NMbNB2vHmQ==", - "requires": { + "dependencies": { "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/square-grid": { + "node_modules/@turf/square-grid": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/square-grid/-/square-grid-6.5.0.tgz", "integrity": "sha512-mlR0ayUdA+L4c9h7p4k3pX6gPWHNGuZkt2c5II1TJRmhLkW2557d6b/Vjfd1z9OVaajb1HinIs1FMSAPXuuUrA==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/rectangle-grid": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/standard-deviational-ellipse": { + "node_modules/@turf/standard-deviational-ellipse": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/standard-deviational-ellipse/-/standard-deviational-ellipse-6.5.0.tgz", "integrity": "sha512-02CAlz8POvGPFK2BKK8uHGUk/LXb0MK459JVjKxLC2yJYieOBTqEbjP0qaWhiBhGzIxSMaqe8WxZ0KvqdnstHA==", - "requires": { + "dependencies": { "@turf/center-mean": "^6.5.0", "@turf/ellipse": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "@turf/points-within-polygon": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/tag": { + "node_modules/@turf/tag": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/tag/-/tag-6.5.0.tgz", "integrity": "sha512-XwlBvrOV38CQsrNfrxvBaAPBQgXMljeU0DV8ExOyGM7/hvuGHJw3y8kKnQ4lmEQcmcrycjDQhP7JqoRv8vFssg==", - "requires": { + "dependencies": { "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/tesselate": { + "node_modules/@turf/tesselate": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/tesselate/-/tesselate-6.5.0.tgz", "integrity": "sha512-M1HXuyZFCfEIIKkglh/r5L9H3c5QTEsnMBoZOFQiRnGPGmJWcaBissGb7mTFX2+DKE7FNWXh4TDnZlaLABB0dQ==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "earcut": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/tin": { + "node_modules/@turf/tin": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/tin/-/tin-6.5.0.tgz", "integrity": "sha512-YLYikRzKisfwj7+F+Tmyy/LE3d2H7D4kajajIfc9mlik2+esG7IolsX/+oUz1biguDYsG0DUA8kVYXDkobukfg==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/transform-rotate": { + "node_modules/@turf/transform-rotate": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/transform-rotate/-/transform-rotate-6.5.0.tgz", "integrity": "sha512-A2Ip1v4246ZmpssxpcL0hhiVBEf4L8lGnSPWTgSv5bWBEoya2fa/0SnFX9xJgP40rMP+ZzRaCN37vLHbv1Guag==", - "requires": { + "dependencies": { "@turf/centroid": "^6.5.0", "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", @@ -2474,13 +3368,16 @@ "@turf/rhumb-bearing": "^6.5.0", "@turf/rhumb-destination": "^6.5.0", "@turf/rhumb-distance": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/transform-scale": { + "node_modules/@turf/transform-scale": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/transform-scale/-/transform-scale-6.5.0.tgz", "integrity": "sha512-VsATGXC9rYM8qTjbQJ/P7BswKWXHdnSJ35JlV4OsZyHBMxJQHftvmZJsFbOqVtQnIQIzf2OAly6rfzVV9QLr7g==", - "requires": { + "dependencies": { "@turf/bbox": "^6.5.0", "@turf/center": "^6.5.0", "@turf/centroid": "^6.5.0", @@ -2491,44 +3388,56 @@ "@turf/rhumb-bearing": "^6.5.0", "@turf/rhumb-destination": "^6.5.0", "@turf/rhumb-distance": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/transform-translate": { + "node_modules/@turf/transform-translate": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/transform-translate/-/transform-translate-6.5.0.tgz", "integrity": "sha512-NABLw5VdtJt/9vSstChp93pc6oel4qXEos56RBMsPlYB8hzNTEKYtC146XJvyF4twJeeYS8RVe1u7KhoFwEM5w==", - "requires": { + "dependencies": { "@turf/clone": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0", "@turf/rhumb-destination": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/triangle-grid": { + "node_modules/@turf/triangle-grid": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/triangle-grid/-/triangle-grid-6.5.0.tgz", "integrity": "sha512-2jToUSAS1R1htq4TyLQYPTIsoy6wg3e3BQXjm2rANzw4wPQCXGOxrur1Fy9RtzwqwljlC7DF4tg0OnWr8RjmfA==", - "requires": { + "dependencies": { "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/intersect": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/truncate": { + "node_modules/@turf/truncate": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/truncate/-/truncate-6.5.0.tgz", "integrity": "sha512-pFxg71pLk+eJj134Z9yUoRhIi8vqnnKvCYwdT4x/DQl/19RVdq1tV3yqOT3gcTQNfniteylL5qV1uTBDV5sgrg==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/turf": { + "node_modules/@turf/turf": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/turf/-/turf-6.5.0.tgz", "integrity": "sha512-ipMCPnhu59bh92MNt8+pr1VZQhHVuTMHklciQURo54heoxRzt1neNYZOBR6jdL+hNsbDGAECMuIpAutX+a3Y+w==", - "requires": { + "dependencies": { "@turf/along": "^6.5.0", "@turf/angle": "^6.5.0", "@turf/area": "^6.5.0", @@ -2634,368 +3543,419 @@ "@turf/union": "^6.5.0", "@turf/unkink-polygon": "^6.5.0", "@turf/voronoi": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/union": { + "node_modules/@turf/union": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.5.0.tgz", "integrity": "sha512-igYWCwP/f0RFHIlC2c0SKDuM/ObBaqSljI3IdV/x71805QbIvY/BYGcJdyNcgEA6cylIGl/0VSlIbpJHZ9ldhw==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "polygon-clipping": "^0.15.3" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/unkink-polygon": { + "node_modules/@turf/unkink-polygon": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/unkink-polygon/-/unkink-polygon-6.5.0.tgz", "integrity": "sha512-8QswkzC0UqKmN1DT6HpA9upfa1HdAA5n6bbuzHy8NJOX8oVizVAqfEPY0wqqTgboDjmBR4yyImsdPGUl3gZ8JQ==", - "requires": { + "dependencies": { "@turf/area": "^6.5.0", "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0", "rbush": "^2.0.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@turf/voronoi": { + "node_modules/@turf/voronoi": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/voronoi/-/voronoi-6.5.0.tgz", "integrity": "sha512-C/xUsywYX+7h1UyNqnydHXiun4UPjK88VDghtoRypR9cLlb7qozkiLRphQxxsCM0KxyxpVPHBVQXdAL3+Yurow==", - "requires": { + "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "d3-voronoi": "1.1.2" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "@types/formatcoords": { + "node_modules/@types/formatcoords": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@types/formatcoords/-/formatcoords-1.1.0.tgz", "integrity": "sha512-T20OHYACraNS/xCoBEmvtUYLc/eYjXaGGDpPFVAyuwarE9KHSGX8DVb3KNBKZ5RQz7fB7qXazZj13520eDSODw==", "dev": true }, - "@types/geojson": { + "node_modules/@types/geojson": { "version": "7946.0.10", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==", "dev": true }, - "@types/leaflet": { + "node_modules/@types/leaflet": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.0.tgz", "integrity": "sha512-7LeOSj7EloC5UcyOMo+1kc3S1UT3MjJxwqsMT1d2PTyvQz53w0Y0oSSk9nwZnOZubCmBvpSNGceucxiq+ZPEUw==", "dev": true, - "requires": { + "dependencies": { "@types/geojson": "*" } }, - "@types/node": { + "node_modules/@types/node": { "version": "18.16.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.1.tgz", "integrity": "sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA==", "dev": true }, - "@types/sortablejs": { + "node_modules/@types/sortablejs": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.0.tgz", "integrity": "sha512-qrhtM7M41EhH4tZQTNw2/RJkxllBx3reiJpTbgWCM2Dx0U1sZ6LwKp9lfNln9uqE26ZMKUaPEYaD4rzvOWYtZw==", "dev": true }, - "@types/svg-injector": { + "node_modules/@types/svg-injector": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/svg-injector/-/svg-injector-0.0.29.tgz", "integrity": "sha512-tNvoN0Xk2si6IfxQI/PqInipOuCyXkDZhCh9Vc4aFv/l1DhIBfTFbXRXYUHBAGXaUNMOCHEtg9475O9J+4NXOg==", "dev": true }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { + "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "accepts": { + "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { + "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "acorn": { + "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "acorn-node": { + "node_modules/acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, - "requires": { + "dependencies": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", "xtend": "^4.0.2" } }, - "acorn-walk": { + "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, - "amdefine": { + "node_modules/amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.2" + } }, - "ansi-regex": { + "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "ansi-styles": { + "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { + "dependencies": { "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "any-promise": { + "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, - "anymatch": { + "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "requires": { + "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "array-flatten": { + "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, - "array-from": { + "node_modules/array-from": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==", "dev": true }, - "asap": { + "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, - "asn1.js": { + "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "assert": { + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, - "requires": { + "dependencies": { "object-assign": "^4.1.1", "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } } }, - "async": { + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, - "available-typed-arrays": { + "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "babel-code-frame": { + "node_modules/babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", "dev": true, - "requires": { + "dependencies": { "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true - } } }, - "babel-messages": { + "node_modules/babel-code-frame/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", "dev": true, - "requires": { + "dependencies": { "babel-runtime": "^6.22.0" } }, - "babel-plugin-import-to-require": { + "node_modules/babel-plugin-import-to-require": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-import-to-require/-/babel-plugin-import-to-require-1.0.0.tgz", "integrity": "sha512-dc843CwrFivjO8AVgxcHvxl0cb7J7Ed8ZGFP8+PjH3X1CnyzYtAU1WL1349m9Wc/+oqk4ETx2+cIEO2jlp3XyQ==", "dev": true, - "requires": { + "dependencies": { "babel-template": "^6.26.0" } }, - "babel-plugin-polyfill-corejs2": { + "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "babel-plugin-polyfill-corejs3": { + "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3", "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "babel-plugin-polyfill-regenerator": { + "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "babel-runtime": { + "node_modules/babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", "dev": true, - "requires": { + "dependencies": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } } }, - "babel-template": { + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "node_modules/babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", "dev": true, - "requires": { + "dependencies": { "babel-runtime": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", @@ -3003,12 +3963,12 @@ "lodash": "^4.17.4" } }, - "babel-traverse": { + "node_modules/babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", "dev": true, - "requires": { + "dependencies": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", @@ -3018,84 +3978,115 @@ "globals": "^9.18.0", "invariant": "^2.2.2", "lodash": "^4.17.4" - }, - "dependencies": { - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - } } }, - "babel-types": { + "node_modules/babel-traverse/node_modules/globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", "dev": true, - "requires": { + "dependencies": { "babel-runtime": "^6.26.0", "esutils": "^2.0.2", "lodash": "^4.17.4", "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", - "dev": true - } } }, - "babelify": { + "node_modules/babel-types/node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babelify": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } }, - "babylon": { + "node_modules/babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true + "dev": true, + "bin": { + "babylon": "bin/babylon.js" + } }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "base64-js": { + "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "basic-auth": { + "node_modules/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "requires": { + "dependencies": { "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" } }, - "binary-extensions": { + "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "bn.js": { + "node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "dev": true }, - "body-parser": { + "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "requires": { + "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", @@ -3109,107 +4100,136 @@ "type-is": "~1.6.18", "unpipe": "1.0.0" }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "brace-expansion": { + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/body-parser/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "braces": { + "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "requires": { + "dependencies": { "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "brorand": { + "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, - "browser-pack": { + "node_modules/browser-pack": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "combine-source-map": "~0.8.0", "defined": "^1.0.0", + "JSONStream": "^1.0.3", "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" + }, + "bin": { + "browser-pack": "bin/cmd.js" } }, - "browser-pack-flat": { + "node_modules/browser-pack-flat": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/browser-pack-flat/-/browser-pack-flat-3.5.0.tgz", "integrity": "sha512-u3iJUjs+TC/NGIL2GLyIcn5ppoNZXhTWqSW/gQbGIGvQiXXCQQzr5VWfACFraXQn2JrDlyRnKLeOs5AWXzKI6A==", "dev": true, - "requires": { - "JSONStream": "^1.3.2", + "dependencies": { "combine-source-map": "^0.8.0", "convert-source-map": "^1.5.1", "count-lines": "^0.1.2", @@ -3217,6 +4237,7 @@ "estree-is-member-expression": "^1.0.0", "estree-is-require": "^1.0.0", "esutils": "^2.0.2", + "JSONStream": "^1.3.2", "path-parse": "^1.0.5", "scope-analyzer": "^2.0.0", "stream-combiner": "^0.2.2", @@ -3225,64 +4246,67 @@ "umd": "^3.0.3", "wrap-comment": "^1.0.0" }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - } + "bin": { + "browser-pack-flat": "cli.js" } }, - "browser-process-hrtime": { + "node_modules/browser-pack-flat/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/browser-pack-flat/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/browser-pack-flat/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/browser-process-hrtime": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", "dev": true }, - "browser-resolve": { + "node_modules/browser-resolve": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, - "requires": { + "dependencies": { "resolve": "^1.17.0" } }, - "browser-unpack": { + "node_modules/browser-unpack": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.4.2.tgz", "integrity": "sha512-uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.5.2", "concat-stream": "^1.5.0", "minimist": "^1.1.1" + }, + "bin": { + "browser-unpack": "bin/cmd.js" } }, - "browserify": { + "node_modules/browserify": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^2.0.0", @@ -3304,6 +4328,7 @@ "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.2.1", + "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp-classic": "^0.5.2", "module-deps": "^6.2.3", @@ -3330,14 +4355,20 @@ "util": "~0.12.0", "vm-browserify": "^1.0.0", "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8" } }, - "browserify-aes": { + "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "requires": { + "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", @@ -3346,45 +4377,45 @@ "safe-buffer": "^5.0.1" } }, - "browserify-cipher": { + "node_modules/browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, - "requires": { + "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, - "browserify-des": { + "node_modules/browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "browserify-rsa": { + "node_modules/browserify-rsa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, - "browserify-sign": { + "node_modules/browserify-sign": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", @@ -3394,273 +4425,352 @@ "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } } }, - "browserify-zlib": { + "node_modules/browserify-sign/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, - "requires": { + "dependencies": { "pako": "~1.0.5" } }, - "browserslist": { + "node_modules/browserslist": { "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { "caniuse-lite": "^1.0.30001449", "electron-to-chromium": "^1.4.284", "node-releases": "^2.0.8", "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "buffer": { + "node_modules/buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, - "requires": { + "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, - "buffer-crc32": { + "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } }, - "buffer-from": { + "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "buffer-xor": { + "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true }, - "builtin-status-codes": { + "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true }, - "bundle-collapser": { + "node_modules/bundle-collapser": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.4.0.tgz", "integrity": "sha512-Gd3K3+3KI1Utuk+gwAvuOVOjT/2XLGL8tU6FwDKk04LlOZkYfT0pwQllsG1Dv8RRhgcjNxZSDmmSXb0AOkwSwg==", "dev": true, - "requires": { + "dependencies": { "browser-pack": "^6.0.2", "browser-unpack": "^1.1.0", "concat-stream": "^1.5.0", "falafel": "^2.1.0", "minimist": "^1.1.1", "through2": "^2.0.0" + }, + "bin": { + "bundle-collapser": "bin/cmd.js" } }, - "bytes": { + "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } }, - "cached-path-relative": { + "node_modules/cached-path-relative": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", "dev": true }, - "call-bind": { + "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { + "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "caniuse-lite": { + "node_modules/caniuse-lite": { "version": "1.0.30001481", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", - "dev": true + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, - "chalk": { + "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { + "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "chokidar": { + "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "cipher-base": { + "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, - "cliui": { + "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "requires": { + "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "color-convert": { + "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { + "dependencies": { "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "combine-source-map": { + "node_modules/combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==", "dev": true, - "requires": { + "dependencies": { "convert-source-map": "~1.1.0", "inline-source-map": "~0.6.0", "lodash.memoize": "~3.0.3", "source-map": "~0.5.3" } }, - "commander": { + "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "common-shakeify": { + "node_modules/common-shakeify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/common-shakeify/-/common-shakeify-1.1.2.tgz", "integrity": "sha512-r2zRKPCbCx1l9BT8nVGZssZXrH9jeLl5qfHKxUwSBT7Kr9l1jSjZsItZE/jXo+GYDyO3kQfsyV7Poid475MgWQ==", "dev": true, - "requires": { + "dependencies": { "@goto-bus-stop/common-shake": "^2.3.0", "convert-source-map": "^1.5.1", "through2": "^2.0.3", "transform-ast": "^2.4.3", "wrap-comment": "^1.0.1" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - } } }, - "concat-map": { + "node_modules/common-shakeify/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "concat-stream": { + "node_modules/concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, - "requires": { + "engines": [ + "node >= 0.8" + ], + "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, - "concaveman": { + "node_modules/concaveman": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/concaveman/-/concaveman-1.2.1.tgz", "integrity": "sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw==", - "requires": { + "dependencies": { "point-in-polygon": "^1.1.0", "rbush": "^3.0.1", "robust-predicates": "^2.0.4", "tinyqueue": "^2.0.3" - }, - "dependencies": { - "quickselect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" - }, - "rbush": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", - "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", - "requires": { - "quickselect": "^2.0.0" - } - } } }, - "concurrently": { + "node_modules/concaveman/node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "node_modules/concaveman/node_modules/rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "dependencies": { + "quickselect": "^2.0.0" + } + }, + "node_modules/concurrently": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.1.0", "date-fns": "^2.29.1", "lodash": "^4.17.21", @@ -3671,122 +4781,155 @@ "tree-kill": "^1.2.2", "yargs": "^17.3.1" }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "console-browserify": { + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, - "constants-browserify": { + "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", "dev": true }, - "content-disposition": { + "node_modules/content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "engines": { + "node": ">= 0.6" + } }, - "content-type": { + "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } }, - "convert-source-map": { + "node_modules/convert-source-map": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==", "dev": true }, - "cookie": { + "node_modules/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } }, - "cookie-parser": { + "node_modules/cookie-parser": { "version": "1.4.6", "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", - "requires": { + "dependencies": { "cookie": "0.4.1", "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" } }, - "cookie-signature": { + "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "core-js": { + "node_modules/core-js": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true }, - "core-js-compat": { + "node_modules/core-js-compat": { "version": "3.30.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", "dev": true, - "requires": { + "dependencies": { "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "core-util-is": { + "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "count-lines": { + "node_modules/count-lines": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/count-lines/-/count-lines-0.1.2.tgz", "integrity": "sha512-YS8P4UYXX/hrDyLU3r/A5OcCNwdNbJFJckbe8j+x2Jhxsr2J4/rYl0sDwOljLZL7Uxc4s7mRSNcQD8dSjobz+g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "cp": { + "node_modules/cp": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/cp/-/cp-0.2.0.tgz", "integrity": "sha512-4ftCvShHjIZG/zzomHyunNpBof3sOFTTmU6s6q9DdqAL/ANqrKV3pr6Z6kVfBI4hjn59DFLImrBqn7GuuMqSZA==", "dev": true }, - "create-ecdh": { + "node_modules/create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "create-hash": { + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", @@ -3794,12 +4937,12 @@ "sha.js": "^2.4.0" } }, - "create-hmac": { + "node_modules/create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", @@ -3808,12 +4951,12 @@ "sha.js": "^2.4.8" } }, - "crypto-browserify": { + "node_modules/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, - "requires": { + "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", @@ -3825,232 +4968,275 @@ "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" } }, - "d": { + "node_modules/d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, - "requires": { + "dependencies": { "es5-ext": "^0.10.50", "type": "^1.0.1" } }, - "d3-array": { + "node_modules/d3-array": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" }, - "d3-geo": { + "node_modules/d3-geo": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.7.1.tgz", "integrity": "sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw==", - "requires": { + "dependencies": { "d3-array": "1" } }, - "d3-voronoi": { + "node_modules/d3-voronoi": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", "integrity": "sha512-RhGS1u2vavcO7ay7ZNAPo4xeDh/VYeGof3x5ZLJBQgYhLegxr3s5IykvWmJ94FTU6mcbtp4sloqZ54mP6R4Utw==" }, - "dash-ast": { + "node_modules/dash-ast": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", "dev": true }, - "date-fns": { + "node_modules/date-fns": { "version": "2.29.3", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } }, - "debug": { + "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { + "dependencies": { "ms": "2.0.0" } }, - "dedent": { + "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, - "deep-equal": { + "node_modules/deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { + "dependencies": { "is-arguments": "^1.0.4", "is-date-object": "^1.0.1", "is-regex": "^1.0.4", "object-is": "^1.0.1", "object-keys": "^1.1.1", "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "define-properties": { + "node_modules/define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "requires": { + "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "defined": { + "node_modules/defined": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "density-clustering": { + "node_modules/density-clustering": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/density-clustering/-/density-clustering-1.3.0.tgz", "integrity": "sha512-icpmBubVTwLnsaor9qH/4tG5+7+f61VcqMN3V3pm9sxxSCt2Jcs0zWOgwZW9ARJYaKD3FumIgHiMOcIMRRAzFQ==" }, - "depd": { + "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } }, - "deps-sort": { + "node_modules/deps-sort": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, - "requires": { + "dependencies": { "JSONStream": "^1.0.3", "shasum-object": "^1.0.0", "subarg": "^1.0.0", "through2": "^2.0.0" + }, + "bin": { + "deps-sort": "bin/cmd.js" } }, - "des.js": { + "node_modules/des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, - "destroy": { + "node_modules/destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" }, - "detective": { + "node_modules/detective": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.8.2", "defined": "^1.0.0", "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" } }, - "diffie-hellman": { + "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "domain-browser": { + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } }, - "duplexer": { + "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, - "duplexer2": { + "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "^2.0.2" } }, - "duplexify": { + "node_modules/duplexify": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", "dev": true, - "requires": { + "dependencies": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", "readable-stream": "^3.1.1", "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, - "earcut": { + "node_modules/duplexify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/earcut": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" }, - "ee-first": { + "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, - "ejs": { + "node_modules/ejs": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", - "requires": { + "dependencies": { "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" } }, - "electron-to-chromium": { + "node_modules/electron-to-chromium": { "version": "1.4.371", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.371.tgz", "integrity": "sha512-jlBzY4tFcJaiUjzhRTCWAqRvTO/fWzjA3Bls0mykzGZ7zvcMP7h05W6UcgzfT9Ca1SW2xyKDOFRyI0pQeRNZGw==", "dev": true }, - "elliptic": { + "node_modules/elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", @@ -4058,79 +5244,84 @@ "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - } } }, - "emoji-regex": { + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/elliptic/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "encodeurl": { + "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } }, - "end-of-stream": { + "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "requires": { + "dependencies": { "once": "^1.4.0" } }, - "error-ex": { + "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { + "dependencies": { "is-arrayish": "^0.2.1" } }, - "es5-ext": { + "node_modules/es5-ext": { "version": "0.10.62", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, - "requires": { + "hasInstallScript": true, + "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "es6-iterator": { + "node_modules/es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "^0.10.35", "es6-symbol": "^3.1.1" } }, - "es6-map": { + "node_modules/es6-map": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "~0.10.14", "es6-iterator": "~2.0.1", @@ -4139,12 +5330,12 @@ "event-emitter": "~0.3.5" } }, - "es6-set": { + "node_modules/es6-set": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", "dev": true, - "requires": { + "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", "es6-iterator": "~2.0.3", @@ -4152,99 +5343,122 @@ "event-emitter": "^0.3.5", "type": "^2.7.2" }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } + "engines": { + "node": ">=0.12" } }, - "es6-symbol": { + "node_modules/es6-set/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, - "requires": { + "dependencies": { "d": "^1.0.1", "ext": "^1.1.2" } }, - "es6-weak-map": { + "node_modules/es6-weak-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "^0.10.46", "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.1" } }, - "escalade": { + "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "escape-html": { + "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, - "escape-string-regexp": { + "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "escodegen": { + "node_modules/escodegen": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "requires": { + "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "source-map": "~0.6.1" + "esutils": "^2.0.2" }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "escope": { + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escope": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", "dev": true, - "requires": { + "dependencies": { "es6-map": "^0.1.3", "es6-weak-map": "^2.0.1", "esrecurse": "^4.1.0", "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=0.4.0" } }, - "esmify": { + "node_modules/esmify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/esmify/-/esmify-2.1.1.tgz", "integrity": "sha512-GyOVgjG7sNyYB5Mbo15Ll4aGrcXZzZ3LI22rbLOjCI7L/wYelzQpBHRZkZkqbPNZ/QIRilcaHqzgNCLcEsi1lQ==", "dev": true, - "requires": { + "dependencies": { "@babel/core": "^7.2.2", "@babel/plugin-syntax-async-generators": "^7.2.0", "@babel/plugin-syntax-dynamic-import": "^7.2.0", @@ -4257,88 +5471,108 @@ "through2": "^2.0.5" } }, - "esprima": { + "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "esrecurse": { + "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "requires": { + "dependencies": { "estraverse": "^5.2.0" }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "engines": { + "node": ">=4.0" } }, - "estraverse": { + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "estree-is-function": { + "node_modules/estree-is-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", "dev": true }, - "estree-is-identifier": { + "node_modules/estree-is-identifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-identifier/-/estree-is-identifier-1.0.0.tgz", "integrity": "sha512-2BDRGrkQJV/NhCAmmE33A35WAaxq3WQaGHgQuD//7orGWfpFqj8Srkwvx0TH+20yIdOF1yMQwi8anv5ISec2AQ==", "dev": true }, - "estree-is-member-expression": { + "node_modules/estree-is-member-expression": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz", "integrity": "sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg==", "dev": true }, - "estree-is-require": { + "node_modules/estree-is-require": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-require/-/estree-is-require-1.0.0.tgz", "integrity": "sha512-oWxQdSEmnUwNZsDQYiBNpVxKEhMmsJQSSxnDrwsr1MWtooCLfhgzsNGzmokdmfK0EzEIS5V4LPvqxv1Kmb1vvA==", "dev": true, - "requires": { + "dependencies": { "estree-is-identifier": "^1.0.0" } }, - "esutils": { + "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "etag": { + "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } }, - "event-emitter": { + "node_modules/event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "~0.10.14" } }, - "event-stream": { + "node_modules/event-stream": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", - "requires": { + "dependencies": { "duplexer": "^0.1.1", "from": "^0.1.7", "map-stream": "0.0.7", @@ -4348,32 +5582,35 @@ "through": "^2.3.8" } }, - "events": { + "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.x" + } }, - "events-intercept": { + "node_modules/events-intercept": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/events-intercept/-/events-intercept-2.0.0.tgz", "integrity": "sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==" }, - "evp_bytestokey": { + "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, - "requires": { + "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, - "express": { + "node_modules/express": { "version": "4.16.4", "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { + "dependencies": { "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", @@ -4405,157 +5642,176 @@ "utils-merge": "1.0.1", "vary": "~1.1.2" }, - "dependencies": { - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==" - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - } + "engines": { + "node": ">= 0.10.0" } }, - "express-basic-auth": { + "node_modules/express-basic-auth": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.2.1.tgz", "integrity": "sha512-L6YQ1wQ/mNjVLAmK3AG1RK6VkokA1BIY6wmiH304Xtt/cLTps40EusZsU1Uop+v9lTDPxdtzbFmdXfFO3KEnwA==", - "requires": { + "dependencies": { "basic-auth": "^2.0.1" } }, - "ext": { + "node_modules/express/node_modules/body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", + "dependencies": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "dependencies": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, - "requires": { - "type": "^2.7.2" - }, "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } + "type": "^2.7.2" } }, - "extend": { + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "falafel": { + "node_modules/falafel": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", "dev": true, - "requires": { + "dependencies": { "acorn": "^7.1.1", "isarray": "^2.0.1" }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } + "engines": { + "node": ">=0.4.0" } }, - "fast-safe-stringify": { + "node_modules/falafel/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, - "fd-slicer": { + "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "requires": { + "dependencies": { "pend": "~1.2.0" } }, - "filelist": { + "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "requires": { - "minimatch": "^5.0.1" - }, "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", - "requires": { - "brace-expansion": "^2.0.1" - } - } + "minimatch": "^5.0.1" } }, - "fill-range": { + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "requires": { + "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "finalhandler": { + "node_modules/finalhandler": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { + "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -4563,738 +5819,964 @@ "parseurl": "~1.3.2", "statuses": "~1.4.0", "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "for-each": { + "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "requires": { + "dependencies": { "is-callable": "^1.1.3" } }, - "formatcoords": { + "node_modules/formatcoords": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/formatcoords/-/formatcoords-1.1.3.tgz", "integrity": "sha512-Ittg5/AsYFCOtcFGPLSmVpP56a8Ionmv4Ys69UmCAdvBnqVzvVVbkZMnjWEmXrZvnmoGQE8YI3RhnxbMQFdYSw==", "dev": true }, - "forwarded": { + "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } }, - "fresh": { + "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } }, - "from": { + "node_modules/from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" }, - "from2": { + "node_modules/from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" } }, - "from2-string": { + "node_modules/from2-string": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/from2-string/-/from2-string-1.1.0.tgz", "integrity": "sha512-m8vCh+KnXXXBtfF2VUbiYlQ+nczLcntB0BrtNgpmLkHylhObe9WF1b2LZjBBzrZzA6P4mkEla6ZYQoOUTG8cYA==", "dev": true, - "requires": { + "dependencies": { "from2": "^2.0.3" } }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "fsevents": { + "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "optional": true + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "functions-have-names": { + "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "gensync": { + "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "geodesy": { + "node_modules/geodesy": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/geodesy/-/geodesy-1.1.3.tgz", "integrity": "sha512-H/0XSd1KjKZGZ2YGZcOYzRyY/foYAawwTEumNSo+YUwf+u5d4CfvBRg2i2Qimrx9yUEjWR8hLvMnhghuVFN0Zg==", "dev": true }, - "geojson-equality": { + "node_modules/geojson-equality": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/geojson-equality/-/geojson-equality-0.1.6.tgz", "integrity": "sha512-TqG8YbqizP3EfwP5Uw4aLu6pKkg6JQK9uq/XZ1lXQntvTHD1BBKJWhNpJ2M0ax6TuWMP3oyx6Oq7FCIfznrgpQ==", - "requires": { + "dependencies": { "deep-equal": "^1.0.0" } }, - "geojson-rbush": { + "node_modules/geojson-rbush": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.2.0.tgz", "integrity": "sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==", - "requires": { + "dependencies": { "@turf/bbox": "*", "@turf/helpers": "6.x", "@turf/meta": "6.x", "@types/geojson": "7946.0.8", "rbush": "^3.0.1" - }, - "dependencies": { - "@types/geojson": { - "version": "7946.0.8", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", - "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" - }, - "quickselect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" - }, - "rbush": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", - "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", - "requires": { - "quickselect": "^2.0.0" - } - } } }, - "get-assigned-identifiers": { + "node_modules/geojson-rbush/node_modules/@types/geojson": { + "version": "7946.0.8", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", + "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" + }, + "node_modules/geojson-rbush/node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "node_modules/geojson-rbush/node_modules/rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "dependencies": { + "quickselect": "^2.0.0" + } + }, + "node_modules/get-assigned-identifiers": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", "dev": true }, - "get-caller-file": { + "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "get-intrinsic": { + "node_modules/get-intrinsic": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { + "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "glob": { + "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "requires": { + "dependencies": { "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "globals": { + "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "gopd": { + "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "requires": { + "dependencies": { "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has": { + "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { + "dependencies": { "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "has-ansi": { + "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^2.0.0" }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "has-flag": { + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } }, - "has-property-descriptors": { + "node_modules/has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { + "dependencies": { "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-symbols": { + "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-tostringtag": { + "node_modules/has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { + "dependencies": { "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "hash-base": { + "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "engines": { + "node": ">=4" } }, - "hash.js": { + "node_modules/hash-base/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, - "hmac-drbg": { + "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, - "requires": { + "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, - "htmlescape": { + "node_modules/htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10" + } }, - "http-errors": { + "node_modules/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "requires": { + "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "https-browserify": { + "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true }, - "iconv-lite": { + "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { + "dependencies": { "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "ieee754": { + "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "ignore-by-default": { + "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, - "inline-source-map": { + "node_modules/inline-source-map": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==", "dev": true, - "requires": { + "dependencies": { "source-map": "~0.5.3" } }, - "insert-module-globals": { + "node_modules/insert-module-globals": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", "undeclared-identifiers": "^1.1.2", "xtend": "^4.0.0" + }, + "bin": { + "insert-module-globals": "bin/cmd.js" } }, - "invariant": { + "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, - "requires": { + "dependencies": { "loose-envify": "^1.0.0" } }, - "ipaddr.js": { + "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } }, - "is-arguments": { + "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "is-binary-path": { + "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "requires": { + "dependencies": { "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-buffer": { + "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-callable": { + "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-core-module": { + "node_modules/is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, - "requires": { + "dependencies": { "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-date-object": { + "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "is-generator-function": { + "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.12.0" + } }, - "is-regex": { + "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-typed-array": { + "node_modules/is-typed-array": { "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "dev": true, - "requires": { + "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-utf8": { + "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true }, - "isarray": { + "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, - "jake": { + "node_modules/jake": { "version": "10.8.5", "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "requires": { + "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", "filelist": "^1.0.1", "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" } }, - "js-sha256": { + "node_modules/js-sha256": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.10.1.tgz", "integrity": "sha512-5obBtsz9301ULlsgggLg542s/jqtddfOpV5KJc4hajc9JV8GeY2gZHSVpYBn4nWqAUTJ9v+xwtbJ1mIBgIH5Vw==" }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "jsesc": { + "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } }, - "json5": { + "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } }, - "jsonparse": { + "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true + "dev": true, + "engines": [ + "node >= 0.2.0" + ] }, - "labeled-stream-splicer": { + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "stream-splicer": "^2.0.0" } }, - "leaflet": { + "node_modules/leaflet": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.3.tgz", "integrity": "sha512-iB2cR9vAkDOu5l3HAay2obcUHZ7xwUBBjph8+PGtmW/2lYhbLizWtG7nTeYht36WfOslixQF9D/uSIzhZgGMfQ==", "dev": true }, - "leaflet-control-mini-map": { + "node_modules/leaflet-control-mini-map": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/leaflet-control-mini-map/-/leaflet-control-mini-map-0.4.0.tgz", "integrity": "sha512-qnetYIYFqlrAbX7MaGsAkBsuA2fg3Z4xDRlEXJN1wSrnhNsIhQUzXt7Z3vapdEzx4r7VUqWTaqHYd7eY5C6Gfw==", - "dev": true + "dev": true, + "peerDependencies": { + "leaflet": ">=1.7.0" + } }, - "leaflet-gesture-handling": { + "node_modules/leaflet-gesture-handling": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/leaflet-gesture-handling/-/leaflet-gesture-handling-1.2.2.tgz", "integrity": "sha512-Blf5V4PoNphWkzL7Y1qge+Spkd4OCQ2atjwUNhMhLIcjKzPcBH++x/lwOinaR9jSqLWqJ6oKYO8d0XdTffy4hQ==" }, - "leaflet-path-drag": { + "node_modules/leaflet-path-drag": { "version": "1.8.0-beta.3", "resolved": "https://registry.npmjs.org/leaflet-path-drag/-/leaflet-path-drag-1.8.0-beta.3.tgz", "integrity": "sha512-kpZ6sPOKlR+m+VChIzZZ7XFH4C+VGTrAxgnM4UN5iYl7lJ00iDOxS+r717bDf/xFFHB6n2jpUp9vvzjjteMpeQ==", "dev": true }, - "leaflet.nauticscale": { + "node_modules/leaflet.nauticscale": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/leaflet.nauticscale/-/leaflet.nauticscale-1.1.0.tgz", "integrity": "sha512-kJqOVuY0bk3CjSWb1CUYsjXiM+W1K0TrlJmMjl/wVubKK2y0PZ+XxkIyD6cxVsKQGlJvLGMvrSqaYdj5LW1O1Q==", "dev": true }, - "lodash": { + "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.assign": { + "node_modules/lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" }, - "lodash.debounce": { + "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "lodash.memoize": { + "node_modules/lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==", "dev": true }, - "loose-envify": { + "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, - "requires": { + "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "lru-cache": { + "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "requires": { + "dependencies": { "yallist": "^3.0.2" } }, - "magic-string": { + "node_modules/magic-string": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", "integrity": "sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA==", "dev": true, - "requires": { + "dependencies": { "sourcemap-codec": "^1.4.1" } }, - "map-stream": { + "node_modules/map-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==" }, - "md5.js": { + "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, - "requires": { + "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "media-typer": { + "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } }, - "merge-descriptors": { + "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, - "merge-source-map": { + "node_modules/merge-source-map": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", "dev": true, - "requires": { + "dependencies": { "source-map": "^0.5.6" } }, - "methods": { + "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } }, - "miller-rabin": { + "node_modules/miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } + "bin": { + "miller-rabin": "bin/miller-rabin" } }, - "mime": { + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "bin": { + "mime": "cli.js" + } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { + "dependencies": { "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "mingo": { + "node_modules/mingo": { "version": "6.2.7", "resolved": "https://registry.npmjs.org/mingo/-/mingo-6.2.7.tgz", "integrity": "sha512-r+yKmrZ+6SjwGxSot+/3S8sP9+LCxWNueR6xppMx7BzV60OegjbeklWAf/UveyQi8PDW8g/mwrQSHZVY/5jBJQ==" }, - "minify-stream": { + "node_modules/minify-stream": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/minify-stream/-/minify-stream-2.1.0.tgz", "integrity": "sha512-P5xE4EQRkn7Td54VGcgfDMFx1jmKPPIXCdcMfrbXS6cNHK4dO1LXwtYFb48hHrSmZfT+jlGImvHgSZEkbpNtCw==", "dev": true, - "requires": { + "dependencies": { "concat-stream": "^2.0.0", "convert-source-map": "^1.5.0", "duplexify": "^4.1.1", @@ -5302,94 +6784,115 @@ "terser": "^4.7.0", "xtend": "^4.0.1" }, - "dependencies": { - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - } + "engines": { + "node": ">= 6" } }, - "minimalistic-assert": { + "node_modules/minify-stream/node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/minify-stream/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/minify-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minify-stream/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minify-stream/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "minimalistic-crypto-utils": { + "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true }, - "minimatch": { + "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { + "node_modules/minimist": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "mkdirp-classic": { + "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, - "module-deps": { + "node_modules/module-deps": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "browser-resolve": "^2.0.0", "cached-path-relative": "^1.0.2", "concat-stream": "~1.6.0", @@ -5397,6 +6900,7 @@ "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", + "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", @@ -5404,145 +6908,186 @@ "subarg": "^1.0.0", "through2": "^2.0.0", "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8.0" } }, - "morgan": { + "node_modules/morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", - "requires": { + "dependencies": { "basic-auth": "~2.0.0", "debug": "2.6.9", "depd": "~1.1.2", "on-finished": "~2.3.0", "on-headers": "~1.0.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "ms": { + "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "multi-stage-sourcemap": { + "node_modules/multi-stage-sourcemap": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz", "integrity": "sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ==", "dev": true, - "requires": { - "source-map": "^0.1.34" - }, "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "source-map": "^0.1.34" } }, - "multisplice": { + "node_modules/multi-stage-sourcemap/node_modules/source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dev": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/multisplice": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/multisplice/-/multisplice-1.0.0.tgz", "integrity": "sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA==", "dev": true }, - "mutexify": { + "node_modules/mutexify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.4.0.tgz", "integrity": "sha512-pbYSsOrSB/AKN5h/WzzLRMFgZhClWccf2XIB4RSMC8JbquiB0e0/SH5AIfdQMdyHmYtv4seU7yV/TvAwPLJ1Yg==", "dev": true, - "requires": { + "dependencies": { "queue-tick": "^1.0.0" } }, - "nanobench": { + "node_modules/nanobench": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nanobench/-/nanobench-2.1.1.tgz", "integrity": "sha512-z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A==", "dev": true, - "requires": { + "dependencies": { "browser-process-hrtime": "^0.1.2", "chalk": "^1.1.3", "mutexify": "^1.1.0", "pretty-hrtime": "^1.0.2" }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true - } + "bin": { + "nanobench": "run.js", + "nanobench-compare": "compare.js" } }, - "negotiator": { + "node_modules/nanobench/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanobench/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanobench/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanobench/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanobench/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } }, - "next-tick": { + "node_modules/next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", "dev": true }, - "node-fetch": { + "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "requires": { + "dependencies": { "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node-releases": { + "node_modules/node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", "dev": true }, - "nodemon": { + "node_modules/nodemon": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", "dev": true, - "requires": { + "dependencies": { "chokidar": "^3.5.2", "debug": "^3.2.7", "ignore-by-default": "^1.0.1", @@ -5554,142 +7099,189 @@ "touch": "^3.1.0", "undefsafe": "^2.0.5" }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" } }, - "nopt": { + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "dev": true, - "requires": { + "dependencies": { "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" } }, - "normalize-path": { + "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } }, - "object-inspect": { + "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "object-is": { + "node_modules/object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } }, - "on-finished": { + "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "requires": { + "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "on-headers": { + "node_modules/on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "requires": { + "dependencies": { "wrappy": "1" } }, - "os-browserify": { + "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, - "outpipe": { + "node_modules/outpipe": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", "integrity": "sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==", "dev": true, - "requires": { + "dependencies": { "shell-quote": "^1.4.2" } }, - "pako": { + "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "parents": { + "node_modules/parents": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==", "dev": true, - "requires": { + "dependencies": { "path-platform": "~0.11.15" } }, - "parse-asn1": { + "node_modules/parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, - "requires": { + "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", "evp_bytestokey": "^1.0.0", @@ -5697,289 +7289,340 @@ "safe-buffer": "^5.1.1" } }, - "parse-json": { + "node_modules/parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, - "requires": { + "dependencies": { "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "parseurl": { + "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } }, - "path-browserify": { + "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-platform": { + "node_modules/path-platform": { "version": "0.11.15", "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "path-to-regexp": { + "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, - "pause-stream": { + "node_modules/pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "requires": { + "dependencies": { "through": "~2.3" } }, - "pbkdf2": { + "node_modules/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, - "requires": { + "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", "ripemd160": "^2.0.1", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" } }, - "pend": { + "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, - "picocolors": { + "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "picomatch": { + "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "point-in-polygon": { + "node_modules/point-in-polygon": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==" }, - "polygon-clipping": { + "node_modules/polygon-clipping": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz", "integrity": "sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==", - "requires": { + "dependencies": { "splaytree": "^3.1.0" } }, - "pretty-hrtime": { + "node_modules/pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "process": { + "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6.0" + } }, - "process-nextick-args": { + "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "promise": { + "node_modules/promise": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "requires": { + "dependencies": { "asap": "~2.0.6" } }, - "proxy-addr": { + "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { + "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" } }, - "pstree.remy": { + "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true }, - "public-encrypt": { + "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "punycode": { + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true }, - "qs": { + "node_modules/qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "engines": { + "node": ">=0.6" + } }, - "querystring": { + "node_modules/querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } }, - "querystring-es3": { + "node_modules/querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.x" + } }, - "queue-tick": { + "node_modules/queue-tick": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", "dev": true }, - "quickselect": { + "node_modules/quickselect": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==" }, - "randombytes": { + "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "^5.1.0" } }, - "randomfill": { + "node_modules/randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, - "requires": { + "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, - "range-parser": { + "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } }, - "raw-body": { + "node_modules/raw-body": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "requires": { + "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - } + "engines": { + "node": ">= 0.8" } }, - "rbush": { + "node_modules/raw-body/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/raw-body/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rbush": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", - "requires": { + "dependencies": { "quickselect": "^1.0.1" } }, - "read-only-stream": { + "node_modules/read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "^2.0.2" } }, - "readable-stream": { + "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "requires": { + "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", @@ -5987,173 +7630,206 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, - "readdirp": { + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": { + "dependencies": { "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "regenerate": { + "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, - "regenerate-unicode-properties": { + "node_modules/regenerate-unicode-properties": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, - "requires": { + "dependencies": { "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" } }, - "regenerator-runtime": { + "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, - "regenerator-transform": { + "node_modules/regenerator-transform": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dev": true, - "requires": { + "dependencies": { "@babel/runtime": "^7.8.4" } }, - "regexp.prototype.flags": { + "node_modules/regexp.prototype.flags": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "regexpu-core": { + "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, - "requires": { + "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" } }, - "regjsparser": { + "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, - "requires": { + "dependencies": { "jsesc": "~0.5.0" }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } + "bin": { + "regjsparser": "bin/parser" } }, - "require-directory": { + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "requirejs": { + "node_modules/requirejs": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", - "dev": true + "dev": true, + "bin": { + "r_js": "bin/r.js", + "r.js": "bin/r.js" + }, + "engines": { + "node": ">=0.4.0" + } }, - "resolve": { + "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, - "requires": { + "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "ripemd160": { + "node_modules/ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, - "requires": { + "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, - "robust-predicates": { + "node_modules/robust-predicates": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz", "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==" }, - "rxjs": { + "node_modules/rxjs": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dev": true, - "requires": { + "dependencies": { "tslib": "^2.1.0" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "save": { + "node_modules/save": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/save/-/save-2.9.0.tgz", "integrity": "sha512-eg8+g8CjvehE/2C6EbLdtK1pINVD27pcJLj4M9PjWWhoeha/y5bWf4dp/0RF+OzbKTcG1bae9qi3PAqiR8CJTg==", - "requires": { + "dependencies": { "async": "^3.2.2", "event-stream": "^4.0.1", "lodash.assign": "^4.2.0", "mingo": "^6.1.0" } }, - "scope-analyzer": { + "node_modules/scope-analyzer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", "dev": true, - "requires": { + "dependencies": { "array-from": "^2.1.1", "dash-ast": "^2.0.1", "es6-map": "^0.1.5", @@ -6161,27 +7837,28 @@ "es6-symbol": "^3.1.1", "estree-is-function": "^1.0.0", "get-assigned-identifiers": "^1.1.0" - }, - "dependencies": { - "dash-ast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", - "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", - "dev": true - } } }, - "semver": { + "node_modules/scope-analyzer/node_modules/dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, - "send": { + "node_modules/send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { + "dependencies": { "debug": "2.6.9", "depd": "~1.1.2", "destroy": "~1.0.4", @@ -6195,409 +7872,499 @@ "on-finished": "~2.3.0", "range-parser": "~1.2.0", "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "serve-static": { + "node_modules/serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { + "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.2", "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "setprototypeof": { + "node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, - "sha.js": { + "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" } }, - "shasum-object": { + "node_modules/shasum-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, - "requires": { + "dependencies": { "fast-safe-stringify": "^2.0.7" } }, - "shell-quote": { + "node_modules/shell-quote": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "side-channel": { + "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { + "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "simple-concat": { + "node_modules/simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "simple-update-notifier": { + "node_modules/simple-update-notifier": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", "dev": true, - "requires": { + "dependencies": { "semver": "~7.0.0" }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } + "engines": { + "node": ">=8.10.0" } }, - "skmeans": { + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/skmeans": { "version": "0.9.7", "resolved": "https://registry.npmjs.org/skmeans/-/skmeans-0.9.7.tgz", "integrity": "sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg==" }, - "sortablejs": { + "node_modules/sortablejs": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==", "dev": true }, - "source-map": { + "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-support": { + "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "requires": { + "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, - "sourcemap-codec": { + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", "dev": true }, - "spawn-command": { + "node_modules/spawn-command": { "version": "0.0.2-1", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", "dev": true }, - "splaytree": { + "node_modules/splaytree": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.2.tgz", "integrity": "sha512-4OM2BJgC5UzrhVnnJA4BkHKGtjXNzzUfpQjCO8I05xYPsfS/VuQDwjCGGMi8rYQilHEV4j8NBqTFbls/PZEE7A==" }, - "split": { + "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "requires": { + "dependencies": { "through": "2" + }, + "engines": { + "node": "*" } }, - "srtm-elevation": { + "node_modules/srtm-elevation": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/srtm-elevation/-/srtm-elevation-2.1.2.tgz", "integrity": "sha512-VAYD86JwB4l4yXNJmlTVy5ryQBu0bq50rOvPqpNu4pbKwgPrc7QijjYFKKcM+AfnDvbmlaZv+qWWMGYg+mvBVg==", - "requires": { + "dependencies": { "extend": "^3.0.2", "lru-cache": "^6.0.0", "node-fetch": "^2.6.1", "promise": "^8.1.0", "yauzl": "^2.10.0", "yauzl-promise": "^2.1.3" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } } }, - "statuses": { + "node_modules/srtm-elevation/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/srtm-elevation/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "engines": { + "node": ">= 0.6" + } }, - "stream-browserify": { + "node_modules/stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, - "requires": { + "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, - "stream-combiner": { + "node_modules/stream-browserify/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", - "requires": { + "dependencies": { "duplexer": "~0.1.1", "through": "~2.3.4" } }, - "stream-combiner2": { + "node_modules/stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, - "requires": { + "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" } }, - "stream-http": { + "node_modules/stream-http": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, - "requires": { + "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", "readable-stream": "^3.6.0", "xtend": "^4.0.2" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, - "stream-shift": { + "node_modules/stream-http/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, - "stream-splicer": { + "node_modules/stream-splicer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.2" } }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string_decoder": { + "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "safe-buffer": "~5.2.0" } }, - "strip-ansi": { + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-bom": { + "node_modules/strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, - "requires": { + "dependencies": { "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "subarg": { + "node_modules/subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", "dev": true, - "requires": { + "dependencies": { "minimist": "^1.1.0" } }, - "supports-color": { + "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { + "dependencies": { "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "syntax-error": { + "node_modules/syntax-error": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.2.0" } }, - "terser": { + "node_modules/terser": { "version": "3.16.1", "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", "dev": true, - "requires": { + "dependencies": { "commander": "~2.17.1", "source-map": "~0.6.1", "source-map-support": "~0.5.9" }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "bin": { + "terser": "bin/uglifyjs" + }, + "engines": { + "node": ">=6.0.0" } }, - "through": { + "node_modules/terser/node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "through2": { + "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, - "timers-browserify": { + "node_modules/timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==", "dev": true, - "requires": { + "dependencies": { "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" } }, - "tinyify": { + "node_modules/tinyify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tinyify/-/tinyify-4.0.0.tgz", "integrity": "sha512-jNDxImwUrJJAU2NyGG144J8aWx2ni39UuBo7ppCXFRmhSH0CbpWL4HgjNvrsAW05WQAgNZePwAlEemNuB+byaA==", "dev": true, - "requires": { + "dependencies": { "@browserify/envify": "^6.0.0", "@browserify/uglifyify": "^6.0.0", "browser-pack-flat": "^3.0.9", @@ -6608,91 +8375,112 @@ "terser": "3.16.1", "through2": "^4.0.2", "unassertify": "^3.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } } }, - "tinyqueue": { + "node_modules/tinyify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tinyify/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tinyqueue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, - "to-fast-properties": { + "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "toidentifier": { + "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } }, - "topojson-client": { + "node_modules/topojson-client": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", - "requires": { + "dependencies": { "commander": "2" + }, + "bin": { + "topo2geo": "bin/topo2geo", + "topomerge": "bin/topomerge", + "topoquantize": "bin/topoquantize" } }, - "topojson-server": { + "node_modules/topojson-server": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/topojson-server/-/topojson-server-3.0.1.tgz", "integrity": "sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw==", - "requires": { + "dependencies": { "commander": "2" + }, + "bin": { + "geo2topo": "bin/geo2topo" } }, - "touch": { + "node_modules/touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "dev": true, - "requires": { + "dependencies": { "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" } }, - "tr46": { + "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "transform-ast": { + "node_modules/transform-ast": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", "integrity": "sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.3.0", "convert-source-map": "^1.5.1", "dash-ast": "^1.0.0", @@ -6700,235 +8488,317 @@ "magic-string": "^0.23.2", "merge-source-map": "1.0.4", "nanobench": "^2.1.1" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - } } }, - "tree-kill": { + "node_modules/transform-ast/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/transform-ast/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true + "dev": true, + "bin": { + "tree-kill": "cli.js" + } }, - "tsconfig": { + "node_modules/tsconfig": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz", "integrity": "sha512-Cq65A3kVp6BbsUgg9DRHafaGmbMb9EhAc7fjWvudNWKjkbWrt43FnrtZt6awshH1R0ocfF2Z0uxock3lVqEgOg==", "dev": true, - "requires": { + "dependencies": { "any-promise": "^1.3.0", "parse-json": "^2.2.0", "strip-bom": "^2.0.0", "strip-json-comments": "^2.0.0" } }, - "tsify": { + "node_modules/tsify": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/tsify/-/tsify-5.0.4.tgz", "integrity": "sha512-XAZtQ5OMPsJFclkZ9xMZWkSNyMhMxEPsz3D2zu79yoKorH9j/DT4xCloJeXk5+cDhosEibu4bseMVjyPOAyLJA==", "dev": true, - "requires": { + "dependencies": { "convert-source-map": "^1.1.0", "fs.realpath": "^1.0.0", "object-assign": "^4.1.0", "semver": "^6.1.0", "through2": "^2.0.0", "tsconfig": "^5.0.3" + }, + "engines": { + "node": ">=0.12" + }, + "peerDependencies": { + "browserify": ">= 10.x", + "typescript": ">= 2.8" } }, - "tslib": { + "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, - "tty-browserify": { + "node_modules/tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, - "turf-jsts": { + "node_modules/turf-jsts": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/turf-jsts/-/turf-jsts-1.2.3.tgz", "integrity": "sha512-Ja03QIJlPuHt4IQ2FfGex4F4JAr8m3jpaHbFbQrgwr7s7L6U8ocrHiF3J1+wf9jzhGKxvDeaCAnGDot8OjGFyA==" }, - "type": { + "node_modules/type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", "dev": true }, - "type-is": { + "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { + "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" } }, - "typedarray": { + "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "typescript": { + "node_modules/typescript": { "version": "4.9.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "dev": true + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "umd": { + "node_modules/umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "dev": true + "dev": true, + "bin": { + "umd": "bin/cli.js" + } }, - "unassert": { + "node_modules/unassert": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/unassert/-/unassert-2.0.2.tgz", "integrity": "sha512-P6OOg/aRdQmWH+b0g+T4U+9MgL+DG7w6oQPG+N3F2IMuvvd1WfZ5alT/Rjik2lMFVyhfACUxF7PGP1VCwSHlQA==", "dev": true, - "requires": { - "estraverse": "^5.0.0" - }, "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "estraverse": "^5.0.0" } }, - "unassertify": { + "node_modules/unassert/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/unassertify": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/unassertify/-/unassertify-3.0.1.tgz", "integrity": "sha512-461ykSPY3oWU+39J5haiq7S/hcYy1oGJ2nHU92lqdL3jft+pSU6oAbb7o6VVmM7nZGLqppszgyzfpCnRBFgFtw==", "dev": true, - "requires": { + "dependencies": { "acorn": "^8.0.0", "convert-source-map": "^1.1.1", "escodegen": "^2.0.0", "multi-stage-sourcemap": "^0.3.1", "through": "^2.3.7", "unassert": "^2.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true - } } }, - "undeclared-identifiers": { + "node_modules/unassertify/node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/undeclared-identifiers": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.3.0", "dash-ast": "^1.0.0", "get-assigned-identifiers": "^1.2.0", "simple-concat": "^1.0.0", "xtend": "^4.0.1" + }, + "bin": { + "undeclared-identifiers": "bin.js" } }, - "undefsafe": { + "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, - "unicode-canonical-property-names-ecmascript": { + "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unicode-match-property-ecmascript": { + "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "requires": { + "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "unicode-match-property-value-ecmascript": { + "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unicode-property-aliases-ecmascript": { + "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unpipe": { + "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } }, - "update-browserslist-db": { + "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "url": { + "node_modules/url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", "dev": true, - "requires": { + "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - } } }, - "usng.js": { + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + }, + "node_modules/usng.js": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/usng.js/-/usng.js-0.4.5.tgz", "integrity": "sha512-JTJcFFDy/JqA5iiU8DqMOV5gJiL3ZdXH0hCKYaRMDbbredhFna5Ok4C1YDFU07mTGAgm+5FzHaaOzQnO/3BzWQ==", - "dev": true + "dev": true, + "bin": { + "usng-cli": "bin/cli.js" + } }, - "util": { + "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", @@ -6936,34 +8806,40 @@ "which-typed-array": "^1.1.2" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "utils-merge": { + "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } }, - "vary": { + "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } }, - "vm-browserify": { + "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, - "watchify": { + "node_modules/watchify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz", "integrity": "sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==", "dev": true, - "requires": { + "dependencies": { "anymatch": "^3.1.0", "browserify": "^17.0.0", "chokidar": "^3.4.0", @@ -6972,104 +8848,129 @@ "through2": "^4.0.2", "xtend": "^4.0.2" }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } + "bin": { + "watchify": "bin/cmd.js" + }, + "engines": { + "node": ">= 8.10.0" } }, - "webidl-conversions": { + "node_modules/watchify/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/watchify/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "which-typed-array": { + "node_modules/which-typed-array": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "dev": true, - "requires": { + "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0", "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "wrap-ansi": { + "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "wrap-comment": { + "node_modules/wrap-comment": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wrap-comment/-/wrap-comment-1.0.1.tgz", "integrity": "sha512-APccrMwl/ont0RHFTXNAQfM647duYYEfs6cngrIyTByTI0xbWnDnPSptFZhS68L4WCjt2ZxuhCFwuY6Pe88KZQ==", "dev": true }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "xtend": { + "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4" + } }, - "y18n": { + "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + } }, - "yallist": { + "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "yargs": { + "node_modules/yargs": { "version": "17.6.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, - "requires": { + "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -7077,38 +8978,50 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true + "dev": true, + "engines": { + "node": ">=12" + } }, - "yauzl": { + "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "requires": { + "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, - "yauzl-clone": { + "node_modules/yauzl-clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/yauzl-clone/-/yauzl-clone-1.0.4.tgz", "integrity": "sha512-igM2RRCf3k8TvZoxR2oguuw4z1xasOnA31joCqHIyLkeWrvAc2Jgay5ISQ2ZplinkoGaJ6orCz56Ey456c5ESA==", - "requires": { + "dependencies": { "events-intercept": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "yauzl-promise": { + "node_modules/yauzl-promise": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/yauzl-promise/-/yauzl-promise-2.1.3.tgz", "integrity": "sha512-A1pf6fzh6eYkK0L4Qp7g9jzJSDrM6nN0bOn5T0IbY4Yo3w+YkWlHFkJP7mzknMXjqusHFHlKsK2N+4OLsK2MRA==", - "requires": { + "dependencies": { "yauzl": "^2.9.1", "yauzl-clone": "^1.0.4" + }, + "engines": { + "node": ">=6" } } } diff --git a/client/public/databases/units/groundunitdatabase.json b/client/public/databases/units/groundunitdatabase.json index 3aeead24..0b529736 100644 --- a/client/public/databases/units/groundunitdatabase.json +++ b/client/public/databases/units/groundunitdatabase.json @@ -1120,7 +1120,8 @@ "cost": 15000000, "tags": "Radar, CA", "markerFile": "groundunit-aaa", - "canAAA": true + "canAAA": true, + "shotsBaseScatter": null }, "Grad-URAL": { "name": "Grad-URAL", @@ -2387,7 +2388,8 @@ "shotsToFire": 100, "tags": "Russian type 1", "markerFile": "groundunit-infantry", - "canAAA": true + "canAAA": true, + "aimMethodRange": 3600 }, "KAMAZ Truck": { "name": "KAMAZ Truck", @@ -7238,7 +7240,8 @@ "shotsToFire": 100, "tags": "Insurgent", "markerFile": "groundunit-infantry", - "canAAA": true + "canAAA": true, + "aimMethodRange": 3600 }, "MLRS FDDM": { "name": "MLRS FDDM", @@ -7283,7 +7286,8 @@ "shotsToFire": 100, "tags": "Russian type 2", "markerFile": "groundunit-infantry", - "canAAA": true + "canAAA": true, + "aimMethodRange": 3600 }, "Infantry AK ver3": { "name": "Infantry AK ver3", @@ -7306,7 +7310,8 @@ "shotsToFire": 100, "tags": "Russian type 3", "markerFile": "groundunit-infantry", - "canAAA": true + "canAAA": true, + "aimMethodRange": 3600 }, "Smerch_HE": { "name": "Smerch_HE", @@ -8039,7 +8044,7 @@ "canRearm": false, "muzzleVelocity": 1200, "barrelHeight": 3, - "aimTime": 11, + "aimTime": 20, "shotsToFire": 100, "cost": 750000, "tags": "CA", diff --git a/client/src/panels/unitcontrolpanel.ts b/client/src/panels/unitcontrolpanel.ts index ba135fdb..da5f128d 100644 --- a/client/src/panels/unitcontrolpanel.ts +++ b/client/src/panels/unitcontrolpanel.ts @@ -148,9 +148,14 @@ export class UnitControlPanel extends Panel { /* This is for when a ctrl-click happens on the map for deselection and we need to remove the selected unit from the panel */ document.addEventListener("unitsDeselection", (ev: CustomEventInit) => { - this.show(); - this.addButtons(); - this.#updateRapidControls(); + if (ev.detail.length > 0) { + this.show(); + this.addButtons(); + this.#updateRapidControls(); + } else { + this.hide(); + this.#updateRapidControls(); + } }); window.addEventListener("resize", (e: any) => this.#calculateMaxHeight()); @@ -233,13 +238,13 @@ export class UnitControlPanel extends Panel { element.toggleAttribute("data-show-roe", !isTanker && !isAWACS); element.toggleAttribute("data-show-threat", (this.#selectedUnitsTypes.includes("Aircraft") || this.#selectedUnitsTypes.includes("Helicopter")) && !(this.#selectedUnitsTypes.includes("GroundUnit") || this.#selectedUnitsTypes.includes("NavyUnit"))); element.toggleAttribute("data-show-emissions-countermeasures", (this.#selectedUnitsTypes.includes("Aircraft") || this.#selectedUnitsTypes.includes("Helicopter")) && !(this.#selectedUnitsTypes.includes("GroundUnit") || this.#selectedUnitsTypes.includes("NavyUnit"))); - element.toggleAttribute("data-show-shots-scatter", this.#selectedUnitsTypes.includes("GroundUnit")); //TODO: more refined - element.toggleAttribute("data-show-shots-intensity", this.#selectedUnitsTypes.includes("GroundUnit")); //TODO: more refined + element.toggleAttribute("data-show-shots-scatter", this.#selectedUnitsTypes.length == 1 && this.#selectedUnitsTypes.includes("GroundUnit")); //TODO: more refined + element.toggleAttribute("data-show-shots-intensity", this.#selectedUnitsTypes.length == 1 && this.#selectedUnitsTypes.includes("GroundUnit")); //TODO: more refined element.toggleAttribute("data-show-tanker-button", getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.isTanker(); }) === true); element.toggleAttribute("data-show-AWACS-button", getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.isAWACS(); }) === true); element.toggleAttribute("data-show-on-off", (this.#selectedUnitsTypes.includes("GroundUnit") || this.#selectedUnitsTypes.includes("NavyUnit")) && !(this.#selectedUnitsTypes.includes("Aircraft") || this.#selectedUnitsTypes.includes("Helicopter"))); element.toggleAttribute("data-show-follow-roads", (this.#selectedUnitsTypes.length == 1 && this.#selectedUnitsTypes.includes("GroundUnit"))); - element.toggleAttribute("data-show-operate-as", getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getCoalition() }) === "neutral"); + element.toggleAttribute("data-show-operate-as", this.#selectedUnitsTypes.length == 1 && this.#selectedUnitsTypes.includes("GroundUnit") && getApp().getUnitsManager().getSelectedUnitsVariable((unit: Unit) => { return unit.getCoalition() }) === "neutral"); if (this.#units.length == 1) { if (isAWACS) diff --git a/src/core/include/groundunit.h b/src/core/include/groundunit.h index 22a4a455..f84ee1f0 100644 --- a/src/core/include/groundunit.h +++ b/src/core/include/groundunit.h @@ -17,7 +17,7 @@ public: virtual void setOnOff(bool newOnOff, bool force = false); virtual void setFollowRoads(bool newFollowRoads, bool force = false); - void aimAtPoint(Coords aimTarget, double horizontalScatterMultiplier = 1, double verticalScatterMultiplier = 1); + void aimAtPoint(Coords aimTarget); protected: virtual void AIloop(); diff --git a/src/core/src/groundunit.cpp b/src/core/src/groundunit.cpp index 6b902fde..4385f74b 100644 --- a/src/core/src/groundunit.cpp +++ b/src/core/src/groundunit.cpp @@ -192,7 +192,7 @@ void GroundUnit::AIloop() setTask("Simulating fire fight"); if (internalCounter == 0) { - aimAtPoint(targetPosition, 3.0, 0.0); + aimAtPoint(targetPosition); } if (internalCounter == 0) @@ -261,6 +261,7 @@ void GroundUnit::AIloop() double engagementRange = 10000; /* m */ double targetingRange = 0; /* m */ double aimMethodRange = 0; /* m */ + double acquisitionRange = 0; /* m */ /* Load gun values from database */ if (database.has_object_field(to_wstring(name))) { @@ -283,11 +284,14 @@ void GroundUnit::AIloop() targetingRange = databaseEntry[L"targetingRange"].as_number().to_double(); if (databaseEntry.has_number_field(L"aimMethodRange")) aimMethodRange = databaseEntry[L"aimMethodRange"].as_number().to_double(); + if (databaseEntry.has_number_field(L"acquisitionRange")) + acquisitionRange = databaseEntry[L"acquisitionRange"].as_number().to_double(); } /* Get all the units in range and select one at random */ - double range = aimMethodRange > engagementRange ? aimMethodRange : engagementRange; + double range = max(max(engagementRange, aimMethodRange), acquisitionRange); map targets = unitsManager->getUnitsInRange(this, targetCoalition, { "Aircraft", "Helicopter" }, range); + Unit* target = nullptr; unsigned int index = static_cast((RANDOM_ZERO_TO_ONE * (targets.size() - 1))); for (auto const& p : targets) { @@ -303,8 +307,6 @@ void GroundUnit::AIloop() if (muzzleVelocity != 0) aimTime += distance / muzzleVelocity; - internalCounter = (aimTime + (ShotsIntensity::HIGH - shotsIntensity) * shotsBaseInterval + 2) / FRAMERATE_TIME_INTERVAL; - /* If the target is in targeting range and we are in highest precision mode, target it */ if (distance < targetingRange && shotsScatter == ShotsScatter::LOW) { /* Send the command */ @@ -314,38 +316,51 @@ void GroundUnit::AIloop() Command* command = dynamic_cast(new SetTask(groupName, taskSS.str(), [this]() { this->setHasTaskAssigned(true); })); scheduler->appendCommand(command); setHasTask(true); + + internalCounter = (aimTime + (ShotsIntensity::HIGH - shotsIntensity) * shotsBaseInterval + 2) / FRAMERATE_TIME_INTERVAL; } /* Else, do miss on purpose */ else { - /* Compute where the target will be in aimTime seconds. */ - double aimDistance = target->getHorizontalVelocity() * aimTime; + /* Compute where the target will be in aimTime seconds, plus the effect of scatter. */ + double scatterDistance = distance * tan(shotsBaseScatter * (ShotsScatter::LOW - shotsScatter) / 57.29577) * (RANDOM_ZERO_TO_ONE - 0.1); + double aimDistance = target->getHorizontalVelocity() * aimTime + scatterDistance; double aimLat = 0; double aimLng = 0; Geodesic::WGS84().Direct(target->getPosition().lat, target->getPosition().lng, target->getHeading() * 57.29577, aimDistance, aimLat, aimLng); /* TODO make util to convert degrees and radians function */ - double aimAlt = target->getPosition().alt + target->getVerticalVelocity() * aimTime; + double aimAlt = target->getPosition().alt + target->getVerticalVelocity() * aimTime + distance * tan(shotsBaseScatter * (ShotsScatter::LOW - shotsScatter) / 57.29577) * RANDOM_ZERO_TO_ONE; // Force to always miss high never low /* Send the command */ - if (distance > engagementRange) { - aimAtPoint(Coords(aimLat, aimLng, aimAlt)); - } - else { - /* Compute a random scattering depending on the distance and the selected shots scatter */ - double scatterDistance = distance * tan(shotsBaseScatter * (ShotsScatter::LOW - shotsScatter) / 57.29577) * RANDOM_MINUS_ONE_TO_ONE; - double scatterAngle = 180 * RANDOM_MINUS_ONE_TO_ONE; - Geodesic::WGS84().Direct(aimLat, aimLng, scatterAngle, scatterDistance, aimLat, aimLng); /* TODO make util function */ - aimAlt = aimAlt + distance * tan(shotsBaseScatter * (ShotsScatter::LOW - shotsScatter) / 57.29577) * RANDOM_MINUS_ONE_TO_ONE; - + if (distance < engagementRange) { + /* If the unit is closer than the engagement range, use the fire at point method */ std::ostringstream taskSS; taskSS.precision(10); taskSS << "{id = 'FireAtPoint', lat = " << aimLat << ", lng = " << aimLng << ", alt = " << aimAlt << ", radius = 0.001, expendQty = " << shotsToFire << " }"; Command* command = dynamic_cast(new SetTask(groupName, taskSS.str(), [this]() { this->setHasTaskAssigned(true); })); scheduler->appendCommand(command); setHasTask(true); + setTargetPosition(Coords(aimLat, aimLng, target->getPosition().alt)); + internalCounter = (aimTime + (ShotsIntensity::HIGH - shotsIntensity) * shotsBaseInterval + 2) / FRAMERATE_TIME_INTERVAL; } + else if (distance < aimMethodRange) { + /* If the unit is closer than the aim method range, use the aim method range */ + aimAtPoint(Coords(aimLat, aimLng, aimAlt)); + setTargetPosition(Coords(aimLat, aimLng, target->getPosition().alt)); + internalCounter = (aimTime + (ShotsIntensity::HIGH - shotsIntensity) * shotsBaseInterval + 2) / FRAMERATE_TIME_INTERVAL; + } + else { + /* Else just wake the unit up with an impossible command */ + std::ostringstream taskSS; + taskSS.precision(10); + taskSS << "{id = 'FireAtPoint', lat = " << 0 << ", lng = " << 0 << ", alt = " << 0 << ", radius = 0.001, expendQty = " << 0 << " }"; + Command* command = dynamic_cast(new SetTask(groupName, taskSS.str(), [this]() { this->setHasTaskAssigned(true); })); + scheduler->appendCommand(command); + setHasTask(true); + setTargetPosition(Coords(NULL)); - setTargetPosition(Coords(aimLat, aimLng, target->getPosition().alt)); + /* Don't wait too long before checking again */ + internalCounter = 5 / FRAMERATE_TIME_INTERVAL; + } } - missOnPurposeTarget = target; } else { @@ -362,7 +377,7 @@ void GroundUnit::AIloop() if (databaseEntry.has_number_field(L"alertnessTimeConstant")) alertnessTimeConstant = databaseEntry[L"alertnessTimeConstant"].as_number().to_double(); } - internalCounter = (5 + RANDOM_ZERO_TO_ONE * alertnessTimeConstant) / FRAMERATE_TIME_INTERVAL; + internalCounter = (5 + RANDOM_ZERO_TO_ONE * alertnessTimeConstant * 0 /* TODO: remove to enable alertness again */) / FRAMERATE_TIME_INTERVAL; missOnPurposeTarget = nullptr; setTargetPosition(Coords(NULL)); } @@ -380,7 +395,7 @@ void GroundUnit::AIloop() } -void GroundUnit::aimAtPoint(Coords aimTarget, double horizontalScatterMultiplier, double verticalScatterMultiplier) { +void GroundUnit::aimAtPoint(Coords aimTarget) { double dist; double bearing1; double bearing2; @@ -411,12 +426,11 @@ void GroundUnit::aimAtPoint(Coords aimTarget, double horizontalScatterMultiplier /* Check we can reach the target*/ if (inner > 0) { /* Compute elevation and bearing */ - double barrelElevation = r * tan(atan((dist - sqrt(inner)) / (2 * alpha)) + RANDOM_MINUS_ONE_TO_ONE * (ShotsScatter::LOW - shotsScatter) * verticalScatterMultiplier); + double barrelElevation = r * (dist - sqrt(inner)) / (2 * alpha); double lat = 0; double lng = 0; - double randomBearing = bearing1 + RANDOM_MINUS_ONE_TO_ONE * (ShotsScatter::LOW - shotsScatter) * horizontalScatterMultiplier; - Geodesic::WGS84().Direct(position.lat, position.lng, randomBearing, r, lat, lng); + Geodesic::WGS84().Direct(position.lat, position.lng, bearing1, r, lat, lng); std::ostringstream taskSS; taskSS.precision(10); From b442d238cda1b11ac325e1fb5101b3bf17ad9481 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Thu, 23 Nov 2023 20:08:37 +0100 Subject: [PATCH 32/41] Fixed error in getUnitsVariable function --- client/public/stylesheets/style/style.css | 10 +++++++++- client/public/themes/olympus/theme.css | 1 + client/src/unit/unitsmanager.ts | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/client/public/stylesheets/style/style.css b/client/public/stylesheets/style/style.css index 5eb11f5b..1bd3c351 100644 --- a/client/public/stylesheets/style/style.css +++ b/client/public/stylesheets/style/style.css @@ -1469,6 +1469,10 @@ input[type=number]::-webkit-outer-spin-button { background-color: var(--ol-switch-off); } +.switch-control.yes-no .ol-switch[data-value="undefined"] .ol-switch-fill { + background-color: var(--ol-switch-undefined); +} + .switch-control.coalition .ol-switch>.ol-switch-fill::before, .switch-control.yes-no .ol-switch>.ol-switch-fill::before { translate:-100% 0; @@ -1484,13 +1488,17 @@ input[type=number]::-webkit-outer-spin-button { } .switch-control.coalition [data-value="true"] .ol-switch-fill { - background-color: var(--accent-light-blue); + background-color: var(--primary-blue); } .switch-control.coalition [data-value="false"] .ol-switch-fill { background-color: var(--primary-red); } +.switch-control.coalition [data-value="undefined"] .ol-switch-fill { + background-color: var(--ol-switch-undefined); +} + .switch-control.coalition [data-value="true"]>.ol-switch-fill::before { content: "BLUE" !important; } diff --git a/client/public/themes/olympus/theme.css b/client/public/themes/olympus/theme.css index b086467c..2da7dde9 100644 --- a/client/public/themes/olympus/theme.css +++ b/client/public/themes/olympus/theme.css @@ -46,6 +46,7 @@ --ol-select-secondary: #545F6C; --ol-switch-off:#686868; + --ol-switch-undefined:#383838; /*** General border radii **/ --border-radius-xs: 2px; diff --git a/client/src/unit/unitsmanager.ts b/client/src/unit/unitsmanager.ts index f2168c7a..da0cd331 100644 --- a/client/src/unit/unitsmanager.ts +++ b/client/src/unit/unitsmanager.ts @@ -325,7 +325,7 @@ export class UnitsManager { var value: any = variableGetter(units[0]); units.forEach((unit: Unit) => { if (variableGetter(unit) !== value) - return undefined; + value = undefined; }); return value; }; From 15ccb3dc04a72988222a272c91ab91886801deff Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Thu, 23 Nov 2023 20:11:54 +0100 Subject: [PATCH 33/41] Added JF-17 loadouts --- .../databases/units/aircraftdatabase.json | 64685 ++++++++-------- 1 file changed, 32390 insertions(+), 32295 deletions(-) diff --git a/client/public/databases/units/aircraftdatabase.json b/client/public/databases/units/aircraftdatabase.json index 87a9c61a..9a4fe63b 100644 --- a/client/public/databases/units/aircraftdatabase.json +++ b/client/public/databases/units/aircraftdatabase.json @@ -1,32297 +1,32392 @@ { - "A-10C_2": { - "name": "A-10C_2", - "coalition": "blue", - "era": "Late Cold War", - "label": "A-10C Warthog", - "shortLabel": "A10", - "loadouts": [ - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 2 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*2, AGM-65H*2, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", - "name": "AGM-65D*2, AGM-65H*2, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*2,AGM-65H*2,GBU-12,GBU-38,MK82*3,MK82AIR*3,MK5*7,TGP,AM-9*2", - "name": "AGM-65D*2,AGM-65H*2,GBU-12,GBU-38,MK82*3,MK82AIR*3,MK5*7,TGP,AM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*2,AGM-65H*2,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK151*7", - "name": "AGM-65D*2,AGM-65H*2,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK151*7", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", - "name": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,TGP,ECM", - "name": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,TGP,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", - "quantity": 2 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*2,AGM-65H*2,Mk-82AIR*6,CBU-87*2,Mk151*7,AIM-9*2,TGP,ECM", - "name": "AGM-65D*2,AGM-65H*2,Mk-82AIR*6,CBU-87*2,Mk151*7,AIM-9*2,TGP,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*2,AGM-65H*2,TGP, ECM, AIM-9*2", - "name": "AGM-65D*2,AGM-65H*2,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 6 - }, - { - "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*2,Mk-82*6,AIM-9*2,ECM", - "name": "AGM-65D*2,Mk-82*6,AIM-9*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 3 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "LAU-88 with 3 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*3, AGM-65H*3, CBU-97*4,TGP, ECM, AIM-9*2", - "name": "AGM-65D*3, AGM-65H*3, CBU-97*4,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 2 - }, - { - "name": "CBU-105 - 10 x SFW, CBU with WCMD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65D*4, CBU-105*2,CBU-97*2, TGP, ECM, AIM-9*2", - "name": "AGM-65D*4, CBU-105*2,CBU-97*2, TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-105 - 10 x SFW, CBU with WCMD", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65D*4, CBU-105*4,TGP, ECM, AIM-9*2", - "name": "AGM-65D*4, CBU-105*4,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65D*4, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", - "name": "AGM-65D*4, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "AGM-65D*4, CBU-97*4,TGP, ECM, AIM-9*2", - "name": "AGM-65D*4, CBU-97*4,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 1 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*4,GBU-12*2,GBU-38,Mk-82,AIM-9,TGP,ECM", - "name": "AGM-65D*4,GBU-12*2,GBU-38,Mk-82,AIM-9,TGP,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*4,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK5*7", - "name": "AGM-65D*4,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK5*7", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*4,Mk-82*6,CBU-87*2,TGP,AIM-9*2,Mk151*7", - "name": "AGM-65D*4,Mk-82*6,CBU-87*2,TGP,AIM-9*2,Mk151*7", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*4,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", - "name": "AGM-65D*4,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*4,TGP, ECM, AIM-9*2", - "name": "AGM-65D*4,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 3 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65D*6, CBU-97*4,TGP, ECM, AIM-9*2", - "name": "AGM-65D*6, CBU-97*4,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 3 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*6,GBU-12*4,AIM-9M*2,ECM,TGP", - "name": "AGM-65D*6,GBU-12*4,AIM-9M*2,ECM,TGP", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-105 - 10 x SFW, CBU with WCMD", - "quantity": 4 - }, - { - "name": "LAU-117 with AGM-65E - Maverick E (Laser ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65E*2,CBU-105*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", - "name": "AGM-65E*2,CBU-105*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 4 - }, - { - "name": "LAU-117 with AGM-65E - Maverick E (Laser ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65E*2,CBU-97*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", - "name": "AGM-65E*2,CBU-97*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 4 - }, - { - "name": "LAU-117 with AGM-65E - Maverick E (Laser ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65E*2,CBU-97*4,AIM-9M*2,ECM,TGP", - "name": "AGM-65E*2,CBU-97*4,AIM-9M*2,ECM,TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 2 - }, - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65E - Maverick E (Laser ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65E*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,ECM,TGP", - "name": "AGM-65E*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,ECM,TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 7 - }, - { - "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65G,AGM-65D,Mk-82*7,AIM-9*2,ECM", - "name": "AGM-65G,AGM-65D,Mk-82*7,AIM-9*2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", - "quantity": 1 - }, - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65G,AGM-65K,GBU-10*2,AIM-9*2,TGP,ECM", - "name": "AGM-65G,AGM-65K,GBU-10*2,AIM-9*2,TGP,ECM", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65G*2,GBU-31*2,AIM-9*2,TGP,ECM", - "name": "AGM-65G*2,GBU-31*2,AIM-9*2,TGP,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65H*4, CBU-97*4,TGP, ECM, AIM-9*2", - "name": "AGM-65H*4, CBU-97*4,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x GBU-12 - 500lb Laser Guided Bombs", - "quantity": 2 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65K*2,GBU-12*8,AIM-9M*2.ECM,TGP", - "name": "AGM-65K*2,GBU-12*8,AIM-9M*2.ECM,TGP", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65K*2,GBU-38*4,AIM-9*2,TGP,ECM", - "name": "AGM-65K*2,GBU-38*4,AIM-9*2,TGP,ECM", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-33*12, TGP, CAP-9*1", - "name": "BDU-33*12, TGP, CAP-9*1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", - "quantity": 2 - }, - { - "name": "BDU-50LGB - 500lb Laser Guided Inert Practice Bomb LD", - "quantity": 2 - }, - { - "name": "LAU-117 with TGM-65D - Trg Round for Mav D (IIR)", - "quantity": 1 - }, - { - "name": "LAU-117 with TGM-65H - Trg Round for Mav H (CCD)", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-33*6, TGM-65H, TGM-65D, TGP, BDU-50LGB*2, CAP-9*1", - "name": "BDU-33*6, TGM-65H, TGM-65D, TGP, BDU-50LGB*2, CAP-9*1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-33*6, TGP, CAP-9*1", - "name": "BDU-33*6, TGP, CAP-9*1", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "BDU-50LD - 500lb Inert Practice Bomb LD", - "quantity": 2 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-33*6, TGP, CAP-9*1, BDU-50LD*2", - "name": "BDU-33*6, TGP, CAP-9*1, BDU-50LD*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "BDU-50HD - 500lb Inert Practice Bomb HD", - "quantity": 2 - }, - { - "name": "BDU-50LGB - 500lb Laser Guided Inert Practice Bomb LD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk61, Practice", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-50HD*2,BDU-50LGB*2,TGP, CAP-9*1", - "name": "BDU-50HD*2,BDU-50LGB*2,TGP, CAP-9*1", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "BDU-50HD - 500lb Inert Practice Bomb HD", - "quantity": 6 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk1, Practice", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-50HD*6,Mk1*7,TGP, CAP-9*1", - "name": "BDU-50HD*6,Mk1*7,TGP, CAP-9*1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "BDU-50HD - 500lb Inert Practice Bomb HD", - "quantity": 2 - }, - { - "name": "BDU-50LD - 500lb Inert Practice Bomb LD", - "quantity": 2 - }, - { - "name": "LAU-117 with CATM-65K - Captive Trg Round for Mav K (CCD)", - "quantity": 1 - }, - { - "name": "LAU-117 with TGM-65G - Trg Round for Mav G (IIR)", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts WTU-1/B, Practice", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-50LD*2, BDU-50HD*2,CATM-65K, TGM-65G, TGP, CAP-9*1", - "name": "BDU-50LD*2, BDU-50HD*2,CATM-65K, TGM-65G, TGP, CAP-9*1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "CBU-103 - 202 x CEM, CBU with WCMD", - "quantity": 4 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "CBU-103*4, M151*14, AIM-9*2, ECM", - "name": "CBU-103*4, M151*14, AIM-9*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", - "quantity": 2 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "CBU-87*2, M151*14, MK-82AIR*6, AIM-9*2,ECM", - "name": "CBU-87*2, M151*14, MK-82AIR*6, AIM-9*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 4 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 4 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "CBU-87*4, M151*28, AIM-9*2,ECM", - "name": "CBU-87*4, M151*28, AIM-9*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 4 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "CBU-87*4, M151*42, AIM-9*2, ECM", - "name": "CBU-87*4, M151*42, AIM-9*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65E - Maverick E (Laser ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-10*2,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", - "name": "GBU-10*2,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BRU-42 with 3 x GBU-12 - 500lb Laser Guided Bombs", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-12*14,TGP, AIM-9*2", - "name": "GBU-12*14,TGP, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65E - Maverick E (Laser ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-12*2,GBU-38*2,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", - "name": "GBU-12*2,GBU-38*2,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65E - Maverick E (Laser ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-12*4,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", - "name": "GBU-12*4,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BRU-42 with 3 x GBU-12 - 500lb Laser Guided Bombs", - "quantity": 2 - }, - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-12*6,GBU-10*2,TGP, AIM-9*2", - "name": "GBU-12*6,GBU-10*2,TGP, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-31*2,GBU-38*2, AGM-65H*2, AIM-9*2,TGP, ECM", - "name": "GBU-31*2,GBU-38*2, AGM-65H*2, AIM-9*2,TGP, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 4 - }, - { - "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-31*2,GBU-38*4,AIM-9*2,TGP,ECM, AIM-9*2", - "name": "GBU-31*2,GBU-38*4,AIM-9*2,TGP,ECM, AIM-9*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65E - Maverick E (Laser ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "GBU-31(V)3/B - JDAM, 2000lb GPS Guided Penetrator Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-31*2,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", - "name": "GBU-31*2,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 4 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-38*4,GBU-31*2,TGP, AIM-9*2", - "name": "GBU-38*4,GBU-31*2,TGP, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 4 - }, - { - "name": "LAU-117 with AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-38*4,M151 APKWS*7,AGM-65D*1,AGM-65H*1,TGP,AIM-9*2,ECM", - "name": "GBU-38*4,M151 APKWS*7,AGM-65D*1,AGM-65H*1,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65E - Maverick E (Laser ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-38*4,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", - "name": "GBU-38*4,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "GBU-54(V)1/B - LJDAM, 500lb Laser & GPS Guided Bomb LD", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-54*4,M151 APKWS*7,AGM-65D*4,TGP,AIM-9*2,ECM", - "name": "GBU-54*4,M151 APKWS*7,AGM-65D*4,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65E - Maverick E (Laser ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "GBU-54(V)1/B - LJDAM, 500lb Laser & GPS Guided Bomb LD", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-54*4,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", - "name": "GBU-54*4,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x LAU-131 pods - 21 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "LAU-131 98 rkt M156 WP, AIM-9*2,ECM", - "name": "LAU-131 98 rkt M156 WP, AIM-9*2,ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", - "quantity": 6 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "LAU-68 42 rkt M156 WP, AIM-9*2, ECM", - "name": "LAU-68 42 rkt M156 WP, AIM-9*2, ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 4 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "M151*98, Mk-82*2,AIM-9*2,ECM", - "name": "M151*98, Mk-82*2,AIM-9*2,ECM", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", - "quantity": 5 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82*20,AIM-9*2,ECM", - "name": "Mk-82*20,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 4 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82*4,Mk-8AIR*4,AIM-9*2,ECM", - "name": "Mk-82*4,Mk-8AIR*4,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 7 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82*6,AIM-9*2,TGP,ECM", - "name": "Mk-82*6,AIM-9*2,TGP,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 6 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82*6,Mk-84*2,AIM-9*2,ECM", - "name": "Mk-82*6,Mk-84*2,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 8 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82*8,AIM-9*2,ECM", - "name": "Mk-82*8,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 5 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82AIR*6,Mk-8AIR*4,M151*1,TGP,AIM-9*2,ECM", - "name": "Mk-82AIR*6,Mk-8AIR*4,M151*1,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 8 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82AIR*8,AIM-9*2,ECM", - "name": "Mk-82AIR*8,AIM-9*2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M257, Para Illum", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "MK-84*2,LAU-68*2,AGM-65K*2", - "name": "MK-84*2,LAU-68*2,AGM-65K*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 4 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-84*4,AIM-9*2,ECM", - "name": "Mk-84*4,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 6 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-84*6,AIM-9*2,TGP,ECM", - "name": "Mk-84*6,AIM-9*2,TGP,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM- GBU-10*2,GBU-12*4,AIM-9*2,TGP,ECM", - "name": "PGM- GBU-10*2,GBU-12*4,AIM-9*2,TGP,ECM", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM- GBU-10*4, AGM-65K*2,AIM-9*2,TGP,ECM", - "name": "PGM- GBU-10*4, AGM-65K*2,AIM-9*2,TGP,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", - "quantity": 9 - } - ], - "enabled": true, - "code": "SUU-25*9,AIM-9*2,ECM", - "name": "SUU-25*9,AIM-9*2,ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP", - "name": "TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - }, - { - "name": "BDU-50LGB - 500lb Laser Guided Inert Practice Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "TGP, CAP-9*1, BDU-50LGB*4", - "name": "TGP, CAP-9*1, BDU-50LGB*4", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-117 with CATM-65K - Captive Trg Round for Mav K (CCD)", - "quantity": 1 - }, - { - "name": "LAU-117 with TGM-65G - Trg Round for Mav G (IIR)", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP, CAP-9*1, CATM-65K*1, TGM-65G*1", - "name": "TGP, CAP-9*1, CATM-65K*1, TGM-65G*1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 3 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP, CBU-87*3, M151*28, AIM-9*2, ECM", - "name": "TGP, CBU-87*3, M151*28, AIM-9*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP, M151*14, Mk-82*2, Mk-82AIR*2, AIM-9*2, ECM", - "name": "TGP, M151*14, Mk-82*2, Mk-82AIR*2, AIM-9*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP, M151*42, Mk-82*6, Mk-82AIR*6, AIM-9*2, ECM", - "name": "TGP, M151*42, Mk-82*6, Mk-82AIR*6, AIM-9*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP, M151*49, Mk-82*2, CBU-87*2, AIM-9*2, ECM", - "name": "TGP, M151*49, Mk-82*2, CBU-87*2, AIM-9*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 4 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP, M151*84, Mk-82*2,AIM-9*2, ECM", - "name": "TGP, M151*84, Mk-82*2,AIM-9*2, ECM", - "roles": [ - "CAS" - ] - } - ], - "filename": "a-10.png", - "enabled": true, - "liveries": { - "81st fs spangdahlem ab, germany (sp) 1": { - "name": "81st FS Spangdahlem AB, Germany (SP) 1", - "countries": [ - "USA" - ] - }, - "fictional spanish tritonal": { - "name": "Fictional Spanish Tritonal", - "countries": [ - "SPN" - ] - }, - "47th fs barksdale afb, louisiana (bd)": { - "name": "47th FS Barksdale AFB, Louisiana (BD)", - "countries": [ - "USA" - ] - }, - "fictional georgian olive": { - "name": "Fictional Georgian Olive", - "countries": [ - "GRG" - ] - }, - "algerian af fictional grey": { - "name": "Algerian AF Fictional Grey", - "countries": [ - "DZA" - ] - }, - "fictional russian air force 1": { - "name": "Fictional Russian Air Force 1", - "countries": [ - "RUS" - ] - }, - "fictional israel 115 sqn flying dragon": { - "name": "Fictional Israel 115 Sqn Flying Dragon", - "countries": [ - "ISR" - ] - }, - "172nd fs battle creek angb, michigan (bc)": { - "name": "172nd FS Battle Creek ANGB, Michigan (BC)", - "countries": [ - "USA" - ] - }, - "190th fs boise angb, idaho (id)": { - "name": "190th FS Boise ANGB, Idaho (ID)", - "countries": [ - "USA" - ] - }, - "81st fs spangdahlem ab, germany (sp) 2": { - "name": "81st FS Spangdahlem AB, Germany (SP) 2", - "countries": [ - "USA" - ] - }, - "fictional german 3322": { - "name": "Fictional German 3322", - "countries": [ - "GER" - ] - }, - "66th ws nellis afb, nevada (wa)": { - "name": "66th WS Nellis AFB, Nevada (WA)", - "countries": [ - "USA" - ] - }, - "algerian af fictional desert": { - "name": "Algerian AF Fictional Desert", - "countries": [ - "DZA" - ] - }, - "fictional italian am (23gruppo)": { - "name": "AM (23Gruppo)", - "countries": [ - "ITA" - ] - }, - "haf fictional": { - "name": "Hellenic Airforce (Fictional)", - "countries": [ - "GRC" - ] - }, - "184th fs arkansas ang, fort smith (fs)": { - "name": "184th FS Arkansas ANG, Fort Smith (FS)", - "countries": [ - "USA" - ] - }, - "354th fs davis monthan afb, arizona (dm)": { - "name": "354th FS Davis Monthan AFB, Arizona (DM)", - "countries": [ - "USA" - ] - }, - "fictional royal norwegian air force": { - "name": "Fictional Royal Norwegian Air Force", - "countries": [ - "NOR" - ] - }, - "422nd tes nellis afb, nevada (ot)": { - "name": "422nd TES Nellis AFB, Nevada (OT)", - "countries": [ - "USA" - ] - }, - "118th fs bradley angb, connecticut (ct)": { - "name": "118th FS Bradley ANGB, Connecticut (CT)", - "countries": [ - "USA" - ] - }, - "fictional spanish aga": { - "name": "Fictional Spanish AGA", - "countries": [ - "SPN" - ] - }, - "74th fs moody afb, georgia (ft)": { - "name": "74th FS Moody AFB, Georgia (FT)", - "countries": [ - "USA" - ] - }, - "fictional russian air force 2": { - "name": "Fictional Russian Air Force 2", - "countries": [ - "RUS" - ] - }, - "118th fs bradley angb, connecticut (ct) n621": { - "name": "118th FS Bradley ANGB, Connecticut (CT) N621", - "countries": [ - "USA" - ] - }, - "357th fs davis monthan afb, arizona (dm)": { - "name": "357th FS Davis Monthan AFB, Arizona (DM)", - "countries": [ - "USA" - ] - }, - "canada rcaf 409 squadron": { - "name": "Fictional RCAF 409 Squadron", - "countries": [ - "CAN" - ] - }, - "355th fs eielson afb, alaska (ak)": { - "name": "355th FS Eielson AFB, Alaska (AK)", - "countries": [ - "USA" - ] - }, - "25th fs osan ab, korea (os)": { - "name": "25th FS Osan AB, Korea (OS)", - "countries": [ - "USA" - ] - }, - "358th fs davis monthan afb, arizona (dm)": { - "name": "358th FS Davis Monthan AFB, Arizona (DM)", - "countries": [ - "USA" - ] - }, - "australia notional raaf": { - "name": "Australia Notional RAAF", - "countries": [ - "AUS" - ] - }, - "fictional canadian air force pixel camo": { - "name": "Fictional Canadian Air Force Pixel Camo", - "countries": [ - "CAN" - ] - }, - "fictional france escadron de chasse 03.003 ardennes": { - "name": "Fictional France Escadron de Chasse 03.003 ARDENNES", - "countries": [ - "FRA" - ] - }, - "canada rcaf 442 snow scheme": { - "name": "Fictional RCAF 442 Snow Scheme", - "countries": [ - "CAN" - ] - }, - "23rd tfw england afb (el)": { - "name": "23rd TFW England AFB (EL)", - "countries": [ - "USA" - ] - }, - "fictional georgian grey": { - "name": "Fictional Georgian Grey", - "countries": [ - "GRG" - ] - }, - "fictional ukraine air force 1": { - "name": "Fictional Ukraine Air Force 1", - "countries": [ - "UKR" - ] - }, - "104th fs maryland ang, baltimore (md)": { - "name": "104th FS Maryland ANG, Baltimore (MD)", - "countries": [ - "USA" - ] - }, - "fictional spanish 12nd wing": { - "name": "Fictional Spanish 12nd Wing", - "countries": [ - "SPN" - ] - }, - "a-10 grey": { - "name": "A-10 Grey", - "countries": [ - "DEN", - "TUR", - "NETH", - "BEL", - "UK" - ] - }, - "fictional german 3323": { - "name": "Fictional German 3323", - "countries": [ - "GER" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, straight wing, 1 crew, attack aircraft. Warthog", - "abilities": "Boom AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "A-20G": { - "name": "A-20G", - "coalition": "blue", - "label": "A-20G Havoc", - "era": "WW2", - "shortLabel": "A20", - "loadouts": [ - { - "items": [ - { - "name": "4 x AN-M64 - 500lb GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "500 lb GP bomb LD*4", - "name": "500 lb GP bomb LD*4", - "roles": [ - "CAS", - "Strike", - "Runway Attack", - "Antiship Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - } - ], - "filename": "a-20.png", - "enabled": true, - "liveries": { - "ussr 1st gmtap": { - "name": "1st GMTAP", - "countries": [ - "SUN", - "RUS" - ] - }, - "usaf 645th bs": { - "name": "645th BS, 410th BG, 9th AF", - "countries": [ - "USA" - ] - }, - "107 sqn": { - "name": "107 SQN", - "countries": [ - "UK" - ] - }, - "ussr 27 ape dd": { - "name": "27th API DD", - "countries": [ - "SUN", - "RUS" - ] - }, - "usaf 668th bs": { - "name": "668th BS, 416th BG", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "2 propeller, straight wing, 3 crew, medium attack bomber. Havoc", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "A-50": { - "name": "A-50", - "coalition": "red", - "label": "A-50 Mainstay", - "era": "Late Cold War", - "shortLabel": "A50", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "AWACS" - ] - } - ], - "filename": "a-50.png", - "enabled": true, - "liveries": { - "rf air force": { - "name": "RF Air Force", - "countries": [ - "RUS" - ] - }, - "rf air force new": { - "name": "RF Air Force new", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 15 crew. NATO reporting name: Mainstay", - "abilities": "AEW", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "AJS37": { - "name": "AJS37", - "coalition": "blue", - "label": "AJS37 Viggen", - "era": "Mid Cold War", - "shortLabel": "AJS", - "loadouts": [ - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-75T (AGM-65A Maverick) (TV ASM Lg HE Whd)", - "quantity": 4 - } - ], - "enabled": true, - "code": "Anti-ship (Heavy Mav): RB-75T*4, XT", - "name": "Anti-ship (Heavy Mav): RB-75T*4, XT", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-75A (AGM-65A Maverick) (TV ASM)", - "quantity": 4 - } - ], - "enabled": true, - "code": "Anti-ship (Light Mav): RB-75*4, XT", - "name": "Anti-ship (Light Mav): RB-75*4, XT", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-15F Programmable Anti-ship Missile", - "quantity": 2 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Anti-Ship (Modern): RB-15F*2, RB-74*2, XT", - "name": "Anti-Ship (Modern): RB-15F*2, RB-74*2, XT", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-05A MCLOS ASM/AShM/AAM", - "quantity": 2 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Anti-ship (RB05): RB-05A*2, RB-74*2, XT", - "name": "Anti-ship (RB05): RB-05A*2, RB-74*2, XT", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Rb-04E Anti-ship Missile", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Anti-ship: RB-04E*2, RB-74*2, XT", - "name": "Anti-ship: RB-04E*2, RB-74*2, XT", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Rb-75A (AGM-65A Maverick) (TV ASM)", - "quantity": 4 - } - ], - "enabled": true, - "code": "Battlefield Air Interdiction: RB-75*4, RB-24J*2, XT", - "name": "Battlefield Air Interdiction: RB-75*4, RB-24J*2, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "4x SB M/71 120kg GP Bomb High-drag", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Bombs High-drag: SB71HD*16, XT, RB-24J", - "name": "Bombs High-drag: SB71HD*16, XT, RB-24J", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "4x SB M/71 120kg GP Bomb Low-drag", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Bombs Low-drag: SB71LD*16, RB-24J*2, XT", - "name": "Bombs Low-drag: SB71LD*16, RB-24J*2, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAP (6 AAM): RB-74*4, RB-24J*2, XT", - "name": "CAP (6 AAM): RB-74*4, RB-24J*2, XT", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "CAP (AJ37): RB-24J*2", - "name": "CAP (AJ37): RB-24J*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AKAN M/55 Gunpod, 150 rnds MINGR55-HE", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "CAP (Gun): AKAN*2, RB-74*2, XT", - "name": "CAP (Gun): AKAN*2, RB-74*2, XT", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Rb-05A MCLOS ASM/AShM/AAM", - "quantity": 2 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "CAP / Intecept: RB-05A*2, RB-74*2, XT", - "name": "CAP / Intecept: RB-05A*2, RB-74*2, XT", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "CAP: RB-74*4, XT", - "name": "CAP: RB-74*4, XT", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Rb-75A (AGM-65A Maverick) (TV ASM)", - "quantity": 2 - }, - { - "name": "AKAN M/55 Gunpod, 150 rnds MINGR55-HE", - "quantity": 2 - } - ], - "enabled": true, - "code": "CAS (75 GUN): RB-75*2, AKAN", - "name": "CAS (75 GUN): RB-75*2, AKAN", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Rb-05A MCLOS ASM/AShM/AAM", - "quantity": 2 - }, - { - "name": "AKAN M/55 Gunpod, 150 rnds MINGR55-HE", - "quantity": 2 - } - ], - "enabled": true, - "code": "CAS: AKAN, RB-05A", - "name": "CAS: AKAN, RB-05A", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ARAK M/70B HE 6x 135mm UnGd Rkts, Shu70 HE/FRAG", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "CAS: ARAK M70 HE*4, XT", - "name": "CAS: ARAK M70 HE*4, XT", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "U22/A Jammer", - "quantity": 1 - }, - { - "name": "KB Flare/Chaff dispenser pod", - "quantity": 1 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Countermeasures Escort: U/22A, KB", - "name": "Countermeasures Escort: U/22A, KB", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "KB Flare/Chaff dispenser pod", - "quantity": 1 - }, - { - "name": "Rb-04E Anti-ship Missile", - "quantity": 1 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "ECM Escort Anti-ship: RB-04E, KB, RB-74*2, XT", - "name": "ECM Escort Anti-ship: RB-04E, KB, RB-74*2, XT", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "Ferry Flight: XT", - "name": "Ferry Flight: XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Rb-05A MCLOS ASM/AShM/AAM", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "U/22 Jammer pod", - "quantity": 1 - }, - { - "name": "KB Flare/Chaff dispenser pod", - "quantity": 1 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Hard Target (Countermeasures): RB-05, XT, KB, U22", - "name": "Hard Target (Countermeasures): RB-05, XT, KB, U22", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Rb-75T (AGM-65A Maverick) (TV ASM Lg HE Whd)", - "quantity": 2 - } - ], - "enabled": true, - "code": "Hard Target (MAV): RB-75T*2, RB-74*2, XT", - "name": "Hard Target (MAV): RB-75T*2, RB-74*2, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-05A MCLOS ASM/AShM/AAM", - "quantity": 2 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Hard Target: RB-05A*2, RB-74*2, XT", - "name": "Hard Target: RB-05A*2, RB-74*2, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "2x 80kg LYSB-71 Illumination Bomb", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "Illumination: LYSB*8, XT", - "name": "Illumination: LYSB*8, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "New Payload", - "name": "New Payload", - "roles": [] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-05A MCLOS ASM/AShM/AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "RB-05*2, XT", - "name": "RB-05*2, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ARAK M/70B HE 6x 135mm UnGd Rkts, Shu70 HE/FRAG", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Rocket Full Load HE: ARAK HE*4, RB-24J, XT", - "name": "Rocket Full Load HE: ARAK HE*4, RB-24J, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "ARAK M/70B HE 6x 135mm UnGd Rkts, Shu70 HE/FRAG", - "quantity": 2 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Rocket Half Load HE: ARAK HE*2, RB-74*2, XT", - "name": "Rocket Half Load HE: ARAK HE*2, RB-74*2, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "4x SB M/71 120kg GP Bomb High-drag", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Runway Strike: SB71HD*16, RB-24J, XT", - "name": "Runway Strike: SB71HD*16, RB-24J, XT", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "KB Flare/Chaff dispenser pod", - "quantity": 1 - }, - { - "name": "Rb-75T (AGM-65A Maverick) (TV ASM Lg HE Whd)", - "quantity": 2 - }, - { - "name": "U/22 Jammer pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "SEAD: RB-75T*2, U22/A, KB, XT", - "name": "SEAD: RB-75T*2, U22/A, KB, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "BK-90 MJ1 (72 x MJ1 HE-FRAG Bomblets)", - "quantity": 2 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Strike: BK90 (MJ1)*2, RB-74*2, XT", - "name": "Strike: BK90 (MJ1)*2, RB-74*2, XT", - "roles": [ - "Strike" - ] - } - ], - "filename": "viggen.png", - "enabled": true, - "liveries": { - "37": { - "name": "#1 Splinter F21 Norrbottens Flygflottilj", - "countries": "All" - }, - "37402": { - "name": "#3 JA-37 F21 Akktu Stakki", - "countries": "All" - }, - "se-dxnv4": { - "name": "SE-DXN by Mach3DS", - "countries": "All" - }, - "f7 skaraborg": { - "name": "#4 Splinter F7 Skaraborgs Flygflottilj 76", - "countries": "All" - }, - "sf-37 akktu stakki - f21": { - "name": "SF-37 Akktu Stakki - F21", - "countries": "All" - }, - "the show must go on": { - "name": "SHOW MUST GO ON! by Bender & Mach3DS", - "countries": "All" - }, - "baremetal": { - "name": "#2 Bare Metal F7 Skaraborgs Flygflottilj", - "countries": "All" - } - }, - "type": "Aircraft", - "description": "Single jet engine, delta wing, 1 crew, attack aircraft. Viggen", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "AV8BNA": { - "name": "AV8BNA", - "coalition": "blue", - "label": "AV8BNA Harrier", - "era": "Late Cold War", - "shortLabel": "AV8", - "loadouts": [ - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", - "quantity": 2 - }, - { - "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", - "quantity": 2 - } - ], - "enabled": true, - "code": "AFAC: AIM-9m, AGM-122, SUU-25x2, LAU-68 (7 WP Tkts)x2, Jammer Pod", - "name": "AFAC: AIM-9m, AGM-122, SUU-25x2, LAU-68 (7 WP Tkts)x2, Jammer Pod", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", - "quantity": 2 - }, - { - "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", - "quantity": 2 - } - ], - "enabled": true, - "code": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 (7 WP Tkts)x2, TPOD", - "name": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 (7 WP Tkts)x2, TPOD", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", - "quantity": 2 - }, - { - "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", - "quantity": 2 - } - ], - "enabled": true, - "code": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 LAU-68 (7 WP Tkts)x2, GAU-12", - "name": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 LAU-68 (7 WP Tkts)x2, GAU-12", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", - "quantity": 4 - } - ], - "enabled": true, - "code": "Anti Armor: AIM-9Mx2, AGM-65Fx4, GAU-12", - "name": "Anti Armor: AIM-9Mx2, AGM-65Fx4, GAU-12", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "2 Mk-20 Rockeye */*", - "quantity": 2 - }, - { - "name": "2 Mk-20 Rockeye *\\*", - "quantity": 2 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "Mk-20 Rockeye - 490lbs CBU, 247 x HEAT Bomblets", - "quantity": 2 - } - ], - "enabled": true, - "code": "Area Suppression: Mk-20x10, GAU-12", - "name": "Area Suppression: Mk-20x10, GAU-12", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - }, - { - "name": "GBU-16 - 1000lb Laser Guided Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "AS: AGM-122, AIM-9M, GBU-12, GBU-16x2, TPOD, Jammer Pod, GAU-12", - "name": "AS: AGM-122, AIM-9M, GBU-12, GBU-16x2, TPOD, Jammer Pod, GAU-12", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 2 - } - ], - "enabled": true, - "code": "AS: AIM-9M, AGM-122, AGM-65E2x2, GBU-12, TPOD, Jammer Pod, GAU-12", - "name": "AS: AIM-9M, AGM-122, AGM-65E2x2, GBU-12, TPOD, Jammer Pod, GAU-12", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", - "quantity": 2 - } - ], - "enabled": true, - "code": "AS: AIM-9M, AGM-122, AGM-65Fx2, GBU-12, TPOD, Jammer Pod, GAU-12", - "name": "AS: AIM-9M, AGM-122, AGM-65Fx2, GBU-12, TPOD, Jammer Pod, GAU-12", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 6 - } - ], - "enabled": true, - "code": "H-L-H: Mk-82SEx6, GAU-12", - "name": "H-L-H: Mk-82SEx6, GAU-12", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "2 GBU-38 */*", - "quantity": 1 - }, - { - "name": "2 GBU-38 *\\*", - "quantity": 1 - }, - { - "name": "AERO 1D 300 Gallons Fuel Tank ", - "quantity": 2 - }, - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "H-M-H: AIM-9M, AGM-122, GBU-38x4, Fuel Tankx2", - "name": "H-M-H: AIM-9M, AGM-122, GBU-38x4, Fuel Tankx2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "2 Mk-82 */*", - "quantity": 1 - }, - { - "name": "2 Mk-82 *\\*", - "quantity": 1 - }, - { - "name": "3 Mk-82", - "quantity": 2 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "H-M-H: Mk-82LDx10, GAU-12", - "name": "H-M-H: Mk-82LDx10, GAU-12", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 6 - } - ], - "enabled": true, - "code": "H-M-H: Mk-82LDx6, GAU-12", - "name": "H-M-H: Mk-82LDx6, GAU-12", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "LAU-7 with AIM-9M Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12", - "name": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-7 with AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AERO 1D 300 Gallons Fuel Tank ", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12, Fuel Tankx2", - "name": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12, Fuel Tankx2", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "2 Mk-83 */*", - "quantity": 1 - }, - { - "name": "2 Mk-83 *\\*", - "quantity": 1 - }, - { - "name": "AERO 1D 300 Gallons Fuel Tank ", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx4, Jammer Pod, GAU-12, Fuel Tankx2", - "name": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx4, Jammer Pod, GAU-12, Fuel Tankx2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "2 Mk-83 *\\*", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "2 Mk-83 */*", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx6, Jammer Pod, GAU-12", - "name": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx6, Jammer Pod, GAU-12", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "2 Mk-82 Snakeye */*", - "quantity": 2 - }, - { - "name": "2 Mk-82 Snakeye *\\*", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Interdiction (H-L-L-H): AIM-9Mx2, Mk-82SEx8, Jammer Pod, GAU-12", - "name": "Interdiction (H-L-L-H): AIM-9Mx2, Mk-82SEx8, Jammer Pod, GAU-12", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 3 - }, - { - "name": "2 Mk-20 Rockeye *\\*", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "2 Mk-20 Rockeye */*", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Iron Hand: AIM-9M, AGM-122x3, Mk-20x4, Jammer Pod, GAU-12", - "name": "Iron Hand: AIM-9M, AGM-122x3, Mk-20x4, Jammer Pod, GAU-12", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 3 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Iron Hand: AIM-9Mx1, AGM-122x3, LAU-68 (7 HE Rkts)x2, Jammer Pod, GAU-12", - "name": "Iron Hand: AIM-9Mx1, AGM-122x3, LAU-68 (7 HE Rkts)x2, Jammer Pod, GAU-12", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "2 Mk-82 Snakeye *\\*", - "quantity": 2 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "2 Mk-82 Snakeye */*", - "quantity": 2 - } - ], - "enabled": true, - "code": "L-L-L: Mk-82SEx10, Jammer Pod, GAU-12", - "name": "L-L-L: Mk-82SEx10, Jammer Pod, GAU-12", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-16 - 1000lb Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM (H-H-H-H): AIM-9Mx2, GBU-16x4, TPOD, GAU-12", - "name": "PGM (H-H-H-H): AIM-9Mx2, GBU-16x4, TPOD, GAU-12", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "2 GBU-12 *-*", - "quantity": 2 - }, - { - "name": "AERO 1D 300 Gallons Fuel Tank ", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM (H-H-H-H): GBU-12x4, TPOD, Fuel Tankx2", - "name": "PGM (H-H-H-H): GBU-12x4, TPOD, Fuel Tankx2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "2 GBU-12 *-*", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM (H-H-H-H): GBU-12x5, TPOD, Jammer POd, GAU-12", - "name": "PGM (H-H-H-H): GBU-12x5, TPOD, Jammer POd, GAU-12", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM: AIM-9M, AGM-122, AGM-65E2x4, TPOD", - "name": "PGM: AIM-9M, AGM-122, AGM-65E2x4, TPOD", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM: AIM-9M, AGM-122, APKWSIIx4, TPOD", - "name": "PGM: AIM-9M, AGM-122, APKWSIIx4, TPOD", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "2 Mk-83 *\\*", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "2 Mk-83 */*", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "RA (H-M-M-H): AIM-9M, AGM-122, Mk-83LDx6, Jammer Pod, GAU-12", - "name": "RA (H-M-M-H): AIM-9M, AGM-122, Mk-83LDx6, Jammer Pod, GAU-12", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "LAU-10 pod - 4 x 127mm ZUNI, UnGd Rkts Mk71, HE/FRAG", - "quantity": 2 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", - "quantity": 2 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Rockets: LAU-10 (4 HE Rkts)x2, LAU-68 (7 HE Rkts)x2", - "name": "Rockets: LAU-10 (4 HE Rkts)x2, LAU-68 (7 HE Rkts)x2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", - "quantity": 4 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Stand Off: AIM-9M, AGM-122, AGM-65Fx4, Jammer Pod, GAU-12", - "name": "Stand Off: AIM-9M, AGM-122, AGM-65Fx4, Jammer Pod, GAU-12", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 3 - }, - { - "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Stand Off: AIM-9M, AGM-122x3, AGM-65Fx2, Jammer Pod, GAU-12", - "name": "Stand Off: AIM-9M, AGM-122x3, AGM-65Fx2, Jammer Pod, GAU-12", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-122 Sidearm", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Stand Off: AIM-9Mx2, AGM-122x2, AGM-65Fx2, Jammer Pod, GAU-12", - "name": "Stand Off: AIM-9Mx2, AGM-122x2, AGM-65Fx2, Jammer Pod, GAU-12", - "roles": [ - "SEAD" - ] - } - ], - "filename": "av8bna.png", - "enabled": true, - "liveries": { - "vmat-203": { - "name": "VMAT-203", - "countries": "All" - }, - "vma-542": { - "name": "VMA-542", - "countries": "All" - }, - "vma-311d": { - "name": "VMA-311D", - "countries": "All" - }, - "vma-223d": { - "name": "VMA-223D", - "countries": "All" - }, - "vma-513": { - "name": "VMA-513", - "countries": "All" - }, - "vma-214d": { - "name": "VMA-214D", - "countries": "All" - }, - "vma-211": { - "name": "VMA-211", - "countries": "All" - }, - "vma-231-2": { - "name": "VMA-231-2", - "countries": "All" - }, - "vmat-203s": { - "name": "VMAT-203 Special", - "countries": "All" - }, - "vma-214": { - "name": "VMA-214", - "countries": "All" - }, - "vma-513d": { - "name": "VMA-513D", - "countries": "All" - }, - "vma-231d": { - "name": "VMA-231D", - "countries": "All" - }, - "vma-311": { - "name": "VMA-311", - "countries": "All" - }, - "default": { - "name": "default", - "countries": "All" - }, - "vma-231-1": { - "name": "VMA-231-1", - "countries": "All" - }, - "vma-211d": { - "name": "VMA-211D", - "countries": "All" - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew, all weather, VTOL attack aircraft. Harrier", - "abilities": "Drogue AAR, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "An-26B": { - "name": "An-26B", - "coalition": "red", - "label": "An-26B Curl", - "era": "Mid Cold War", - "shortLabel": "A26", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Transport" - ] - } - ], - "filename": "an-26.png", - "enabled": true, - "liveries": { - "china plaaf": { - "name": "China PLAAF", - "countries": [ - "CHN" - ] - }, - "rf navy": { - "name": "RF Navy", - "countries": [ - "RUS" - ] - }, - "abkhazian af": { - "name": "Abkhazian AF", - "countries": [ - "ABH" - ] - }, - "aeroflot": { - "name": "Aeroflot", - "countries": [ - "SUN", - "RUS" - ] - }, - "georgian af": { - "name": "Georgian AF", - "countries": [ - "GRG" - ] - }, - "rf air force": { - "name": "RF Air Force", - "countries": [ - "RUS" - ] - }, - "ukraine af": { - "name": "Ukraine AF", - "countries": [ - "UKR" - ] - } - }, - "type": "Aircraft", - "description": "2 turboprop, straight wing, 5 crew, cargo and passenger aircraft. NATO reporting name: Curl", - "abilities": "Transport", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "An-30M": { - "name": "An-30M", - "coalition": "red", - "label": "An-30M Clank", - "era": "Mid Cold War", - "shortLabel": "A30", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Transport" - ] - } - ], - "filename": "a-50.png", - "enabled": true, - "liveries": { - "15th transport ab": { - "name": "15th Transport AB", - "countries": [ - "UKR" - ] - }, - "china caac": { - "name": "China CAAC", - "countries": [ - "CHN" - ] - }, - "rf air force": { - "name": "RF Air Force", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 turboprop, straight wing, 7 crew, weather reseach aircraft. NATO reporting name: Clank", - "abilities": "Transport", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "B-1B": { - "name": "B-1B", - "coalition": "blue", - "label": "B-1B Lancer", - "era": "Late Cold War", - "shortLabel": "B1", - "loadouts": [ - { - "items": [ - { - "name": "4 x AGM-154C - JSOW Unitary BROACH", - "quantity": 3 - } - ], - "enabled": true, - "code": "AGM-154*12", - "name": "AGM-154*12", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "10 x CBU-87 - 202 x CEM Cluster Bombs", - "quantity": 3 - } - ], - "enabled": true, - "code": "CBU-87*30", - "name": "CBU-87*30", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "10 x CBU-97 - 10 x SFW Cluster Bombs", - "quantity": 3 - } - ], - "enabled": true, - "code": "CBU-97*30", - "name": "CBU-97*30", - "roles": [ - "CAS" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "8 x GBU-31(V)3/B - JDAM, 2000lb GPS Guided Penetrator Bombs", - "quantity": 3 - } - ], - "enabled": true, - "code": "GBU-31(V)3/B*24", - "name": "GBU-31(V)3/B*24", - "roles": [ - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "8 x GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bombs", - "quantity": 3 - } - ], - "enabled": true, - "code": "GBU-31*24", - "name": "GBU-31*24", - "roles": [ - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "16 x GBU-38 - JDAM, 500lb GPS Guided Bombs", - "quantity": 2 - }, - { - "name": "8 x GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bombs", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-31*8, GBU-38*32", - "name": "GBU-31*8, GBU-38*32", - "roles": [ - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "10 x CBU-97 - 10 x SFW Cluster Bombs", - "quantity": 2 - }, - { - "name": "16 x GBU-38 - JDAM, 500lb GPS Guided Bombs", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-38*16, CBU-97*20", - "name": "GBU-38*16, CBU-97*20", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "16 x GBU-38 - JDAM, 500lb GPS Guided Bombs", - "quantity": 3 - } - ], - "enabled": true, - "code": "GBU-38*48", - "name": "GBU-38*48", - "roles": [ - "CAS", - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "28 x Mk-82 - 500lb GP Bombs LD", - "quantity": 3 - } - ], - "enabled": true, - "code": "Mk-82*84", - "name": "Mk-82*84", - "roles": [ - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "8 x Mk-84 - 2000lb GP Bombs LD", - "quantity": 3 - } - ], - "enabled": true, - "code": "Mk-84*24", - "name": "Mk-84*24", - "roles": [ - "Runway Attack", - "Strike" - ] - } - ], - "filename": "b-1.png", - "enabled": true, - "liveries": { - "usaf standard": { - "name": "usaf standard", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swing wing, 2 crew bomber. Lancer", - "abilities": "Boom AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "B-52H": { - "name": "B-52H", - "coalition": "blue", - "label": "B-52H Stratofortress", - "era": "Early Cold War", - "shortLabel": "B52", - "loadouts": [ - { - "items": [ - { - "name": "8 x AGM-84A Harpoon ASM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-84A*8", - "name": "AGM-84A*8", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "6 x AGM-86D on MER", - "quantity": 2 - }, - { - "name": "8 x AGM-86D", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-86C*20", - "name": "AGM-86C*20", - "roles": [ - "Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "MER12 with 12 x Mk-82 - 500lb GP Bombs LD", - "quantity": 2 - }, - { - "name": "27 x Mk-82 - 500lb GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk 82*51", - "name": "Mk 82*51", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "HSAB with 9 x Mk-83 - 1000lb GP Bombs LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-84*18", - "name": "Mk-84*18", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "HSAB with 9 x Mk-20 Rockeye - 490lbs CBUs, 247 x HEAT Bomblets", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk20*18", - "name": "Mk20*18", - "roles": [ - "Strike", - "Runway Attack" - ] - } - ], - "filename": "b-52.png", - "enabled": true, - "liveries": { - "usaf standard": { - "name": "usaf standard", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "8 jet engine, swept wing, 6 crew bomber. Stratofortress", - "abilities": "Boom AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Bf-109K-4": { - "name": "Bf-109K-4", - "coalition": "red", - "label": "Bf-109K-4 Fritz", - "era": "WW2", - "shortLabel": "109", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "300 liter Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel Tank", - "name": "Fuel Tank", - "roles": [ - "CAP", - "FAC-A", - "Escort" - ] - }, - { - "items": [ - { - "name": "SC 250 Type 3 J - 250kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC250", - "name": "SC250", - "roles": [ - "Runway Attack", - "CAS", - "Antiship Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "SC 500 J - 500kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC500", - "name": "SC500", - "roles": [ - "Runway Attack", - "CAS", - "Antiship Strike", - "Strike" - ] - } - ], - "filename": "bf109.png", - "enabled": true, - "liveries": { - "germany_standard": { - "name": "Jagdgeschwader 27", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 white 6, jg 4": { - "name": "White 6, JG 4", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 dogfight red": { - "name": "RED", - "countries": "All" - }, - "bf-109 k4 dogfight blue": { - "name": "BLUE", - "countries": "All" - }, - "bf-109 k4 red7 eads": { - "name": "BF109G4 -red7- EADS -fondation messerschmitt V2", - "countries": [ - "GER" - ] - }, - "bf-109 k4 iijg52": { - "name": "II./JG52", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 us captured": { - "name": "US Captured", - "countries": [ - "USA" - ] - }, - "bf-109 k4 stab jg52": { - "name": "Stab JG52", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 334xxx batch": { - "name": "334xxx batch", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 ussr green": { - "name": "Green-trophy RKKA", - "countries": [ - "SUN", - "RUS" - ] - }, - "bf-109 k4 330xxx batch": { - "name": "330xxx batch", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 irmgard": { - "name": "Bf-109K-4 Irmgard Captured", - "countries": [ - "USA" - ] - }, - "bf-109 k4 swiss e-3a j-374 1940": { - "name": "Swiss E-3a J-374 1940 l'Seducteur", - "countries": [ - "SUI" - ] - }, - "green": { - "name": "Green", - "countries": "All" - }, - "bf-109 k4 9.jg77": { - "name": "9./JG77", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 croatia": { - "name": "Croatia Air Force - 'Black 4'", - "countries": [ - "HRV", - "NZG", - "GER" - ] - }, - "bf-109 k4 9.jg27 (w10+i)": { - "name": "9./JG27 (W10+I)", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 legion condor spain 1939": { - "name": "6-123 ESPAÑA", - "countries": [ - "SPN" - ] - }, - "bf-109 k4 jagdgeschwader 53": { - "name": " Jagdgeschwader 53", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 1.njg 11": { - "name": "NJG 11", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 g10 of tibor tobak rhaf": { - "name": "BF109G10 RHAF Tibor Tobak by Reflected", - "countries": [ - "GER", - "HUN", - "NZG" - ] - }, - "bf-109 k4 jagdgeschwader 77": { - "name": "Jagdgeschwader 77", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 iaf s-199": { - "name": "S-199 IDF by Ovenmit", - "countries": [ - "ISR" - ] - }, - "bf-109 k4 iiijg27": { - "name": "III/JG27", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 1.njg 11 (white 5)": { - "name": "1./NJG 11 (W5)", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 raf vd 358 e-2": { - "name": "RAF VD 358 E-2 - UK Captured", - "countries": [ - "UK" - ] - }, - "bf-109 k4 335xxx batch": { - "name": "335xxx batch", - "countries": [ - "GER", - "NZG" - ] - } - }, - "type": "Aircraft", - "description": "Single propeller, straight wing, 1 crew. 109", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "C-101CC": { - "name": "C-101CC", - "coalition": "blue", - "label": "C-101CC", - "era": "Late Cold War", - "shortLabel": "101", - "loadouts": [ - { - "items": [ - { - "name": "Sea Eagle - ASM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2* SEA EAGLE, DEFA-553 CANNON", - "name": "2* SEA EAGLE, DEFA-553 CANNON", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - }, - { - "name": "BIN-200 - 200kg Napalm Incendiary Bomb", - "quantity": 2 - }, - { - "name": "Belouga", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*AIM-9M ,2*BELOUGA,2*BIN-200, AN-M3 CANNON", - "name": "2*AIM-9M ,2*BELOUGA,2*BIN-200, AN-M3 CANNON", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Sea Eagle - ASM", - "quantity": 2 - }, - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9M 2*SEA EAGLE, AN-M3 CANNON", - "name": "2*AIM-9M 2*SEA EAGLE, AN-M3 CANNON", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*AIM-9M, 2*LAU 68, 2*MK-82, DEFA 553 CANNON", - "name": "2*AIM-9M, 2*LAU 68, 2*MK-82, DEFA 553 CANNON", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9M, AN-M3 CANNON", - "name": "2*AIM-9M, AN-M3 CANNON", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9M, AN-M3 CANNON (III)", - "name": "2*AIM-9M, AN-M3 CANNON (III)", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9M, DEFA 533 CANNON (II)", - "name": "2*AIM-9M, DEFA 533 CANNON (II)", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9M, DEFA 553 CANNON (I)", - "name": "2*AIM-9M, DEFA 553 CANNON (I)", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9M, DEFA 553 CANNON (IV)", - "name": "2*AIM-9M, DEFA 553 CANNON (IV)", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - }, - { - "name": "Belouga", - "quantity": 2 - }, - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*AIM-9P, 2*BELOUGA, DEFA 553 CANNON", - "name": "2*AIM-9P, 2*BELOUGA, DEFA 553 CANNON", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "BR-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - }, - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*AIM-9P, 2*BR-250,2*MK-82, DEFA 553 CANNON", - "name": "2*AIM-9P, 2*BR-250,2*MK-82, DEFA 553 CANNON", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9P, AN-M3 CANNON (III)", - "name": "2*AIM-9P, AN-M3 CANNON (III)", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9P, AN-M3 CANNON (IV)", - "name": "2*AIM-9P, AN-M3 CANNON (IV)", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9P, DEFA 533 CANNON (II)", - "name": "2*AIM-9P, DEFA 533 CANNON (II)", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9P, DEFA 553 CANNON", - "name": "2*AIM-9P, DEFA 553 CANNON", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9P, DEFA 553 CANNON (I)", - "name": "2*AIM-9P, DEFA 553 CANNON (I)", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - }, - { - "name": "Sea Eagle - ASM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*AIM9-P, 2*SEA EAGLE, DEFA-553 CANNON", - "name": "2*AIM9-P, 2*SEA EAGLE, DEFA-553 CANNON", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Belouga", - "quantity": 2 - }, - { - "name": "BR-500 - 500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*BELOUGA, 2*BR-500, DEFA 553 CANNON", - "name": "2*BELOUGA, 2*BR-500, DEFA 553 CANNON", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Belouga", - "quantity": 2 - }, - { - "name": "4*BDU-33 - AF/B37K Rack with 4*25lb Practice Bomb LD", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*BELOUGA,2*BDU-33, DEFA-553 CANNON", - "name": "2*BELOUGA,2*BDU-33, DEFA-553 CANNON", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - }, - { - "name": "4*BDU-33 - AF/B37K Rack with 4*25lb Practice Bomb LD", - "quantity": 2 - }, - { - "name": "BR-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*R.550 MAGIC, 2*BR-250, 2*BDU-33, DEFA 553 CANNON", - "name": "2*R.550 MAGIC, 2*BR-250, 2*BDU-33, DEFA 553 CANNON", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - }, - { - "name": "Sea Eagle - ASM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R.550 MAGIC, 2*SEA EAGLE , DEFA-553 CANNON", - "name": "2*R.550 MAGIC, 2*SEA EAGLE , DEFA-553 CANNON", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - }, - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R.550 MAGIC, AN-M3 CANNON (II)", - "name": "2*R.550 MAGIC, AN-M3 CANNON (II)", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R.550 MAGIC, DEFA 553 CANNON", - "name": "2*R.550 MAGIC, DEFA 553 CANNON", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R.550 MAGIC, DEFA 553 CANNON (III)", - "name": "2*R.550 MAGIC, DEFA 553 CANNON (III)", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - }, - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*R.550 MAGIC, DEFA 553 CANNON (IV)", - "name": "2*R.550 MAGIC, DEFA 553 CANNON (IV)", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic, DEFA 553 CANNON (I)", - "name": "2*R550 Magic, DEFA 553 CANNON (I)", - "roles": [ - "CAP" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - } - ], - "filename": "c-101.png", - "enabled": true, - "liveries": { - "i brigada aerea - chile early green n.1 a-36 halcon": { - "name": "I Brigada Aerea - Chile Early Green", - "countries": [ - "CHL" - ] - }, - "aviodev skin": { - "name": "Aviodev Skin", - "countries": [ - "CUB", - "AUS", - "PRT", - "SUN", - "USA", - "BLR", - "HRV", - "LBN", - "SVK", - "TUR", - "ARG", - "BEL", - "FIN", - "SAU", - "UN", - "RSI", - "CHL", - "AUT", - "EGY", - "CAN", - "QAT", - "YUG", - "ISR", - "PER", - "BHR", - "NGA", - "IDN", - "KAZ", - "INS", - "AUSAF", - "PAK", - "SVN", - "RED", - "ROU", - "DEN", - "TUN", - "IND", - "CZE", - "MYS", - "GHA", - "OMN", - "CYP", - "RSO", - "IRN", - "UKR", - "JPN", - "THA", - "JOR", - "RSA", - "MEX", - "NOR", - "ITA", - "NETH", - "SUI", - "VNM", - "KOR", - "GRG", - "SDN", - "UK", - "BRA", - "ARE", - "ABH", - "BOL", - "RUS", - "PHL", - "SPN", - "MAR", - "DZA", - "GDR", - "HND", - "PRK", - "SRB", - "BGR", - "LBY", - "VEN", - "IRQ", - "SYR", - "NZG", - "GRC", - "POL", - "SWE", - "GER", - "CHN", - "YEM", - "FRA", - "HUN", - "ETH", - "BLUE", - "KWT" - ] - }, - "georgia combat fictional green": { - "name": "Georgia Combat Fictional Green", - "countries": [ - "GRG" - ] - }, - "i brigada aerea - chile early grey n.1 a-36 halcon": { - "name": "I Brigada Aerea - Chile Early Grey", - "countries": [ - "CHL" - ] - }, - "royal jordanian air force": { - "name": "Royal jordanian Air Force ", - "countries": [ - "JOR" - ] - }, - "georgia combat fictional spots": { - "name": "Georgia Combat Fictional Spots", - "countries": [ - "GRG" - ] - }, - "i brigada aerea - grupo de aviacion n.1 a-36 halcon desert skin": { - "name": "I Brigada Aerea - Grupo de Aviacion N.1 A-36 HALCON Desert Skin", - "countries": [ - "CHL" - ] - }, - "i brigada aerea - chile early agressor nº410 n.1 a-36 halcon": { - "name": "I Brigada Aerea - Chile Early Agressor Nº410 ", - "countries": [ - "CHL" - ] - }, - "usaf agressor fictional": { - "name": "USAF Agressor Fictional", - "countries": [ - "USA", - "AUSAF", - "BLUE" - ] - }, - "i brigada aerea - grupo de aviacion n.1 a-36 halcon": { - "name": "I Brigada Aerea - Grupo de Aviacion N.1 A-36 HALCON", - "countries": [ - "CHL" - ] - }, - "i brigada aerea - chile early agressor nº411 n.1 a-36 halcon": { - "name": "I Brigada Aerea - Chile Early Agressor Nº411", - "countries": [ - "CHL" - ] - }, - "claex green camu skin - centro logistico de armamento y experimentacion": { - "name": "CLAEX Green Camu Skin - Centro Logistico de Armamento y Experimentacion", - "countries": [ - "RED", - "SPN", - "BLUE" - ] - }, - "russia combat fictional": { - "name": "Russia Combat Fictional", - "countries": [ - "RED", - "RUS" - ] - }, - "georgia combat fictional wolf": { - "name": "Georgia Combat Fictional Wolf", - "countries": [ - "GRG" - ] - }, - "honduras - air force comayagua coronel jose enrique soto cano air base skin 1": { - "name": "Honduras - Air Force Comayagua Coronel Jose Enrique Soto Cano Air Base Skin 1", - "countries": [ - "HND" - ] - }, - "i brigada aerea - grupo de aviacion n.3 a-36 halcon": { - "name": "I Brigada Aerea - Grupo de Aviacion N.3 A-36 HALCON", - "countries": [ - "CHL" - ] - }, - "honduras - air force comayagua coronel jose enrique soto cano air base skin 2": { - "name": "Honduras - Air Force Comayagua Coronel Jose Enrique Soto Cano Air Base Skin 2", - "countries": [ - "HND" - ] - }, - "claex desert camu skin - centro logistico de armamento y experimentacion": { - "name": "CLAEX Desert Camu Skin - Centro Logistico de Armamento y Experimentacion", - "countries": [ - "RED", - "SPN", - "BLUE" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "C-130": { - "name": "C-130", - "coalition": "blue", - "label": "C-130 Hercules", - "era": "Early Cold War", - "shortLabel": "130", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Transport" - ] - } - ], - "filename": "c-130.png", - "enabled": true, - "liveries": { - "belgian air force": { - "name": "Belgian Air Force", - "countries": [ - "BEL" - ] - }, - "iriaf 5-8518": { - "name": "IRIAF 5-8518", - "countries": [ - "IRN" - ] - }, - "israel defence force": { - "name": "Israel Defence Force", - "countries": [ - "ISR" - ] - }, - "haf gray": { - "name": "Hellenic Airforce - Gray", - "countries": [ - "GRC" - ] - }, - "turkish air force": { - "name": "Turkish Air Force", - "countries": [ - "TUR" - ] - }, - "royal danish air force": { - "name": "Royal Danish Air Force", - "countries": [ - "DEN" - ] - }, - "algerian af green": { - "name": "Algerian AF Green", - "countries": [ - "DZA" - ] - }, - "royal netherlands air force": { - "name": "Royal Netherlands Air Force", - "countries": [ - "NETH" - ] - }, - "canada's air force": { - "name": "Canada's Air Force", - "countries": [ - "CAN" - ] - }, - "royal norwegian air force": { - "name": "Royal Norwegian Air Force", - "countries": [ - "NOR" - ] - }, - "iriaf 5-8503": { - "name": "IRIAF 5-8503", - "countries": [ - "IRN" - ] - }, - "us air force": { - "name": "US Air Force", - "countries": [ - "USA" - ] - }, - "royal air force": { - "name": "Royal Air Force", - "countries": [ - "UK" - ] - }, - "air algerie l-382 white": { - "name": "Air Algerie L-382 White", - "countries": [ - "DZA" - ] - }, - "french air force": { - "name": "French Air Force", - "countries": [ - "FRA" - ] - }, - "spanish air force": { - "name": "Spanish Air Force", - "countries": [ - "SPN" - ] - }, - "algerian af h30 white": { - "name": "Algerian AF H30 White", - "countries": [ - "DZA" - ] - } - }, - "type": "Aircraft", - "description": "4 turboprop, stright wing, 3 crew. Hercules", - "abilities": "Transport", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "C-17A": { - "name": "C-17A", - "coalition": "blue", - "label": "C-17A Globemaster", - "era": "Modern", - "shortLabel": "C17", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Transport" - ] - } - ], - "filename": "c-17.png", - "enabled": true, - "liveries": { - "usaf standard": { - "name": "usaf standard", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 3 crew. Globemaster", - "abilities": "Transport", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "E-2C": { - "name": "E-2C", - "coalition": "blue", - "label": "E-2D Hawkeye", - "era": "Mid Cold War", - "shortLabel": "E2", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "AWACS" - ] - } - ], - "filename": "e-2.png", - "enabled": true, - "liveries": { - "vaw-125 tigertails": { - "name": "VAW-125 Tigertails", - "countries": [ - "USA" - ] - }, - "e-2d demo": { - "name": "E-2D Demo", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "2 turboprop, straight wing, 5 crew. Hawkeye", - "abilities": "AEW, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "E-3A": { - "name": "E-3A", - "coalition": "blue", - "label": "E-3A Sentry", - "era": "Mid Cold War", - "shortLabel": "E3", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "AWACS" - ] - } - ], - "filename": "e-3.png", - "enabled": true, - "liveries": { - "nato": { - "name": "nato", - "countries": [ - "USA", - "FRA", - "UK" - ] - }, - "usaf standard": { - "name": "usaf standard", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 17 crew. Sentry", - "abilities": "AEW", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "F-117A": { - "name": "F-117A", - "coalition": "blue", - "label": "F-117A Nighthawk", - "era": "Late Cold War", - "shortLabel": "117", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-10*2", - "name": "GBU-10*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-12*2", - "name": "GBU-12*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-27 - 2000lb Laser Guided Penetrator Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-27*2", - "name": "GBU-27*2", - "roles": [ - "Strike" - ] - } - ], - "filename": "f-117.png", - "enabled": true, - "liveries": { - "usaf standard": { - "name": "usaf standard", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, delta wing, 1 crew. Nighthawk", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-14A-135-GR": { - "name": "F-14A-135-GR", - "coalition": "blue", - "label": "F-14A-135-GR Tomcat", - "era": "Late Cold War", - "shortLabel": "14A", - "loadouts": [ - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "ADM_141A", - "quantity": 4 - } - ], - "enabled": true, - "code": "ADM-141a*4, Aim-7M*2, Aim-9M*2, XT 300 GAL*2", - "name": "ADM-141a*4, Aim-7M*2, Aim-9M*2, XT 300 GAL*2", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 2 - }, - { - "name": "AIM-7F", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4, XT*2", - "name": "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-7F", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2, XT*2", - "name": "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-9L*4, XT*2", - "name": "AIM-54A-MK47*4, AIM-9L*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-9M*4, XT*2", - "name": "AIM-54A-MK47*4, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 6 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*6, AIM-9L*2, XT*2", - "name": "AIM-54A-MK47*6, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-20", - "quantity": 2 - }, - { - "name": "AIM-7F", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-20*2", - "name": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-20*2", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-82", - "quantity": 1 - }, - { - "name": "AIM-7F", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*1", - "name": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*1", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-82", - "quantity": 2 - }, - { - "name": "AIM-7F", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*2", - "name": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*2", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-20", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-82", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*4, AIM-9M*4, XT*2", - "name": "AIM-54A-MK60*4, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-7F", - "quantity": 4 - }, - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-7F*4, AIM-9L*4, XT*2", - "name": "AIM-7F*4, AIM-9L*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-7F", - "quantity": 6 - }, - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-7F*6, AIM-9L*2, XT*2", - "name": "AIM-7F*6, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "GBU-12", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", - "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "GBU-24", - "quantity": 1 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", - "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "3 BDU-33", - "quantity": 4 - } - ], - "enabled": true, - "code": "BDU-33*12", - "name": "BDU-33*12", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "MAK79 4 BDU-33", - "quantity": 2 - }, - { - "name": "MAK79 3 BDU-33", - "quantity": 2 - } - ], - "enabled": true, - "code": "BDU-33*14", - "name": "BDU-33*14", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "GBU-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-10*2", - "name": "GBU-10*2", - "roles": [ - "Strike", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "GBU-12", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-12*4", - "name": "GBU-12*4", - "roles": [ - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-16", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-16*4", - "name": "GBU-16*4", - "roles": [ - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-24", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-24*2", - "name": "GBU-24*2", - "roles": [ - "Strike", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "2 SUU-25 * 8 LUU-2", - "quantity": 1 - }, - { - "name": "SUU-25 * 8 LUU-2", - "quantity": 1 - } - ], - "enabled": true, - "code": "LUU-2*24", - "name": "LUU-2*24", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-20", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-20*4", - "name": "Mk-20*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MAK79 4 Mk-81", - "quantity": 2 - }, - { - "name": "MAK79 3 Mk-81", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-81*14", - "name": "Mk-81*14", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "MAK79 4 Mk-82", - "quantity": 2 - }, - { - "name": "MAK79 3 Mk-82", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-82*14", - "name": "Mk-82*14", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "Mk-82", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-82*4", - "name": "Mk-82*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-82AIR", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-82AIR*4", - "name": "Mk-82AIR*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-83", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-83*4", - "name": "Mk-83*4", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Mk-84", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-84*4", - "name": "Mk-84*4", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "XT*2", - "name": "XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "2 LAU-10 - 4 ZUNI MK 71", - "quantity": 1 - }, - { - "name": "LAU-10 - 4 ZUNI MK 71", - "quantity": 1 - } - ], - "enabled": true, - "code": "Zuni*12", - "name": "Zuni*12", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "2 LAU-10 - 4 ZUNI MK 71", - "quantity": 3 - }, - { - "name": "LAU-10 - 4 ZUNI MK 71", - "quantity": 1 - } - ], - "enabled": true, - "code": "Zuni*28", - "name": "Zuni*28", - "roles": [ - "Strike", - "CAS" - ] - } - ], - "filename": "f-14.png", - "enabled": true, - "liveries": { - "rogue nation(top gun - maverick)": { - "name": "Top Gun: Maverick - Rogue Nation", - "countries": "All" - }, - "vf-21 freelancers 200": { - "name": "VF-21 Freelancers 200", - "countries": "All" - }, - "vf-11 ae106 1988": { - "name": "VF-11 AE106 1988", - "countries": "All" - }, - "vf-301 nd113": { - "name": "VF-301 ND113 by Mach3DS", - "countries": "All" - }, - "vf-301 nd111": { - "name": "VF-301 ND111 by Mach3DS", - "countries": "All" - }, - "vf-154 black knights 101": { - "name": "00 - VF-154 Black Knights 101", - "countries": "All" - }, - "vf-14 tophatters aj206 (1999 allied force)": { - "name": "VF-14 Tophatters AJ206 (1999 Allied Force)", - "countries": "All" - }, - "vf-31 ae204 1988": { - "name": "VF-31 AE204 1988", - "countries": "All" - }, - "vf-1 wolfpack nk102 (1974)": { - "name": "VF-1 Wolfpack NK102 (1974)", - "countries": "All" - }, - "vf-33 starfighters ab201 (1988)": { - "name": "VF-33 Starfighters AB201(Dale Snodgrass)", - "countries": "All" - }, - "vf-31 1991 ae200": { - "name": "VF-31 1991 AE200 by Mach3DS", - "countries": "All" - }, - "vf-41 black aces aj100 (1999 allied force)": { - "name": "VF-41 Black Aces AJ100 (1999 Allied Force)", - "countries": "All" - }, - "vf-41 black aces aj101 (1999 allied force)": { - "name": "VF-41 Black Aces AJ101 (1999 Allied Force)", - "countries": "All" - }, - "vf-31 1991 ae205": { - "name": "VF-31 1991 AE205 by Mach3DS", - "countries": "All" - }, - "vf-41 black aces aj102 (1999 allied force)": { - "name": "VF-41 Black Aces AJ102 (1999 Allied Force)", - "countries": "All" - }, - "vf-1 wolfpack nk101 (1974)": { - "name": "VF-1 Wolfpack NK101 (1974)", - "countries": "All" - }, - "vf-31 ae200 1988": { - "name": "VF-31 AE200 1988", - "countries": "All" - }, - "vf-11 red rippers 106": { - "name": "VF-11 Red Rippers 106", - "countries": "All" - }, - "vf-1 wolfpack nk103 (1974)": { - "name": "VF-1 Wolfpack NK103 (1974)", - "countries": "All" - }, - "vf-14 tophatters ab103 (1976)": { - "name": "VF-14 Tophatters AB103(1976)", - "countries": "All" - }, - "vf-111 sundowners 200": { - "name": "VF-111 Sundowners 200", - "countries": "All" - }, - "top gun 114": { - "name": "Top Gun 114 Maverick and Goose", - "countries": "All" - }, - "vf-11 ae103 1988": { - "name": "VF-11 AE103 1988", - "countries": "All" - }, - "vx-4 vandy one sad bunny (1992)": { - "name": "VX-4 Vandy One Sad Bunny (1992)", - "countries": "All" - }, - "vf-211 fighting checkmates 100 (2001)": { - "name": "VF-211 Fighting Checkmates 100 (2001)", - "countries": [ - "USA" - ] - }, - "vf-301 nd104": { - "name": "VF-301 ND104 by Mach3DS", - "countries": "All" - }, - "vf-32 swordsmen ab200 (1976)": { - "name": "VF-32 Swordsmen AB200 (1976)", - "countries": "All" - }, - "vf-211 fighting checkmates 105": { - "name": "VF-211 Fighting Checkmates 105", - "countries": "All" - }, - "vf-14 tophatters ab100 (1976)": { - "name": "VF-14 Tophatters AB100(1976)", - "countries": "All" - }, - "vf-11 ae101 1988": { - "name": "VF-11 AE101 1988", - "countries": "All" - }, - "vf-14 tophatters aj202 (1999 allied force)": { - "name": "VF-14 Tophatters AJ202 (1999 Allied Force)", - "countries": "All" - }, - "vf-1 wolfpack nk100 (1974)": { - "name": "VF-1 Wolfpack NK100 (1974)", - "countries": "All" - }, - "vf-301 nd101 hivis": { - "name": "VF-301 ND101 HiVis by Mach3DS", - "countries": "All" - }, - "vf-14 tophatters aj201 (1999 allied force)": { - "name": "VF-14 Tophatters AJ201 (1999 Allied Force)", - "countries": "All" - }, - "vf-14 tophatters aj200 (1999) 80th aniversary": { - "name": "VF-14 Tophatters AJ200 (1999) 80th Anniversary", - "countries": "All" - }, - "vf-41 black aces aj104 (1999 allied force)": { - "name": "VF-41 Black Aces AJ104 (1999 Allied Force)", - "countries": "All" - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swing wing, 2 crew. Tomcat", - "abilities": "Drogue AAR, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-14B": { - "name": "F-14B", - "coalition": "blue", - "label": "F-14B Tomcat", - "era": "Late Cold War", - "shortLabel": "14B", - "loadouts": [ - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "ADM_141A", - "quantity": 4 - } - ], - "enabled": true, - "code": "ADM-141a*4, Aim-7M*2, Aim-9M*2, XT 300 GAL*2", - "name": "ADM-141a*4, Aim-7M*2, Aim-9M*2, XT 300 GAL*2", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*2, AIM-9L*2, XT*2", - "name": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*2, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", - "name": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 3 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", - "name": "AIM-54A-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-7M*2, AIM-9L*2, XT*2", - "name": "AIM-54A-MK47*4, AIM-7M*2, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", - "name": "AIM-54A-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-9M*2, AIM-9L*2, XT*2", - "name": "AIM-54A-MK47*4, AIM-9M*2, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-9M*4, XT*2", - "name": "AIM-54A-MK47*4, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 6 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*6, AIM-9L*2, XT*2", - "name": "AIM-54A-MK47*6, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 6 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*6, AIM-9M*2, XT*2", - "name": "AIM-54A-MK47*6, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-20", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-20", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-82", - "quantity": 1 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*1", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*1", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-82", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-82", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*2, AIM-7M*1, AIM-9M*4, XT*2", - "name": "AIM-54A-MK60*2, AIM-7M*1, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 3 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*2, AIM-7M*3, AIM-9M*2, XT*2", - "name": "AIM-54A-MK60*2, AIM-7M*3, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*4, AIM-7M*2, AIM-9M*2, XT*2", - "name": "AIM-54A-MK60*4, AIM-7M*2, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*4, AIM-9M*4, XT*2", - "name": "AIM-54A-MK60*4, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 6 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*6, AIM-9M*2, XT*2", - "name": "AIM-54A-MK60*6, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54C-Mk47", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54C-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", - "name": "AIM-54C-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 3 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54C-Mk47", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54C-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", - "name": "AIM-54C-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54C-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54C-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", - "name": "AIM-54C-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54C-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54C-MK47*4, AIM-9M*4, XT*2", - "name": "AIM-54C-MK47*4, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-54C-Mk47", - "quantity": 6 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54C-MK47*6, AIM-9M*2, XT*2", - "name": "AIM-54C-MK47*6, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "GBU-12", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", - "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "GBU-24", - "quantity": 1 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", - "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-7M", - "quantity": 4 - }, - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-7M*4, AIM-9L*4, XT*2", - "name": "AIM-7M*4, AIM-9L*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-7M*4, AIM-9M*2, AIM-9L*2, XT*2", - "name": "AIM-7M*4, AIM-9M*2, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-7M", - "quantity": 6 - }, - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-7M*6, AIM-9L*2, XT*2", - "name": "AIM-7M*6, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-7M", - "quantity": 6 - }, - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-7M*6, AIM-9M*2, XT*2", - "name": "AIM-7M*6, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "3 BDU-33", - "quantity": 4 - } - ], - "enabled": true, - "code": "BDU-33*12", - "name": "BDU-33*12", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "MAK79 4 BDU-33", - "quantity": 2 - }, - { - "name": "MAK79 3 BDU-33", - "quantity": 2 - } - ], - "enabled": true, - "code": "BDU-33*14", - "name": "BDU-33*14", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "GBU-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-10*2", - "name": "GBU-10*2", - "roles": [ - "Strike", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "GBU-12", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-12*4", - "name": "GBU-12*4", - "roles": [ - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-16", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-16*4", - "name": "GBU-16*4", - "roles": [ - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-24", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-24*2", - "name": "GBU-24*2", - "roles": [ - "Strike", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "2 SUU-25 * 8 LUU-2", - "quantity": 1 - }, - { - "name": "SUU-25 * 8 LUU-2", - "quantity": 1 - } - ], - "enabled": true, - "code": "LUU-2*24", - "name": "LUU-2*24", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-20", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-20*4", - "name": "Mk-20*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MAK79 4 Mk-81", - "quantity": 2 - }, - { - "name": "MAK79 3 Mk-81", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-81*14", - "name": "Mk-81*14", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "MAK79 4 Mk-82", - "quantity": 2 - }, - { - "name": "MAK79 3 Mk-82", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-82*14", - "name": "Mk-82*14", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "Mk-82", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-82*4", - "name": "Mk-82*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-82AIR", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-82AIR*4", - "name": "Mk-82AIR*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-83", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-83*4", - "name": "Mk-83*4", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Mk-84", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-84*4", - "name": "Mk-84*4", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "XT*2", - "name": "XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "2 LAU-10 - 4 ZUNI MK 71", - "quantity": 1 - }, - { - "name": "LAU-10 - 4 ZUNI MK 71", - "quantity": 1 - } - ], - "enabled": true, - "code": "Zuni*12", - "name": "Zuni*12", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "2 LAU-10 - 4 ZUNI MK 71", - "quantity": 3 - }, - { - "name": "LAU-10 - 4 ZUNI MK 71", - "quantity": 1 - } - ], - "enabled": true, - "code": "Zuni*28", - "name": "Zuni*28", - "roles": [ - "Strike", - "CAS" - ] - } - ], - "filename": "f-14.png", - "enabled": true, - "liveries": { - "vf-103 sluggers 206 (1995)": { - "name": "VF-103 Sluggers 206 (1995)", - "countries": "All" - }, - "vf-143 pukin dogs low vis": { - "name": "VF-143 Pukin Dogs Low Vis (1998)", - "countries": "All" - }, - "rogue nation(top gun - maverick)": { - "name": "Top Gun: Maverick - Rogue Nation", - "countries": "All" - }, - "vf-31 tomcatters nk101 (2004)": { - "name": "VF-31 Tomcatters NK101 (2004)", - "countries": "All" - }, - "vf-32 fighting swordsmen 103": { - "name": "VF-32 Fighting Swordsmen 103 (1998)", - "countries": "All" - }, - "vf-103 jolly rogers hi viz": { - "name": "VF-103 Jolly Rogers Hi Viz", - "countries": "All" - }, - "vf-101 dark": { - "name": "VF-101 Dark", - "countries": "All" - }, - "vf-102 diamondbacks": { - "name": "01 - VF-102 Diamondbacks 1996", - "countries": "All" - }, - "vf-143 pukin dogs low vis (1995)": { - "name": "VF-143 Pukin Dogs Low Vis (1995)", - "countries": "All" - }, - "vx-4 xf-51 1988": { - "name": "VX-4 XF-51 1988", - "countries": "All" - }, - "top gun 114 hb weather": { - "name": "Top Gun 114 Maverick and Goose", - "countries": "All" - }, - "vf-24 renegades": { - "name": "VF-24 Renegades Low-Viz", - "countries": "All" - }, - "vf-11 red rippers (1997)": { - "name": "VF-11 Red Rippers (1997)", - "countries": "All" - }, - "vf-32 fighting swordsmen 100 (2000)": { - "name": "VF-32 Fighting Swordsmen 100 (2000)", - "countries": [ - "USA" - ] - }, - "vf-74 bedevilers 1991": { - "name": "VF-74 Be-Devilers 1991", - "countries": "All" - }, - "santa": { - "name": "Fictional Christmas Livery", - "countries": "All" - }, - "vf-103 sluggers 207 (1991)": { - "name": "VF-103 Sluggers 207 (1991)", - "countries": "All" - }, - "vf-32 fighting swordsmen 101": { - "name": "VF-32 Fighting Swordsmen 101 (1998)", - "countries": "All" - }, - "vf-103 last ride": { - "name": "VF-103 Last Ride", - "countries": "All" - }, - "vf-143 pukin dogs cag": { - "name": "VF-143 Pukin' Dogs CAG", - "countries": "All" - }, - "vx-9 vampires xf240 white whale": { - "name": "VX-9 Vampires XF240 White Whale", - "countries": "All" - }, - "vf-74 adversary": { - "name": "VF-74 Adversary", - "countries": "All" - }, - "vx-9 vandy 41 (1995)": { - "name": "VX-9 Vandy 41 (1995)", - "countries": "All" - }, - "vf-142 ghostriders": { - "name": "VF-142 Ghostriders", - "countries": "All" - }, - "vf-211 fighting checkmates": { - "name": "VF-211 Fighting Checkmates", - "countries": "All" - }, - "vf-101 grim reapers low vis": { - "name": "VF-101 Grim Reapers Low Vis", - "countries": "All" - }, - "chromecat": { - "name": "Fictional Chrome Cat ", - "countries": "All" - }, - "vf-32 fighting swordsmen 102": { - "name": "VF-32 Fighting Swordsmen 102 (1998)", - "countries": "All" - }, - "vf-102 diamondbacks 102": { - "name": "VF-102 Diamondbacks 102 (2000)", - "countries": "All" - }, - "vf-101 red": { - "name": "VF-101 Red", - "countries": "All" - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swing wing, 2 crew. Tomcat", - "abilities": "Drogue AAR, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-15C": { - "name": "F-15C", - "coalition": "blue", - "label": "F-15C Eagle", - "era": "Late Cold War", - "shortLabel": "15C", - "loadouts": [ - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120*8,Fuel", - "name": "AIM-120*8,Fuel", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 3 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-120*8,Fuel*3", - "name": "AIM-120*8,Fuel*3", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel tank 610 gal", - "quantity": 3 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-120B*4, AIM-7M*2, AIM-9M*2, Fuel*3", - "name": "AIM-120B*4, AIM-7M*2, AIM-9M*2, Fuel*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel", - "name": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 3 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel*3", - "name": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel*3", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9*2,AIM-120*6,Fuel", - "name": "AIM-9*2,AIM-120*6,Fuel", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 3 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-9*2,AIM-120*6,Fuel*3", - "name": "AIM-9*2,AIM-120*6,Fuel*3", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9*4,AIM-120*4,Fuel", - "name": "AIM-9*4,AIM-120*4,Fuel", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 3 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-9*4,AIM-120*4,Fuel*3", - "name": "AIM-9*4,AIM-120*4,Fuel*3", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9*4,AIM-7*4,Fuel", - "name": "AIM-9*4,AIM-7*4,Fuel", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 3 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-9*4,AIM-7*4,Fuel*3", - "name": "AIM-9*4,AIM-7*4,Fuel*3", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - } - ], - "filename": "f-15.png", - "enabled": true, - "liveries": { - "106th sqn (8th airbase)": { - "name": "106th SQN (8th Airbase)", - "countries": [ - "ISR" - ] - }, - "433rd weapons sqn (wa)": { - "name": "433rd Weapons SQN (WA)", - "countries": [ - "USA" - ] - }, - "493rd fighter sqn (ln)": { - "name": "493rd Fighter SQN (LN)", - "countries": [ - "USA" - ] - }, - "12th fighter sqn (ak)": { - "name": "12th Fighter SQN (AK)", - "countries": [ - "USA" - ] - }, - "390th fighter sqn": { - "name": "390th Fighter SQN", - "countries": [ - "USA" - ] - }, - "65th aggressor sqn (wa) flanker": { - "name": "65th Aggressor SQN (WA) Flanker", - "countries": [ - "USA", - "AUSAF" - ] - }, - "65th aggressor sqn (wa) super_flanker": { - "name": "65th Aggressor SQN (WA) SUPER_Flanker", - "countries": [ - "USA", - "AUSAF" - ] - }, - "65th aggressor sqn (wa) mig": { - "name": "65th Aggressor SQN (WA) MiG", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ferris scheme": { - "name": "Ferris Scheme", - "countries": [ - "USA" - ] - }, - "58th fighter sqn (eg)": { - "name": "58th Fighter SQN (EG)", - "countries": [ - "USA" - ] - }, - "haf aegean ghost": { - "name": "Hellenic Airforece - Aegean Ghost (Fictional)", - "countries": [ - "GRC" - ] - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swept wing, 2 crew, all weather fighter. Eagle.", - "abilities": "Boom AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-16C_50": { - "name": "F-16C_50", - "coalition": "blue", - "label": "F-16C Viper", - "era": "Late Cold War", - "shortLabel": "16", - "loadouts": [ - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120*2, AIM-9X*2, MK-82SE*4, FUEL*2, ECM, TGP", - "name": "AIM-120*2, AIM-9X*2, MK-82SE*4, FUEL*2, ECM, TGP", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 3 x Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120*2, AIM-9X*2, MK-82SE*6, FUEL*2, ECM, TGP", - "name": "AIM-120*2, AIM-9X*2, MK-82SE*6, FUEL*2, ECM, TGP", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120B*2, AIM-9M*4, FUEL*3", - "name": "AIM-120B*2, AIM-9M*4, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120B*4, AIM-9M*2, FUEL*3", - "name": "AIM-120B*4, AIM-9M*2, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 6 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120B*6, FUEL*3", - "name": "AIM-120B*6, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65D*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65D*2, FUEL*2, ECM, TGP", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65D*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65D*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65G, AGM-65K, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65G, AGM-65K, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65G*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65G*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65H*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65H*2, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65H*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65H*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65K*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65K*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/ASQ-213 HTS - HARM Targeting System", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*2, ECM, TGP, HTS", - "name": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*2, ECM, TGP, HTS", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - }, - { - "name": "AN/ASQ-213 HTS - HARM Targeting System", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*3, TGP, HTS", - "name": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*3, TGP, HTS", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 4 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/ASQ-213 HTS - HARM Targeting System", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-88C*4, ECM, TGP, HTS", - "name": "AIM-120C*2, AIM-9X*2, AGM-88C*4, ECM, TGP, HTS", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BRU-57 with 2 x CBU-103 - 202 x CEM, CBU with WCMD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, CBU-103*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, CBU-103*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BRU-57 with 2 x CBU-105 - 10 x SFW, CBU with WCMD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, CBU-105*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, CBU-105*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, CBU-87*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, CBU-87*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, CBU-97*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, CBU-97*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-10*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-10*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-12*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-12*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-12*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-12*4, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-24 Paveway III - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-24*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-24*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-31-1B*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-31-1B*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-31(V)3/B - JDAM, 2000lb GPS Guided Penetrator Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-31-3B*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-31-3B*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-38*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-38*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BRU-57 with 2 x GBU-38 - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-38*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-38*4, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts Mk61, Practice", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-61*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-61*2, FUEL*2, ECM, TGP", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-82*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-82*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 3 x Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-82*6, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-82*6, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-82HD*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-82HD*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 3 x Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-82HD*6, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-82HD*6, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-82P*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-82P*4, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-84*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-84*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": null, - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*4, FUEL*2", - "name": "AIM-120C*2, AIM-9X*4, FUEL*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/ASQ-213 HTS - HARM Targeting System", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AGM-88C*2, FUEL*2, ECM, TGP, HTS", - "name": "AIM-120C*4, AGM-88C*2, FUEL*2, ECM, TGP, HTS", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - }, - { - "name": "AN/ASQ-213 HTS - HARM Targeting System", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AGM-88C*2, FUEL*3, TGP, HTS", - "name": "AIM-120C*4, AGM-88C*2, FUEL*3, TGP, HTS", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 4 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/ASQ-213 HTS - HARM Targeting System", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AGM-88C*4, ECM, TGP, HTS", - "name": "AIM-120C*4, AGM-88C*4, ECM, TGP, HTS", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": null, - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AIM-9X*2, FUEL*2", - "name": "AIM-120C*4, AIM-9X*2, FUEL*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM", - "name": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM, TGP", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AIM-9X*2, FUEL*3", - "name": "AIM-120C*4, AIM-9X*2, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AIM-9X*2, FUEL*3, TGP", - "name": "AIM-120C*4, AIM-9X*2, FUEL*3, TGP", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 6 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": null, - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*6, FUEL*2", - "name": "AIM-120C*6, FUEL*2", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 6 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*6, FUEL*2, ECM", - "name": "AIM-120C*6, FUEL*2, ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 6 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*6, FUEL*2, ECM, TGP", - "name": "AIM-120C*6, FUEL*2, ECM, TGP", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 6 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*6, FUEL*3", - "name": "AIM-120C*6, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 6 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*6, FUEL*3, TGP", - "name": "AIM-120C*6, FUEL*3, TGP", - "roles": [ - "Escort" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - } - ], - "filename": "f-16c.png", - "enabled": true, - "liveries": { - "haf_347_perseus": { - "name": "HAF 347S Perseus Squadron", - "countries": [ - "GRC" - ] - }, - "ami, 5 stormo 23 gruppo": { - "name": "Italian Air Force, 5° Stormo, 23 Gruppo", - "countries": [ - "ITA" - ] - }, - "haf_337_ghost": { - "name": "HAF 337 Ghost Squadron", - "countries": [ - "GRC" - ] - }, - "haf_ 330_thunder": { - "name": "HAF 330 Thunder Squadron", - "countries": [ - "GRC" - ] - }, - "haf_336_olympus": { - "name": "HAF 336 Olympus Squadron", - "countries": [ - "GRC" - ] - }, - "iaf_117th_squadron": { - "name": "IAF 117th squadron", - "countries": [ - "ISR" - ] - }, - "jasdf 8th tfs": { - "name": "JASDF 8th TFS", - "countries": [ - "JPN" - ] - }, - "haf_340_fox": { - "name": "HAF 340 Fox Squadron", - "countries": [ - "GRC" - ] - }, - "haf_346_jason": { - "name": "HAF 346 Jason Squadron", - "countries": [ - "GRC" - ] - }, - "paf_no.9_griffins_1": { - "name": "PAF No.9 Griffins (TRIBUTE TO WC NAUMAN)", - "countries": [ - "PAK" - ] - }, - "522nd_fighter_squadron": { - "name": "522nd Fighter Squadron 'Fireballs'", - "countries": [ - "USA" - ] - }, - "default": { - "name": "default livery", - "countries": [ - "USA" - ] - }, - "18th agrs arctic splinter": { - "name": "18th AGRS ArÑtic Splinter", - "countries": [ - "USA", - "AUSAF" - ] - }, - "iaf_115th_aggressors_squadron": { - "name": "IAF 115th aggressors squadron", - "countries": [ - "ISR" - ] - }, - "chile air force 732": { - "name": "Chile Air Force 732", - "countries": [ - "CHL" - ] - }, - "iaf_110th_squadron": { - "name": "IAF 110th squadron", - "countries": [ - "ISR" - ] - }, - "paf_no.29_aggressors": { - "name": "PAF No.29 Aggressor", - "countries": [ - "PAK" - ] - }, - "79th_fighter_squadron": { - "name": "79th Fighter Squadron 'Tigers'", - "countries": [ - "USA" - ] - }, - "paf_no.5_falcons": { - "name": "PAF No.5 Falcons", - "countries": [ - "PAK" - ] - }, - "18th agrs splinter": { - "name": "18th AGRS Blue Splinter", - "countries": [ - "USA", - "AUSAF" - ] - }, - "dark_viper": { - "name": "F-16C Dark Viper", - "countries": [ - "USA" - ] - }, - "jasdf 6th tfs": { - "name": "JASDF 6th TFS", - "countries": [ - "JPN" - ] - }, - "23rd_fighter_squadron": { - "name": "23rd Fighter Squadron 'Fighting Hawks'", - "countries": [ - "USA" - ] - }, - "polish af standard": { - "name": "Polish AF standard", - "countries": [ - "POL" - ] - }, - "480th_fighter_squadron": { - "name": "480th Fighter Squadron 'Warhawks'", - "countries": [ - "USA" - ] - }, - "18th agrs bdu splinter": { - "name": "18th AGRS BDU Splinter", - "countries": [ - "USA", - "AUSAF" - ] - }, - "174th_fighter_squadron": { - "name": "174th Fighter Squadron ANG,Iowa AFB", - "countries": [ - "USA" - ] - }, - "thk_191_filo": { - "name": "Türk Hava Kuvvetleri, 191 Filo", - "countries": [ - "TUR" - ] - }, - "chile air force 746": { - "name": "Chile Air Force 746", - "countries": [ - "CHL" - ] - }, - "haf_335_tiger": { - "name": "HAF 335 Tiger Squadron", - "countries": [ - "GRC" - ] - }, - "77th_fighter_squadron": { - "name": "77th Fighter Squadron 'Gamblers' ", - "countries": [ - "USA" - ] - }, - "132nd_wing _iowa_ang": { - "name": "132nd Wing Iowa ANG, Des Moines AFB", - "countries": [ - "USA" - ] - }, - "usaf 64th aggressor sqn-splinter": { - "name": "USAF 64th Aggressor SQN-Splinter", - "countries": [ - "USA", - "AUSAF" - ] - }, - "14th_fighter_squadron": { - "name": "14th Fighter Squadron 'Samurais'", - "countries": [ - "USA" - ] - }, - "152nd_fighter_squadron": { - "name": "152nd Fighter Squadron 'Las Vaqueros'", - "countries": [ - "USA" - ] - }, - "179th_fighter_squadron": { - "name": "179th Fighter Squadron 'Bulldogs'", - "countries": [ - "USA" - ] - }, - "paf_no.19_sherdils": { - "name": "PAF No.19 Sherdils", - "countries": [ - "PAK" - ] - }, - "64th_aggressor_squadron_ghost": { - "name": "64th Aggressor Squadron “Ghost", - "countries": [ - "USA", - "AUSAF" - ] - }, - "paf_no.9 griffins_2": { - "name": "PAF No.9 Griffins", - "countries": [ - "PAK" - ] - }, - "paf_no.11_arrows": { - "name": "PAF No.11 Arrows", - "countries": [ - "PAK" - ] - }, - "haf_343_star": { - "name": "HAF 343 Star Squadron", - "countries": [ - "GRC" - ] - }, - "80th_fighter_squadron": { - "name": "80th Fighter Squadron, Kunsan AFB", - "countries": [ - "USA" - ] - }, - "36th_fighter_squadron": { - "name": "36th Fighter Squadron Osan Air Base", - "countries": [ - "USA" - ] - }, - "22nd_fighter_squadron": { - "name": "22nd Fighter Squadron 'Stingers'", - "countries": [ - "USA" - ] - }, - "55th_fighter_squadron": { - "name": "55th Fighter Squadron 'Fifty Fifth'", - "countries": [ - "USA" - ] - }, - "iaf_101st_squadron": { - "name": "IAF 101st squadron", - "countries": [ - "ISR" - ] - }, - "polish_af_31blt6th_tactical_sqn": { - "name": "Polish AF 31.Blt 6th Tactical Sqn (PoznaÅ„-Krzesiny AB) - Tiger Meet", - "countries": [ - "POL" - ] - }, - "13th_fighter_squadron": { - "name": "13th Fighter Squadron 'Panthers'", - "countries": [ - "USA" - ] - }, - "haf_341_arrow": { - "name": "HAF 341 Arrow Squadron", - "countries": [ - "GRC" - ] - }, - "usaf 64th aggressor sqn - shark": { - "name": "USAF 64th Aggressor SQN - Shark", - "countries": [ - "USA", - "AUSAF" - ] - }, - "chile air force 851": { - "name": "Chile Air Force 851", - "countries": [ - "CHL" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew, all weather fighter and strike. Viper.", - "abilities": "Boom AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-4E": { - "name": "F-4E", - "coalition": "blue", - "label": "F-4E Phantom II", - "era": "Mid Cold War", - "shortLabel": "4", - "loadouts": [ - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "LAU-118a with AGM-45B Shrike ARM (Imp)", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-45*2,AIM-7*2,Fuel*2,ECM", - "name": "AGM-45*2,AIM-7*2,Fuel*2,ECM", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "LAU-118a with AGM-45B Shrike ARM (Imp)", - "quantity": 4 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-45*4,AIM-7*2,ECM", - "name": "AGM-45*4,AIM-7*2,ECM", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65K*4,AIM-7*2,Fuel*2,ECM", - "name": "AGM-65K*4,AIM-7*2,Fuel*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - }, - { - "name": "F-4 Fuel tank-C", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65K*4,AIM-7M*4,Fuel*3", - "name": "AGM-65K*4,AIM-7M*4,Fuel*3", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "LAU-118a with AGM-45B Shrike ARM (Imp)", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM45*2_AGM-65D*4_AIM7*2_ECM", - "name": "AGM45*2_AGM-65D*4_AIM7*2_ECM", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "LAU-7 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-9*4,AIM-7*4", - "name": "AIM-9*4,AIM-7*4", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "LAU-7 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-9*4,AIM-7*4,Fuel*2", - "name": "AIM-9*4,AIM-7*4,Fuel*2", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "F-4 Fuel tank-C", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel*3", - "name": "Fuel*3", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-10*2,AIM-7*2,Fuel*2,ECM", - "name": "GBU-10*2,AIM-7*2,Fuel*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-12*2,AIM-7*2,Fuel*2,ECM", - "name": "GBU-12*2,AIM-7*2,Fuel*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MER6 with 6 x Mk-82 - 500lb GP Bombs LD", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-82*18,AIM-7*2,ECM", - "name": "Mk-82*18,AIM-7*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-82*6,AIM-7*2,Fuel*2,ECM", - "name": "Mk-82*6,AIM-7*2,Fuel*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-84*2,AIM-7*2,ECM", - "name": "Mk-84*2,AIM-7*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BRU-42 with 3 x Mk-20 Rockeye - 490lbs CBUs, 247 x HEAT Bomblets", - "quantity": 4 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk20*12,AIM-7*2,ECM", - "name": "Mk20*12,AIM-7*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-20 Rockeye - 490lbs CBUs, 247 x HEAT Bomblets", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk20*6,AIM-7*2,Fuel*2,ECM", - "name": "Mk20*6,AIM-7*2,Fuel*2,ECM", - "roles": [ - "CAS" - ] - } - ], - "filename": "f-4.png", - "enabled": true, - "liveries": { - "haf aegean ghost": { - "name": "Hellenic Airforce - Aegean Ghost", - "countries": [ - "GRC" - ] - }, - "iriaf asia minor": { - "name": "IRIAF Asia Minor", - "countries": [ - "IRN" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "GER" - ] - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swept wing, 2 crew. Phantom", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-5E-3": { - "name": "F-5E-3", - "coalition": "blue", - "label": "F-5E Tiger", - "era": "Mid Cold War", - "shortLabel": "5", - "loadouts": [ - { - "items": [ - { - "name": "AIM-9B Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9B*2", - "name": "AIM-9B*2", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9B Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9B*2, Fuel 150", - "name": "AIM-9B*2, Fuel 150", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9B Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9B*2, Fuel 150*3", - "name": "AIM-9B*2, Fuel 150*3", - "roles": [ - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9B Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9B*2, Fuel 275", - "name": "AIM-9B*2, Fuel 275", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9B Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9B*2, Fuel 275*3", - "name": "AIM-9B*2, Fuel 275*3", - "roles": [ - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9P*2", - "name": "AIM-9P*2", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9P*2, Fuel 150", - "name": "AIM-9P*2, Fuel 150", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9P*2, Fuel 150*3", - "name": "AIM-9P*2, Fuel 150*3", - "roles": [ - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9P*2, Fuel 275", - "name": "AIM-9P*2, Fuel 275", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9P*2, Fuel 275*3", - "name": "AIM-9P*2, Fuel 275*3", - "roles": [ - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P5 Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9P5*2", - "name": "AIM-9P5*2", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P5 Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9P5*2, Fuel 150", - "name": "AIM-9P5*2, Fuel 150", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P5 Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9P5*2, Fuel 150*3", - "name": "AIM-9P5*2, Fuel 150*3", - "roles": [ - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P5 Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9P5*2, Fuel 275", - "name": "AIM-9P5*2, Fuel 275", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P5 Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9P5*2, Fuel 275*3", - "name": "AIM-9P5*2, Fuel 275*3", - "roles": [ - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AN/ASQ-T50 TCTS Pod - ACMI Pod", - "quantity": 1 - }, - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AN/ASQ-T50, AIM-9P, Fuel 150", - "name": "AN/ASQ-T50, AIM-9P, Fuel 150", - "roles": [] - }, - { - "items": [ - { - "name": "AIM-9P5 Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Antiship Mk82", - "name": "Antiship Mk82", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "CBU-52B - 220 x HE/Frag bomblets", - "quantity": 4 - } - ], - "enabled": true, - "code": "CBU-52B*4,AIM-9P*2,Fuel 275", - "name": "CBU-52B*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "CBU-52B - 220 x HE/Frag bomblets", - "quantity": 5 - } - ], - "enabled": true, - "code": "CBU-52B*5,AIM-9*2", - "name": "CBU-52B*5,AIM-9*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-12*4,AIM-9P*2,Fuel 275", - "name": "GBU-12*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 1 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 2 - }, - { - "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - } - ], - "enabled": true, - "code": "LAU-3 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", - "name": "LAU-3 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 4 - } - ], - "enabled": true, - "code": "LAU-3 HE*4,AIM-9P*2,Fuel 275", - "name": "LAU-3 HE*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", - "quantity": 4 - } - ], - "enabled": true, - "code": "LAU-3 HEAT*4,AIM-9P*2,Fuel 275", - "name": "LAU-3 HEAT*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 1 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 2 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - } - ], - "enabled": true, - "code": "LAU-68 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", - "name": "LAU-68 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 4 - } - ], - "enabled": true, - "code": "LAU-68 HE*4,AIM-9P*2,Fuel 275", - "name": "LAU-68 HE*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", - "quantity": 4 - } - ], - "enabled": true, - "code": "LAU-68 HEAT*4,AIM-9P*2,Fuel 275", - "name": "LAU-68 HEAT*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "M117 - 750lb GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "M-117*4,AIM-9P*2,Fuel 275", - "name": "M-117*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "M117 - 750lb GP Bomb LD", - "quantity": 5 - } - ], - "enabled": true, - "code": "M-117*5,AIM-9*2", - "name": "M-117*5,AIM-9*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82LD*4,AIM-9P*2,Fuel 275", - "name": "Mk-82LD*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 5 - } - ], - "enabled": true, - "code": "Mk-82LD*5,AIM-9*2", - "name": "Mk-82LD*5,AIM-9*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 2 - }, - { - "name": "5 x Mk-82 - 500lb GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82LD*7,AIM-9P*2, Fuel 275*2", - "name": "Mk-82LD*7,AIM-9P*2, Fuel 275*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 4 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82SE*4,AIM-9P*2,Fuel 275", - "name": "Mk-82SE*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 5 - } - ], - "enabled": true, - "code": "Mk-82SE*5,AIM-9*2", - "name": "Mk-82SE*5,AIM-9*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 2 - }, - { - "name": "5 x Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82SE*7,AIM-9P*2, Fuel 275*2", - "name": "Mk-82SE*7,AIM-9P*2, Fuel 275*2", - "roles": [ - "CAS", - "Strike" - ] - } - ], - "liveryID": [ - "ir iriaf 43rd tfs" - ], - "filename": "f-5.png", - "enabled": true, - "liveries": { - "us aggressor vfc-13 40": { - "name": "Aggressor VFC-13 40", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch swiss generic": { - "name": "Swiss Generic two-tone skin", - "countries": [ - "SUI" - ] - }, - "tw ngrc 5315": { - "name": "NGRC 5thFG 5315", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch j-3079": { - "name": "J-3079", - "countries": [ - "SUI" - ] - }, - "sa royal saudi air force": { - "name": "Royal Saudi Air Force", - "countries": [ - "SAU" - ] - }, - "no 336 sq": { - "name": "336 Skvadron", - "countries": [ - "NOR" - ] - }, - "tw rocaf 7thfg(m)": { - "name": "ROCAF 7thFG(LV)", - "countries": [ - "USA", - "AUSAF" - ] - }, - "us aggressor vfc-111 105 wwii b": { - "name": "Sundowners VFC-111 105 WWII B", - "countries": [ - "USA", - "AUSAF" - ] - }, - "br fab 4828": { - "name": "2/1 GAvCa - FAB 4828", - "countries": [ - "BRA" - ] - }, - "usaf 'southeast asia'": { - "name": "USAF 'Southeast Asia'", - "countries": [ - "USA", - "AUSAF" - ] - }, - "br fab 4846": { - "name": "FAB 4846", - "countries": [ - "BRA" - ] - }, - "aggressor vfc-13 21": { - "name": "Aggressor VFC-13 21", - "countries": [ - "USA", - "AUSAF" - ] - }, - "no 334 sqn 373": { - "name": "RNoAF 334 sqn 373", - "countries": [ - "NOR" - ] - }, - "rocaf 7th fighter group": { - "name": "ROCAF 7th Fighter Group", - "countries": [ - "AUSAF" - ] - }, - "ch j-3036 2017": { - "name": "J-3036 Sion 2017", - "countries": [ - "SUI" - ] - }, - "us aggressor vfc-111 116": { - "name": "Sundowners VFC-116", - "countries": [ - "USA", - "AUSAF" - ] - }, - "black 'mig-28'": { - "name": "black 'Mig-28'", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch j-3073 2017": { - "name": "J-3073_2017", - "countries": [ - "SUI" - ] - }, - "fi 11th fs lapland air command": { - "name": "FiAF 11th FS Lapland Air Command", - "countries": [ - "FIN" - ] - }, - "ir iriaf azarakhsh": { - "name": "HESA Azarakhsh", - "countries": [ - "IRN" - ] - }, - "ch j-3098": { - "name": "J-3098", - "countries": [ - "SUI" - ] - }, - "ir iriaf 43rd tfs": { - "name": "IRIAF - 43rd TFS", - "countries": [ - "IRN" - ] - }, - "no 338 sqn 215": { - "name": "RNoAF 338 sqn 215", - "countries": [ - "NOR" - ] - }, - "us usaf grape 31": { - "name": "USAF Grape 31", - "countries": [ - "USA", - "AUSAF" - ] - }, - "no 332 sqn ah-p": { - "name": "RNoAF 332 sqn AH-P", - "countries": [ - "NOR" - ] - }, - "ch j-3001 variante 1996": { - "name": "J-3001 GRD Emmen 1996", - "countries": [ - "SUI" - ] - }, - "us aggressor vfc-111 01": { - "name": "Sundowners VFC-111 01", - "countries": [ - "USA", - "AUSAF" - ] - }, - "3rd main jet base group command, turkey": { - "name": "133 squadron, 3rd Main Jet Base Group Command, Turkey", - "countries": [ - "TUR" - ] - }, - "kr rokaf 10th fighter wing": { - "name": "ROKAF 10th FW KF-5E 10-584", - "countries": [ - "KOR" - ] - }, - "sp spanish air force 21-51": { - "name": "Ejercito del Aire Camo 21-51", - "countries": [ - "SPN" - ] - }, - "aggressor vfc-13 11": { - "name": "Aggressor VFC-13 11", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch j-3001 variante 1986": { - "name": "J-3001 GRD Emmen 1986", - "countries": [ - "SUI" - ] - }, - "usa standard": { - "name": "Standard Gray", - "countries": [ - "BRA", - "MYS", - "AUS", - "ABH", - "RUS", - "SPN", - "ISR", - "USA", - "BHR", - "BLR", - "HRV", - "RSO", - "SVK", - "IRN", - "UKR", - "TUR", - "JPN", - "PRK", - "SRB", - "KAZ", - "BGR", - "BEL", - "INS", - "THA", - "AUSAF", - "PAK", - "JOR", - "FIN", - "MEX", - "NOR", - "IRQ", - "SYR", - "ITA", - "GRC", - "POL", - "NETH", - "GER", - "SUI", - "CHN", - "SAU", - "SWE", - "ROU", - "FRA", - "KOR", - "HUN", - "AUT", - "GRG", - "DEN", - "TUN", - "EGY", - "IND", - "CZE", - "CAN", - "SDN", - "UK" - ] - }, - "5th fs merzifon air base, turkey": { - "name": "5th fs Merzifon air base, Turkish air force", - "countries": [ - "TUR" - ] - }, - "ch j-3001 variante 2000": { - "name": "J-3001 FlSt 08 2000", - "countries": [ - "SUI" - ] - }, - "ir iriaf camo": { - "name": "IRIAF F-5E Standard", - "countries": [ - "IRN" - ] - }, - "it aereonautica militare italiana": { - "name": "Aereonautica Militare Italiana", - "countries": [ - "ITA" - ] - }, - "ch j-3038": { - "name": "J-3038", - "countries": [ - "SUI" - ] - }, - "ch j-3033_2017": { - "name": "J-3033_2017", - "countries": [ - "SUI" - ] - }, - "us aggressor vfc-13 28 fict splinter": { - "name": "Aggressor VFC-13 28 Fictional Splinter", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch j-3025": { - "name": "J-3025 FlSt 11/18 January 2006", - "countries": [ - "SUI" - ] - }, - "us aggressor vfc-13 01": { - "name": "Aggressor VFC-13 01", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch patrouille suisse j-3088": { - "name": "Patrouille Suisse J-3088", - "countries": [ - "SUI" - ] - }, - "us aggressor vfc-13 25": { - "name": "Aggressor VFC-13 25", - "countries": [ - "USA", - "AUSAF" - ] - }, - "no 334 sqn ri-h": { - "name": "RNoAF 334 sqn RI-H", - "countries": [ - "NOR" - ] - }, - "br fab 4841": { - "name": "FAB 4841 60th an", - "countries": [ - "BRA" - ] - }, - "aggressor marine scheme": { - "name": "Aggressor Marine Scheme", - "countries": [ - "USA", - "AUSAF" - ] - }, - "sp spanish air force 464-48": { - "name": "Ejercito del Aire 464-48", - "countries": [ - "SPN" - ] - }, - "gr haf f-5e grey": { - "name": "HAF F-5E Grey", - "countries": [ - "GRC" - ] - }, - "tr turkish stars": { - "name": "Turkish Stars", - "countries": [ - "TUR" - ] - }, - "gb no.29 squadron raf": { - "name": "No.29 Squadron RAF (Fictional)", - "countries": [ - "UK" - ] - }, - "br fab 4834": { - "name": "1/1 GAvCa - FAB 4834", - "countries": [ - "BRA" - ] - }, - "ch j-3026": { - "name": "J-3026 FlSt 11 approx. 1989", - "countries": [ - "SUI" - ] - }, - "aggressor snake scheme": { - "name": "Aggressor Snake Scheme", - "countries": [ - "USA", - "AUSAF" - ] - }, - "us aggressor vfc-111 115": { - "name": "Sundowners VFC-115", - "countries": [ - "USA", - "AUSAF" - ] - }, - "us aggressor vmft-401 02 2011": { - "name": "Aggressor VMFT-401 02 2011", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch j-3008": { - "name": "J-3008 FlSt 08/19 February 2005", - "countries": [ - "SUI" - ] - }, - "aggressor desert scheme": { - "name": "Aggressor Desert Scheme", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch j-3074": { - "name": "J-3074", - "countries": [ - "SUI" - ] - }, - "ch j-3036": { - "name": "J-3036 FlSt 01 1985", - "countries": [ - "SUI" - ] - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swept wing, single crew. Tiger", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-86F Sabre": { - "name": "F-86F Sabre", - "coalition": "blue", - "label": "F-86F Sabre", - "era": "Early Cold War", - "shortLabel": "86", - "loadouts": [ - { - "items": [ - { - "name": "Fuel Tank 120 gallons", - "quantity": 2 - } - ], - "enabled": true, - "code": "120gal Fuel*2", - "name": "120gal Fuel*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 200 gallons", - "quantity": 2 - }, - { - "name": "Fuel Tank 120 gallons", - "quantity": 2 - } - ], - "enabled": true, - "code": "120gal Fuel*2, 200gal Fuel*2", - "name": "120gal Fuel*2, 200gal Fuel*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 120 gallons", - "quantity": 2 - }, - { - "name": "LAU-7 with AIM-9B Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "120gal Fuel*2, GAR-8*2", - "name": "120gal Fuel*2, GAR-8*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 200 gallons", - "quantity": 2 - } - ], - "enabled": true, - "code": "200gal Fuel*2", - "name": "200gal Fuel*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 200 gallons", - "quantity": 2 - }, - { - "name": "AN-M64 - 500lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "200gal Fuel*2, AN-M64*2", - "name": "200gal Fuel*2, AN-M64*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 200 gallons", - "quantity": 2 - }, - { - "name": "2 x HVAR, UnGd Rkts", - "quantity": 4 - } - ], - "enabled": true, - "code": "200gal Fuel*2, HVARx2*4", - "name": "200gal Fuel*2, HVARx2*4", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AN-M64 - 500lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AN-M64*2", - "name": "AN-M64*2", - "roles": [ - "CAS", - "Strike", - "Antiship Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-7 with AIM-9B Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "GAR-8*2", - "name": "GAR-8*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "2 x HVAR, UnGd Rkts", - "quantity": 8 - } - ], - "enabled": true, - "code": "HVAR*16", - "name": "HVAR*16", - "roles": [ - "Strike", - "CAS", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "M117 - 750lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "M117*2", - "name": "M117*2", - "roles": [ - "CAS", - "Strike", - "Antiship Strike" - ] - } - ], - "filename": "f-5.png", - "enabled": true, - "liveries": { - "us air force (skyblazers)": { - "name": "US Air Force Jet Team Skyblazer", - "countries": [ - "USA" - ] - }, - "canada air force": { - "name": "Canada Air Force", - "countries": [ - "CAN" - ] - }, - "us air force (squadron 39)": { - "name": "US Air Force (Squadron 39)", - "countries": [ - "USA" - ] - }, - "iiaf bare metall": { - "name": "IIAF Bare Metal Weathered", - "countries": [ - "IRN" - ] - }, - "us air force (green)": { - "name": "US Air Force (Green)", - "countries": [ - "USA" - ] - }, - "us air force (ex-usaf f-86a sabre)": { - "name": "US Air Force ex-USAF F-86A Sabre", - "countries": [ - "USA" - ] - }, - "default livery": { - "name": "default livery", - "countries": [ - "BRA", - "CUB", - "MYS", - "ARE", - "AUS", - "ABH", - "RUS", - "PHL", - "SPN", - "ISR", - "SUN", - "USA", - "BHR", - "MAR", - "BLR", - "HRV", - "DZA", - "OMN", - "RSO", - "SVK", - "HND", - "IRN", - "UKR", - "TUR", - "JPN", - "PRK", - "SRB", - "IDN", - "KAZ", - "BGR", - "BEL", - "INS", - "THA", - "LBY", - "AUSAF", - "VEN", - "PAK", - "JOR", - "RSA", - "FIN", - "MEX", - "KWT", - "NOR", - "IRQ", - "SYR", - "ITA", - "NZG", - "GRC", - "POL", - "NETH", - "GER", - "SUI", - "CHN", - "SAU", - "SWE", - "YEM", - "VNM", - "ROU", - "RSI", - "FRA", - "CHL", - "KOR", - "HUN", - "AUT", - "GRG", - "DEN", - "TUN", - "EGY", - "IND", - "CZE", - "ETH", - "CAN", - "SDN", - "QAT", - "UK", - "YUG" - ] - }, - "royal saudi air force": { - "name": "RSAF", - "countries": [ - "SAU" - ] - }, - "us air force": { - "name": "US Air Force", - "countries": [ - "USA" - ] - }, - "haf 342sqn": { - "name": "Hellenic Airforce 342sqn", - "countries": [ - "GRC" - ] - }, - "japan air force": { - "name": "Japan Air Force", - "countries": [ - "JPN" - ] - }, - "haf 341sqn": { - "name": "Hellenic Airforce 341sqn", - "countries": [ - "GRC" - ] - }, - "us air force (code fu-178)": { - "name": "US Air Force FU-178", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "Single engine, swept wing, 1 crew. Sabre", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "FA-18C_hornet": { - "name": "FA-18C_hornet", - "coalition": "blue", - "era": "Late Cold War", - "label": "F/A-18C", - "shortLabel": "18", - "loadouts": [ - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-84D Harpoon AShM", - "quantity": 4 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M*2, AIM-120C-5*1, AGM-84D*4, ATFLIR, FUEL", - "name": "AIM-9M*2, AIM-120C-5*1, AGM-84D*4, ATFLIR, FUEL", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, AIM-7M*2, FUEL*1", - "name": "AIM-9M*2, AIM-7M*2, FUEL*1", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, AIM-7M*2, FUEL*2", - "name": "AIM-9M*2, AIM-7M*2, FUEL*2", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-115C with AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9M*2, AIM-7M*4, FUEL*3", - "name": "AIM-9M*2, AIM-7M*4, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M*2, ATFLIR, FUEL", - "name": "AIM-9M*2, ATFLIR, FUEL", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M*2, ATFLIR, FUEL*2", - "name": "AIM-9M*2, ATFLIR, FUEL*2", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x CBU-99 - 490lbs, 247 x HEAT Bomblets", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, CBU-99*4, FUEL*2", - "name": "AIM-9M*2, CBU-99*4, FUEL*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x LAU-61 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, LAU-61*4, FUEL*2", - "name": "AIM-9M*2, LAU-61*4, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, LAU-68*4, FUEL*2", - "name": "AIM-9M*2, LAU-68*4, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x Mk-20 Rockeye - 490lbs CBU, 247 x HEAT Bomblets", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, MK-20*4, FUEL*2", - "name": "AIM-9M*2, MK-20*4, FUEL*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, MK-82*4, FUEL*2", - "name": "AIM-9M*2, MK-82*4, FUEL*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, MK-82SE*4, FUEL*2", - "name": "AIM-9M*2, MK-82SE*4, FUEL*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, MK-83*2, FUEL*2", - "name": "AIM-9M*2, MK-83*2, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, MK-83*4, FUEL*2", - "name": "AIM-9M*2, MK-83*4, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, MK-84*2, FUEL*2", - "name": "AIM-9M*2, MK-84*2, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x LAU-10 pod - 4 x 127mm ZUNI, UnGd Rkts Mk71, HE/FRAG", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, ZUNI*4, FUEL*2", - "name": "AIM-9M*2, ZUNI*4, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-115 with 2 x LAU-127 AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*6, AIM-7M*2, FUEL*2", - "name": "AIM-9M*6, AIM-7M*2, FUEL*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - }, - { - "name": "LAU-115 with 2 x LAU-127 AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9M*6, AIM-7M*2, FUEL*3", - "name": "AIM-9M*6, AIM-7M*2, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", - "quantity": 4 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9X*2, AIM-120C-5*1, AGM-65D*4, ATFLIR, FUEL", - "name": "AIM-9X*2, AIM-120C-5*1, AGM-65D*4, ATFLIR, FUEL", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-84H SLAM-ER (Expanded Response)", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - }, - { - "name": "AWW-13 DATALINK POD", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9X*2, AIM-120C-5*1, AGM-84E*2, DATALINK, ATFLIR, FUEL*2", - "name": "AIM-9X*2, AIM-120C-5*1, AGM-84E*2, DATALINK, ATFLIR, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-31(V)4/B - JDAM, 2000lb GPS Guided Penetrator Bomb", - "quantity": 4 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9X*2, AIM-120C-5*1, GBU-31*4, ATFLIR, FUEL", - "name": "AIM-9X*2, AIM-120C-5*1, GBU-31*4, ATFLIR, FUEL", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BRU-55 with 2 x GBU-38 - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9X*2, AIM-120C-5*1, GBU-38*4, GBU-12*4, ATFLIR, FUEL", - "name": "AIM-9X*2, AIM-120C-5*1, GBU-38*4, GBU-12*4, ATFLIR, FUEL", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 4 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9X*2, AIM-120C-5*2, AGM-88C*2, FUEL", - "name": "AIM-9X*2, AIM-120C-5*2, AGM-88C*2, FUEL", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "LAU-115 with 2 x LAU-127 AIM-120C AMRAAM - Active Radar AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9X*2, AIM-120C-5*6, FUEL*3", - "name": "AIM-9X*2, AIM-120C-5*6, FUEL*3", - "roles": [ - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - } - ], - "enabled": true, - "code": "Carrier Landing", - "name": "Carrier Landing", - "roles": [] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - } - ], - "filename": "fa-18c.png", - "enabled": true, - "liveries": { - "vfa-192": { - "name": "VFA-192", - "countries": [ - "USA" - ] - }, - "nsawc brown splinter": { - "name": "NSAWC brown splinter", - "countries": [ - "USA", - "AUSAF" - ] - }, - "vfa-34": { - "name": "VFA-34", - "countries": [ - "USA" - ] - }, - "vmfa-232": { - "name": "VMFA-232", - "countries": [ - "USA" - ] - }, - "vmfat-101": { - "name": "VMFAT-101", - "countries": [ - "USA" - ] - }, - "vmfa-232 high visibility": { - "name": "VMFA-232 high visibility", - "countries": [ - "USA" - ] - }, - "vmfat-101 high visibility": { - "name": "VMFAT-101 high visibility", - "countries": [ - "USA" - ] - }, - "vfa-37": { - "name": "VFA-37", - "countries": [ - "USA" - ] - }, - "fictional russia air force": { - "name": "Fictional Russia Air Force", - "countries": [ - "AUSAF", - "RUS" - ] - }, - "canada 150 demo jet": { - "name": "Canada 150 Demo Jet", - "countries": [ - "CAN" - ] - }, - "fictional uk air force": { - "name": "Fictional UK Air Force", - "countries": [ - "UK" - ] - }, - "vfa-131": { - "name": "VFA-131", - "countries": [ - "USA" - ] - }, - "vmfa-122 high visibility": { - "name": "VMFA-122 high visibility", - "countries": [ - "USA" - ] - }, - "spain 462th escuadron c.15-79": { - "name": "Spain 462th Escuadron C.15-79", - "countries": [ - "SPN" - ] - }, - "vmfat-101 high visibility 2005": { - "name": "VMFAT-101 high visibility 2005", - "countries": [ - "USA" - ] - }, - "vmfa-323": { - "name": "VMFA-323", - "countries": [ - "USA" - ] - }, - "vx-31 cona": { - "name": "VX-31 CoNA", - "countries": [ - "USA" - ] - }, - "fictional turkey 162nd sq": { - "name": "162nd Sqn Harpoon", - "countries": [ - "TUR" - ] - }, - "nawdc brown": { - "name": "NAWDC brown", - "countries": [ - "USA", - "AUSAF" - ] - }, - "spain 151th escuadron c.15-14": { - "name": "Spain 151_14 Escuadron C.15-14", - "countries": [ - "SPN" - ] - }, - "spain 151th escuadron c.15-24": { - "name": "Spain 151_24 Escuadron C.15-24", - "countries": [ - "SPN" - ] - }, - "vfa-106": { - "name": "VFA-106", - "countries": [ - "USA" - ] - }, - "spain 121th escuadron c.15-45": { - "name": "Spain 121 Escuadron C.15-45", - "countries": [ - "SPN" - ] - }, - "vfa-97": { - "name": "VFA-97", - "countries": [ - "USA" - ] - }, - "vx-9": { - "name": "VX-9", - "countries": [ - "USA" - ] - }, - "spain 111th escuadron c.15-73": { - "name": "Spain 111 Escuadron C.15-73", - "countries": [ - "SPN" - ] - }, - "switzerland": { - "name": "Switzerland", - "countries": [ - "SUI" - ] - }, - "vx-23": { - "name": "VX-23", - "countries": [ - "USA" - ] - }, - "vfa-83": { - "name": "VFA-83", - "countries": [ - "USA" - ] - }, - "australian 75th squadron": { - "name": "Australian sqn 75", - "countries": [ - "AUS" - ] - }, - "canada 425th squadron": { - "name": "Canada 425th Squadron", - "countries": [ - "CAN" - ] - }, - "spain 151th escuadron c.15-18": { - "name": "Spain 151_18 Escuadron C.15-18", - "countries": [ - "SPN" - ] - }, - "nsawc gray": { - "name": "NSAWC gray", - "countries": [ - "USA" - ] - }, - "vfa-87": { - "name": "VFA-87", - "countries": [ - "USA" - ] - }, - "nawdc blue": { - "name": "NAWDC blue", - "countries": [ - "USA", - "AUSAF" - ] - }, - "australian 77th squadron": { - "name": "Australian sqn 77", - "countries": [ - "AUS" - ] - }, - "vmfa-251 high visibility": { - "name": "VMFA-251 high visibility", - "countries": [ - "USA" - ] - }, - "vmfa-531": { - "name": "VMFA-531", - "countries": [ - "USA" - ] - }, - "viper": { - "name": "Viper", - "countries": [ - "USA" - ] - }, - "iceman": { - "name": "Iceman", - "countries": [ - "USA", - "AUSAF" - ] - }, - "spain 121th escuadron c.15-60": { - "name": "Spain 121 Escuadron C.15-60", - "countries": [ - "SPN" - ] - }, - "nsawc blue": { - "name": "NSAWC blue", - "countries": [ - "USA", - "AUSAF" - ] - }, - "blue angels jet team": { - "name": "Blue Angels Jet Team", - "countries": [ - "USA" - ] - }, - "fictional israel air force": { - "name": "Fictional Israel Air Force", - "countries": [ - "ISR" - ] - }, - "spain 462th escuadron c.15-90": { - "name": "Spain 462th Escuadron C.15-90", - "countries": [ - "SPN" - ] - }, - "vmfa-323 high visibility": { - "name": "VMFA-323_high visibility", - "countries": [ - "USA" - ] - }, - "maverick": { - "name": "Maverick", - "countries": [ - "USA" - ] - }, - "nawdc black": { - "name": "NAWDC black", - "countries": [ - "USA", - "AUSAF" - ] - }, - "kuwait 9th squadron": { - "name": "9th Squadron", - "countries": [ - "KWT" - ] - }, - "vmfa-251": { - "name": "VMFA-251", - "countries": [ - "USA" - ] - }, - "vmfa-314": { - "name": "VMFA-314", - "countries": [ - "USA" - ] - }, - "fictional ukraine air force": { - "name": "Fictional Ukraine Air Force", - "countries": [ - "UKR" - ] - }, - "canada 409th squadron": { - "name": "Canada 409th Squadron", - "countries": [ - "CAN" - ] - }, - "canada norad 60 demo jet": { - "name": "Canada NORAD 60 Demo Jet", - "countries": [ - "CAN" - ] - }, - "spain 111th escuadron c.15-88": { - "name": "Spain 111 Escuadron C.15-88", - "countries": [ - "SPN" - ] - }, - "spain 211th escuadron c.15-76": { - "name": "Spain 211th Escuadron C.15-76", - "countries": [ - "SPN" - ] - }, - "finland 31": { - "name": "Finland", - "countries": [ - "FIN" - ] - }, - "spain 151th escuadron c.15-23": { - "name": "Spain 151_23 Escuadron C.15-23", - "countries": [ - "SPN" - ] - }, - "vfa-122": { - "name": "VFA-122", - "countries": [ - "USA" - ] - }, - "spain 151th escuadron c.15-14 tiger meet": { - "name": "Spain 151th Escuadron C.15-14 Tiger Meet", - "countries": [ - "SPN" - ] - }, - "vfc-12": { - "name": "VFC-12", - "countries": [ - "USA", - "AUSAF" - ] - }, - "spain 211th escuadron c.15-77": { - "name": "Spain 211th Escuadron C.15-77", - "countries": [ - "SPN" - ] - }, - "spain 121th escuadron c.15-34 50th anniversary": { - "name": "Spain 121th Escuadron C.15-34 34th Anniversary", - "countries": [ - "SPN" - ] - }, - "default livery": { - "name": "default livery", - "countries": [ - "BRA", - "CUB", - "MYS", - "ARE", - "AUS", - "ABH", - "RUS", - "PHL", - "SPN", - "ISR", - "SUN", - "USA", - "BHR", - "MAR", - "BLR", - "HRV", - "DZA", - "OMN", - "RSO", - "SVK", - "HND", - "IRN", - "UKR", - "TUR", - "JPN", - "PRK", - "SRB", - "IDN", - "KAZ", - "BGR", - "BEL", - "INS", - "THA", - "LBY", - "AUSAF", - "VEN", - "PAK", - "JOR", - "RSA", - "FIN", - "MEX", - "KWT", - "NOR", - "IRQ", - "SYR", - "ITA", - "NZG", - "GRC", - "POL", - "NETH", - "GER", - "SUI", - "CHN", - "SAU", - "SWE", - "YEM", - "VNM", - "ROU", - "RSI", - "FRA", - "CHL", - "KOR", - "HUN", - "AUT", - "GRG", - "DEN", - "TUN", - "EGY", - "IND", - "CZE", - "ETH", - "CAN", - "SDN", - "QAT", - "UK", - "YUG" - ] - }, - "spain 121th escuadron c.15-50": { - "name": "Spain 121 Escuadron C.15-50", - "countries": [ - "SPN" - ] - }, - "vfa-113": { - "name": "VFA-113", - "countries": [ - "USA" - ] - }, - "vmfa-312": { - "name": "VMFA-312", - "countries": [ - "USA" - ] - }, - "kuwait 25th squadron": { - "name": "9th Squadron", - "countries": [ - "KWT" - ] - }, - "vmfa-312 high visibility": { - "name": "VMFA-312 high visibility", - "countries": [ - "USA" - ] - }, - "vmfa-122": { - "name": "VMFA-122", - "countries": [ - "USA" - ] - }, - "vfa-106 high visibility": { - "name": "VFA-106 high visibility", - "countries": [ - "USA" - ] - }, - "finland 21": { - "name": "Finland", - "countries": [ - "FIN" - ] - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swept wing, 1 crew, fighter and strike. Hornet", - "abilities": "Drogue AAR, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "FW-190A8": { - "name": "FW-190A8", - "coalition": "red", - "label": "FW-190A8 Würger", - "era": "WW2", - "shortLabel": "190", - "loadouts": [ - { - "items": [ - { - "name": "AB 250-2 - 17 x SD-10A, 250kg CBU with 10kg Frag/HE submunitions", - "quantity": 1 - } - ], - "enabled": true, - "code": "AB 250 (w/ SD 10A)", - "name": "AB 250 (w/ SD 10A)", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AB 250-2 - 144 x SD-2, 250kg CBU with HE submunitions", - "quantity": 1 - } - ], - "enabled": true, - "code": "AB 250 (w/ SD 2)", - "name": "AB 250 (w/ SD 2)", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AB 500-1 - 34 x SD-10A, 500kg CBU with 10kg Frag/HE submunitions", - "quantity": 1 - } - ], - "enabled": true, - "code": "AB 500 (w/ SD 10A)", - "name": "AB 500 (w/ SD 10A)", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Werfer-Granate 21 - 21 cm UnGd air-to-air rocket", - "quantity": 2 - } - ], - "enabled": true, - "code": "BR 21", - "name": "BR 21", - "roles": [] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "300 liter Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel Tank 300 liters", - "name": "Fuel Tank 300 liters", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "SC 250 Type 3 J - 250kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC 250 J", - "name": "SC 250 J", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "SC 250 Type 1 L2 - 250kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC 250 L2", - "name": "SC 250 L2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "4 x SC 50 - 50kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC 50 * 4", - "name": "SC 50 * 4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "SC 500 J - 500kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC 500 J", - "name": "SC 500 J", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "SC 500 L2 - 500kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC 500 L2", - "name": "SC 500 L2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "SD 250 Stg - 250kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SD 250 Stg", - "name": "SD 250 Stg", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "SD 500 A - 500kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SD 500 A", - "name": "SD 500 A", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": null, - "quantity": 1 - } - ], - "enabled": true, - "code": "Without pylon", - "name": "Without pylon", - "roles": [] - } - ], - "filename": "fw190.png", - "enabled": true, - "liveries": { - "fw190_fuselage_d_jg301": { - "name": "JG 301", - "countries": [ - "GER", - "NZG" - ] - }, - "captured_ra": { - "name": "Captured_RA", - "countries": [ - "SUN" - ] - }, - "fictional ijn carrier akagi ai-103": { - "name": "Fictional IJN Carrier Akagi AI-103", - "countries": [ - "JPN" - ] - }, - "fictional ijn otu tsukuba tsu-102": { - "name": "Fictional IJN OTU Tsukuba Tsu-102", - "countries": [ - "JPN" - ] - }, - "fw-190a8 yellow 4": { - "name": "FW190A8 Yellow 4", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190a8 rhaf": { - "name": "Fw 190 A8 RHAF", - "countries": [ - "HUN" - ] - }, - "jg3 white nose wulf": { - "name": "Fw190A8 'White nose Wulf'", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190a8_2.jg 54": { - "name": "2.JG 54", - "countries": [ - "GER", - "NZG" - ] - }, - "fictional ijn carrier soryu bi-112": { - "name": "Fictional IJN Carrier Soryu BI-112", - "countries": [ - "JPN" - ] - }, - "black 13 schwarze katze from jg1": { - "name": "Fw190_JG1_Gen._'Schwarze Katze'_Win.", - "countries": [ - "GER", - "NZG" - ] - }, - "turkish air force, 5th fr (1942)": { - "name": "Turkish Air Force, 5th FR (1942)", - "countries": [ - "AUSAF", - "TUR" - ] - }, - "fw-190a8 jg26 priller": { - "name": "Fw 190 A8 JG26 Priller", - "countries": [ - "GER", - "HUN", - "NZG" - ] - }, - "inspired by jg2 skin of early fw 190a": { - "name": "Fw190A8 JG2 Generic", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190a8": { - "name": "FW190A8", - "countries": "All" - }, - "fw190_alfred_bindseil": { - "name": "6.JG 1_Alfred Bindseil", - "countries": [ - "GER", - "NZG" - ] - }, - "fictional ijn 256th kokutai rai-153": { - "name": "Fictional IJN 256th Kokutai Rai-153", - "countries": [ - "JPN" - ] - }, - "fictional ijn carrier akagi ai-151": { - "name": "Fictional IJN Carrier Akagi AI-151", - "countries": [ - "JPN" - ] - }, - "fw-190a8_raf": { - "name": "FW190A8/R-2 PE882, No. 1426 Flight RAF - Late", - "countries": [ - "UK" - ] - }, - "factory skin": { - "name": "FW190A8 Luftwaffe", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190a8_2.jg 54_hans dortenmann": { - "name": "2.JG 54_Hans Dortenmann", - "countries": [ - "GER", - "NZG" - ] - }, - "fw 190 a-8 czech avia s.90": { - "name": "Fw 190 A-8 Czech Avia S.90", - "countries": [ - "CZE" - ] - }, - "fw190_ewald_preisz": { - "name": "6.JG 300_Ewald Preisz", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190a8 jg3 maximowitz": { - "name": "Fw 190 A8 JG3 Maximowitz", - "countries": [ - "GER", - "HUN", - "NZG" - ] - }, - "roaf-grupul7": { - "name": "RoAF-Grupul7", - "countries": [ - "ROU" - ] - } - }, - "type": "Aircraft", - "description": "Single propellor, straight wing, 1 crew. Würger ", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "FW-190D9": { - "name": "FW-190D9", - "coalition": "red", - "label": "FW-190D9 Dora", - "era": "WW2", - "shortLabel": "190", - "loadouts": [ - { - "items": [ - { - "name": "Werfer-Granate 21 - 21 cm UnGd air-to-air rocket", - "quantity": 2 - } - ], - "enabled": true, - "code": "BR 21", - "name": "BR 21", - "roles": [ - "CAP", - "CAP", - "Strike", - "CAS" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "300 liter Fuel Tank Type E2", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel Tank", - "name": "Fuel Tank", - "roles": [ - "CAP", - "FAC-A", - "Escort" - ] - }, - { - "items": [ - { - "name": "13 R4M 3.2kg UnGd air-to-air rocket", - "quantity": 2 - } - ], - "enabled": true, - "code": "R4M", - "name": "R4M", - "roles": [ - "CAP", - "CAP", - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "SC 500 J - 500kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC500", - "name": "SC500", - "roles": [ - "Runway Attack", - "CAS", - "Antiship Strike", - "Strike" - ] - } - ], - "filename": "fw190.png", - "enabled": true, - "liveries": { - "fw-190d9_5jg301": { - "name": "FW-190_5JG301.1945", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190d9_iv.jg 26_hans dortenmann": { - "name": " Oblt. Hans Dortenmann, IV./JG 26, 1945", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190d9_red": { - "name": "FW_190D9_Red.1945", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190d9_13.jg 51_heinz marquardt": { - "name": " Heinz-Marquardt, 13./JG 51, 1945", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190d9_jg54": { - "name": "FW-190D9_JG54.1945", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190d9_black 4 of stab iijg 6": { - "name": "FW-190D9_Black <4 of Stab II/JG 6", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190d9_usa": { - "name": "FW-190_USA_Standard.1943", - "countries": [ - "USA" - ] - }, - "fw-190d9_gb": { - "name": "FW-190_GB_Standart.1943", - "countries": [ - "UK" - ] - }, - "fw-190d9_ussr": { - "name": "FW-190 WNr 210251 USSR (Captured. 1943)", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "Single propellor, straight wing, 1 crew. Dora", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "H-6J": { - "name": "H-6J", - "coalition": "red", - "label": "H-6 J Badger", - "era": "Mid Cold War", - "shortLabel": "H6", - "loadouts": [ - { - "items": [ - { - "name": "12 x 250-2 - 250kg GP Bombs HD", - "quantity": 1 - } - ], - "enabled": true, - "code": "250-2 HD Bomb x 12 in Bay", - "name": "250-2 HD Bomb x 12 in Bay", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "24 x 250-2 - 250kg GP Bombs HD", - "quantity": 1 - } - ], - "enabled": true, - "code": "250-2 HD Bomb x 24 in Bay", - "name": "250-2 HD Bomb x 24 in Bay", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MER6 - 6 x 250-3 - 250kg GP Bombs LD", - "quantity": 6 - } - ], - "enabled": true, - "code": "250-3 LD Bomb x 36", - "name": "250-3 LD Bomb x 36", - "roles": [ - "Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "KD-20", - "quantity": 4 - } - ], - "enabled": true, - "code": "KD-20 x 4", - "name": "KD-20 x 4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "KD-20", - "quantity": 6 - } - ], - "enabled": true, - "code": "KD-20 x 6", - "name": "KD-20 x 6", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "KD-63", - "quantity": 2 - }, - { - "name": "DATA-LINK POD", - "quantity": 1 - }, - { - "name": "KD-20", - "quantity": 2 - } - ], - "enabled": true, - "code": "KD-63 x 2, KD-20 x 2", - "name": "KD-63 x 2, KD-20 x 2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "KD-63", - "quantity": 2 - }, - { - "name": "DATA-LINK POD", - "quantity": 1 - }, - { - "name": "KD-20", - "quantity": 4 - } - ], - "enabled": true, - "code": "KD-63 x 2, KD-20 x 4", - "name": "KD-63 x 2, KD-20 x 4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "KD-63", - "quantity": 4 - }, - { - "name": "DATA-LINK POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "KD-63 x 4", - "name": "KD-63 x 4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "YJ-12", - "quantity": 2 - } - ], - "enabled": true, - "code": "YJ-12 x 2", - "name": "YJ-12 x 2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "YJ-12", - "quantity": 4 - } - ], - "enabled": true, - "code": "YJ-12 x 4", - "name": "YJ-12 x 4", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "YJ-83K", - "quantity": 6 - } - ], - "enabled": true, - "code": "YJ-83K x 6", - "name": "YJ-83K x 6", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "h-6.png", - "enabled": true, - "liveries": { - "planaf standard": { - "name": "PLANAF Standard", - "countries": [ - "CHN" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 4 crew bomber. Badger", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "I-16": { - "name": "I-16", - "coalition": "red", - "label": "I-16", - "era": "WW2", - "shortLabel": "I16", - "loadouts": [ - { - "items": [ - { - "name": "I-16 External Fuel Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "2xDropTank-93L", - "name": "2xDropTank-93L", - "roles": [ - "CAP", - "Reconnaissance", - "Escort" - ] - }, - { - "items": [ - { - "name": "FAB-100SV", - "quantity": 2 - } - ], - "enabled": true, - "code": "2xFAB-100", - "name": "2xFAB-100", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "RS-82", - "quantity": 6 - } - ], - "enabled": true, - "code": "6xRS-82", - "name": "6xRS-82", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "RS-82", - "quantity": 6 - }, - { - "name": "I-16 External Fuel Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "6xRS-82, 2xDropTank-93L", - "name": "6xRS-82, 2xDropTank-93L", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "RS-82", - "quantity": 6 - }, - { - "name": "FAB-100SV", - "quantity": 2 - } - ], - "enabled": true, - "code": "6xRS-82, 2xFAB-100", - "name": "6xRS-82, 2xFAB-100", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - } - ], - "filename": "i-16.png", - "enabled": true, - "liveries": { - "silver-black demo": { - "name": "Silver-black paint scheme", - "countries": [ - "SUN", - "RUS" - ] - }, - "red army camo": { - "name": "Red Army Air Force Camouflage", - "countries": [ - "SUN", - "RUS" - ] - }, - "spain nationalists": { - "name": "Spain (Nationalists)", - "countries": [ - "SPN", - "NZG" - ] - }, - "japan": { - "name": "Japan (Captured), Manchuria 1939", - "countries": [ - "NZG", - "JPN" - ] - }, - "finnish af": { - "name": "Finland, AFB Rompotti 1943", - "countries": [ - "FIN", - "NZG" - ] - }, - "red army standard": { - "name": "1 Red Army Air Force Standard", - "countries": [ - "SUN", - "RUS" - ] - }, - "spain republicans": { - "name": "Spain (Republicans)", - "countries": [ - "SUN", - "SPN" - ] - }, - "red five demo": { - "name": "RED FIVE Aerobatic Team", - "countries": [ - "SUN", - "RUS" - ] - }, - "clear": { - "name": "Green unmarked", - "countries": "All" - }, - "silver demo": { - "name": "Silver paint scheme", - "countries": [ - "SUN", - "RUS" - ] - }, - "red army winter": { - "name": "Red Army Air Force winter", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "Single propellor, straight wing, 1 crew. Ishak", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "IL-76MD": { - "name": "IL-76MD", - "coalition": "red", - "label": "IL-76MD Candid", - "era": "Mid Cold War", - "shortLabel": "76", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Transport" - ] - } - ], - "filename": "il-76.png", - "enabled": true, - "liveries": { - "ukrainian af aeroflot": { - "name": "Ukrainian AF aeroflot", - "countries": [ - "UKR" - ] - }, - "algerian af il-76md": { - "name": "Algerian AF IL-76MD", - "countries": [ - "DZA" - ] - }, - "china air force old": { - "name": "China Air Force Old", - "countries": [ - "CHN" - ] - }, - "ukrainian af": { - "name": "Ukrainian AF", - "countries": [ - "UKR" - ] - }, - "rf air force": { - "name": "RF Air Force", - "countries": [ - "RUS" - ] - }, - "china air force new": { - "name": "China Air Force New", - "countries": [ - "CHN" - ] - }, - "mvd aeroflot": { - "name": "MVD aeroflot", - "countries": [ - "RUS" - ] - }, - "fsb aeroflot": { - "name": "FSB aeroflot", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 5 crew. Cargo and passenger aircraft. NATO reporting name: Candid", - "abilities": "AEW", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "IL-78M": { - "name": "IL-78M", - "coalition": "red", - "label": "IL-78M Midas", - "era": "Late Cold War", - "shortLabel": "78", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Tanker" - ] - } - ], - "filename": "il-76.png", - "enabled": true, - "liveries": { - "rf air force aeroflot": { - "name": "RF Air Force aeroflot", - "countries": [ - "SUN", - "RUS" - ] - }, - "rf air force new": { - "name": "RF Air Force new", - "countries": [ - "RUS" - ] - }, - "algerian af il-78m": { - "name": "Algerian AF IL-78M", - "countries": [ - "DZA" - ] - }, - "china air force": { - "name": "China Air Force", - "countries": [ - "CHN" - ] - }, - "rf air force": { - "name": "RF Air Force", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 6 crew. Tanker aircraft. NATO reporting name: Midas", - "abilities": "Tanker, Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "J-11A": { - "name": "J-11A", - "coalition": "red", - "label": "J-11A Flaming Dragon", - "era": "Modern", - "shortLabel": "J11", - "loadouts": [ - { - "items": [ - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x B-8M1 - 20 S-8KOM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*S8-KOMx2, R-73x2, ECM", - "name": "2*S8-KOMx2, R-73x2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x B-8M1 - 20 S-8OFP2", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*S8-OFP2x2, R-73x2, ECM", - "name": "2*S8-OFP2x2, R-73x2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", - "quantity": 6 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500ShPx6,R-73x2,ECM", - "name": "BetAB-500ShPx6,R-73x2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", - "quantity": 6 - } - ], - "enabled": true, - "code": "FAB-100x36,R-73x2,ECM", - "name": "FAB-100x36,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-250 - 250kg GP Bombs LD", - "quantity": 3 - } - ], - "enabled": true, - "code": "FAB-250x18,R-73x2,ECM", - "name": "FAB-250x18,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "2 x FAB-250", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250x4, 2*FAB-250x2, R-73x2", - "name": "FAB-250x4, 2*FAB-250x2, R-73x2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "2 x FAB-500", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250x4, 2*FAB-500x2, R-73x2", - "name": "FAB-250x4, 2*FAB-500x2, R-73x2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x FAB-250", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250x8,R-73x2,ECM", - "name": "FAB-250x8,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x FAB-500", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500x8,R-73x2,ECM", - "name": "FAB-500x8,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-27ERx4,R-27ETx2,R-73x2,ECM", - "name": "R-27ERx4,R-27ETx2,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-27ERx6,R-73x2,ECM", - "name": "R-27ERx6,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-27ETx2,R-27ERx4,R-73x2,ECM", - "name": "R-27ETx2,R-27ERx4,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73x4,ECM", - "name": "R-73x4,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-77x2,R-27ETx2,R-27ERx2,R-73x2,ECM", - "name": "R-77x2,R-27ETx2,R-27ERx2,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-77x2,R-27ETx2,R-73x2,ECM", - "name": "R-77x2,R-27ETx2,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-77x4,R-27ERx2,R-73x2,ECM", - "name": "R-77x4,R-27ERx2,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-77x4,R-27ETx2,R-73x2,ECM", - "name": "R-77x4,R-27ETx2,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 6 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-77x6,R-73x2,ECM", - "name": "R-77x6,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-77x6,R-73x4", - "name": "R-77x6,R-73x4", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - }, - { - "name": "RBK-250-275 - 150 x AO-1SCh, 250kg CBU HE/Frag", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-250 HEAT/APx2, RBK-250 HE/Fragx2, R-73x2", - "name": "RBK-250 HEAT/APx2, RBK-250 HE/Fragx2, R-73x2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x B-13L - 5 S-13 OF", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-13x20,FAB-250x4,R-73x2,ECM", - "name": "S-13x20,FAB-250x4,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x S-25", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-25x4,FAB-500x4,R-73x2,ECM", - "name": "S-25x4,FAB-500x4,R-73x2,ECM", - "roles": [ - "Strike", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x B-8M1 - 20 S-8KOM", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-8KOMx80,FAB-250x4,R-73x2,ECM", - "name": "S-8KOMx80,FAB-250x4,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x B-8M1 - 20 S-8OFP2", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-8OFP2x80,FAB-250x4,R-73x2,ECM", - "name": "S-8OFP2x80,FAB-250x4,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x B-8M1 - 20 S-8TsM", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-8TsMx80,FAB-250x4,R-73x2,ECM", - "name": "S-8TsMx80,FAB-250x4,R-73x2,ECM", - "roles": [ - "Strike" - ] - } - ], - "filename": "su-27.png", - "enabled": true, - "liveries": { - "plaaf 19th ad": { - "name": "PLAAF 19th AD", - "countries": [ - "CHN" - ] - }, - "plaaf 17th ab": { - "name": "PLAAF 17th AB", - "countries": [ - "CHN" - ] - }, - "plaaf 18th ad 'thunderclap wing' (fictional)": { - "name": "PLAAF 18th AD 'Thunderclap Wing' (Fictional)", - "countries": [ - "CHN" - ] - }, - "usn aggressor vfc-13 'ferris' (fictional)": { - "name": "Aggressor VFC-13 'Ferris' (Fictional)", - "countries": [ - "AUSAF" - ] - }, - "plaaf 19th ad (reworked)": { - "name": "PLAAF 19th AD (Reworked)", - "countries": [ - "CHN" - ] - }, - "plaaf 14th ad": { - "name": "PLAAF 14th AD", - "countries": [ - "CHN" - ] - }, - "plaaf 6th ad": { - "name": "PLAAF 6th AD", - "countries": [ - "CHN" - ] - }, - "plaaf 14th ad (reworked)": { - "name": "PLAAF 14th AD (Reworked)", - "countries": [ - "CHN" - ] - }, - "plaaf opfor 'desert' (fictional)": { - "name": "PLAAF OPFOR 'Desert' (Fictional)", - "countries": [ - "CHN" - ] - }, - "plaaf 7th ad (reworked)": { - "name": "PLAAF 7th AD (Reworked)", - "countries": [ - "CHN" - ] - }, - "usaf 65th aggressor sqn 'desert' (fictional)": { - "name": "65th Aggressor SQN 'Desert' (Fictional)", - "countries": [ - "AUSAF" - ] - }, - "sky hunter": { - "name": "Sky Hunter", - "countries": [ - "CHN" - ] - }, - "plaaf 2nd ad (parade)": { - "name": "PLAAF 2nd AD (Parade)", - "countries": [ - "CHN" - ] - }, - "plaaf opfor 'jungle' (fictional)": { - "name": "PLAAF OPFOR 'Jungle' (Fictional) ", - "countries": [ - "CHN" - ] - }, - "plaaf 33th ad (reworked)": { - "name": "PLAAF 33th AD (Reworked)", - "countries": [ - "CHN" - ] - }, - "plaaf 33th ad": { - "name": "PLAAF 33th AD", - "countries": [ - "CHN" - ] - }, - "usaf 65th aggressor sqn 'gray' (fictional)": { - "name": "65th Aggressor SQN 'Gray' (Fictional)", - "countries": [ - "AUSAF" - ] - }, - "plaaf 2nd ad": { - "name": "PLAAF 2nd AD", - "countries": [ - "CHN" - ] - }, - "plaaf 7th ad": { - "name": "PLAAF 7th AD", - "countries": [ - "CHN" - ] - }, - "plaaf ghost gray (fictional)": { - "name": "PLAAF Ghost Gray (Fictional)", - "countries": [ - "CHN" - ] - }, - "plaaf 2nd ad (reworked)": { - "name": "PLAAF 2nd AD (Reworked)", - "countries": [ - "CHN" - ] - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swept wing, 1 crew, fighter and strike. NATO reporting name: Flanker", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "JF-17": { - "name": "JF-17", - "coalition": "red", - "label": "JF-17 Thunder", - "era": "Modern", - "shortLabel": "J17", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2", - "name": "PL-5Ex2", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 1100L Tankx2, 800L Tank", - "name": "PL-5Ex2, 1100L Tankx2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, 1100L Tankx2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "GDJ-II19 - 2 x GBU-12", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*GBU-12x2, 1100L Tank, WMD7", - "name": "PL-5Ex2, 2*GBU-12x2, 1100L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "GDJ-II19 - 2 x GBU-12", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*GBU-12x2, 800L Tank, WMD7", - "name": "PL-5Ex2, 2*GBU-12x2, 800L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "GDJ-II19 - 2 x GBU-12", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "GB-6", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*GBU-12x2, GB-6x2, WMD7", - "name": "PL-5Ex2, 2*GBU-12x2, GB-6x2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "GBU-16", - "quantity": 2 - }, - { - "name": "GDJ-II19 - 2 x GBU-12", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*GBU-12x2, GBU-16x2, WMD7", - "name": "PL-5Ex2, 2*GBU-12x2, GBU-16x2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "GDJ-II19 - 2 x GBU-12", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "LS-6-500", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*GBU-12x2, LS-6x2, WMD7", - "name": "PL-5Ex2, 2*GBU-12x2, LS-6x2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "LD-10 x 2", - "quantity": 1 - }, - { - "name": "SD-10 x 2", - "quantity": 1 - }, - { - "name": "CM802AKG (DIS)", - "quantity": 2 - }, - { - "name": "DATA-LINK POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LD-10, CM802AKGx2, 2*SD-10, DL", - "name": "PL-5Ex2, 2*LD-10, CM802AKGx2, 2*SD-10, DL", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "LD-10 x 2", - "quantity": 1 - }, - { - "name": "SD-10 x 2", - "quantity": 1 - }, - { - "name": "GB-6", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LD-10, GB-6x2, 2*SD-10, SPJ", - "name": "PL-5Ex2, 2*LD-10, GB-6x2, 2*SD-10, SPJ", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "LD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LD-10x2, 1100L Tankx2, SPJ", - "name": "PL-5Ex2, 2*LD-10x2, 1100L Tankx2, SPJ", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "GB-6-HE", - "quantity": 2 - }, - { - "name": "LD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LD-10x2, GB-6-HEx2, SPJ", - "name": "PL-5Ex2, 2*LD-10x2, GB-6-HEx2, SPJ", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "LS-6-500", - "quantity": 2 - }, - { - "name": "LD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LD-10x2, LS-6x2, SPJ", - "name": "PL-5Ex2, 2*LD-10x2, LS-6x2, SPJ", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "LS-6-100 Dual", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LS6-100x2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, 2*LS6-100x2, 1100L Tankx2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "LS-6-100 Dual", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LS6-100x2, 800L Tankx2, WMD7", - "name": "PL-5Ex2, 2*LS6-100x2, 800L Tankx2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "LS-6-250 Dual", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LS6-250x2, 800L Tank, 1100L Tankx2", - "name": "PL-5Ex2, 2*LS6-250x2, 800L Tank, 1100L Tankx2", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "LS-6-250 Dual", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LS6-250x2, 800L Tankx2, WMD7", - "name": "PL-5Ex2, 2*LS6-250x2, 800L Tankx2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 3 - }, - { - "name": "GDJ-II19 - 2 x Mk-82 SnakeEye", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*Mk-82SEx2, Mk-83x3", - "name": "PL-5Ex2, 2*Mk-82SEx2, Mk-83x3", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "GDJ-II19 - 2 x Mk-82 SnakeEye", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*Mk-82x2, Mk-83x2, 800L Tank", - "name": "PL-5Ex2, 2*Mk-82x2, Mk-83x2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 1 - }, - { - "name": "GDJ-II19 - 2 x Mk-82", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*MK-82x2, MK-83x2, MK-84", - "name": "PL-5Ex2, 2*MK-82x2, MK-83x2, MK-84", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "GDJ-II19 - 2 x LAU68 MK5", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*Mk5x2, 800L Tank", - "name": "PL-5Ex2, 2*Mk5x2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 3 - }, - { - "name": "GDJ-II19 - 2 x LAU68 MK5", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*Mk5x2, Mk-83x3", - "name": "PL-5Ex2, 2*Mk5x2, Mk-83x3", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*SD-10", - "name": "PL-5Ex2, 2*SD-10", - "roles": [] - }, - { - "items": [ - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*SD-10x2, 1100L Tankx2, 800L Tank", - "name": "PL-5Ex2, 2*SD-10x2, 1100L Tankx2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*SD-10x2, 2x1100L Tank", - "name": "PL-5Ex2, 2*SD-10x2, 2x1100L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "SD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*SD-10x2, 800L Tank", - "name": "PL-5Ex2, 2*SD-10x2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "SD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*SD-10x2, SPJ", - "name": "PL-5Ex2, 2*SD-10x2, SPJ", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "TYPE-200A Dual", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*Type-200Ax2", - "name": "PL-5Ex2, 2*Type-200Ax2", - "roles": [] - }, - { - "items": [ - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2x1100L Tank", - "name": "PL-5Ex2, 2x1100L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, 800L Tank", - "name": "PL-5Ex2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 800L Tank, WMD7", - "name": "PL-5Ex2, 800L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "BRM-1_90MM", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, BRM1x2, 1100L Tank, WMD7", - "name": "PL-5Ex2, BRM1x2, 1100L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "C-701T", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 CCDx2, 1100L Tank, 800L Tank", - "name": "PL-5Ex2, C-701 CCDx2, 1100L Tank, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701T", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 CCDx2, 1100L Tank, WMD7", - "name": "PL-5Ex2, C-701 CCDx2, 1100L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "C-701T", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 CCDx2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, C-701 CCDx2, 1100L Tankx2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701T", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 CCDx2, 800L Tank, WMD7", - "name": "PL-5Ex2, C-701 CCDx2, 800L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "C-701T", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 CCDx2, 800L Tankx2, WMD7", - "name": "PL-5Ex2, C-701 CCDx2, 800L Tankx2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701T", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 CCDx2, SPJ", - "name": "PL-5Ex2, C-701 CCDx2, SPJ", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 1 - }, - { - "name": "C-701T", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "GB-6-HE", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IR/CCD, GB-6-HEx2, 800L Tank", - "name": "PL-5Ex2, C-701 IR/CCD, GB-6-HEx2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 1 - }, - { - "name": "C-701T", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "GB-6-SFW", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IR/CCD, GB-6-SFWx2, 800L Tank", - "name": "PL-5Ex2, C-701 IR/CCD, GB-6-SFWx2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IRx2, 1100L Tank, 800L Tank", - "name": "PL-5Ex2, C-701 IRx2, 1100L Tank, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IRx2, 1100L Tank, WMD7", - "name": "PL-5Ex2, C-701 IRx2, 1100L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IRx2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, C-701 IRx2, 1100L Tankx2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IRx2, 800L Tank, WMD7", - "name": "PL-5Ex2, C-701 IRx2, 800L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IRx2, 800L Tankx2, WMD7", - "name": "PL-5Ex2, C-701 IRx2, 800L Tankx2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 1 - }, - { - "name": "C-701T", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "LS-6-500", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IRx2, LS-6x2, 800L Tank", - "name": "PL-5Ex2, C-701 IRx2, LS-6x2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "C802AK (DIS)", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C802AKx2, 800L Tank", - "name": "PL-5Ex2, C802AKx2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "GBU-10", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, GBU-10x2, WMD7", - "name": "PL-5Ex2, GBU-10x2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "GBU-12", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, GBU-12x2, 1100L Tank, WMD7", - "name": "PL-5Ex2, GBU-12x2, 1100L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "GBU-12", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, GBU-12x2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, GBU-12x2, 1100L Tankx2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "BRM-1_90MM", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "GBU-16", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, GBU-16x2, BRM1x2, WMD7", - "name": "PL-5Ex2, GBU-16x2, BRM1x2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "LD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, LD-10x2, 1100L Tankx2, SPJ", - "name": "PL-5Ex2, LD-10x2, 1100L Tankx2, SPJ", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "LD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, LD-10x2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, LD-10x2, 1100L Tankx2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "LS-6-500", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, LS-6x2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, LS-6x2, 1100L Tankx2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "LS-6-500", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "GB-6", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, LS-6x2, GB-6x2, 800L Tank", - "name": "PL-5Ex2, LS-6x2, GB-6x2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 3 - } - ], - "enabled": true, - "code": "PL-5Ex2, Mk-84x3", - "name": "PL-5Ex2, Mk-84x3", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2", - "name": "PL-5Ex2, SD-10x2", - "roles": [] - }, - { - "items": [ - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2, 1100L Tankx2, 800L Tank", - "name": "PL-5Ex2, SD-10x2, 1100L Tankx2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, SD-10x2, 1100L Tankx2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2, 2x1100L Tank", - "name": "PL-5Ex2, SD-10x2, 2x1100L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2, 800L Tank", - "name": "PL-5Ex2, SD-10x2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2, SPJ", - "name": "PL-5Ex2, SD-10x2, SPJ", - "roles": [] - }, - { - "items": [ - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2, SPJ, 1100L Tankx2", - "name": "PL-5Ex2, SD-10x2, SPJ, 1100L Tankx2", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, SPJ", - "name": "PL-5Ex2, SPJ", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "TYPE-200A", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, Type-200Ax2", - "name": "PL-5Ex2, Type-200Ax2", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "UG_90MM", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, Unguided 90mmx2, 800L Tank", - "name": "PL-5Ex2, Unguided 90mmx2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, WMD7", - "name": "PL-5Ex2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "LD-10 x 2", - "quantity": 1 - }, - { - "name": "KG-600", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, WMD7, 800L Tankx2, SPJ, 2*LD-10", - "name": "PL-5Ex2, WMD7, 800L Tankx2, SPJ, 2*LD-10", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "CM802AKG (DIS)", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "DATA-LINK POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, WMD7, CM802AKGx2, 800L Tank, DL", - "name": "PL-5Ex2, WMD7, CM802AKGx2, 800L Tank, DL", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "GB-6-SFW", - "quantity": 2 - }, - { - "name": "BRM-1_90MM", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, BRM1", - "name": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, BRM1", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "GB-6-SFW", - "quantity": 2 - }, - { - "name": "GBU-12", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, GBU-12", - "name": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, GBU-12", - "roles": [] - } - ], - "filename": "jf-17.png", - "enabled": true, - "liveries": { - "paf black panthers 07-101": { - "name": "Pakistan Air Force No.16 Sqn Black Panthers 07-101", - "countries": [ - "PAK" - ] - }, - "paf phoenixes": { - "name": "Pakistan Air Force No.28 Sqn Phoenixes", - "countries": [ - "PAK" - ] - }, - "paf black spiders 07-101 (fictional)": { - "name": "Pakistan Air Force No.26 Sqn Black Spiders 07-101 (Fictional)", - "countries": [ - "PAK" - ] - }, - "paf 07-101 (overhauled)": { - "name": "Pakistan Air Force 07-101 (Overhauled)", - "countries": [ - "PAK" - ] - }, - "paf black panthers (b2v2)": { - "name": "Pakistan Air Force No.16 Sqn Black Panthers (Block2 Camo2)", - "countries": [ - "PAK" - ] - }, - "plaaf 125th ab (fictional)": { - "name": "PLAAF 125th AB (Fictional)", - "countries": [ - "CHN" - ] - }, - "naf 722": { - "name": "Nigerian Air Force 722", - "countries": [ - "NGA" - ] - }, - "paf dark camo": { - "name": "Pakistan Air Force Dark Camo", - "countries": [ - "PAK" - ] - }, - "'splinter' camo for blue side (fictional)": { - "name": "\"Splinter\" Camo for Blue Side (Fictional)", - "countries": "All" - }, - "paf black spiders (web camo)": { - "name": "Pakistan Air Force No.26 Sqn Black Spiders (Web Camo)", - "countries": [ - "PAK" - ] - }, - "plaaf 111th ab (fictional)": { - "name": "PLAAF 111th AB (Fictional)", - "countries": [ - "CHN" - ] - }, - "paf black panthers": { - "name": "Pakistan Air Force No.16 Sqn Black Panthers", - "countries": [ - "PAK" - ] - }, - "paf black spiders (default)": { - "name": "Pakistan Air Force No.26 Sqn Black Spiders", - "countries": [ - "PAK" - ] - }, - "paf ccs fierce fragons": { - "name": "Pakistan Air Force CCS Sqn Fierce Dragons", - "countries": [ - "PAK" - ] - }, - "plaaf ghost gray camo (fictional)": { - "name": "PLAAF \"Ghost Gray\" Camo (Fictional)", - "countries": [ - "CHN" - ] - }, - "'chips' camo for blue side (fictional)": { - "name": "USAF \"Chips\" Camo (Fictional)", - "countries": [ - "USA" - ] - }, - "paf black panthers (reworked)": { - "name": "Pakistan Air Force No.16 Sqn Black Panthers (Reworked)", - "countries": [ - "PAK" - ] - }, - "maf blue sea camo": { - "name": "Myanmar Air Force Blue Sea Camo", - "countries": "All" - }, - "proto 06": { - "name": "FC-1 Prototype 06", - "countries": [ - "CHN" - ] - }, - "paf minhasians": { - "name": "Pakistan Air Force No.2 Sqn Minhasians", - "countries": [ - "PAK" - ] - }, - "paf sharp shooters": { - "name": "Pakistan Air Force No.18 Sqn Sharp Shooters", - "countries": [ - "PAK" - ] - }, - "paf tail choppers": { - "name": "Pakistan Air Force No.14 Sqn Tail Choppers", - "countries": [ - "PAK" - ] - }, - "paf black panthers (b2v1)": { - "name": "Pakistan Air Force No.16 Sqn Black Panthers (Block2 Camo1)", - "countries": [ - "PAK" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew, fighter and strike. Geoff", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "KC-135": { - "name": "KC-135", - "coalition": "blue", - "label": "KC-135 Stratotanker", - "era": "Early Cold War", - "shortLabel": "135", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Tanker" - ] - } - ], - "filename": "kc-135.png", - "enabled": true, - "liveries": { - "standard usaf": { - "name": "USAF Standard", - "countries": [ - "USA" - ] - }, - "turaf standard": { - "name": "Turkish Air Force", - "countries": [ - "TUR" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 3 crew. Tanker aircraft. Stratotanker", - "abilities": "Tanker, Boom AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "KC135MPRS": { - "name": "KC135MPRS", - "coalition": "blue", - "label": "KC-135 MPRS Stratotanker", - "era": "Early Cold War", - "shortLabel": "135M", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Tanker" - ] - } - ], - "filename": "kc-135.png", - "enabled": true, - "liveries": { - "100th arw": { - "name": "100th ARW", - "countries": [ - "USA" - ] - }, - "22nd arw": { - "name": "22nd ARW", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 3 crew. Tanker aircraft. Stratotanker", - "abilities": "Tanker, Drogue AAR, MPRS", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "L-39ZA": { - "name": "L-39ZA", - "coalition": "red", - "label": "L-39ZA", - "era": "Mid Cold War", - "shortLabel": "L39", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100x2", - "name": "FAB-100x2", - "roles": [ - "Antiship Strike", - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel Tank 150 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100x2, PTB-150x2", - "name": "FAB-100x2, PTB-150x2", - "roles": [ - "Antiship Strike", - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel Tank 350 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100x2, PTB-350x2", - "name": "FAB-100x2, PTB-350x2", - "roles": [ - "Antiship Strike", - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "FAB-100x4", - "name": "FAB-100x4", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "2 x OFAB-100 Jupiter - 100kg GP Bombs HD", - "quantity": 2 - }, - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "OFAB-100 Jupiter x4, FAB-100x2", - "name": "OFAB-100 Jupiter x4, FAB-100x2", - "roles": [ - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "2 x OFAB-100 Jupiter - 100kg GP Bombs HD", - "quantity": 4 - } - ], - "enabled": true, - "code": "OFAB-100 Jupiter x8", - "name": "OFAB-100 Jupiter x8", - "roles": [ - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "PK-3 - 7.62mm GPMG", - "quantity": 2 - }, - { - "name": "Fuel Tank 150 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "PK-3x2, PTB-150x2", - "name": "PK-3x2, PTB-150x2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "PK-3 - 7.62mm GPMG", - "quantity": 4 - } - ], - "enabled": true, - "code": "PK-3x4", - "name": "PK-3x4", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-3S - AAM, IR guided", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-3Sx2", - "name": "R-3Sx2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-3S - AAM, IR guided", - "quantity": 2 - }, - { - "name": "PK-3 - 7.62mm GPMG", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-3Sx2, PK-3x2", - "name": "R-3Sx2, PK-3x2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-60Mx2", - "name": "R-60Mx2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "PK-3 - 7.62mm GPMG", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-60Mx2, PK-3x2", - "name": "R-60Mx2, PK-3x2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-5KOx32", - "name": "S-5KOx32", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - }, - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-5KOx32, FAB-100x2", - "name": "S-5KOx32, FAB-100x2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - }, - { - "name": "Fuel Tank 150 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-5KOx32, PTB-150x2", - "name": "S-5KOx32, PTB-150x2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - }, - { - "name": "Fuel Tank 350 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-5KOx32, PTB-350x2", - "name": "S-5KOx32, PTB-350x2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-5KOx64", - "name": "S-5KOx64", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "SAB-100MN - 100 kg Illumination Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "SAB-100x4", - "name": "SAB-100x4", - "roles": [ - "FAC-A" - ] - } - ], - "filename": "l-39.png", - "enabled": true, - "liveries": { - "splinter camo woodland": { - "name": "Splinter camo woodland", - "countries": "All" - }, - "algerian af tiger nl-36": { - "name": "Algerian AF Tiger NL-36", - "countries": [ - "DZA" - ] - }, - "czech air force": { - "name": "Czech Air Force", - "countries": [ - "CZE" - ] - }, - "algerian af nl-44": { - "name": "Algerian AF NL-44", - "countries": [ - "DZA" - ] - }, - "splinter camo desert": { - "name": "Splinter camo desert", - "countries": "All" - }, - "slovak air force": { - "name": "2nd SQN AFB Sliac", - "countries": [ - "SVK" - ] - }, - "russian air force": { - "name": "1 Russian Air Force", - "countries": [ - "RUS" - ] - }, - "czechoslovakia air force": { - "name": "Czechoslovakia_Air Force", - "countries": [ - "CZE" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "M-2000C": { - "name": "M-2000C", - "coalition": "blue", - "label": "M-2000C Mirage", - "era": "Late Cold War", - "shortLabel": "2k", - "loadouts": [ - { - "items": [ - { - "name": "Matra Super 530D", - "quantity": 2 - } - ], - "enabled": true, - "code": "Alpha / S530D", - "name": "Alpha / S530D", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - } - ], - "enabled": true, - "code": "Bravo", - "name": "Bravo", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "AUF2 GBU-12 x 2", - "quantity": 1 - } - ], - "enabled": true, - "code": "Bravo / 2xGBU-12 / Magic", - "name": "Bravo / 2xGBU-12 / Magic", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "Bravo / 4xMk-82 / Magic", - "name": "Bravo / 4xMk-82 / Magic", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 4 - } - ], - "enabled": true, - "code": "Bravo / 4xSnakeEye / Magic", - "name": "Bravo / 4xSnakeEye / Magic", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "BAP-100 x 18", - "quantity": 1 - } - ], - "enabled": true, - "code": "Bravo / BAP-100 / Magic", - "name": "Bravo / BAP-100 / Magic", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - } - ], - "enabled": true, - "code": "Bravo / GBU-12 / Magic", - "name": "Bravo / GBU-12 / Magic", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "GBU-16 - 1000lb Laser Guided Bomb", - "quantity": 1 - } - ], - "enabled": true, - "code": "Bravo / GBU-16 / Magic", - "name": "Bravo / GBU-16 / Magic", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "GBU-24 Paveway III - 2000lb Laser Guided Bomb", - "quantity": 1 - } - ], - "enabled": true, - "code": "Bravo / GBU-24 / Magic", - "name": "Bravo / GBU-24 / Magic", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - } - ], - "enabled": true, - "code": "Bravo / Magic", - "name": "Bravo / Magic", - "roles": [ - "CAP" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fox", - "name": "Fox", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fox / 4xMk-82 / Magic", - "name": "Fox / 4xMk-82 / Magic", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fox / Magic (QRA)", - "name": "Fox / Magic (QRA)", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "Matra Super 530D", - "quantity": 2 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fox / S530D / Magic", - "name": "Fox / S530D / Magic", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "Matra Super 530D", - "quantity": 2 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - }, - { - "name": "Eclair 16 flares 16 chaffs", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fox / S530D / Magic / Eclair", - "name": "Fox / S530D / Magic / Eclair", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kilo", - "name": "Kilo", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kilo / 4xMk-82 / Magic", - "name": "Kilo / 4xMk-82 / Magic", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kilo / Magic", - "name": "Kilo / Magic", - "roles": [ - "CAP" - ] - } - ], - "filename": "m2000.png", - "enabled": true, - "liveries": { - "ada alsace lf-2": { - "name": "Ada Alsace LF-2", - "countries": [ - "FRA" - ] - }, - "peru052": { - "name": "Fuerza Aerea Peruana 052", - "countries": [ - "FRA", - "PER" - ] - }, - "mission accomplie": { - "name": "2022 MISSION ACCOMPLIE by MALBAK", - "countries": "All" - }, - "cambresis": { - "name": "AdA Cambresis", - "countries": [ - "FRA" - ] - }, - "greek air force": { - "name": "Polemikh Aeroporia (Greek Air Force)", - "countries": [ - "FRA", - "GRC" - ] - }, - "brasilian air force": { - "name": "Forca Aerea Brasileira (Brazilian Air Force)", - "countries": [ - "BRA", - "FRA" - ] - }, - "2003 tigermeet": { - "name": "NATO Tigermeet 2003", - "countries": [ - "FRA" - ] - }, - "peru064": { - "name": "Fuerza Aerea Peruana 064", - "countries": [ - "FRA", - "PER" - ] - }, - "2010 tigermeet": { - "name": "NATO Tigermeet 2010", - "countries": [ - "FRA" - ] - }, - "uae air force": { - "name": "UAE Air Defense Air Force", - "countries": [ - "FRA", - "ARE" - ] - }, - "2004 tigermeet": { - "name": "NATO Tigermeet 2004", - "countries": [ - "FRA" - ] - }, - "ada chasse 2-5": { - "name": "AdA Chasse 2/5", - "countries": [ - "FRA" - ] - }, - "iaf silver 59": { - "name": "Israeli Air Force 101 Sqn 1967 scheme", - "countries": [ - "ABH", - "RUS", - "SPN", - "ISR", - "USA", - "RSO", - "UKR", - "TUR", - "BEL", - "NOR", - "ITA", - "POL", - "NETH", - "GER", - "FRA", - "GRG", - "DEN", - "CZE", - "CAN", - "UK" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew, fighter and strike.", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MB-339A": { - "name": "MB-339A", - "coalition": "blue", - "label": "MB-339A", - "era": "Mid Cold War", - "shortLabel": "339", - "loadouts": [ - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": null, - "quantity": 6 - } - ], - "enabled": true, - "code": "A - 2*320L TipTanks [Clean]", - "name": "A - 2*320L TipTanks [Clean]", - "roles": [ - "Transport" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "Fuel Tank 330lt", - "quantity": 2 - }, - { - "name": null, - "quantity": 3 - } - ], - "enabled": true, - "code": "A - 2*320L TipTanks + 2*330L Tanks [Ferry Medium Range]", - "name": "A - 2*320L TipTanks + 2*330L Tanks [Ferry Medium Range]", - "roles": [ - "Transport" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 HEI Heavy", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - } - ], - "enabled": true, - "code": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (HEI Rockets)", - "name": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (HEI Rockets)", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 API", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - } - ], - "enabled": true, - "code": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD Bombs + 2*LR-25(API Rockets)", - "name": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD Bombs + 2*LR-25(API Rockets)", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Mk-81 - 250lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - } - ], - "enabled": true, - "code": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.83 + 2*Mk.81 ", - "name": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.83 + 2*Mk.81 ", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 6 - } - ], - "enabled": true, - "code": "A - 2*320L TipTanks + 6*Mk.82LD", - "name": "A - 2*320L TipTanks + 6*Mk.82LD", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 330lt", - "quantity": 2 - }, - { - "name": null, - "quantity": 3 - }, - { - "name": "Cylindrical Tip Tank 500lt", - "quantity": 2 - }, - { - "name": "Luggage Container", - "quantity": 1 - } - ], - "enabled": true, - "code": "A - 2*500L TipTanks + 2*330L Tanks + Luggage Container [Ferry Long Range]", - "name": "A - 2*500L TipTanks + 2*330L Tanks + Luggage Container [Ferry Long Range]", - "roles": [ - "No task", - "Transport" - ] - }, - { - "items": [ - { - "name": "Cylindrical Tip Tank 500lt", - "quantity": 2 - }, - { - "name": "Matra Type 155 Rocket Pod", - "quantity": 2 - }, - { - "name": "BLG-66-AC Belouga", - "quantity": 2 - }, - { - "name": "AN/M3 Gunpod Right", - "quantity": 1 - }, - { - "name": "AN/M3 Gunpod Left", - "quantity": 1 - } - ], - "enabled": true, - "code": "A - 2*500L TipTanks + 2*AN/M3 GunPods + 2*Matra 155 + 2* Belouga", - "name": "A - 2*500L TipTanks + 2*AN/M3 GunPods + 2*Matra 155 + 2* Belouga", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - }, - { - "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 API", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Cylindrical Tip Tank 500lt", - "quantity": 2 - } - ], - "enabled": true, - "code": "A - 2*500L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (API Rockets)", - "name": "A - 2*500L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (API Rockets)", - "roles": [] - }, - { - "items": [ - { - "name": "Cylindrical Tip Tank 500lt", - "quantity": 2 - }, - { - "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 API", - "quantity": 2 - }, - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 4 - } - ], - "enabled": true, - "code": "A - 2*500L TipTanks + 4*Mk.82HD + 2*LR-25 (API Rockets)", - "name": "A - 2*500L TipTanks + 4*Mk.82HD + 2*LR-25 (API Rockets)", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "LAU-10 pod - 4 x 127mm ZUNI, UnGd Rkts Mk71, HE/FRAG", - "quantity": 2 - }, - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - } - ], - "enabled": true, - "code": "AA - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*LAU-10(Zuni Rockets) [ARMADA]", - "name": "AA - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*LAU-10(Zuni Rockets) [ARMADA]", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "Fuel Tank 330lt", - "quantity": 2 - }, - { - "name": "AN/M3 Gunpod Right", - "quantity": 1 - }, - { - "name": "AN/M3 Gunpod Left", - "quantity": 1 - } - ], - "enabled": true, - "code": "AM - 2*320L TipTanks + 2*AN/M3 GunPods + 2*330L Tanks + 2*LAU-3 (Hydra rockets)", - "name": "AM - 2*320L TipTanks + 2*AN/M3 GunPods + 2*330L Tanks + 2*LAU-3 (Hydra rockets)", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "14-3-M2 - 6 x BAT-120 ABL - 34kg HE/Frag Chute Retarded Bomb HD", - "quantity": 6 - } - ], - "enabled": true, - "code": "Anti - Light Armoured Vehicle (36*BAT-120 ABL)", - "name": "Anti - Light Armoured Vehicle (36*BAT-120 ABL)", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "Matra Type 155 Rocket Pod", - "quantity": 2 - }, - { - "name": "Fuel Tank 330lt", - "quantity": 2 - }, - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - } - ], - "enabled": true, - "code": "AP - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*330L Tanks + 2*Matra 155 (SNEB rockets)", - "name": "AP - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*330L Tanks + 2*Matra 155 (SNEB rockets)", - "roles": [ - "CAS" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "AN/M3 Gunpod Right", - "quantity": 1 - }, - { - "name": "Photo-Recon Pod (4*70mm Vinten Cameras)", - "quantity": 1 - }, - { - "name": "Fuel Tank 330lt", - "quantity": 2 - }, - { - "name": null, - "quantity": 2 - } - ], - "enabled": true, - "code": "Recon", - "name": "Recon", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "BLU-107/B Durandal - 219kg Concrete Piercing Chute Retarded Bomb w/Booster", - "quantity": 4 - }, - { - "name": "Matra Type 155 Rocket Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "Runway Interdiction", - "name": "Runway Interdiction", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "14-3-M2 - 6 x BAP-100 - 32kg Concrete Piercing Chute Retarded Bomb w/Booster", - "quantity": 6 - } - ], - "enabled": true, - "code": "Runway Interdiction (36*BAP-100)", - "name": "Runway Interdiction (36*BAP-100)", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Cylindrical Tip Tank 500lt", - "quantity": 2 - }, - { - "name": "BRD-4-250 - 4 x Mk 76 - 25lb Practice Bomb LD", - "quantity": 1 - }, - { - "name": null, - "quantity": 2 - }, - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - } - ], - "enabled": true, - "code": "Training", - "name": "Training", - "roles": [] - } - ], - "filename": "c-101.png", - "enabled": true, - "liveries": { - "mb339an 'nigeria'": { - "name": "Nigerian Air Force | Camo (Low-Vis)", - "countries": [ - "NGA" - ] - }, - "mb339a italian camo - late": { - "name": "Italian Camo - Late", - "countries": [ - "ITA" - ] - }, - "mb339a italian factory": { - "name": "Italian Orange/White", - "countries": [ - "ITA" - ] - }, - "mb339am 'malaysia'": { - "name": "Royal Malaysian Air Force | Camo (Low-Vis)", - "countries": [ - "MYS" - ] - }, - "mb339aa 'armada' - yellow band": { - "name": "ARMADA Argentina | Camo (Yellow Band)", - "countries": [ - "ARG" - ] - }, - "mb339ag 'ghana'": { - "name": "Ghana Air Force | Camo (Low-Vis)", - "countries": [ - "GHA" - ] - }, - "mb339a italian gray": { - "name": "Italian Gray", - "countries": [ - "ITA" - ] - }, - "mb339a italian camo - early": { - "name": "Italian Camo - Early", - "countries": [ - "ITA" - ] - }, - "mb339 'factory'": { - "name": "Aermacchi Factory Scheme | S-001 I-NEUF", - "countries": "All" - }, - "mb339ad 'uae'": { - "name": "UAE Air Force", - "countries": [ - "ARE" - ] - }, - "mb339aa 'armada' - crippa": { - "name": "ARMADA Argentina | Camo (Lt. Crippa's killmark)", - "countries": [ - "ARG" - ] - }, - "mb339ap 'peru'": { - "name": "Peruvian Air Force | Camo (Late)", - "countries": [ - "PER" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MQ-9 Reaper": { - "name": "MQ-9 Reaper", - "coalition": "blue", - "label": "MQ-9 Reaper", - "era": "Modern", - "shortLabel": "MQ9", - "loadouts": [ - { - "items": [ - { - "name": "M299 - 4 x AGM-114K Hellfire", - "quantity": 2 - }, - { - "name": "AGM-114K * 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-114K*12", - "name": "AGM-114K*12", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "M299 - 4 x AGM-114K Hellfire", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-114K*8,GBU-38*2", - "name": "AGM-114K*8,GBU-38*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-12*4", - "name": "GBU-12*4", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-38*4", - "name": "GBU-38*4", - "roles": [ - "CAS", - "Strike" - ] - } - ], - "filename": "i-16.png", - "enabled": true, - "liveries": { - "standard": { - "name": "standard", - "countries": [ - "USA" - ] - }, - "standard uk": { - "name": "standard UK", - "countries": [ - "UK" - ] - }, - "standard italy": { - "name": "standard Italy", - "countries": [ - "ITA" - ] - }, - "standard france": { - "name": "standard France", - "countries": [ - "FRA" - ] - }, - "'camo' scheme": { - "name": "'camo' scheme", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "Single turboprop, straight wing, attack aircraft. Reaper", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-15bis": { - "name": "MiG-15bis", - "coalition": "red", - "label": "MiG-15 Fagot", - "era": "Early Cold War", - "shortLabel": "M15", - "loadouts": [ - { - "items": [ - { - "name": "Fuel Tank 300 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*300L", - "name": "2*300L", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 400 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*400L", - "name": "2*400L", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 600 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*600L", - "name": "2*600L", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "FAB-100M - 100kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*FAB-100M", - "name": "2*FAB-100M", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-50 - 50kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*FAB-50", - "name": "2*FAB-50", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 300 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "Fuel tank 300", - "name": "Fuel tank 300", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 400 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "Fuel tank 400", - "name": "Fuel tank 400", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - } - ], - "filename": "mig-15.png", - "enabled": true, - "liveries": { - "china_air force": { - "name": "People's Liberation Army Air Force", - "countries": [ - "CHN" - ] - }, - "china volunteer air force": { - "name": "People's Volunteer Army Air Force", - "countries": [ - "CHN" - ] - }, - "ussr_red": { - "name": "USSR Red", - "countries": [ - "SUN", - "RUS" - ] - }, - "algerian af 1962": { - "name": "Algerian AF 1962", - "countries": [ - "DZA" - ] - }, - "north_korea_air force_major_ arkady_ boitsow": { - "name": "North Korea - Major Arkady Boitsow", - "countries": [ - "RUS", - "PRK" - ] - }, - "gdr_air force": { - "name": "Air Forces of the National People's Army", - "countries": [ - "GER" - ] - }, - "default livery": { - "name": "default livery", - "countries": [ - "BRA", - "CUB", - "MYS", - "ARE", - "AUS", - "ABH", - "RUS", - "PHL", - "SPN", - "ISR", - "SUN", - "USA", - "BHR", - "MAR", - "BLR", - "HRV", - "DZA", - "OMN", - "RSO", - "SVK", - "HND", - "IRN", - "UKR", - "TUR", - "JPN", - "PRK", - "SRB", - "IDN", - "KAZ", - "BGR", - "BEL", - "INS", - "THA", - "LBY", - "AUSAF", - "VEN", - "PAK", - "JOR", - "RSA", - "FIN", - "MEX", - "KWT", - "NOR", - "IRQ", - "SYR", - "ITA", - "NZG", - "GRC", - "POL", - "NETH", - "GER", - "SUI", - "CHN", - "SAU", - "SWE", - "YEM", - "VNM", - "ROU", - "RSI", - "FRA", - "CHL", - "KOR", - "HUN", - "AUT", - "GRG", - "DEN", - "TUN", - "EGY", - "IND", - "CZE", - "ETH", - "CAN", - "SDN", - "QAT", - "UK", - "YUG" - ] - }, - "haf fictional": { - "name": "Hellenic Airforce - Fictional", - "countries": [ - "GRC" - ] - }, - "ussr_air forces": { - "name": "Air Forces of Soviet Union", - "countries": [ - "SUN", - "RUS" - ] - }, - "north_korea_air force": { - "name": "Korean People's Air Force", - "countries": [ - "PRK" - ] - }, - "polish_air force": { - "name": "Polish Air Force", - "countries": [ - "POL" - ] - }, - "ussr_air forces old": { - "name": "USSR Old", - "countries": [ - "SUN", - "RUS" - ] - }, - "czechoslovakia_air force": { - "name": "Czechoslovak Air Force", - "countries": [ - "CZE" - ] - }, - "ussr_pepelyaev": { - "name": "USSR Pepelyaev", - "countries": [ - "SUN", - "RUS", - "PRK" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew. Fagot", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-19P": { - "name": "MiG-19P", - "coalition": "red", - "label": "MiG-19 Farmer", - "era": "Early Cold War", - "shortLabel": "M19", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "FAB-100M - 100kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100M x 2", - "name": "FAB-100M x 2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-100M - 100kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "ORO-57K - S-5M x 8", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100M x 2, ORO-57K x 2", - "name": "FAB-100M x 2, ORO-57K x 2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250 x 2", - "name": "FAB-250 x 2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "ORO-57K - S-5M x 8", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250 x 2, ORO-57K x 2", - "name": "FAB-250 x 2, ORO-57K x 2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "K-13A", - "quantity": 2 - } - ], - "enabled": true, - "code": "K-13A x 2", - "name": "K-13A x 2", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "K-13A", - "quantity": 2 - }, - { - "name": "Fuel Tank 760 liters", - "quantity": 2 - }, - { - "name": "ORO-57K - S-5M x 8", - "quantity": 2 - } - ], - "enabled": true, - "code": "K-13A x 2, ORO-57K x 2, PTB-760 x 2", - "name": "K-13A x 2, ORO-57K x 2, PTB-760 x 2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "K-13A", - "quantity": 2 - }, - { - "name": "Fuel Tank 760 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "K-13A x 2, PTB-760 x 2", - "name": "K-13A x 2, PTB-760 x 2", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "ORO-57K - S-5M x 8", - "quantity": 2 - } - ], - "enabled": true, - "code": "ORO-57K x 2", - "name": "ORO-57K x 2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 760 liters", - "quantity": 2 - }, - { - "name": "ORO-57K - S-5M x 8", - "quantity": 2 - } - ], - "enabled": true, - "code": "ORO-57K x 2, PTB-760 x 2", - "name": "ORO-57K x 2, PTB-760 x 2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "ORO-57K - S-5M x 8", - "quantity": 4 - } - ], - "enabled": true, - "code": "ORO-57K x 4", - "name": "ORO-57K x 4", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 760 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "PTB-760 x 2", - "name": "PTB-760 x 2", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - } - ], - "filename": "mig-19.png", - "enabled": true, - "liveries": { - "ussr_2": { - "name": "764th Fighter Aviation Regiment", - "countries": [ - "SUN", - "RUS" - ] - }, - "plaaf camo": { - "name": "PLAAF Snow Camo", - "countries": [ - "CHN" - ] - }, - "cuba": { - "name": " 211 Escuadron de Caza", - "countries": [ - "CUB" - ] - }, - "iap": { - "name": "234 Fighter Regiment (234 IAP)", - "countries": "All" - }, - "ddr - fictional": { - "name": "Germany DDR camouflage (Fictional)", - "countries": "All" - }, - "snow - fictional": { - "name": "Snow Camouflage Fictional", - "countries": "All" - }, - "plaaf": { - "name": "112th Air Regiment", - "countries": [ - "CHN" - ] - }, - "romania - 66th fighter division": { - "name": "91st Fighter Regiment", - "countries": [ - "ROU" - ] - }, - "poland 39 plm": { - "name": "39 PLM Squadron", - "countries": [ - "POL" - ] - }, - "poland 62 plm": { - "name": "62 PLM Squadron", - "countries": [ - "POL" - ] - }, - "default": { - "name": "default", - "countries": "All" - }, - "czechoslovakia": { - "name": "2nd Fighter-Bomber Regiment", - "countries": [ - "CZE" - ] - }, - "bulgaria": { - "name": "1st Squadron, 18th Fighter Regiment", - "countries": [ - "BGR" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew. Farmer", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-21Bis": { - "name": "MiG-21Bis", - "coalition": "red", - "label": "MiG-21 Fishbed", - "era": "Mid Cold War", - "shortLabel": "M21", - "loadouts": [ - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 4 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Aerial attack, hard targets, CLUSTERS", - "name": "Aerial attack, hard targets, CLUSTERS", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Smoke - white - 21", - "quantity": 1 - } - ], - "enabled": true, - "code": "AEROBATIC", - "name": "AEROBATIC", - "roles": [] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 2 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 2 - } - ], - "enabled": true, - "code": "Escort", - "name": "Escort", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "SPS-141-100 (21) - jamming and countermeasures pod", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 1 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 1 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - } - ], - "enabled": true, - "code": "Escort, JAMMER", - "name": "Escort, JAMMER", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "Kh-66 Grom (21) - AGM, radar guided APU-68", - "quantity": 2 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Few big targets, GROM + BOMBS", - "name": "Few big targets, GROM + BOMBS", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "Hard targets, BOMBS", - "name": "Hard targets, BOMBS", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "S-24A (21) - 180 kg, cumulative unguided rocket", - "quantity": 4 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Hard targets, ROCKETS, PENETRATION", - "name": "Hard targets, ROCKETS, PENETRATION", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 490 L Central (21)", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 2 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - } - ], - "enabled": true, - "code": "Long range, INFRA RED MISSILES", - "name": "Long range, INFRA RED MISSILES", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "SPS-141-100 (21) - jamming and countermeasures pod", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 1 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 1 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - } - ], - "enabled": true, - "code": "Long range, JAMMER", - "name": "Long range, JAMMER", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 490 L Central (21)", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 1 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 1 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - } - ], - "enabled": true, - "code": "Long range, MIX", - "name": "Long range, MIX", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 490 L Central (21)", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 2 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - } - ], - "enabled": true, - "code": "Long range, RADAR GUIDED MISSILES", - "name": "Long range, RADAR GUIDED MISSILES", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "SAB-100MN - 100 kg Illumination Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "Night, ILLUMINATOR", - "name": "Night, ILLUMINATOR", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "RN-24 - 470kg, nuclear bomb, free fall", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 1 - } - ], - "enabled": true, - "code": "NUCLEAR A", - "name": "NUCLEAR A", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "RN-28 - 260 kg, nuclear bomb, free fall", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 1 - } - ], - "enabled": true, - "code": "NUCLEAR B", - "name": "NUCLEAR B", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-3R - AAM, radar guided", - "quantity": 1 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 1 - }, - { - "name": "SPS-141-100 (21) - jamming and countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - } - ], - "enabled": true, - "code": "Patrol, JAMMER", - "name": "Patrol, JAMMER", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 2 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 2 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Patrol, long range", - "name": "Patrol, long range", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 2 - }, - { - "name": "R-60 x 2", - "quantity": 2 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Patrol, medium range", - "name": "Patrol, medium range", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 490 L Central (21)", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 2 - }, - { - "name": "R-60 x 2", - "quantity": 2 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Patrol, short range", - "name": "Patrol, short range", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 2 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 2 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Short range", - "name": "Short range", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "BL-755 CBU - 450kg, 147 Frag/Pen bomblets", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - } - ], - "enabled": true, - "code": "Soft targets, CLUSTERS", - "name": "Soft targets, CLUSTERS", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "UB-32M - 32 S-5M", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - } - ], - "enabled": true, - "code": "Soft targets, CLUSTERS + ROCKETS", - "name": "Soft targets, CLUSTERS + ROCKETS", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "S-24B (21) - 180 kg, fragmented unguided rocket", - "quantity": 4 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Soft targets, ROCKETS, BLAST-FRAGMENTS", - "name": "Soft targets, ROCKETS, BLAST-FRAGMENTS", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "UPK-23-250 - gun pod", - "quantity": 2 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "Soft targets, scattered", - "name": "Soft targets, scattered", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - }, - { - "name": "UPK-23-250 - gun pod", - "quantity": 2 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Soft targets, UPK + CLUSTERS", - "name": "Soft targets, UPK + CLUSTERS", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "UPK-23-250 - gun pod", - "quantity": 2 - }, - { - "name": "UB-16UM - 16 S-5M", - "quantity": 2 - } - ], - "enabled": true, - "code": "Soft targets, UPK + ROCKETS", - "name": "Soft targets, UPK + ROCKETS", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "UB-32M - 32 S-5M", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "Unknown or mixed targets, BOMBS + ROCKETS", - "name": "Unknown or mixed targets, BOMBS + ROCKETS", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 2 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "Very hard target, PENETRATION", - "name": "Very hard target, PENETRATION", - "roles": [ - "Strike" - ] - } - ], - "filename": "mig-21.png", - "enabled": true, - "liveries": { - "afghanistan (1)": { - "name": "Afghanistan (1)", - "countries": "All" - }, - "bulgaria - 1-3 iae (3)": { - "name": "Bulgaria - 1/3 IAE (3)", - "countries": "All" - }, - "germany east - jg-8": { - "name": "East Germany - JG-8", - "countries": "All" - }, - "plaaf - white": { - "name": "PLAAF - White", - "countries": "All" - }, - "croatia - 21st fs": { - "name": "Croatia - 21st Fighter Squadron (Zagreb AB)", - "countries": "All" - }, - "plaaf - sky blue": { - "name": "PLAAF - Sky Blue", - "countries": "All" - }, - "iraq - 17th sqn (2)": { - "name": "Iraq - 17th Sqn (2)", - "countries": "All" - }, - "vvs - amt-11 grey": { - "name": "VVS - AMT-11 Grey", - "countries": "All" - }, - "vvs - 234 gviap": { - "name": "VVS - 234 GvIAP", - "countries": "All" - }, - "bare metal": { - "name": "Bare Metal", - "countries": "All" - }, - "bulgaria - 1-3 iae (2)": { - "name": "Bulgaria - 1/3 IAE (2)", - "countries": "All" - }, - "plaaf - splinter": { - "name": "PLAAF - Splinter", - "countries": "All" - }, - "argentina (2)": { - "name": "Argentina (2)", - "countries": "All" - }, - "vvs - demonstrator": { - "name": "VVS Demonstrator", - "countries": "All" - }, - "vvs - 115 gviap": { - "name": "VVS - 115 GvIAP (Kokaydy AB)", - "countries": "All" - }, - "romania - lancer a": { - "name": "Romania - Lancer A", - "countries": "All" - }, - "sweden - 16th air wing": { - "name": "Sweden - 16th Air Wing", - "countries": "All" - }, - "syria (1)": { - "name": "Syria (1)", - "countries": "All" - }, - "egypt - grey 1982": { - "name": "Egypt - Grey 1982", - "countries": "All" - }, - "finland - hävllv 31": { - "name": "Finland - HavLLv 31", - "countries": "All" - }, - "huaf 47th ab - 6115 (griff sqn)": { - "name": "HunAF Griff Sqn. (47th AB) 6115", - "countries": "All" - }, - "libya - 2017": { - "name": "Lybia - 2017", - "countries": "All" - }, - "huaf 47th ab (griff sqn)": { - "name": "HunAF Griff Sqn. (47th AB)", - "countries": "All" - }, - "cuba - 1990s": { - "name": "Cuba - 1990s", - "countries": "All" - }, - "serbia - 101st lae": { - "name": "Serbia - 101st LAE", - "countries": "All" - }, - "slovakia - 1998": { - "name": "Slovakia - 1998", - "countries": "All" - }, - "iran - 51st sqn": { - "name": "Iran - 51st Sqn (Umidiyeh AB)", - "countries": "All" - }, - "vvs - 116 cbp": { - "name": "VVS - 116 CBP", - "countries": "All" - }, - "georgia (2)": { - "name": "Georgia (2)", - "countries": "All" - }, - "huaf metal": { - "name": "HuAF Metal", - "countries": "All" - }, - "bulgaria - 1-3 iae": { - "name": "Bulgaria - 1/3 IAE", - "countries": "All" - }, - "india - 101st sqn (1)": { - "name": "India - 101st Sqn Falcons", - "countries": "All" - }, - "ukraine (2)": { - "name": "Ukraine 02", - "countries": "All" - }, - "vpaf - 927th fighter regiment metal": { - "name": "VPAF - 927th Fighter Regiment Metal", - "countries": "All" - }, - "iran - standard": { - "name": "Iran - Standard", - "countries": "All" - }, - "romania - lancer c": { - "name": "Romania - Lancer C", - "countries": "All" - }, - "angola - c41": { - "name": "Angola - C41", - "countries": "All" - }, - "poland - 1 dlmw": { - "name": "Poland - 1 DLMW", - "countries": "All" - }, - "yugoslavia - gray": { - "name": "Yugoslavia - Grey", - "countries": "All" - }, - "angola - c314": { - "name": "Angola - C314", - "countries": "All" - }, - "argentina (1)": { - "name": "Argentina (1)", - "countries": "All" - }, - "romania - gray": { - "name": "Romania - Gray", - "countries": "All" - }, - "dprk - 2016 - 42": { - "name": "DPRK - 2016 Nr.42", - "countries": "All" - }, - "libya - early": { - "name": "Lybia - Early", - "countries": "All" - }, - "poland - metal": { - "name": "Poland - Lacquer Metal", - "countries": "All" - }, - "syria (2)": { - "name": "Syria (2)", - "countries": "All" - }, - "india - 15th sqn": { - "name": "India - 15 Sqn War Games", - "countries": "All" - }, - "cuba - um 5010 is": { - "name": "Cuba - UM 5010 IS", - "countries": "All" - }, - "afghanistan (2)": { - "name": "Afghanistan (2)", - "countries": "All" - }, - "iraq - 9th sqn": { - "name": "Iraq - 9th Sqn", - "countries": "All" - }, - "vpaf - 927th lam son - 6122": { - "name": "VPAF - 927th Lam Son", - "countries": "All" - }, - "yugoslavia - camo": { - "name": "Yugoslavia - Camo", - "countries": "All" - }, - "egypt - tan 1982": { - "name": "Egypt - Tan 1982", - "countries": "All" - }, - "croatia - 1st fs 1992": { - "name": "Croatia - 1st FS 1992", - "countries": "All" - }, - "southeria": { - "name": "Southeria", - "countries": "All" - }, - "ukraine (1)": { - "name": "Ukraine 01", - "countries": "All" - }, - "georgia (1)": { - "name": "Georgia (1)", - "countries": "All" - }, - "northeria - 32nd fs": { - "name": "Northeria - 32nd FG", - "countries": "All" - }, - "cuba - metal": { - "name": "Cuba - Metal", - "countries": "All" - }, - "huaf 47th ab - early": { - "name": "HunAF Griff Sqn. (47th AB) - Early ", - "countries": "All" - }, - "jasdf": { - "name": "JASDF", - "countries": "All" - }, - "raf - 111th sqn": { - "name": "RAF - 111th Sqn", - "countries": "All" - }, - "sweden - m90": { - "name": "Sweden - M90", - "countries": "All" - }, - "algeria": { - "name": "Algeria FD-43", - "countries": "All" - }, - "india - 101st sqn (2)": { - "name": "India - 101st Sqn Falcons (2)", - "countries": "All" - }, - "draken international": { - "name": "Draken International", - "countries": "All" - }, - "raf - 11th sqn": { - "name": "RAF - 11th Sqn", - "countries": "All" - }, - "vpaf - 921st sao do - 5040": { - "name": "VPAF - 921st Sao Do", - "countries": "All" - }, - "vvs - metal": { - "name": "VVS Metal", - "countries": "All" - }, - "iraq - 17th sqn (1)": { - "name": "Iraq - 17th Sqn (1)", - "countries": "All" - }, - "vvs - 185th gviap": { - "name": "VVS 185th GvIAP", - "countries": "All" - }, - "poland - 10 elt": { - "name": "Poland - 10 ELT", - "countries": "All" - }, - "dprk - 2014 - 34": { - "name": "DPRK - 2014 Nr.34", - "countries": "All" - }, - "huaf grey": { - "name": "HuAF Grey", - "countries": "All" - }, - "huaf 31st ab (turul sqn)": { - "name": "HunAF 1904 Capeti (51th AB)", - "countries": "All" - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew. Fishbed", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-23MLD": { - "name": "MiG-23MLD", - "coalition": "red", - "label": "MiG-23 Flogger", - "era": "Mid Cold War", - "shortLabel": "23", - "loadouts": [ - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "B-8*2,R-60M*2,Fuel-800", - "name": "B-8*2,R-60M*2,Fuel-800", - "roles": [ - "Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*2,R-60M*2,Fuel-800", - "name": "FAB-250*2,R-60M*2,Fuel-800", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*2,R-60M*2,Fuel-800", - "name": "FAB-500*2,R-60M*2,Fuel-800", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-24T (AA-7 Apex IR) - Infra Red", - "quantity": 1 - }, - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-24R,R-24T,R-60M*4", - "name": "R-24R,R-24T,R-60M*4", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-24T (AA-7 Apex IR) - Infra Red", - "quantity": 1 - }, - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - }, - { - "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-24R,R-24T,R-60M*4,Fuel-800", - "name": "R-24R,R-24T,R-60M*4,Fuel-800", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-24R*2,R-60M*4", - "name": "R-24R*2,R-60M*4", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-24R*2,R-60M*4,Fuel-800", - "name": "R-24R*2,R-60M*4,Fuel-800", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-60M*4", - "name": "R-60M*4", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-60M*4,Fuel-800", - "name": "R-60M*4,Fuel-800", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-250*2,R-60M*2,Fuel-800", - "name": "RBK-250*2,R-60M*2,Fuel-800", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-500*2,R-60M*2,Fuel-800", - "name": "RBK-500*2,R-60M*2,Fuel-800", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "UB-32*2,R-60M*2,Fuel-800", - "name": "UB-32*2,R-60M*2,Fuel-800", - "roles": [ - "Strike" - ] - } - ], - "filename": "mig-23.png", - "enabled": true, - "liveries": { - "af standard-2": { - "name": "af standard-2", - "countries": [ - "SUN", - "RUS" - ] - }, - "af standard-3 (worn-out)": { - "name": "af standard-3 (worn-out)", - "countries": [ - "SUN", - "RUS" - ] - }, - "algerian air force": { - "name": "Algerian Air Force", - "countries": [ - "DZA" - ] - }, - "af standard-1": { - "name": "af standard-1", - "countries": [ - "SUN", - "RUS" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swing wing, 1 crew. Flogger", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-25PD": { - "name": "MiG-25PD", - "coalition": "red", - "label": "MiG-25PD Foxbat", - "era": "Mid Cold War", - "shortLabel": "25P", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-40TD (AA-6 Acrid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-40R*2,R-40T*2", - "name": "R-40R*2,R-40T*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-40R*2,R-60M*2", - "name": "R-40R*2,R-60M*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-40R*4", - "name": "R-40R*4", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - } - ], - "filename": "mig-25.png", - "enabled": true, - "liveries": { - "algerian air force": { - "name": "Algeria Air Force standard", - "countries": [ - "DZA" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Foxbat", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-25RBT": { - "name": "MiG-25RBT", - "coalition": "red", - "label": "MiG-25RBT Foxbat", - "era": "Mid Cold War", - "shortLabel": "25R", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-500x2_60x2", - "name": "FAB-500x2_60x2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-60M*2", - "name": "R-60M*2", - "roles": [ - "Reconnaissance" - ] - } - ], - "filename": "mig-25.png", - "enabled": true, - "liveries": { - "algerian air force": { - "name": "Algeria Air Force standard", - "countries": [ - "DZA" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Foxbat", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-27K": { - "name": "MiG-27K", - "coalition": "red", - "label": "MiG-27K Flogger-D", - "era": "Mid Cold War", - "shortLabel": "M27", - "loadouts": [ - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - } - ], - "enabled": true, - "code": "B-8*4", - "name": "B-8*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "BetAB-500*2,FAB-500*2,R-60*2", - "name": "BetAB-500*2,FAB-500*2,R-60*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "BetAB-500ShP*2,FAB-250*2,R-60*2", - "name": "BetAB-500ShP*2,FAB-250*2,R-60*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*6,R-60M*2,Fuel", - "name": "FAB-250*6,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*2,FAB-250*2,R-60M*2,Fuel", - "name": "FAB-500*2,FAB-250*2,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "KAB-500LG - 500kg Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "KAB-500*2,R-60M*2,Fuel", - "name": "KAB-500*2,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-25ML*2,R-60M*2,Fuel", - "name": "Kh-25ML*2,R-60M*2,Fuel", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-25MPU*2,R-60M*2,Fuel", - "name": "Kh-25MPU*2,R-60M*2,Fuel", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "Kh-25MR (AS-10 Karen) - 300kg, ASM, 10km, RC Guided", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-25MR*2,R-60M*2,Fuel", - "name": "Kh-25MR*2,R-60M*2,Fuel", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*2,R-60*2,Fuel", - "name": "Kh-29L*2,R-60*2,Fuel", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*2,R-60M*2,Fuel", - "name": "Kh-29L*2,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29T*2,R-60M*2,Fuel", - "name": "Kh-29T*2,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-500AO*2,RBK-250*2,R-60M*2", - "name": "RBK-500AO*2,RBK-250*2,R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - } - ], - "enabled": true, - "code": "UB-32*4", - "name": "UB-32*4", - "roles": [ - "Strike" - ] - } - ], - "filename": "mig-23.png", - "enabled": true, - "liveries": { - "algerian air force": { - "name": "Algerian Air Force", - "countries": [ - "DZA" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swing wing, 1 crew. Flogger", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-29A": { - "name": "MiG-29A", - "coalition": "red", - "label": "MiG-29A Fulcrum", - "era": "Late Cold War", - "shortLabel": "M29", - "loadouts": [ - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "B-8*4,R-73*2,Fuel", - "name": "B-8*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500*4,R-73*2,Fuel", - "name": "BetAB-500*4,R-73*2,Fuel", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*4,R-73*2,Fuel", - "name": "FAB-250*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*4,R-73*2,Fuel", - "name": "FAB-500*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel tank 1150L MiG-29", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel-1150*2,Fuel-1500", - "name": "Fuel-1150*2,Fuel-1500", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-60M*4,R-27R*2", - "name": "R-60M*4,R-27R*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-60M*4,R-27R*2,Fuel-1500", - "name": "R-60M*4,R-27R*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-60M*6", - "name": "R-60M*6", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 6 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-60M*6,Fuel-1500", - "name": "R-60M*6,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-73*2,R-60M*2,R-27R*2", - "name": "R-73*2,R-60M*2,R-27R*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", - "name": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-73*4,R-27R*2", - "name": "R-73*4,R-27R*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*4,R-27R*2,Fuel-1500", - "name": "R-73*4,R-27R*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*6", - "name": "R-73*6", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 6 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*6,Fuel-1500", - "name": "R-73*6,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-250*4,R-73*2,Fuel", - "name": "RBK-250*4,R-73*2,Fuel", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-500AO*4,R-73*2,Fuel", - "name": "RBK-500AO*4,R-73*2,Fuel", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-24*2,FAB-500*2,R-73*2,Fuel", - "name": "S-24*2,FAB-500*2,R-73*2,Fuel", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-24*4,R-73*2,Fuel", - "name": "S-24*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - } - ], - "filename": "mig-29.png", - "enabled": true, - "liveries": { - "air force ukraine standard": { - "name": "Air Force (Standard)", - "countries": [ - "UKR" - ] - }, - "air force standard": { - "name": "Air Force (Standard)", - "countries": [ - "SUN", - "RUS" - ] - }, - "strizhi": { - "name": "Strizhi 1992", - "countries": [ - "RUS" - ] - }, - "domna 120th ar": { - "name": "Domna - 120th Aviation Regiment", - "countries": [ - "RUS" - ] - }, - "mary-1 agressors": { - "name": "Soviet Air Forces, a/b 1521 (Mary-1)", - "countries": [ - "RUS" - ] - }, - "polish 41st sqn standard1": { - "name": "41st Sqn Standard 1", - "countries": [ - "POL" - ] - }, - "iriaf sand-blue": { - "name": "IRIAF sand-blue", - "countries": [ - "IRN" - ] - }, - "strizhi (w)": { - "name": "Strizhi 1992(W)", - "countries": [ - "RUS" - ] - }, - "polish 41st sqn standard2": { - "name": "41st Sqn Standard 2", - "countries": [ - "POL" - ] - }, - "vasylkiv 40th brta": { - "name": "Vasylkiv - 40th Brigade of Tactical Aviation", - "countries": [ - "UKR" - ] - }, - "kazakhstan air defense forces": { - "name": "KazAADF 600th Airbase 2015", - "countries": [ - "KAZ" - ] - }, - "kazakhstan kazaadf 2008": { - "name": "KazAADF 600th Airbase 2008", - "countries": [ - "KAZ" - ] - }, - "iriaf blue-grey": { - "name": "IRIAF blue-grey", - "countries": [ - "IRN" - ] - }, - "syaaf": { - "name": "Syrian Arab Air Force", - "countries": [ - "SYR" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Flanker", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-29S": { - "name": "MiG-29S", - "coalition": "red", - "label": "MiG-29S Fulcrum", - "era": "Late Cold War", - "shortLabel": "M29", - "loadouts": [ - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "B-8*4,R-73*2,Fuel", - "name": "B-8*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500*4,R-73*2,Fuel", - "name": "BetAB-500*4,R-73*2,Fuel", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*4,R-73*2,Fuel", - "name": "FAB-250*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*4,R-73*2,Fuel", - "name": "FAB-500*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel tank 1150L MiG-29", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel-1150*2,Fuel-1500", - "name": "Fuel-1150*2,Fuel-1500", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-60M*4,R-27R*2", - "name": "R-60M*4,R-27R*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-60M*4,R-27R*2,Fuel-1500", - "name": "R-60M*4,R-27R*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-60M*6", - "name": "R-60M*6", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 6 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-60M*6,Fuel-1500", - "name": "R-60M*6,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-73*2,R-60M*2,R-27R*2", - "name": "R-73*2,R-60M*2,R-27R*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", - "name": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-73*4,R-27R*2", - "name": "R-73*4,R-27R*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*4,R-27R*2,Fuel-1500", - "name": "R-73*4,R-27R*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*6", - "name": "R-73*6", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 6 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*6,Fuel-1500", - "name": "R-73*6,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1150L MiG-29", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-77*2,R-73*2,Fuel-1500,Fuel-1150*2", - "name": "R-77*2,R-73*2,Fuel-1500,Fuel-1150*2", - "roles": [ - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-77*4,R-73*2", - "name": "R-77*4,R-73*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-77*4,R-73*2,Fuel-1500", - "name": "R-77*4,R-73*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-250*4,R-73*2,Fuel", - "name": "RBK-250*4,R-73*2,Fuel", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-500AO*4,R-73*2,Fuel", - "name": "RBK-500AO*4,R-73*2,Fuel", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-24*2,FAB-500*2,R-73*2,Fuel", - "name": "S-24*2,FAB-500*2,R-73*2,Fuel", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-24*4,R-73*2,Fuel", - "name": "S-24*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - } - ], - "filename": "mig-29.png", - "enabled": true, - "liveries": { - "algerian af fc-16": { - "name": "Algerian AF FC-16", - "countries": [ - "DZA" - ] - }, - "air force ukraine standard": { - "name": "Air Force (Standard)", - "countries": [ - "UKR" - ] - }, - "air force standard": { - "name": "Air Force (Standard)", - "countries": [ - "RUS" - ] - }, - "kazaadf new faded (fictional)": { - "name": "KazAADF new faded (fictional)", - "countries": [ - "KAZ" - ] - }, - "strizhi": { - "name": "Strizhi 2003", - "countries": [ - "RUS" - ] - }, - "115 gviap_termez": { - "name": "Termez AFB, 115th Guards Aviation Regiment", - "countries": [ - "RUS" - ] - }, - "1521th air base_mary-1": { - "name": "Mary-1 AFB, 1521st Air Force Base", - "countries": [ - "RUS" - ] - }, - "kazaadf old (fictional)": { - "name": "KazAADF old (fictional)", - "countries": [ - "KAZ" - ] - }, - "swifts": { - "name": "Swifts (Aerobatic team)", - "countries": [ - "RUS" - ] - }, - "773 iap_damgarten": { - "name": "Damgarten AFB, 773rd Aviation Regiment", - "countries": [ - "RUS" - ] - }, - "426th air group_erebuni": { - "name": "Erebuni AFB, 426th Air Group", - "countries": [ - "RUS" - ] - }, - "31 gviap_zernograd": { - "name": "Zernograd AFB, 31st Guards Aviation Regiment", - "countries": [ - "RUS" - ] - }, - "28 gviap_andreapol": { - "name": "Andreapol AFB, 28th Guards Aviation Regiment", - "countries": [ - "RUS" - ] - }, - "belarusian air force": { - "name": "Belarusian Air Force 61 FAB Baranavichy (2017)", - "countries": [ - "BLR" - ] - }, - "kazaadf new (fictional)": { - "name": "KazAADF new (fictional)", - "countries": [ - "KAZ" - ] - }, - "falcons of russia": { - "name": "Lipetsk, aerobatic group Falcons of Russia", - "countries": [ - "RUS" - ] - }, - "kazaadf new (fictional digital)": { - "name": "KazAADF new digital (fictional digital)", - "countries": [ - "KAZ" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Flanker", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-31": { - "name": "MiG-31", - "coalition": "red", - "label": "MiG-31 Foxhound", - "era": "Late Cold War", - "shortLabel": "M31", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-40R*2,R-33*4", - "name": "R-40R*2,R-33*4", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", - "quantity": 1 - }, - { - "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", - "quantity": 4 - }, - { - "name": "R-40TD (AA-6 Acrid) - Infra Red", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-40T,R-33*4,R-40R", - "name": "R-40T,R-33*4,R-40R", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-40TD (AA-6 Acrid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-40T*2,R-33*4", - "name": "R-40T*2,R-33*4", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-60M*4,R-33*4", - "name": "R-60M*4,R-33*4", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - } - ], - "filename": "mig-23.png", - "enabled": true, - "liveries": { - "174 gviap_boris safonov": { - "name": "174 GvIAP Boris Safonov", - "countries": [ - "RUS" - ] - }, - "903_white": { - "name": "Demo 903 White", - "countries": [ - "RUS" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 2 crew. Foxhound", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Mirage-F1EE": { - "name": "Mirage-F1EE", - "coalition": "blue", - "label": "Mirage-F1EE", - "era": "Mid Cold War", - "shortLabel": "MF1", - "loadouts": [ - { - "items": [ - { - "name": "AIM-9J Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 2 - }, - { - "name": "CLB 4 - 4 x SAMP-400 - 400 kg GP Chute Retarded Bomb HD", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", - "name": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9J Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 2 - }, - { - "name": "CLB 4 - 4 x SAMP-400 - 400 kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", - "name": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BLU-107/B Durandal - 219kg Concrete Piercing Chute Retarded Bomb w/Booster", - "quantity": 4 - }, - { - "name": "CLB 4 - 4 x BLU-107/B Durandal - 219kg Concrete Piercing Chute Retarded Bomb w/Booster", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9JULI, 8*BLU107 Durandal", - "name": "2*AIM-9JULI, 8*BLU107 Durandal", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "SAMP-250 - 250 kg GP Chute Retarded Bomb HD", - "quantity": 4 - }, - { - "name": "CLB 4 - 4 x SAMP-250 - 250 kg GP Chute Retarded Bomb HD", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9JULI, 8*SAMP 250 HD", - "name": "2*AIM-9JULI, 8*SAMP 250 HD", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "SAMP-400 - 400 kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "CLB 4 - 4 x SAMP-400 - 400 kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9JULI, 8*SAMP 400 LD", - "name": "2*AIM-9JULI, 8*SAMP 400 LD", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-9J Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "MATRA F4 - 18 x UnGd Rkts, 68 mm SNEB Type 251 F1B HE", - "quantity": 2 - }, - { - "name": "R530F IR", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", - "name": "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "R530F EM", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM9-JULI, 1*R530EM", - "name": "2*AIM9-JULI, 1*R530EM", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 2 - }, - { - "name": "R530F IR", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", - "name": "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "R530F EM", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM9-JULI, 2*R530EM, 1*Fuel Tank", - "name": "2*AIM9-JULI, 2*R530EM, 1*Fuel Tank", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "R530F IR", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", - "name": "2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "S530F", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM9-JULI, 2*S530F, 1*Fuel Tank", - "name": "2*AIM9-JULI, 2*S530F, 1*Fuel Tank", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "R530F IR", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 1*R530IR", - "name": "2*R550 Magic I, 1*R530IR", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 2 - }, - { - "name": "R530F IR", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", - "name": "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "R530F IR", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", - "name": "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "S530F", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 2*S530F, 1*Fuel Tank", - "name": "2*R550 Magic I, 2*S530F, 1*Fuel Tank", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "S530F", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - }, - { - "name": "BARAX - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 2*S530F, 1*Fuel Tank, 1*BARAX ECM Pod", - "name": "2*R550 Magic I, 2*S530F, 1*Fuel Tank, 1*BARAX ECM Pod", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "SAMP-250 - 250 kg GP Chute Retarded Bomb HD", - "quantity": 2 - }, - { - "name": "MATRA F1 - 36 x UnGd Rkts, 68 mm SNEB Type 256 F1B HE/Frag", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", - "name": "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "MATRA F1 - 36 x UnGd Rkts, 68 mm SNEB Type 253 F1B HEAT", - "quantity": 4 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", - "name": "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "MATRA F1 - 36 x UnGd Rkts, 68 mm SNEB Type 256 F1B HE/Frag", - "quantity": 4 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", - "name": "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "MATRA F4 - 18 x UnGd Rkts, 68 mm SNEB Type 253 F1B HEAT", - "quantity": 4 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", - "name": "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "MATRA F4 - 18 x UnGd Rkts, 68 mm SNEB Type 256 F1B HE/Frag", - "quantity": 4 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", - "name": "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", - "roles": [ - "CAS" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - } - ], - "filename": "f-5.png", - "enabled": true, - "liveries": { - "ec 330 lorraine": { - "name": "EC 330 Lorraine", - "countries": [ - "FRA" - ] - }, - "ec 5 330 cote d'argent (fictional ct)": { - "name": "EC 5/330 Cote d'Argent (FICTIONAL CT)", - "countries": [ - "FRA" - ] - }, - "er 2 33 savoie 100 ans de reco (fictional cr)": { - "name": "ER 233 Savoie 100 ans de reco (FICTIONAL CR)", - "countries": [ - "FRA" - ] - }, - "iriaf 3-6210 _ 2017 blue (eq variant)": { - "name": "IRIAF 3-6210 _ 2017 Blue (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "iriaf 3-6209 _ 2010s blue_gray (eq variant)": { - "name": "IRIAF 3-6209 _ 2010s Blue_Gray (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "er 233 savoie ba 118 mont de marsan (fictional cr)": { - "name": "ER 2/33 Savoie BA 118 Mont de Marsan (FICTIONAL CR)", - "countries": [ - "FRA" - ] - }, - "ala 14 blue skin (ee) albacete": { - "name": "ALA 14 Blue Skin (EE) Albacete", - "countries": [ - "SPN" - ] - }, - "usa company skin (m-ee)": { - "name": "USA Company Skin EE", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ala 14 nato skin 1 (ee)": { - "name": "ALA 14 NATO Skin 1 (EE)", - "countries": [ - "SPN" - ] - }, - "iriaf 3-6210 _ 2013 gray (eq variant)": { - "name": "IRIAF 3-6210 _ 2013 Gray (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "usa company skin 2 (m-ee)": { - "name": "USA Company Skin 2 EE", - "countries": [ - "USA", - "AUSAF" - ] - }, - "iriaf 3-6214 _ 2021 blue (eq variant)": { - "name": "IRIAF 3-6214 _ 2021 Blue (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "aerges nato grey": { - "name": "AERGES NATO GREY", - "countries": [ - "CUB", - "AUS", - "PRT", - "SUN", - "USA", - "BLR", - "HRV", - "LBN", - "SVK", - "TUR", - "ARG", - "BEL", - "FIN", - "SAU", - "RSI", - "CHL", - "AUT", - "EGY", - "ECU", - "CAN", - "QAT", - "YUG", - "ISR", - "PER", - "BHR", - "NGA", - "IDN", - "KAZ", - "INS", - "AUSAF", - "PAK", - "SVN", - "ROU", - "DEN", - "TUN", - "IND", - "CZE", - "MYS", - "GHA", - "OMN", - "RSO", - "IRN", - "UKR", - "JPN", - "THA", - "JOR", - "RSA", - "MEX", - "NOR", - "ITA", - "NETH", - "SUI", - "VNM", - "KOR", - "GRG", - "SDN", - "UK", - "BRA", - "ARE", - "ABH", - "BOL", - "RUS", - "PHL", - "SPN", - "MAR", - "DZA", - "GDR", - "HND", - "PRK", - "SRB", - "BGR", - "LBY", - "VEN", - "IRQ", - "SYR", - "NZG", - "GRC", - "POL", - "SWE", - "GER", - "CHN", - "YEM", - "FRA", - "HUN", - "ETH", - "KWT" - ] - }, - "ec 3 33 lorraine ba 112 reims - champagne ardennes": { - "name": "EC 333 Lorraine BA 112 Reims - Champagne Ardennes", - "countries": [ - "FRA" - ] - }, - "ec 1 12 cambresis": { - "name": "EC 112 BA 103 Cambrai-Épinoy", - "countries": [ - "FRA" - ] - }, - "ala 46 blue skin (ee) gando": { - "name": "ALA 46 Blue Skin (EE) Gando", - "countries": [ - "SPN" - ] - }, - "aerges blue": { - "name": "AERGES BLUE", - "countries": [ - "CUB", - "AUS", - "PRT", - "SUN", - "USA", - "BLR", - "HRV", - "LBN", - "SVK", - "TUR", - "ARG", - "BEL", - "FIN", - "SAU", - "RSI", - "CHL", - "AUT", - "EGY", - "ECU", - "CAN", - "QAT", - "YUG", - "ISR", - "PER", - "BHR", - "NGA", - "IDN", - "KAZ", - "INS", - "AUSAF", - "PAK", - "SVN", - "ROU", - "DEN", - "TUN", - "IND", - "CZE", - "MYS", - "GHA", - "OMN", - "RSO", - "IRN", - "UKR", - "JPN", - "THA", - "JOR", - "RSA", - "MEX", - "NOR", - "ITA", - "NETH", - "SUI", - "VNM", - "KOR", - "GRG", - "SDN", - "UK", - "BRA", - "ARE", - "ABH", - "BOL", - "RUS", - "PHL", - "SPN", - "MAR", - "DZA", - "GDR", - "HND", - "PRK", - "SRB", - "BGR", - "LBY", - "VEN", - "IRQ", - "SYR", - "NZG", - "GRC", - "POL", - "SWE", - "GER", - "CHN", - "YEM", - "FRA", - "HUN", - "ETH", - "KWT" - ] - }, - "ec 212 picardie": { - "name": "EC 212 Picardie", - "countries": [ - "FRA" - ] - }, - "iriaf 3-6212 _ col. naghdibake (eq variant)": { - "name": "IRIAF 3-6212 _ Col. Naghdibake (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "iriaf 3-6211 _ 2010s blue_gray (eq variant)": { - "name": "IRIAF 3-6211 _ 2010s Blue_Gray (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "ec 1 5 vendee ba orange-cariat": { - "name": "EC 1/5 Vendee BA 115 Orange-Cariat", - "countries": [ - "FRA" - ] - }, - "er 233 savoie ba 118 mont de marsan dessert camu (fictional cr)": { - "name": "ER 233 Savoie BA 118 Mont de Marsan Dessert Camu (FICTIONAL CR)", - "countries": [ - "FRA" - ] - }, - "iriaf 3-6215 _ 2021 blue (eq variant)": { - "name": "IRIAF 3-6215 _ 2021 Blue (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "iriaf 3-6210 _ 2021 blue (eq variant)": { - "name": "IRIAF 3-6210 _ 2021 Blue (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "ala 46 sq 462 blue skin (ee) gando": { - "name": "ALA 46 SQ 462 Blue Skin (EE) Gando", - "countries": [ - "SPN" - ] - }, - "ec 2 30 normandie niemen (fictional ct)": { - "name": "EC 2/30 Normandie Niemen (FICTIONAL CT)", - "countries": [ - "FRA" - ] - }, - "iriaf 3-6215 _ 1990-2010s desert (eq variant)": { - "name": "IRIAF 3-6215 _ 1990-2010s Desert (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "aerges camo": { - "name": "AERGES CAMO", - "countries": [ - "CUB", - "AUS", - "PRT", - "SUN", - "USA", - "BLR", - "HRV", - "LBN", - "SVK", - "TUR", - "ARG", - "BEL", - "FIN", - "SAU", - "RSI", - "CHL", - "AUT", - "EGY", - "ECU", - "CAN", - "QAT", - "YUG", - "ISR", - "PER", - "BHR", - "NGA", - "IDN", - "KAZ", - "INS", - "AUSAF", - "PAK", - "SVN", - "ROU", - "DEN", - "TUN", - "IND", - "CZE", - "MYS", - "GHA", - "OMN", - "RSO", - "IRN", - "UKR", - "JPN", - "THA", - "JOR", - "RSA", - "MEX", - "NOR", - "ITA", - "NETH", - "SUI", - "VNM", - "KOR", - "GRG", - "SDN", - "UK", - "BRA", - "ARE", - "ABH", - "BOL", - "RUS", - "PHL", - "SPN", - "MAR", - "DZA", - "GDR", - "HND", - "PRK", - "SRB", - "BGR", - "LBY", - "VEN", - "IRQ", - "SYR", - "NZG", - "GRC", - "POL", - "SWE", - "GER", - "CHN", - "YEM", - "FRA", - "HUN", - "ETH", - "KWT" - ] - }, - "usa company grey (m-ee)": { - "name": "USA Company Grey EE", - "countries": [ - "USA", - "AUSAF" - ] - } - }, - "type": "Aircraft", - "description": "Single Jet engine, swept wing, 1 crew.", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MosquitoFBMkVI": { - "name": "MosquitoFBMkVI", - "coalition": "blue", - "label": "Mosquito FB MkVI", - "era": "WW2", - "shortLabel": "Mos", - "loadouts": [ - { - "items": [ - { - "name": "100 gal. Drop Tank", - "quantity": 2 - }, - { - "name": "500 lb MC Short tail", - "quantity": 2 - } - ], - "enabled": true, - "code": "100 gal Drop tank*2, 500 lb MC Short tail*2", - "name": "100 gal Drop tank*2, 500 lb MC Short tail*2", - "roles": [ - "CAP", - "Strike" - ] - }, - { - "items": [ - { - "name": "2 x RP-3 60lb F No1 Mk.I", - "quantity": 2 - }, - { - "name": "100 gal. Drop Tank", - "quantity": 2 - }, - { - "name": "250 lb MC Mk.II", - "quantity": 2 - } - ], - "enabled": true, - "code": "100 gal. Drop tank*2, 250 lb MC Mk.II, RP-3 60lb F No1 Mk.I*4", - "name": "100 gal. Drop tank*2, 250 lb MC Mk.II, RP-3 60lb F No1 Mk.I*4", - "roles": [ - "CAP", - "Antiship Strike", - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "500 lb S.A.P.", - "quantity": 2 - }, - { - "name": "250 lb S.A.P.", - "quantity": 2 - } - ], - "enabled": true, - "code": "250 lb S.A.P*2; 500 lb S.A.P.*2", - "name": "250 lb S.A.P*2; 500 lb S.A.P.*2", - "roles": [ - "CAP", - "Strike" - ] - }, - { - "items": [ - { - "name": "500 lb GP Mk.V", - "quantity": 2 - }, - { - "name": "500 lb MC Short tail", - "quantity": 2 - } - ], - "enabled": true, - "code": "500 lb GP Mk.V*2, 500 lb GP Short tail*2", - "name": "500 lb GP Mk.V*2, 500 lb GP Short tail*2", - "roles": [ - "CAP", - "Strike", - "CAS", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "500 lb GP Short tail", - "quantity": 4 - } - ], - "enabled": true, - "code": "500 lb GP Short tail*4", - "name": "500 lb GP Short tail*4", - "roles": [ - "CAP", - "Strike", - "CAS", - "Runway Attack" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": null, - "quantity": 2 - }, - { - "name": "250 lb S.A.P.", - "quantity": 2 - }, - { - "name": "4 x RP-3 60lb SAP No2 Mk.I", - "quantity": 2 - } - ], - "enabled": true, - "code": "RP-3 60lb SAP No2 Mk.I*8, 250 lb A.A.P.*2", - "name": "RP-3 60lb SAP No2 Mk.I*8, 250 lb A.A.P.*2", - "roles": [ - "CAP", - "Antiship Strike", - "CAS", - "Strike" - ] - } - ], - "filename": "mosquito.png", - "enabled": true, - "liveries": { - "25th bombardment group p": { - "name": "USAAF 25th Bombardment Group \"P\" (Invasion Stripes)", - "countries": [ - "USA" - ] - }, - "l-3 pz474 1945": { - "name": "L-3 PZ474 1945", - "countries": [] - }, - "raf": { - "name": "RAF 1944", - "countries": "All" - }, - "605 sqn up-j wag's war wagon": { - "name": "605 Sqn UP-J \"Wag's War Wagon\"", - "countries": "All" - }, - "605 sqn up-o": { - "name": "605 Sqn UP-O", - "countries": "All" - }, - "605 sqn": { - "name": "605 Sqn", - "countries": "All" - }, - "iaf - 1956 - 110th squadron": { - "name": "IAF - 1956 - 110th Squadron", - "countries": "All" - }, - "ussr air force": { - "name": "USSR Air Force", - "countries": [] - }, - "no. 235 squadron raf 1944": { - "name": "No. 235 Squadron RAF 1944", - "countries": [] - }, - "no. 613 squadron raf june 1944": { - "name": "No. 613 Squadron RAF, June 1944", - "countries": [ - "UK" - ] - }, - "armée de l'air blue": { - "name": "Armée de L'air Blue Camo", - "countries": [ - "FRA" - ] - }, - "raf, ml897d, no.1409 met flight, wyton, late 1943": { - "name": "RAF, ML897/D, No.1409 Met Flight, Wyton, late 1943", - "countries": [ - "UK" - ] - }, - "no. 27 squadron raf popeye camo letters on": { - "name": "No. 27 Squadron RAF Popeye Camo Letters on", - "countries": [] - }, - "25th bombardment group f": { - "name": "USAAF 25th Bombardment Group \"F\"", - "countries": [ - "USA" - ] - }, - "305sqn july": { - "name": "305Sqn July 1944", - "countries": [] - }, - "305sqn june": { - "name": "305Sqn June 1944", - "countries": [] - }, - "25th bombardment group z": { - "name": "USAAF 25th Bombardment Group \"Z\" (Invasion Stripes)", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "2 propeller, straight wing, 2 crew. Mosquito.", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "P-47D-40": { - "name": "P-47D-40", - "coalition": "blue", - "label": "P-47D Thunderbolt", - "era": "WW2", - "shortLabel": "P47", - "loadouts": [ - { - "items": [ - { - "name": "AN-M57 - 250lb GP Bomb LD", - "quantity": 3 - } - ], - "enabled": true, - "code": "AN-M57*3", - "name": "AN-M57*3", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "AN-M64 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "110 US gal. Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AN-M64*2, Fuel110", - "name": "AN-M64*2, Fuel110", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AN-M65 - 1000lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AN-M65*2", - "name": "AN-M65*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "150 US gal. Fuel Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "Fuel150*2", - "name": "Fuel150*2", - "roles": [ - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "5 x HVAR, UnGd Rkt", - "quantity": 2 - }, - { - "name": "110 US gal. Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "HVAR*10, Fuel110", - "name": "HVAR*10, Fuel110", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "3 x 4.5 inch M8 UnGd Rocket", - "quantity": 2 - }, - { - "name": "AN-M57 - 250lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "110 US gal. Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "M8*6, AN-M57*2, Fuel110", - "name": "M8*6, AN-M57*2, Fuel110", - "roles": [ - "Strike", - "CAS" - ] - } - ], - "filename": "p-47.png", - "enabled": true, - "liveries": { - "79thfg 86thfs the trojan warhorse": { - "name": "79thFG 86thFS The Trojan Warhorse", - "countries": [ - "USA" - ] - }, - "61st_fs_d_day": { - "name": "61st FS, D-day", - "countries": [ - "USA" - ] - }, - "lt_col_gabreski_d_day": { - "name": "Lt.Col. Gabby Gabreski, 61st FS, D-day", - "countries": [ - "USA" - ] - }, - "lt_col_benjamin_mayo": { - "name": "Lt.Col. Benjamin Mayo", - "countries": [ - "USA" - ] - }, - "eagle dynamics commemorative": { - "name": "Eagle Dynamics Commemorative", - "countries": [ - "USA" - ] - }, - "tony 5th emergency rescue squadron": { - "name": "TONY 5th Emergency Rescue Squadron", - "countries": [ - "USA" - ] - }, - "usaf standard": { - "name": "USAF standard", - "countries": [ - "USA" - ] - }, - "maj_howard_park_1945": { - "name": "Maj. Howard Park, 513th FS, France 1945", - "countries": [ - "USA" - ] - }, - "61st_fs_8th_af_hvz": { - "name": "61st FS 8th Air Force HV-Z (Capt. Witold Lanowski)", - "countries": [ - "USA", - "POL" - ] - }, - "53rd_fs_9th_air_force": { - "name": "53rd Fighter Squadron", - "countries": [ - "USA" - ] - }, - "1st brazilian ftr sq-jambock a1-menezes": { - "name": "1st Brazilian Ftr Sq-Jambock A1-Menezes", - "countries": [] - }, - "61st_fs_1944": { - "name": "61st FS, July 1944", - "countries": [ - "USA" - ] - }, - "lt_col_gabreski_1944": { - "name": "Lt.Col. Gabby Gabreski, 61st FS, July 1944", - "countries": [ - "USA" - ] - }, - "lend-lease": { - "name": "Lend-Lease", - "countries": [ - "SUN", - "RUS" - ] - }, - "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d28": { - "name": "509th FS 405th FG \"Chief Ski-U-Mah\" for D-30 (Early) ", - "countries": "All" - }, - "ussr-blue-scheme": { - "name": "USSR - blue", - "countries": [ - "SUN", - "RUS" - ] - }, - "raf thunderbolt": { - "name": "RAF Thunderbolt", - "countries": [] - }, - "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d40": { - "name": "509th FS 405th FG \"Chief Ski-U-Mah\"", - "countries": "All" - }, - "warchief": { - "name": "WarChief", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "Single propellor, straight wing, 1 crew. Thunderbolt", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "P-51D-30-NA": { - "name": "P-51D-30-NA", - "coalition": "blue", - "label": "P-51D Mustang", - "era": "WW2", - "shortLabel": "P51", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "75 US gal. Fuel Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "Fuel75*2", - "name": "Fuel75*2", - "roles": [ - "CAP", - "CAP", - "FAC-A" - ] - }, - { - "items": [ - { - "name": "HVAR, UnGd Rkt", - "quantity": 10 - } - ], - "enabled": true, - "code": "HVAR*10", - "name": "HVAR*10", - "roles": [ - "CAS", - "Strike", - "Runway Attack", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "HVAR, UnGd Rkt", - "quantity": 6 - } - ], - "enabled": true, - "code": "HVAR*6", - "name": "HVAR*6", - "roles": [ - "CAS", - "Strike", - "Antiship Strike", - "FAC-A" - ] - }, - { - "items": [ - { - "name": "HVAR, UnGd Rkt", - "quantity": 6 - }, - { - "name": "75 US gal. Fuel Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "HVAR*6,Fuel75*2", - "name": "HVAR*6,Fuel75*2", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "HVAR, UnGd Rkt", - "quantity": 6 - }, - { - "name": "AN-M64 - 500lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "HVAR*6,M64*2", - "name": "HVAR*6,M64*2", - "roles": [ - "CAS", - "Strike", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AN-M64 - 500lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "M64*2", - "name": "M64*2", - "roles": [ - "Strike", - "Antiship Strike", - "CAS", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "HVAR Smoke Generator", - "quantity": 2 - } - ], - "enabled": true, - "code": "Smokes", - "name": "Smokes", - "roles": [] - } - ], - "filename": "p-51.png", - "enabled": true, - "liveries": { - "79thfg 86thfs the trojan warhorse": { - "name": "79thFG 86thFS The Trojan Warhorse", - "countries": [ - "USA" - ] - }, - "61st_fs_d_day": { - "name": "61st FS, D-day", - "countries": [ - "USA" - ] - }, - "lt_col_gabreski_d_day": { - "name": "Lt.Col. Gabby Gabreski, 61st FS, D-day", - "countries": [ - "USA" - ] - }, - "lt_col_benjamin_mayo": { - "name": "Lt.Col. Benjamin Mayo", - "countries": [ - "USA" - ] - }, - "eagle dynamics commemorative": { - "name": "Eagle Dynamics Commemorative", - "countries": [ - "USA" - ] - }, - "tony 5th emergency rescue squadron": { - "name": "TONY 5th Emergency Rescue Squadron", - "countries": [ - "USA" - ] - }, - "usaf standard": { - "name": "USAF standard", - "countries": [ - "USA" - ] - }, - "maj_howard_park_1945": { - "name": "Maj. Howard Park, 513th FS, France 1945", - "countries": [ - "USA" - ] - }, - "61st_fs_8th_af_hvz": { - "name": "61st FS 8th Air Force HV-Z (Capt. Witold Lanowski)", - "countries": [ - "USA", - "POL" - ] - }, - "53rd_fs_9th_air_force": { - "name": "53rd Fighter Squadron", - "countries": [ - "USA" - ] - }, - "1st brazilian ftr sq-jambock a1-menezes": { - "name": "1st Brazilian Ftr Sq-Jambock A1-Menezes", - "countries": [] - }, - "61st_fs_1944": { - "name": "61st FS, July 1944", - "countries": [ - "USA" - ] - }, - "lt_col_gabreski_1944": { - "name": "Lt.Col. Gabby Gabreski, 61st FS, July 1944", - "countries": [ - "USA" - ] - }, - "lend-lease": { - "name": "Lend-Lease", - "countries": [ - "SUN", - "RUS" - ] - }, - "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d28": { - "name": "509th FS 405th FG \"Chief Ski-U-Mah\" for D-30 (Early) ", - "countries": "All" - }, - "ussr-blue-scheme": { - "name": "USSR - blue", - "countries": [ - "SUN", - "RUS" - ] - }, - "raf thunderbolt": { - "name": "RAF Thunderbolt", - "countries": [] - }, - "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d40": { - "name": "509th FS 405th FG \"Chief Ski-U-Mah\"", - "countries": "All" - }, - "warchief": { - "name": "WarChief", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "Single propellor, straight wing, 1 crew. Mustang", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "S-3B Tanker": { - "name": "S-3B Tanker", - "coalition": "blue", - "label": "S-3B Tanker", - "era": "Early Cold War", - "shortLabel": "S3B", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Tanker" - ] - } - ], - "filename": "s-3.png", - "enabled": true, - "liveries": { - "usaf standard": { - "name": "NAVY Standard", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, straight wing, 4 crew. Viking", - "abilities": "Tanker, Drogue AAR, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "Su-17M4": { - "name": "Su-17M4", - "coalition": "red", - "label": "Su-17M4 Fitter", - "era": "Mid Cold War", - "shortLabel": "S17", - "loadouts": [ - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "B-8*4,R-60M*2,FAB-250*4", - "name": "B-8*4,R-60M*2,FAB-250*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "B-8*4,R-60M*2,Fuel*2", - "name": "B-8*4,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 6 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "BetAB-500*6,R-60M*2", - "name": "BetAB-500*6,R-60M*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", - "quantity": 6 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100*24,R-60M*2", - "name": "FAB-100*24,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 4 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*16,R-60M*2", - "name": "FAB-250*16,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-500*6,R-60M*2", - "name": "FAB-500*6,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel tank 1150L", - "quantity": 4 - } - ], - "enabled": true, - "code": "Fuel*4", - "name": "Fuel*4", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-25ML*2,Kh-29L*2,R-60*2", - "name": "Kh-25ML*2,Kh-29L*2,R-60*2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-25ML*4,R-60M*2,Fuel*2", - "name": "Kh-25ML*4,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Kh-25MR (AS-10 Karen) - 300kg, ASM, 10km, RC Guided", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-25MR*4,R-60M*2,Fuel*2", - "name": "Kh-25MR*4,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,R-60M*2,Fuel*2", - "name": "Kh-29L*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29T*2,R-60M*2,Fuel*2", - "name": "Kh-29T*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh25MPU*2_Kh25ML*2_,R60M*2_Fuel*2", - "name": "Kh25MPU*2_Kh25ML*2_,R60M*2_Fuel*2", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh58*2_Kh25MPU*2_R60M*2_Fuel*2", - "name": "Kh58*2_Kh25MPU*2_R60M*2_Fuel*2", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-500AO*4,SPPU-22*2,R-60M*2", - "name": "RBK-500AO*4,SPPU-22*2,R-60M*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-24*4,R-60M*2,FAB-250*4", - "name": "S-24*4,R-60M*2,FAB-250*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-24*4,R-60M*2,Fuel*2", - "name": "S-24*4,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "UB-32*4,R-60M*2,FAB-250*4", - "name": "UB-32*4,R-60M*2,FAB-250*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "UB-32*4,R-60M*2,Fuel*2", - "name": "UB-32*4,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - } - ], - "filename": "su-17.png", - "enabled": true, - "liveries": { - "af standard (worn-out)": { - "name": "af standard (worn-out)", - "countries": [ - "UKR" - ] - }, - "shap limanskoye ab": { - "name": "shap limanskoye ab", - "countries": [ - "UKR" - ] - }, - "af standard (rus)": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - }, - "af standard (worn-out) (rus)": { - "name": "af standard (worn-out)", - "countries": [ - "RUS" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "UKR" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew. Fitter", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Su-24M": { - "name": "Su-24M", - "coalition": "red", - "label": "Su-24M Fencer", - "era": "Mid Cold War", - "shortLabel": "S24", - "loadouts": [ - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "Fuel tank 3000L", - "quantity": 2 - } - ], - "enabled": true, - "code": "B-8*2,Fuel*2", - "name": "B-8*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "Fuel tank 3000L", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "B-8*2,Fuel*3", - "name": "B-8*2,Fuel*3", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - } - ], - "enabled": true, - "code": "B-8*6", - "name": "B-8*6", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "BetAB-500*4,R-60M*2", - "name": "BetAB-500*4,R-60M*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "FAB-100*24", - "name": "FAB-100*24", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-1500 M-54 - 1500kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-1500*2,R-60M*2", - "name": "FAB-1500*2,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 8 - } - ], - "enabled": true, - "code": "FAB-250*8", - "name": "FAB-250*8", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "FAB-500*4,R-60M*2", - "name": "FAB-500*4,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel tank 3000L", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel*3", - "name": "Fuel*3", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "KAB-1500L - 1500kg Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "KAB-1500*2,R-60M*2,Fuel", - "name": "KAB-1500*2,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "KAB-500LG - 500kg Laser Guided Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "KAB-500*4,R-60M*2", - "name": "KAB-500*4,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - } - ], - "enabled": true, - "code": "Kh-25ML*4", - "name": "Kh-25ML*4", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Kh-25MR (AS-10 Karen) - 300kg, ASM, 10km, RC Guided", - "quantity": 4 - } - ], - "enabled": true, - "code": "Kh-25MR*4", - "name": "Kh-25MR*4", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,R-60M*2", - "name": "Kh-29L*2,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29T*2,R-60M*2", - "name": "Kh-29T*2,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-31A*2,R-60M*2", - "name": "Kh-31A*2,R-60M*2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-31A*2,R-60M*2,Fuel", - "name": "Kh-31A*2,R-60M*2,Fuel", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-59M (AS-18 Kazoo) - 930kg, ASM, IN", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-59M*2,R-60M*2,Fuel", - "name": "Kh-59M*2,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "L-081 Fantasmagoria ELINT pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh25MPU*2_Kh25ML*2_L-081", - "name": "Kh25MPU*2_Kh25ML*2_L-081", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "L-081 Fantasmagoria ELINT pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh31P*2_Kh25ML*2_L-081", - "name": "Kh31P*2_Kh25ML*2_L-081", - "roles": [ - "SEAD", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "L-081 Fantasmagoria ELINT pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh58*2_Kh25ML*2_L-081", - "name": "Kh58*2_Kh25ML*2_L-081", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 8 - } - ], - "enabled": true, - "code": "RBK-250*8", - "name": "RBK-250*8", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "RBK-500AO*4,R-60M*2", - "name": "RBK-500AO*4,R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 2 - }, - { - "name": "Fuel tank 3000L", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-24*2,Fuel*3", - "name": "S-24*2,Fuel*3", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-24*4", - "name": "S-24*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "Fuel tank 3000L", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-25*2,Fuel*3", - "name": "S-25*2,Fuel*3", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-25*4", - "name": "S-25*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "Fuel tank 3000L", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "UB-13*2,Fuel*3", - "name": "UB-13*2,Fuel*3", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 4 - } - ], - "enabled": true, - "code": "UB-13*4", - "name": "UB-13*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 4 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "UB-13*4,FAB-500*2", - "name": "UB-13*4,FAB-500*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - }, - { - "name": "Fuel tank 3000L", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "UB-32*2,Fuel*3", - "name": "UB-32*2,Fuel*3", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - } - ], - "enabled": true, - "code": "UB-32*4", - "name": "UB-32*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "UB-32*4,FAB-250*4", - "name": "UB-32*4,FAB-250*4", - "roles": [ - "Strike" - ] - } - ], - "filename": "su-24.png", - "enabled": true, - "liveries": { - "syrian air force": { - "name": "Syrian Air Force", - "countries": [ - "SYR" - ] - }, - "iran air force": { - "name": "Iran Air Force", - "countries": [ - "IRN" - ] - }, - "algerian af kx-12": { - "name": "Algerian AF KX-12", - "countries": [ - "DZA" - ] - }, - "ukrainian air force standard": { - "name": "Ukrainian Air Force", - "countries": [ - "UKR" - ] - }, - "kazakhstan air force": { - "name": "600th Airbase Kazakhstan", - "countries": [ - "KAZ" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swing wing, 2 crew. Fencer", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Su-25": { - "name": "Su-25", - "coalition": "red", - "label": "Su-25T Frogfoot", - "era": "Late Cold War", - "shortLabel": "S25", - "loadouts": [ - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", - "quantity": 2 - } - ], - "enabled": true, - "code": "2-25L*2, KH-25ML*2, RBK-500*2, B-8MI*2, R-60M*2", - "name": "2-25L*2, KH-25ML*2, RBK-500*2, B-8MI*2, R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "BetAB-500*6,R-60M*2,Fuel*2", - "name": "BetAB-500*6,R-60M*2,Fuel*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", - "quantity": 8 - } - ], - "enabled": true, - "code": "BetAB-500ShP*8,R-60M*2", - "name": "BetAB-500ShP*8,R-60M*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100*16,R-60M*2,Fuel*2", - "name": "FAB-100*16,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", - "quantity": 8 - } - ], - "enabled": true, - "code": "FAB-100*32,R-60M*2", - "name": "FAB-100*32,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "SAB-100MN - 100 kg Illumination Bomb", - "quantity": 4 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*2,SPPU-22*2,SAB-100*4,R-60M*2", - "name": "FAB-250*2,SPPU-22*2,SAB-100*4,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", - "name": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", - "name": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", - "name": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*6,R-60M*2,Fuel*2", - "name": "FAB-250*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-500*6,R-60M*2,Fuel*2", - "name": "FAB-500*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-25*4,Kh-29T*2,R-60*2", - "name": "Kh-25*4,Kh-29T*2,R-60*2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-25ML*4,R-60M*2,Fuel*2", - "name": "Kh-25ML*4,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,Kh-25ML*2,R-60M*2,Fuel*2", - "name": "Kh-29L*2,Kh-25ML*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,Kh-25ML*4,R-60M*2", - "name": "Kh-29L*2,Kh-25ML*4,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,Kh-25ML*4,S-25L*2,R-60M*2", - "name": "Kh-29L*2,Kh-25ML*4,S-25L*2,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,R-60M*2,Fuel*2", - "name": "Kh-29L*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-250*2,S-8KOM*80,R-60M*2,Fuel*2", - "name": "RBK-250*2,S-8KOM*80,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "RBK-250*4,S-8KOM*80,R-60M*2", - "name": "RBK-250*4,S-8KOM*80,R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 8 - } - ], - "enabled": true, - "code": "RBK-250*8,R-60M*2", - "name": "RBK-250*8,R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-500AO*4,S-8KOM*40,R-60M*2,Fuel*2", - "name": "RBK-500AO*4,S-8KOM*40,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-500AO*6,R-60M*2,Fuel*2", - "name": "RBK-500AO*6,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-25*6,R-60M*2,Fuel*2", - "name": "S-25*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 6 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-25*6,SPPU-22*2,R-60M*2", - "name": "S-25*6,SPPU-22*2,R-60M*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-25L*6,R-60*2,Fuel*2", - "name": "S-25L*6,R-60*2,Fuel*2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", - "quantity": 6 - } - ], - "enabled": true, - "code": "S-25L*6,UB-13*2,R-60M*2", - "name": "S-25L*6,UB-13*2,R-60M*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-8KOM*120,R-60M*2,Fuel*2", - "name": "S-8KOM*120,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8TsM SM Orange", - "quantity": 8 - } - ], - "enabled": true, - "code": "S-8TsM*160,R-60*2", - "name": "S-8TsM*160,R-60*2", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "SAB-100MN - 100 kg Illumination Bomb", - "quantity": 8 - } - ], - "enabled": true, - "code": "SAB-100*8,R-60*2", - "name": "SAB-100*8,R-60*2", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "UB-13*6,R-60M*2,Fuel*2", - "name": "UB-13*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - } - ], - "filename": "su-25.png", - "enabled": false, - "liveries": { - "broken camo scheme #2 (native). 452th shap": { - "name": "broken camo scheme #2 (native). 452th shap.", - "countries": [ - "UKR" - ] - }, - "broken camo scheme #1 (native). 299th oshap": { - "name": "broken camo scheme #1 (native). 299th oshap.", - "countries": [ - "UKR" - ] - }, - "field camo scheme #1 (native)": { - "name": "field camo scheme #1 (native)", - "countries": [ - "SUN", - "RUS" - ] - }, - "field camo scheme #1 (native)01": { - "name": "field camo scheme #1 (native)", - "countries": [ - "GRG" - ] - }, - "haf camo": { - "name": "Hellenic Airforce - Camo (Fictional)", - "countries": [ - "GRC" - ] - }, - "`scorpion` demo scheme (native)": { - "name": "`scorpion` demo scheme (native)", - "countries": [ - "GRG" - ] - }, - "abkhazian air force": { - "name": "Abkhazian Air Force", - "countries": [ - "ABH" - ] - }, - "field camo scheme #3 (worn-out). 960th shap": { - "name": "field camo scheme #3 (worn-out). 960th shap.", - "countries": [ - "RUS" - ] - }, - "petal camo scheme #1 (native). 299th brigade": { - "name": "petal camo scheme #1 (native). 299th brigade.", - "countries": [ - "UKR" - ] - }, - "petal camo scheme #2 (native). 299th brigade": { - "name": "petal camo scheme #2 (native). 299th brigade.", - "countries": [ - "UKR" - ] - }, - "algerian af desert fictional": { - "name": "Algerian AF Desert Fictional", - "countries": [ - "DZA" - ] - }, - "forest camo scheme #1 (native)": { - "name": "forest camo scheme #1 (native)", - "countries": [ - "RUS" - ] - }, - "irgc 54": { - "name": "IRGC 54", - "countries": [ - "IRN" - ] - }, - "field camo scheme #2 (native). 960th shap": { - "name": "field camo scheme #2 (native). 960th shap.", - "countries": [ - "RUS" - ] - }, - "haf aegean ghost": { - "name": "Hellenic Airforce - Aegean Ghost (Fictional)", - "countries": [ - "GRC" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Frogfoot", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Su-25T": { - "name": "Su-25", - "coalition": "red", - "label": "Su-25T Frogfoot", - "era": "Late Cold War", - "shortLabel": "S25", - "loadouts": [ - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-8 - 8 x 9M127-1 Vikhr-M ATGM, LOSBR, Tandem HEAT/Frag", - "quantity": 2 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - }, - { - "name": "Mercury LLTV Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "APU-8 Vikhr-M*2,Kh-25ML,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", - "name": "APU-8 Vikhr-M*2,Kh-25ML,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", - "quantity": 2 - }, - { - "name": "APU-8 - 8 x 9M127-1 Vikhr-M ATGM, LOSBR, Tandem HEAT/Frag", - "quantity": 2 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - }, - { - "name": "Mercury LLTV Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "APU-8 Vikhr-M*2,S-25L*2,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", - "name": "APU-8 Vikhr-M*2,S-25L*2,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "BetAB-500*6,R-60M*2,Fuel*2", - "name": "BetAB-500*6,R-60M*2,Fuel*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", - "quantity": 8 - } - ], - "enabled": true, - "code": "BetAB-500ShP*8,R-60M*2", - "name": "BetAB-500ShP*8,R-60M*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100*16,R-60M*2,Fuel*2", - "name": "FAB-100*16,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", - "quantity": 8 - } - ], - "enabled": true, - "code": "FAB-100*32,R-60M*2", - "name": "FAB-100*32,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", - "name": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "SAB-100MN - 100 kg Illumination Bomb", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,SPPU-22*2,SAB-100*2,R-60M*2", - "name": "FAB-250*4,SPPU-22*2,SAB-100*2,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", - "name": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", - "name": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*6,R-60M*2,Fuel*2", - "name": "FAB-250*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-500*6,R-60M*2,Fuel*2", - "name": "FAB-500*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel tank 800L Wing", - "quantity": 4 - } - ], - "enabled": true, - "code": "Fuel*4", - "name": "Fuel*4", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "KAB-500Kr - 500kg TV Guided Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "KAB-500Kr*2,Kh-25ML*2,R-73*2,MPS-410,Fuel*2", - "name": "KAB-500Kr*2,Kh-25ML*2,R-73*2,MPS-410,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,Kh-25ML*4,R-73*2,ECM", - "name": "Kh-29L*2,Kh-25ML*4,R-73*2,ECM", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Mercury LLTV Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*2,Kh-25ML*4,R-73*2,Mercury LLTV Pod,MPS-410", - "name": "Kh-29L*2,Kh-25ML*4,R-73*2,Mercury LLTV Pod,MPS-410", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Mercury LLTV Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*2,R-73*2,Fuel*2,Mercury LLTV Pod,MPS-410", - "name": "Kh-29L*2,R-73*2,Fuel*2,Mercury LLTV Pod,MPS-410", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "APU-8 - 8 x 9M127-1 Vikhr-M ATGM, LOSBR, Tandem HEAT/Frag", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 2 - } - ], - "enabled": true, - "code": "KH-29T*2, VIKHR*2, ECM", - "name": "KH-29T*2, VIKHR*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29T*2,Kh-25ML*4,R-73*2,MPS-410", - "name": "Kh-29T*2,Kh-25ML*4,R-73*2,MPS-410", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29T*2,R-73*2,Fuel*2,MPS-410", - "name": "Kh-29T*2,R-73*2,Fuel*2,MPS-410", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - }, - { - "name": "L-081 Fantasmagoria ELINT pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh25MPU*4_R73*2_Fuel*2_L-081_MPS-410", - "name": "Kh25MPU*4_R73*2_Fuel*2_L-081_MPS-410", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "L-081 Fantasmagoria ELINT pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh58*2_Kh25ML*4_R73*2_L-081_MPS-410", - "name": "Kh58*2_Kh25ML*4_R73*2_L-081_MPS-410", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "L-081 Fantasmagoria ELINT pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh58*2_Kh25MPU*2_Kh25ML*2_R73*2_L-081_MPS-410", - "name": "Kh58*2_Kh25MPU*2_Kh25ML*2_R73*2_L-081_MPS-410", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "KMGU-2 - 96 x AO-2.5RT Dispenser (CBU) HE/Frag", - "quantity": 8 - } - ], - "enabled": true, - "code": "KMGU-2 (AO-2.5RT)*8,R-60M*2", - "name": "KMGU-2 (AO-2.5RT)*8,R-60M*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "KMGU-2 - 96 x PTAB-2.5KO Dispenser (CBU) HEAT/AP", - "quantity": 8 - } - ], - "enabled": true, - "code": "KMGU-2 (PTAB-2.5KO)*8,R-60M*2", - "name": "KMGU-2 (PTAB-2.5KO)*8,R-60M*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-250*2,UB-32*4,R-60M*2,Fuel*2", - "name": "RBK-250*2,UB-32*4,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "RBK-250*4,UB-32*4,R-60M*2", - "name": "RBK-250*4,UB-32*4,R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 8 - } - ], - "enabled": true, - "code": "RBK-250*8,R-60M*2", - "name": "RBK-250*8,R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-500AO*4,UB-32*2,R-60M*2,Fuel*2", - "name": "RBK-500AO*4,UB-32*2,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-500AO*6,R-60M*2,Fuel*2", - "name": "RBK-500AO*6,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-25*2,SPPU-22*4,R-60M*2,R-73*2", - "name": "S-25*2,SPPU-22*4,R-60M*2,R-73*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-25*6,R-60M*2,Fuel*2", - "name": "S-25*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", - "quantity": 6 - } - ], - "enabled": true, - "code": "S-25L*6,UB-13*2,R-60M*2", - "name": "S-25L*6,UB-13*2,R-60M*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-8KOM*120,R-60M*2,Fuel*2", - "name": "S-8KOM*120,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "UB-13*6,R-60M*2,Fuel*2", - "name": "UB-13*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - } - ], - "filename": "su-25.png", - "enabled": true, - "liveries": { - "af standard 2": { - "name": "af standard 2", - "countries": [ - "SUN", - "RUS" - ] - }, - "algerian af grey ku-02": { - "name": "Algerian AF Grey KU-02", - "countries": [ - "DZA" - ] - }, - "su-25t test scheme": { - "name": "su-25t test scheme", - "countries": [ - "RUS" - ] - }, - "haf - fictional": { - "name": "Hellenic Airforce (Fictional)", - "countries": [ - "GRC" - ] - }, - "algerian af trainer ku-04": { - "name": "Algerian AF Trainer KU-04", - "countries": [ - "DZA" - ] - }, - "algerian af grey ku-01": { - "name": "Algerian AF Grey KU-01", - "countries": [ - "DZA" - ] - }, - "af standard 101": { - "name": "af standard 1", - "countries": [ - "GRG" - ] - }, - "algerian af desert ku-03": { - "name": "Algerian AF Desert KU-03", - "countries": [ - "DZA" - ] - }, - "af standard 1": { - "name": "af standard 1", - "countries": [ - "SUN", - "RUS" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "GRG" - ] - } - }, - "type": "Attack", - "description": "2 jet engine, swept wing, 1 crew. Frogfoot", - "abilities": "Fox 2 and gun, Dumb bombs, rockets, SEAD and ATGMs, Subsonic" - }, - "Su-27": { - "name": "Su-27", - "coalition": "red", - "label": "Su-27 Flanker", - "era": "Late Cold War", - "shortLabel": "S27", - "loadouts": [ - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": " CAS S-25 Rockets", - "name": " CAS S-25 Rockets", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500ShP*6,R-73*2,ECM", - "name": "BetAB-500ShP*6,R-73*2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-13L pods - 10 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": "CAS S-13 Rockets", - "name": "CAS S-13 Rockets", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-25 Rockets + FAB-500 Bombs", - "name": "CAS S-25 Rockets + FAB-500 Bombs", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets", - "name": "CAS S-8KOM Rockets", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + FAB-100 Bombs", - "name": "CAS S-8KOM Rockets + FAB-100 Bombs", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 5 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-250 - 250kg GP Bombs LD", - "quantity": 1 - }, - { - "name": "MBD3-U6-68 with 3 x FAB-250 - 250kg GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + FAB-250 Bombs", - "name": "CAS S-8KOM Rockets + FAB-250 Bombs", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + FAB-500 Bombs", - "name": "CAS S-8KOM Rockets + FAB-500 Bombs", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "KMGU-2 - 96 x PTAB-2.5KO Dispenser (CBU) HEAT/AP", - "quantity": 3 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + KMGU PTAB", - "name": "CAS S-8KOM Rockets + KMGU PTAB", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + RBK-250 PTAB2.5", - "name": "CAS S-8KOM Rockets + RBK-250 PTAB2.5", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500 - 268 x PTAB-1M, 500kg CBU Light HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + RBK-500 PTAB1", - "name": "CAS S-8KOM Rockets + RBK-500 PTAB1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + RBK-500 PTAB10", - "name": "CAS S-8KOM Rockets + RBK-500 PTAB10", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": "CAS S-8OFP Rockets", - "name": "CAS S-8OFP Rockets", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8OFP Rockets + FAB-100 Bombs", - "name": "CAS S-8OFP Rockets + FAB-100 Bombs", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8OFP Rockets + FAB-500 Bombs", - "name": "CAS S-8OFP Rockets + FAB-500 Bombs", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "ECM", - "name": "ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*6,R-73*2,ECM", - "name": "FAB-500*6,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "KMGU-2 - 96 x AO-2.5RT Dispenser (CBU) HE/Frag", - "quantity": 5 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "KMGU-2 (AO-2.5RT)*5,R-73*2,ECM", - "name": "KMGU-2 (AO-2.5RT)*5,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "KMGU-2 - 96 x PTAB-2.5KO Dispenser (CBU) HEAT/AP", - "quantity": 5 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "KMGU-2 (PTAB-2.5KO)*5,R-73*2,ECM", - "name": "KMGU-2 (PTAB-2.5KO)*5,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27ER*4,R-27ET*2,ECM", - "name": "R-73*2,R-27ER*4,R-27ET*2,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27ER*6,ECM", - "name": "R-73*2,R-27ER*6,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*4,ECM", - "name": "R-73*4,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-73*4,R-27ER*4,R-27ET*2", - "name": "R-73*4,R-27ER*4,R-27ET*2", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*4,R-27ER*6", - "name": "R-73*4,R-27ER*6", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*6", - "name": "R-73*6", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-13*10,RBK-500AO*2,FAB-500*2,R-73*2,ECM", - "name": "S-13*10,RBK-500AO*2,FAB-500*2,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-25*2,FAB-500*4,R-73*4", - "name": "S-25*2,FAB-500*4,R-73*4", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-25*4, FAB-500*4, R-73*2, ECM", - "name": "S-25*4, FAB-500*4, R-73*2, ECM", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "su-27.png", - "enabled": true, - "liveries": { - "kubinka afb (russian knights old)": { - "name": "Kubinka AFB (Russian Knights Old)", - "countries": [ - "RUS" - ] - }, - "mirgorod afb (831th brigade)": { - "name": "Mirgorod AFB (831th brigade)", - "countries": [ - "UKR" - ] - }, - "lypetsk afb (falcons of russia)": { - "name": "Lypetsk AFB (Falcons of Russia)", - "countries": [ - "RUS" - ] - }, - "hotilovo afb": { - "name": "Hotilovo AFB", - "countries": [ - "RUS" - ] - }, - "plaaf k2s new parade": { - "name": "PLAAF K2S new parade", - "countries": [ - "CHN" - ] - }, - "plaaf standard": { - "name": "PLAAF Standard", - "countries": [ - "CHN" - ] - }, - "algerian af grey 04": { - "name": "Algerian AF GREY 04", - "countries": [ - "DZA" - ] - }, - "air force standard early": { - "name": "Air Force Standard Early", - "countries": [ - "SUN", - "RUS" - ] - }, - "air force ukraine standard": { - "name": "Air Force Ukraine Standard", - "countries": [ - "UKR" - ] - }, - "planaf hh8s": { - "name": "PLANAF HH8S", - "countries": [ - "CHN" - ] - }, - "ozerne afb (9th brigade)": { - "name": "Ozerne AFB (9th brigade)", - "countries": [ - "UKR" - ] - }, - "air force ukraine standard early": { - "name": "Air Force Ukraine Standard Early", - "countries": [ - "UKR" - ] - }, - "algerian af blue 02": { - "name": "Algerian AF Blue 02", - "countries": [ - "DZA" - ] - }, - "plaaf k1s old": { - "name": "PLAAF K1S old", - "countries": [ - "CHN" - ] - }, - "m gromov fri": { - "name": "M Gromov FRI", - "countries": [ - "RUS" - ] - }, - "plaaf k33s": { - "name": "PLAAF K33S", - "countries": [ - "CHN" - ] - }, - "air force standard": { - "name": "Air Force Standard", - "countries": [ - "SUN", - "RUS" - ] - }, - "plaaf k2s old": { - "name": "PLAAF K2S old", - "countries": [ - "CHN" - ] - }, - "chkalovsk afb (689 gviap)": { - "name": "Chkalovsk AFB (689 GvIAP)", - "countries": [ - "RUS" - ] - }, - "kazakhstan air defense forces": { - "name": "Kazakhstan Air Defense Forces", - "countries": [ - "KAZ" - ] - }, - "haf aegean ghost": { - "name": "Hellenic Airforce - Aegean Ghost (Fictional)", - "countries": [ - "GRC" - ] - }, - "besovets afb": { - "name": "Besovets AFB", - "countries": [ - "RUS" - ] - }, - "kilpyavr afb (maresyev)": { - "name": "Kilpyavr AFB (Maresyev)", - "countries": [ - "RUS" - ] - }, - "mirgorod afb (digital camo)": { - "name": "Mirgorod AFB (Digital camo)", - "countries": [ - "UKR" - ] - }, - "plaaf k2s new": { - "name": "PLAAF K2S new", - "countries": [ - "CHN" - ] - }, - "air force standard old": { - "name": "Air Force Standard old", - "countries": [ - "SUN", - "RUS" - ] - }, - "lodeynoye pole afb (177 iap)": { - "name": "Lodeynoye pole AFB (177 IAP)", - "countries": [ - "RUS" - ] - }, - "kubinka afb (russian knights)": { - "name": "Kubinka AFB (Russian Knights)", - "countries": [ - "RUS" - ] - }, - "lypetsk afb (shark)": { - "name": "Lypetsk AFB (Shark)", - "countries": [ - "RUS" - ] - }, - "besovets afb 2 squadron": { - "name": "Besovets AFB 2 squadron", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Flanker", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Su-30": { - "name": "Su-30", - "coalition": "red", - "label": "Su-30 Super Flanker", - "era": "Late Cold War", - "shortLabel": "S30", - "loadouts": [ - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500*6,R-73*2,ECM", - "name": "BetAB-500*6,R-73*2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "ECM", - "name": "ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-1500 M-54 - 1500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-1500*2,R-73*2,R-77*2,ECM", - "name": "FAB-1500*2,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*4,B-8*2,R-73*2,ECM", - "name": "FAB-250*4,B-8*2,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*4,S-25*2,R-73*2,ECM", - "name": "FAB-250*4,S-25*2,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*4,UB-13*2,R-73*2,ECM", - "name": "FAB-250*4,UB-13*2,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*6,R-73*2,ECM", - "name": "FAB-250*6,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*6,R-73*2,ECM", - "name": "FAB-500*6,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "KAB-1500L - 1500kg Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "KAB-1500*2,R-73*2,R-77*2,ECM", - "name": "KAB-1500*2,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "KAB-500LG - 500kg Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "KAB-500*4,R-73*2,R-77*2,ECM", - "name": "KAB-500*4,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*4,R-73*2,R-77*2,ECM", - "name": "Kh-29L*4,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29T*4,R-73*2,R-77*2,ECM", - "name": "Kh-29T*4,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-31P*2,Kh-31A*2,R-73*2,R-77*2,ECM", - "name": "Kh-31P*2,Kh-31A*2,R-73*2,R-77*2,ECM", - "roles": [ - "Antiship Strike", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-31P*4,R-73*2,R-77*2,ECM", - "name": "Kh-31P*4,R-73*2,R-77*2,ECM", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "Kh-35 (AS-20 Kayak) - 520kg, AShM, IN & Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-35*2,Kh-31P*2,R-73*2,R-77*2,ECM", - "name": "Kh-35*2,Kh-31P*2,R-73*2,R-77*2,ECM", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-59M (AS-18 Kazoo) - 930kg, ASM, IN", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-59M*2,R-73*2,R-77*2,ECM", - "name": "Kh-59M*2,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27R*2,R-27ER*4,ECM", - "name": "R-73*2,R-27R*2,R-27ER*4,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27T (AA-10 Alamo B) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27T*2,R-27ER*2,R-77*2,ECM", - "name": "R-73*2,R-27T*2,R-27ER*2,R-77*2,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27T (AA-10 Alamo B) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27T*2,R-27R*4", - "name": "R-73*2,R-27T*2,R-27R*4", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "Kh-35 (AS-20 Kayak) - 520kg, AShM, IN & Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-77*2,Kh-35*2,ECM", - "name": "R-73*2,R-77*2,Kh-35*2,ECM", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 4 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-77*4,R-27ER*2,ECM", - "name": "R-73*2,R-77*4,R-27ER*2,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-77*6,ECM", - "name": "R-73*2,R-77*6,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-73*4", - "name": "R-73*4", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-73*4,R-27R*2,R-27ER*4", - "name": "R-73*4,R-27R*2,R-27ER*4", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27T (AA-10 Alamo B) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-73*4,R-27T*2,R-27ER*2,R-77*2", - "name": "R-73*4,R-27T*2,R-27ER*2,R-77*2", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27T (AA-10 Alamo B) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-73*4,R-27T*2,R-27R*4", - "name": "R-73*4,R-27T*2,R-27R*4", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 4 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-73*4,R-77*4,R-27ER*2", - "name": "R-73*4,R-77*4,R-27ER*2", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*4,R-77*6", - "name": "R-73*4,R-77*6", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-250*6,R-73*2,ECM", - "name": "RBK-250*6,R-73*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-500AO*6,R-73*2,ECM", - "name": "RBK-500AO*6,R-73*2,ECM", - "roles": [ - "CAS" - ] - } - ], - "filename": "su-34.png", - "enabled": true, - "liveries": { - "af standard last": { - "name": "af standard last", - "countries": [ - "RUS" - ] - }, - "`russian knights` team #25": { - "name": "`russian knights` team #25", - "countries": [ - "RUS" - ] - }, - "adf 148th ctc savasleyka ab": { - "name": "adf 148th ctc savasleyka ab", - "countries": [ - "RUS" - ] - }, - "`desert` test paint scheme": { - "name": "`desert` test paint scheme", - "countries": [ - "RUS" - ] - }, - "`test-pilots` team #597": { - "name": "`test-pilots` team #597", - "countries": [ - "RUS" - ] - }, - "`snow` test paint scheme": { - "name": "`snow` test paint scheme", - "countries": [ - "RUS" - ] - }, - "af standard early": { - "name": "af standard early", - "countries": [ - "SUN", - "RUS" - ] - }, - "af standard last (worn-out)": { - "name": "af standard last (worn-out)", - "countries": [ - "RUS" - ] - }, - "af standard early (worn-out)": { - "name": "af standard early (worn-out)", - "countries": [ - "RUS" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Flanker", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Su-33": { - "name": "Su-33", - "coalition": "red", - "label": "Su-33 Navy Flanker", - "era": "Late Cold War", - "shortLabel": "S33", - "loadouts": [ - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "B-8*4,FAB-250*4,R-73*2,ECM", - "name": "B-8*4,FAB-250*4,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500*6,R-73*2,R-27R*2,ECM", - "name": "BetAB-500*6,R-73*2,R-27R*2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-13L pods - 10 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-13 Rockets + FAB100", - "name": "CAS S-13 Rockets + FAB100", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-13L pods - 10 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-13 Rockets + FAB500", - "name": "CAS S-13 Rockets + FAB500", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-25 Rockets + FAB500", - "name": "CAS S-25 Rockets + FAB500", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 4 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "CAS S-8KOM rockets + FAB250", - "name": "CAS S-8KOM rockets + FAB250", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM rockets + FAB500", - "name": "CAS S-8KOM rockets + FAB500", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500 - 268 x PTAB-1M, 500kg CBU Light HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM rockets + RBK500 PTAB1", - "name": "CAS S-8KOM rockets + RBK500 PTAB1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM rockets + RBK500 PTAB10", - "name": "CAS S-8KOM rockets + RBK500 PTAB10", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8OFP rockets + FAB500", - "name": "CAS S-8OFP rockets + FAB500", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "ECM", - "name": "ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*6,R-73*2,R-27R*2,ECM", - "name": "FAB-250*6,R-73*2,R-27R*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*6,R-73*2,R-27R*2,ECM", - "name": "FAB-500*6,R-73*2,R-27R*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27ET*2,R-27ER*6,ECM", - "name": "R-73*2,R-27ET*2,R-27ER*6,ECM", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27R*2,R-27ER*6,ECM", - "name": "R-73*2,R-27R*2,R-27ER*6,ECM", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-73*4", - "name": "R-73*4", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*4,R-27ET*2,R-27ER*6", - "name": "R-73*4,R-27ET*2,R-27ER*6", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*4,R-27R*2,R-27ER*6", - "name": "R-73*4,R-27R*2,R-27ER*6", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-250*6,R-73*2,R-27R*2,ECM", - "name": "RBK-250*6,R-73*2,R-27R*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-500AO*6,R-73*2,R-27R*2,ECM", - "name": "RBK-500AO*6,R-73*2,R-27R*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 4 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-25*4,FAB-250*4,R-73*2,ECM", - "name": "S-25*4,FAB-250*4,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 4 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-25*4,FAB-500*4,R-73*4", - "name": "S-25*4,FAB-500*4,R-73*4", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 4 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "UB-13*4,FAB-250*4,R-73*2,ECM", - "name": "UB-13*4,FAB-250*4,R-73*2,ECM", - "roles": [ - "Strike" - ] - } - ], - "filename": "su-34.png", - "enabled": true, - "liveries": { - "t-10k-9 test paint scheme": { - "name": "t-10k-9 test paint scheme", - "countries": [ - "RUS" - ] - }, - "279th kiap 1st squad navy": { - "name": "Navy, 279th kiap, 1st squad", - "countries": [ - "RUS" - ] - }, - "aaf blue 68": { - "name": "Algerian AF BLUE No 68", - "countries": [ - "DZA" - ] - }, - "haf - aegean ghost": { - "name": "Hellenic Airforce - Aegean Ghost (Fictional)", - "countries": [ - "GRC" - ] - }, - "279th kiap 2nd squad syria 2017": { - "name": "Syria 2017, 279th kiap, 2nd squad", - "countries": [ - "RUS" - ] - }, - "aaf grey 12": { - "name": "Algerian AF GREY No 12", - "countries": [ - "DZA" - ] - }, - "t-10k-5 test paint scheme": { - "name": "t-10k-5 test paint scheme", - "countries": [ - "RUS" - ] - }, - "279th kiap 1st squad syria 2017": { - "name": "Syria 2017, 279th kiap, 1st squad", - "countries": [ - "RUS" - ] - }, - "279th kiap 2nd squad navy": { - "name": "Navy, 279th kiap, 2nd squad", - "countries": [ - "RUS" - ] - }, - "t-10k-1 test paint scheme": { - "name": "t-10k-1 test paint scheme", - "countries": [ - "SUN", - "RUS" - ] - }, - "plan carrier air wings j-15": { - "name": "PLAN Carrier Air Wings J-15", - "countries": "All" - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Flanker", - "abilities": "Drogue AAR, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Su-34": { - "name": "Su-34", - "coalition": "red", - "label": "Su-34 Hellduck", - "era": "Modern", - "shortLabel": "S34", - "loadouts": [ - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "B-8*6,R-73*2,R-27R*2,ECM", - "name": "B-8*6,R-73*2,R-27R*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 8 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500*8,R-73*2,ECM", - "name": "BetAB-500*8,R-73*2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "ECM", - "name": "ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-100*28,R-73*2,ECM", - "name": "FAB-100*28,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "FAB-1500 M-54 - 1500kg GP Bomb LD", - "quantity": 3 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-1500*3,R-73*2,R-77*2,ECM", - "name": "FAB-1500*3,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 8 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*8,R-73*2,ECM", - "name": "FAB-250*8,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 8 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*8,R-73*2,ECM", - "name": "FAB-500*8,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "KAB-1500L - 1500kg Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "KAB-1500*2,R-73*2,R-77*2,ECM", - "name": "KAB-1500*2,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "KAB-500LG - 500kg Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "KAB-500*4,R-73*2,R-77*2,ECM", - "name": "KAB-500*4,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*4,R-73*2,R-27R*2,ECM", - "name": "Kh-29L*4,R-73*2,R-27R*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*4,R-73*2,R-77*2,ECM", - "name": "Kh-29L*4,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29T*4,R-73*2,R-27R*2,ECM", - "name": "Kh-29T*4,R-73*2,R-27R*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29T*4,R-73*2,R-77*2,ECM", - "name": "Kh-29T*4,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", - "quantity": 4 - }, - { - "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-31A*4,Kh-31P*2,R-73*2,R-27R*2,ECM", - "name": "Kh-31A*4,Kh-31P*2,R-73*2,R-27R*2,ECM", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", - "quantity": 6 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-31A*6,R-73*2,R-27R*2,ECM", - "name": "Kh-31A*6,R-73*2,R-27R*2,ECM", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-31P*4,R-73*2,R-27R*2,ECM", - "name": "Kh-31P*4,R-73*2,R-27R*2,ECM", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "Kh-59M (AS-18 Kazoo) - 930kg, ASM, IN", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-59M*2,R-73*2,R-77*2,ECM", - "name": "Kh-59M*2,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 8 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-250 PTAB-2.5M*8,R-73*2,ECM", - "name": "RBK-250 PTAB-2.5M*8,R-73*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 8 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-500 PTAB-10-5*8,R-73*2,ECM", - "name": "RBK-500 PTAB-10-5*8,R-73*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 4 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "UB-13*4,FAB-250*4,R-73*2,ECM", - "name": "UB-13*4,FAB-250*4,R-73*2,ECM", - "roles": [ - "Strike" - ] - } - ], - "filename": "su-34.png", - "enabled": true, - "liveries": { - "russian air force": { - "name": "1 Russian Air Force", - "countries": [ - "RUS" - ] - }, - "russian air force old": { - "name": "Russian Air Force Old", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swept wing, 2 crew, all weather fighter and strike. Fullback", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Tornado GR4": { - "name": "Tornado GR4", - "coalition": "blue", - "label": "Tornado GR4", - "era": "Late Cold War", - "shortLabel": "GR4", - "loadouts": [ - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 1 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Sky-Shadow ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M*2, Fuel*2, ECM", - "name": "AIM-9M*2, Fuel*2, ECM", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "ALARM", - "quantity": 4 - }, - { - "name": null, - "quantity": 4 - } - ], - "enabled": true, - "code": "ALARM*4, Fuel*2, ECM", - "name": "ALARM*4, Fuel*2, ECM", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 1 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BL-755 CBU - 450kg, 147 Frag/Pen bomblets", - "quantity": 4 - }, - { - "name": "Sky-Shadow ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "BL755*4, AIM-9M*2, Fuel*2, ECM", - "name": "BL755*4, AIM-9M*2, Fuel*2, ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 1 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-16 - 1000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Sky-Shadow ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-16*2, AIM-9M*2, Fuel*2, ECM", - "name": "GBU-16*2, AIM-9M*2, Fuel*2, ECM", - "roles": [ - "Strike", - "FAC-A", - "Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 1 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Sea Eagle - ASM", - "quantity": 2 - }, - { - "name": "Sky-Shadow ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Sea Eagle*2, AIM-9M*2, Fuel*2, ECM", - "name": "Sea Eagle*2, AIM-9M*2, Fuel*2, ECM", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "tornado.png", - "enabled": true, - "liveries": { - "no. 14 squadron raf lossiemouth ab (morayshire)": { - "name": "no. 14 squadron raf lossiemouth ab (morayshire)", - "countries": [ - "UK" - ] - }, - "o of ii (ac) squadron raf marham": { - "name": "o of ii (ac) squadron raf marham", - "countries": [ - "UK" - ] - }, - "bb of 14 squadron raf lossiemouth": { - "name": "bb of 14 squadron raf lossiemouth", - "countries": [ - "UK" - ] - }, - "no. 9 squadron raf marham ab (norfolk)": { - "name": "no. 9 squadron raf marham ab (norfolk)", - "countries": [ - "UK" - ] - }, - "no. 12 squadron raf lossiemouth ab (morayshire)": { - "name": "no. 12 squadron raf lossiemouth ab (morayshire)", - "countries": [ - "UK" - ] - }, - "no. 617 squadron raf lossiemouth ab (morayshire)": { - "name": "no. 617 squadron raf lossiemouth ab (morayshire)", - "countries": [ - "UK" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swing wing, 2 crew, all weather strike.", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Tornado IDS": { - "name": "Tornado IDS", - "coalition": "blue", - "label": "Tornado IDS", - "era": "Late Cold War", - "shortLabel": "IDS", - "loadouts": [ - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 1 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 2 - }, - { - "name": "Sky-Shadow ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-88*2,AIM-9*2,Fuel*2,ECM", - "name": "AGM-88*2,AIM-9*2,Fuel*2,ECM", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 1 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 4 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Sky-Shadow ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-88*4,AIM-9*2,ECM", - "name": "AGM-88*4,AIM-9*2,ECM", - "roles": [ - "SEAD" - ] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "Fuel*2", - "name": "Fuel*2", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-16 - 1000lb Laser Guided Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-16*2,AIM-9*2,Fuel*2", - "name": "GBU-16*2,AIM-9*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Kormoran - ASM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kormoran*2,AIM-9*2,AGM-88*2", - "name": "Kormoran*2,AIM-9*2,AGM-88*2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Kormoran - ASM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kormoran*2,AIM-9*2,Fuel*2", - "name": "Kormoran*2,AIM-9*2,Fuel*2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "Kormoran - ASM", - "quantity": 4 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kormoran*4,AIM-9*2", - "name": "Kormoran*4,AIM-9*2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-82*4,AIM-9*2,Fuel*2", - "name": "Mk-82*4,AIM-9*2,Fuel*2", - "roles": [ - "Strike" - ] - } - ], - "filename": "tornado.png", - "enabled": true, - "liveries": { - "ita tornado black": { - "name": "Tornado Black", - "countries": [ - "ITA" - ] - }, - "marinefliegergeschwader 2 eggebek ab marineflieger": { - "name": "marinefliegergeschwader 2 eggebek ab marineflieger", - "countries": [ - "GER" - ] - }, - "jagdbombergeschwader 31 `boelcke` norvenich ab luftwaffe": { - "name": "jagdbombergeschwader 31 `boelcke` norvenich ab luftwaffe", - "countries": [ - "GER" - ] - }, - "ita tornado mm7042": { - "name": "Tornado MM7042", - "countries": [ - "ITA" - ] - }, - "ita tornado mm55004": { - "name": "Tornado MM55004", - "countries": [ - "ITA" - ] - }, - "aufklarungsgeschwader 51 `immelmann` jagel ab luftwaffe": { - "name": "aufklarungsgeschwader 51 `immelmann` jagel ab luftwaffe", - "countries": [ - "GER" - ] - }, - "jagdbombergeschwader 33 buchel ab no. 43+19 experimental scheme": { - "name": "jagdbombergeschwader 33 buchel ab no. 43+19 experimental scheme", - "countries": [ - "GER" - ] - }, - "jagdbombergeschwader 32 lechfeld ab luftwaffe": { - "name": "jagdbombergeschwader 32 lechfeld ab luftwaffe", - "countries": [ - "GER" - ] - }, - "ita tornado (sesto stormo diavoli rossi)": { - "name": "Tornado (Sesto Stormo Diavoli Rossi)", - "countries": [ - "ITA" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swing wing, 2 crew, all weather strike.", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Tu-142": { - "name": "Tu-142", - "coalition": "red", - "label": "Tu-142 Bear", - "era": "Mid Cold War", - "shortLabel": "142", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "6 x Kh-35 (AS-20 Kayak) - 520kg, AShM, IN & Act Rdr", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-35*6", - "name": "Kh-35*6", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "tu-95.png", - "enabled": true, - "liveries": { - "af standard": { - "name": "af standard", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "4 turboprop, swept wing, 11 crew, bomber. Bear", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Tu-160": { - "name": "Tu-160", - "coalition": "red", - "label": "Tu-160 Blackjack", - "era": "Late Cold War", - "shortLabel": "160", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "6 x Kh-65 (AS-15B Kent) - 1250kg, ASM, IN & MCC", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-65*12", - "name": "Kh-65*12", - "roles": [ - "Strike" - ] - } - ], - "filename": "tu-160.png", - "enabled": true, - "liveries": { - "af standard": { - "name": "af standard", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swing wing, 4 crew bomber. Blackjack", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Tu-22M3": { - "name": "Tu-22M3", - "coalition": "red", - "label": "Tu-22M3 Backfire", - "era": "Late Cold War", - "shortLabel": "T22", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "33 x FAB-250 - 250kg GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*33", - "name": "FAB-250*33", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "MBD3-U9M with 9 x FAB-250 - 250kg GP Bombs LD", - "quantity": 4 - }, - { - "name": "33 x FAB-250 - 250kg GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*69", - "name": "FAB-250*69", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "33 x FAB-500 M-62 - 500kg GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*33", - "name": "FAB-500*33", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "MBD3-U9M with 9 x FAB-250 - 250kg GP Bombs LD", - "quantity": 4 - }, - { - "name": "33 x FAB-500 M-62 - 500kg GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*33, FAB-250*36", - "name": "FAB-500*33, FAB-250*36", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Kh-22 (AS-4 Kitchen) - 1000kg, AShM, IN & Act/Pas Rdr", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-22N", - "name": "Kh-22N", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Kh-22 (AS-4 Kitchen) - 1000kg, AShM, IN & Act/Pas Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-22N*2", - "name": "Kh-22N*2", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "tu-22.png", - "enabled": true, - "liveries": { - "af standard": { - "name": "af standard", - "countries": [ - "UKR", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swing wing, 4 crew bomber. Backfire", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Tu-95MS": { - "name": "Tu-95MS", - "coalition": "red", - "label": "Tu-95MS Bear", - "era": "Mid Cold War", - "shortLabel": "T95", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "6 x Kh-65 (AS-15B Kent) - 1250kg, ASM, IN & MCC", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-65*6", - "name": "Kh-65*6", - "roles": [ - "Strike" - ] - } - ], - "filename": "tu-95.png", - "enabled": true, - "liveries": { - "af standard": { - "name": "af standard", - "countries": [ - "UKR", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "4 turboprop, swept wing, 6 crew, bomber. Bear", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-15ESE": { - "name": "F-15ESE", - "coalition": "", - "label": "F-15E Strike Eagle", - "shortLabel": "15E", - "era": "", - "enabled": true, - "loadouts": [ - { - "items": [ - { - "name": "Captive AIM-9M for ACM", - "quantity": 1 - }, - { - "name": "BDU-50LGB * 2", - "quantity": 2 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": null, - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": " AIM-120C x 2, CATM-9M, GBU-12 x 4, TGP, NVP", - "name": " AIM-120C x 2, CATM-9M, GBU-12 x 4, TGP, NVP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "Mk-82 * 6", - "quantity": 2 - }, - { - "name": null, - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": " AIM-9M x 4, MK-82 x 12, TGP, Fuel Tank x 2", - "name": " AIM-9M x 4, MK-82 x 12, TGP, Fuel Tank x 2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Fuel tank 610 gal", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BLU-107 * 6", - "quantity": 2 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C x 2, AIM-9M x 2, BLU-107 x 12, TGP, NVP, Fuel Tank", - "name": "AIM-120C x 2, AIM-9M x 2, BLU-107 x 12, TGP, NVP, Fuel Tank", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-12 * 4", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": null, - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": "GBU-10 * 2", - "quantity": 1 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 4, GBU-10 x 2, TGP, NVP, FUel Tank x 2", - "name": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 4, GBU-10 x 2, TGP, NVP, FUel Tank x 2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-12 * 4", - "quantity": 2 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 9, TGP, NVP, FUel Tank x 2", - "name": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 9, TGP, NVP, FUel Tank x 2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C x 4, AIM-9M x4, TGP, NVP, FUel Tank x 2", - "name": "AIM-120C x 4, AIM-9M x4, TGP, NVP, FUel Tank x 2", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 3 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 AIR * 6", - "quantity": 2 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C x2, AIM-9M x 2, Mk-84 x 3, Mk-82AIR x 12", - "name": "AIM-120C x2, AIM-9M x 2, Mk-84 x 3, Mk-82AIR x 12", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-120Cx4, AIM-9Mx4, Fuel Tanks x 2", - "name": "AIM-120Cx4, AIM-9Mx4, Fuel Tanks x 2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": null, - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M x 4, AIM-120B x 4, TGP, NVP, Fuel Tanks x 2", - "name": "AIM-9M x 4, AIM-120B x 4, TGP, NVP, Fuel Tanks x 2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "CBU-87 * 6", - "quantity": 1 - }, - { - "name": null, - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M x 4, AIM-120C x 2, CBU-87 x 6, TGP", - "name": "AIM-9M x 4, AIM-120C x 2, CBU-87 x 6, TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "AIM-7MH Sparrow Semi-Active Radar", - "quantity": 2 - }, - { - "name": "Mk-20 Rockeye * 6", - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M x 4, AIM-7M x 2, Mk-20 x 2, NVP, Fuel Tanks x 2", - "name": "AIM-9M x 4, AIM-7M x 2, Mk-20 x 2, NVP, Fuel Tanks x 2", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "CBU-87 * 3", - "quantity": 2 - }, - { - "name": null, - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M x 4, CBU-87 x 6, TGP, Fuel Tank x 2", - "name": "AIM-9M x 4, CBU-87 x 6, TGP, Fuel Tank x 2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "Mk-20 Rockeye * 6", - "quantity": 2 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M x 4, Mk-20 x 12, NVP, Fuel Tanks x 2", - "name": "AIM-9M x 4, Mk-20 x 12, NVP, Fuel Tanks x 2", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Mk-82 * 6", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": null, - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": "CBU-97 * 3", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M x 4, Mk-84 x 2, Mk-82 x 6, CBU-87 x 3, TGP, NVP", - "name": "AIM-9M x 4, Mk-84 x 2, Mk-82 x 6, CBU-87 x 3, TGP, NVP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": null, - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M x 4, TGP, NVP, Fuel Tanks x 2", - "name": "AIM-9M x 4, TGP, NVP, Fuel Tanks x 2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Captive AIM-9M for ACM", - "quantity": 3 - }, - { - "name": null, - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "CATM-9M x 3, AIM-120B", - "name": "CATM-9M x 3, AIM-120B", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Captive AIM-9M for ACM", - "quantity": 1 - }, - { - "name": null, - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "CATM-9M, CAIM-120", - "name": "CATM-9M, CAIM-120", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": null, - "quantity": 3 - } - ], - "enabled": true, - "code": "Clean", - "name": "Clean", - "roles": [] - }, - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - } - ], - "filename": "f-15.png", - "liveries": { - "usaf 334th eagles fs af89 aim high": { - "name": "USAF 334th Eagles AF89-475 'Aim High'", - "countries": [ - "USA" - ] - }, - "usaf 335th chiefs fs af89 low vis combat": { - "name": "USAF 335th Chiefs AF89 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af91 low vis combat": { - "name": "USAF 492nd Madhatters AF91 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 335th chiefs fs af89 high vis clean": { - "name": "USAF 335th Chiefs AF89 High Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 335th chiefs fs af89-0487 lucky": { - "name": "USAF 335th Chiefs AF89-0487 'Lucky'", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af88-1690 darkness falls": { - "name": "USAF 336th Rocketeers AF88-1690 'Darkness Falls'", - "countries": [ - "USA" - ] - }, - "usaf 391st bold tigers fs af92-366 billy the kid": { - "name": "USAF 391st Bold Tigers AF92-366 'Billy the Kid'", - "countries": [ - "USA" - ] - }, - "idf ra'am, 69 hammer sqn": { - "name": "IDF 69th Hammers Scheme B", - "countries": [ - "ISR" - ] - }, - "usaf 336th rocketeers fs af89 high vis clean": { - "name": "USAF 336th Rocketeers AF89 High Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af89-496 shadow": { - "name": "USAF 336th Rocketeers AF89-496 'Shadow'", - "countries": [ - "USA" - ] - }, - "usaf 389th thunderbolts fs af90 low vis combat": { - "name": "USAF 389th Thunderbolts AF90 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd mad hatters fs 97-219 75th d-day anniversary": { - "name": "USAF 492nd Madhatters AF97-219 '75th Anniversary D-Day'", - "countries": [ - "USA" - ] - }, - "usaf 334th eagles fs af89 high vis clean": { - "name": "USAF 334th Eagles AF89 High Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 391st bold tigers fs af91-300 leo": { - "name": "USAF 391st Bold Tigers AF91-300 'Leo'", - "countries": [ - "USA" - ] - }, - "usaf 494th panthers fs af01 low vis clean": { - "name": "USAF 494th Panthers AF01 Low Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af97-220 thanos": { - "name": "USAF 492nd Madhatters AF97-220 'Thanos'", - "countries": [ - "USA" - ] - }, - "usaf 48th fw 70th anniversary af92-364 heritage": { - "name": "USAF 48th FW 70th Aniversary AF92-364 Heritage", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af88 low vis combat": { - "name": "USAF 336th Rocketeers AF88 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af97-221 low vis combat": { - "name": "USAF 492nd Madhatters AF97-221 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af91-315 vader": { - "name": "USAF 492nd Madhatters AF91-315 'Vader'", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af91-327 green goblin": { - "name": "USAF 492nd Madhatters AF91-327 'Green Goblin'", - "countries": [ - "USA" - ] - }, - "usaf 391st bold tigers fs af90-247 kraken": { - "name": "USAF 391st Bold Tigers AF90-247 'kraken'", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af88-1700 dragon betty": { - "name": "USAF 336th Rocketeers AF88-1700 'Dragon Betty'", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af89-501": { - "name": "USAF 336th Rocketeers AF89-501", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af88 high vis clean": { - "name": "USAF 336th Rocketeers AF88 High Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 333rd rocketeers fs af87-199 333 fgs": { - "name": "USAF 333rd Lancers AF87-0199 333 FGS", - "countries": [ - "USA" - ] - }, - "usaf 391st bold tigers fs af90-241 high vis combat": { - "name": "USAF 391st Bold Tigers AF90-241 High Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af96 low vis clean": { - "name": "USAF 492nd Madhatters AF96 Low Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 494th panthers fs af00 low vis combat": { - "name": "USAF 494th Panthers AF00 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af91 low vis clean": { - "name": "USAF 492nd Madhatters AF91 Low Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 494th panthers fs af01 low vis combat": { - "name": "USAF 494th Panthers AF01 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af98 low vis clean": { - "name": "USAF 492nd Madhatters AF98 Low Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 17th ws af90 low vis clean": { - "name": "USAF 17th Weapons Squadron AF90 Low Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af88-1673 336 fgs": { - "name": "USAF 336th Rocketeers AF88-1673 336 FGS", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af89 low vis combat": { - "name": "USAF 336th Rocketeers AF89 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af91-308 low vis clean": { - "name": "USAF 492nd Madhatters AF91-308 Low Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af98 low vis combat": { - "name": "USAF 492nd Madhatters AF98 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 391st bold tigers af90-250 tmota": { - "name": "USAF 391ST Bold Tigers 2005 Tiger Meet of the Americas", - "countries": [ - "USA" - ] - }, - "usaf af86-183 number1": { - "name": "USAF Test AF86-183 'Number 1'", - "countries": [ - "USA" - ] - }, - "usaf 17th wps af90-257": { - "name": "USAF 17th Weapons Squadron AF90-257 High Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 17th ws af90 high vis clean": { - "name": "USAF 17th Weapons Squadron AF90 High Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af96 low vis combat": { - "name": "USAF 492nd Madhatters AF96 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 391st bold tigers fs af90 low vis combat": { - "name": "USAF 391st Bold Tigers AF90 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 494th panthers fs 91-603 75th d-day anniversary": { - "name": "USAF 494th Panthers AF91-603 '75th Anniversary D-Day'", - "countries": [ - "USA" - ] - }, - "usaf 336th fw mountain home 75 years af87-173": { - "name": "USAF 366th FW 'Mountain Home 75 Years' AF87-0173", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af88-1687 mad duck iv": { - "name": "USAF 336th Rocketeers AF88-1687 'Mad Duck IV'", - "countries": [ - "USA" - ] - } - } - } + "A-10C_2": { + "name": "A-10C_2", + "coalition": "blue", + "era": "Late Cold War", + "label": "A-10C Warthog", + "shortLabel": "A10", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", + "quantity": 6 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "LAU-68 42 rkt M156 WP, AIM-9*2, ECM", + "name": "LAU-68 42 rkt M156 WP, AIM-9*2, ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65D*4, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", + "name": "AGM-65D*4, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x LAU-131 pods - 21 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "LAU-131 98 rkt M156 WP, AIM-9*2,ECM", + "name": "LAU-131 98 rkt M156 WP, AIM-9*2,ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", + "quantity": 9 + } + ], + "enabled": true, + "code": "SUU-25*9,AIM-9*2,ECM", + "name": "SUU-25*9,AIM-9*2,ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "AGM-65D*4, CBU-97*4,TGP, ECM, AIM-9*2", + "name": "AGM-65D*4, CBU-97*4,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 8 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82AIR*8,AIM-9*2,ECM", + "name": "Mk-82AIR*8,AIM-9*2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M257, Para Illum", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "MK-84*2,LAU-68*2,AGM-65K*2", + "name": "MK-84*2,LAU-68*2,AGM-65K*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", + "quantity": 2 + }, + { + "name": "BDU-50LGB - 500lb Laser Guided Inert Practice Bomb LD", + "quantity": 2 + }, + { + "name": "LAU-117 with TGM-65D - Trg Round for Mav D (IIR)", + "quantity": 1 + }, + { + "name": "LAU-117 with TGM-65H - Trg Round for Mav H (CCD)", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-33*6, TGM-65H, TGM-65D, TGP, BDU-50LGB*2, CAP-9*1", + "name": "BDU-33*6, TGM-65H, TGM-65D, TGP, BDU-50LGB*2, CAP-9*1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 6 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82*6,Mk-84*2,AIM-9*2,ECM", + "name": "Mk-82*6,Mk-84*2,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 4 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-84*4,AIM-9*2,ECM", + "name": "Mk-84*4,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 8 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82*8,AIM-9*2,ECM", + "name": "Mk-82*8,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-33*12, TGP, CAP-9*1", + "name": "BDU-33*12, TGP, CAP-9*1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*4,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", + "name": "AGM-65D*4,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 1 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*4,GBU-12*2,GBU-38,Mk-82,AIM-9,TGP,ECM", + "name": "AGM-65D*4,GBU-12*2,GBU-38,Mk-82,AIM-9,TGP,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*2, AGM-65H*2, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", + "name": "AGM-65D*2, AGM-65H*2, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "BDU-50HD - 500lb Inert Practice Bomb HD", + "quantity": 6 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk1, Practice", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-50HD*6,Mk1*7,TGP, CAP-9*1", + "name": "BDU-50HD*6,Mk1*7,TGP, CAP-9*1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65H*4, CBU-97*4,TGP, ECM, AIM-9*2", + "name": "AGM-65H*4, CBU-97*4,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", + "name": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65K*2,GBU-38*4,AIM-9*2,TGP,ECM", + "name": "AGM-65K*2,GBU-38*4,AIM-9*2,TGP,ECM", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-33*6, TGP, CAP-9*1", + "name": "BDU-33*6, TGP, CAP-9*1", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*2,AGM-65H*2,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK151*7", + "name": "AGM-65D*2,AGM-65H*2,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK151*7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP", + "name": "TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "BDU-50LD - 500lb Inert Practice Bomb LD", + "quantity": 2 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-33*6, TGP, CAP-9*1, BDU-50LD*2", + "name": "BDU-33*6, TGP, CAP-9*1, BDU-50LD*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "BRU-42 with 3 x GBU-12 - 500lb Laser Guided Bombs", + "quantity": 2 + }, + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-12*6,GBU-10*2,TGP, AIM-9*2", + "name": "GBU-12*6,GBU-10*2,TGP, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 3 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP, CBU-87*3, M151*28, AIM-9*2, ECM", + "name": "TGP, CBU-87*3, M151*28, AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*4,Mk-82*6,CBU-87*2,TGP,AIM-9*2,Mk151*7", + "name": "AGM-65D*4,Mk-82*6,CBU-87*2,TGP,AIM-9*2,Mk151*7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM- GBU-10*2,GBU-12*4,AIM-9*2,TGP,ECM", + "name": "PGM- GBU-10*2,GBU-12*4,AIM-9*2,TGP,ECM", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*4,TGP, ECM, AIM-9*2", + "name": "AGM-65D*4,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-117 with CATM-65K - Captive Trg Round for Mav K (CCD)", + "quantity": 1 + }, + { + "name": "LAU-117 with TGM-65G - Trg Round for Mav G (IIR)", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP, CAP-9*1, CATM-65K*1, TGM-65G*1", + "name": "TGP, CAP-9*1, CATM-65K*1, TGM-65G*1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", + "quantity": 2 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65G*2,GBU-31*2,AIM-9*2,TGP,ECM", + "name": "AGM-65G*2,GBU-31*2,AIM-9*2,TGP,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP, M151*14, Mk-82*2, Mk-82AIR*2, AIM-9*2, ECM", + "name": "TGP, M151*14, Mk-82*2, Mk-82AIR*2, AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM- GBU-10*4, AGM-65K*2,AIM-9*2,TGP,ECM", + "name": "PGM- GBU-10*4, AGM-65K*2,AIM-9*2,TGP,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", + "quantity": 2 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*2,AGM-65H*2,Mk-82AIR*6,CBU-87*2,Mk151*7,AIM-9*2,TGP,ECM", + "name": "AGM-65D*2,AGM-65H*2,Mk-82AIR*6,CBU-87*2,Mk151*7,AIM-9*2,TGP,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-31*2,GBU-38*2, AGM-65H*2, AIM-9*2,TGP, ECM", + "name": "GBU-31*2,GBU-38*2, AGM-65H*2, AIM-9*2,TGP, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "CBU-103 - 202 x CEM, CBU with WCMD", + "quantity": 4 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "CBU-103*4, M151*14, AIM-9*2, ECM", + "name": "CBU-103*4, M151*14, AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 4 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "CBU-87*4, M151*42, AIM-9*2, ECM", + "name": "CBU-87*4, M151*42, AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 3 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65D*6, CBU-97*4,TGP, ECM, AIM-9*2", + "name": "AGM-65D*6, CBU-97*4,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", + "quantity": 2 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "CBU-87*2, M151*14, MK-82AIR*6, AIM-9*2,ECM", + "name": "CBU-87*2, M151*14, MK-82AIR*6, AIM-9*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-105 - 10 x SFW, CBU with WCMD", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65D*4, CBU-105*4,TGP, ECM, AIM-9*2", + "name": "AGM-65D*4, CBU-105*4,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "BDU-50HD - 500lb Inert Practice Bomb HD", + "quantity": 2 + }, + { + "name": "BDU-50LGB - 500lb Laser Guided Inert Practice Bomb LD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk61, Practice", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-50HD*2,BDU-50LGB*2,TGP, CAP-9*1", + "name": "BDU-50HD*2,BDU-50LGB*2,TGP, CAP-9*1", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 4 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 4 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "CBU-87*4, M151*28, AIM-9*2,ECM", + "name": "CBU-87*4, M151*28, AIM-9*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 4 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "M151*98, Mk-82*2,AIM-9*2,ECM", + "name": "M151*98, Mk-82*2,AIM-9*2,ECM", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*2,AGM-65H*2,GBU-12,GBU-38,MK82*3,MK82AIR*3,MK5*7,TGP,AM-9*2", + "name": "AGM-65D*2,AGM-65H*2,GBU-12,GBU-38,MK82*3,MK82AIR*3,MK5*7,TGP,AM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP, M151*42, Mk-82*6, Mk-82AIR*6, AIM-9*2, ECM", + "name": "TGP, M151*42, Mk-82*6, Mk-82AIR*6, AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 4 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP, M151*84, Mk-82*2,AIM-9*2, ECM", + "name": "TGP, M151*84, Mk-82*2,AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "BDU-50HD - 500lb Inert Practice Bomb HD", + "quantity": 2 + }, + { + "name": "BDU-50LD - 500lb Inert Practice Bomb LD", + "quantity": 2 + }, + { + "name": "LAU-117 with CATM-65K - Captive Trg Round for Mav K (CCD)", + "quantity": 1 + }, + { + "name": "LAU-117 with TGM-65G - Trg Round for Mav G (IIR)", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts WTU-1/B, Practice", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-50LD*2, BDU-50HD*2,CATM-65K, TGM-65G, TGP, CAP-9*1", + "name": "BDU-50LD*2, BDU-50HD*2,CATM-65K, TGM-65G, TGP, CAP-9*1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP, M151*49, Mk-82*2, CBU-87*2, AIM-9*2, ECM", + "name": "TGP, M151*49, Mk-82*2, CBU-87*2, AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + }, + { + "name": "BDU-50LGB - 500lb Laser Guided Inert Practice Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "TGP, CAP-9*1, BDU-50LGB*4", + "name": "TGP, CAP-9*1, BDU-50LGB*4", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "BRU-42 with 3 x GBU-12 - 500lb Laser Guided Bombs", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-12*14,TGP, AIM-9*2", + "name": "GBU-12*14,TGP, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 3 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "LAU-88 with 3 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*3, AGM-65H*3, CBU-97*4,TGP, ECM, AIM-9*2", + "name": "AGM-65D*3, AGM-65H*3, CBU-97*4,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,TGP,ECM", + "name": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,TGP,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 2 + }, + { + "name": "CBU-105 - 10 x SFW, CBU with WCMD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65D*4, CBU-105*2,CBU-97*2, TGP, ECM, AIM-9*2", + "name": "AGM-65D*4, CBU-105*2,CBU-97*2, TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 6 + }, + { + "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*2,Mk-82*6,AIM-9*2,ECM", + "name": "AGM-65D*2,Mk-82*6,AIM-9*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*2,AGM-65H*2,TGP, ECM, AIM-9*2", + "name": "AGM-65D*2,AGM-65H*2,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 4 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-38*4,GBU-31*2,TGP, AIM-9*2", + "name": "GBU-38*4,GBU-31*2,TGP, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*4,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK5*7", + "name": "AGM-65D*4,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK5*7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", + "quantity": 1 + }, + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65G,AGM-65K,GBU-10*2,AIM-9*2,TGP,ECM", + "name": "AGM-65G,AGM-65K,GBU-10*2,AIM-9*2,TGP,ECM", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 7 + }, + { + "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65G,AGM-65D,Mk-82*7,AIM-9*2,ECM", + "name": "AGM-65G,AGM-65D,Mk-82*7,AIM-9*2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 4 + }, + { + "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-31*2,GBU-38*4,AIM-9*2,TGP,ECM, AIM-9*2", + "name": "GBU-31*2,GBU-38*4,AIM-9*2,TGP,ECM, AIM-9*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x GBU-12 - 500lb Laser Guided Bombs", + "quantity": 2 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65K*2,GBU-12*8,AIM-9M*2.ECM,TGP", + "name": "AGM-65K*2,GBU-12*8,AIM-9M*2.ECM,TGP", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 3 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*6,GBU-12*4,AIM-9M*2,ECM,TGP", + "name": "AGM-65D*6,GBU-12*4,AIM-9M*2,ECM,TGP", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 2 + }, + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65L*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,ECM,TGP", + "name": "AGM-65L*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,ECM,TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 4 + }, + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65L*2,CBU-97*4,AIM-9M*2,ECM,TGP", + "name": "AGM-65L*2,CBU-97*4,AIM-9M*2,ECM,TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 4 + }, + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65L*2,CBU-97*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", + "name": "AGM-65L*2,CBU-97*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-105 - 10 x SFW, CBU with WCMD", + "quantity": 4 + }, + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65L*2,CBU-105*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", + "name": "AGM-65L*2,CBU-105*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 4 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82*4,Mk-8AIR*4,AIM-9*2,ECM", + "name": "Mk-82*4,Mk-8AIR*4,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", + "quantity": 5 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82*20,AIM-9*2,ECM", + "name": "Mk-82*20,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 7 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82*6,AIM-9*2,TGP,ECM", + "name": "Mk-82*6,AIM-9*2,TGP,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 6 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-84*6,AIM-9*2,TGP,ECM", + "name": "Mk-84*6,AIM-9*2,TGP,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 5 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82AIR*6,Mk-8AIR*4,M151*1,TGP,AIM-9*2,ECM", + "name": "Mk-82AIR*6,Mk-8AIR*4,M151*1,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 4 + }, + { + "name": "LAU-117 with AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-38*4,M151 APKWS*7,AGM-65D*1,AGM-65H*1,TGP,AIM-9*2,ECM", + "name": "GBU-38*4,M151 APKWS*7,AGM-65D*1,AGM-65H*1,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-38*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "name": "GBU-38*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-12*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "name": "GBU-12*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-12*2,GBU-38*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "name": "GBU-12*2,GBU-38*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-10*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "name": "GBU-10*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "GBU-31(V)3/B - JDAM, 2000lb GPS Guided Penetrator Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-31*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "name": "GBU-31*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "GBU-54(V)1/B - LJDAM, 500lb Laser & GPS Guided Bomb LD", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-54*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "name": "GBU-54*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "GBU-54(V)1/B - LJDAM, 500lb Laser & GPS Guided Bomb LD", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-54*4,M151 APKWS*7,AGM-65D*4,TGP,AIM-9*2,ECM", + "name": "GBU-54*4,M151 APKWS*7,AGM-65D*4,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + } + ], + "filename": "a-10.png", + "enabled": true, + "liveries": { + "81st fs spangdahlem ab, germany (sp) 1": { + "name": "81st FS Spangdahlem AB, Germany (SP) 1", + "countries": [ + "USA" + ] + }, + "fictional spanish tritonal": { + "name": "Fictional Spanish Tritonal", + "countries": [ + "SPN" + ] + }, + "47th fs barksdale afb, louisiana (bd)": { + "name": "47th FS Barksdale AFB, Louisiana (BD)", + "countries": [ + "USA" + ] + }, + "fictional georgian olive": { + "name": "Fictional Georgian Olive", + "countries": [ + "GRG" + ] + }, + "algerian af fictional grey": { + "name": "Algerian AF Fictional Grey", + "countries": [ + "DZA" + ] + }, + "fictional russian air force 1": { + "name": "Fictional Russian Air Force 1", + "countries": [ + "RUS" + ] + }, + "fictional israel 115 sqn flying dragon": { + "name": "Fictional Israel 115 Sqn Flying Dragon", + "countries": [ + "ISR" + ] + }, + "172nd fs battle creek angb, michigan (bc)": { + "name": "172nd FS Battle Creek ANGB, Michigan (BC)", + "countries": [ + "USA" + ] + }, + "190th fs boise angb, idaho (id)": { + "name": "190th FS Boise ANGB, Idaho (ID)", + "countries": [ + "USA" + ] + }, + "81st fs spangdahlem ab, germany (sp) 2": { + "name": "81st FS Spangdahlem AB, Germany (SP) 2", + "countries": [ + "USA" + ] + }, + "fictional german 3322": { + "name": "Fictional German 3322", + "countries": [ + "GER" + ] + }, + "66th ws nellis afb, nevada (wa)": { + "name": "66th WS Nellis AFB, Nevada (WA)", + "countries": [ + "USA" + ] + }, + "algerian af fictional desert": { + "name": "Algerian AF Fictional Desert", + "countries": [ + "DZA" + ] + }, + "fictional italian am (23gruppo)": { + "name": "AM (23Gruppo)", + "countries": [ + "ITA" + ] + }, + "haf fictional": { + "name": "Hellenic Airforce (Fictional)", + "countries": [ + "GRC" + ] + }, + "184th fs arkansas ang, fort smith (fs)": { + "name": "184th FS Arkansas ANG, Fort Smith (FS)", + "countries": [ + "USA" + ] + }, + "354th fs davis monthan afb, arizona (dm)": { + "name": "354th FS Davis Monthan AFB, Arizona (DM)", + "countries": [ + "USA" + ] + }, + "fictional royal norwegian air force": { + "name": "Fictional Royal Norwegian Air Force", + "countries": [ + "NOR" + ] + }, + "422nd tes nellis afb, nevada (ot)": { + "name": "422nd TES Nellis AFB, Nevada (OT)", + "countries": [ + "USA" + ] + }, + "118th fs bradley angb, connecticut (ct)": { + "name": "118th FS Bradley ANGB, Connecticut (CT)", + "countries": [ + "USA" + ] + }, + "fictional spanish aga": { + "name": "Fictional Spanish AGA", + "countries": [ + "SPN" + ] + }, + "74th fs moody afb, georgia (ft)": { + "name": "74th FS Moody AFB, Georgia (FT)", + "countries": [ + "USA" + ] + }, + "fictional russian air force 2": { + "name": "Fictional Russian Air Force 2", + "countries": [ + "RUS" + ] + }, + "118th fs bradley angb, connecticut (ct) n621": { + "name": "118th FS Bradley ANGB, Connecticut (CT) N621", + "countries": [ + "USA" + ] + }, + "357th fs davis monthan afb, arizona (dm)": { + "name": "357th FS Davis Monthan AFB, Arizona (DM)", + "countries": [ + "USA" + ] + }, + "canada rcaf 409 squadron": { + "name": "Fictional RCAF 409 Squadron", + "countries": [ + "CAN" + ] + }, + "355th fs eielson afb, alaska (ak)": { + "name": "355th FS Eielson AFB, Alaska (AK)", + "countries": [ + "USA" + ] + }, + "25th fs osan ab, korea (os)": { + "name": "25th FS Osan AB, Korea (OS)", + "countries": [ + "USA" + ] + }, + "358th fs davis monthan afb, arizona (dm)": { + "name": "358th FS Davis Monthan AFB, Arizona (DM)", + "countries": [ + "USA" + ] + }, + "australia notional raaf": { + "name": "Australia Notional RAAF", + "countries": [ + "AUS" + ] + }, + "fictional canadian air force pixel camo": { + "name": "Fictional Canadian Air Force Pixel Camo", + "countries": [ + "CAN" + ] + }, + "fictional france escadron de chasse 03.003 ardennes": { + "name": "Fictional France Escadron de Chasse 03.003 ARDENNES", + "countries": [ + "FRA" + ] + }, + "canada rcaf 442 snow scheme": { + "name": "Fictional RCAF 442 Snow Scheme", + "countries": [ + "CAN" + ] + }, + "23rd tfw england afb (el)": { + "name": "23rd TFW England AFB (EL)", + "countries": [ + "USA" + ] + }, + "fictional georgian grey": { + "name": "Fictional Georgian Grey", + "countries": [ + "GRG" + ] + }, + "fictional ukraine air force 1": { + "name": "Fictional Ukraine Air Force 1", + "countries": [ + "UKR" + ] + }, + "104th fs maryland ang, baltimore (md)": { + "name": "104th FS Maryland ANG, Baltimore (MD)", + "countries": [ + "USA" + ] + }, + "fictional spanish 12nd wing": { + "name": "Fictional Spanish 12nd Wing", + "countries": [ + "SPN" + ] + }, + "a-10 grey": { + "name": "A-10 Grey", + "countries": [ + "DEN", + "TUR", + "NETH", + "BEL", + "UK" + ] + }, + "fictional german 3323": { + "name": "Fictional German 3323", + "countries": [ + "GER" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, straight wing, 1 crew, attack aircraft. Warthog", + "abilities": "Boom AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "A-20G": { + "name": "A-20G", + "coalition": "blue", + "label": "A-20G Havoc", + "era": "WW2", + "shortLabel": "A20", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "4 x AN-M64 - 500lb GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "500 lb GP bomb LD*4", + "name": "500 lb GP bomb LD*4", + "roles": [ + "CAS", + "Strike", + "Runway Attack", + "Antiship Strike" + ] + } + ], + "filename": "a-20.png", + "enabled": true, + "liveries": { + "ussr 1st gmtap": { + "name": "1st GMTAP", + "countries": [ + "SUN", + "RUS" + ] + }, + "usaf 645th bs": { + "name": "645th BS, 410th BG, 9th AF", + "countries": [ + "USA" + ] + }, + "107 sqn": { + "name": "107 SQN", + "countries": [ + "UK" + ] + }, + "ussr 27 ape dd": { + "name": "27th API DD", + "countries": [ + "SUN", + "RUS" + ] + }, + "usaf 668th bs": { + "name": "668th BS, 416th BG", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "2 propeller, straight wing, 3 crew, medium attack bomber. Havoc", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "A-50": { + "name": "A-50", + "coalition": "red", + "label": "A-50 Mainstay", + "era": "Late Cold War", + "shortLabel": "A50", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "AWACS" + ] + } + ], + "filename": "a-50.png", + "enabled": true, + "liveries": { + "rf air force": { + "name": "RF Air Force", + "countries": [ + "RUS" + ] + }, + "rf air force new": { + "name": "RF Air Force new", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 15 crew. NATO reporting name: Mainstay", + "abilities": "AEW", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "AJS37": { + "name": "AJS37", + "coalition": "blue", + "label": "AJS37 Viggen", + "era": "Mid Cold War", + "shortLabel": "AJS", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-75A (AGM-65A Maverick) (TV ASM)", + "quantity": 4 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "Battlefield Air Interdiction: RB-75*4, RB-24J*2, XT", + "name": "Battlefield Air Interdiction: RB-75*4, RB-24J*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-04E Anti-ship Missile", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Anti-ship: RB-04E*2, RB-74*2, XT", + "name": "Anti-ship: RB-04E*2, RB-74*2, XT", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Rb-75T (AGM-65A Maverick) (TV ASM Lg HE Whd)", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "Anti-ship (Heavy Mav): RB-75T*4, XT", + "name": "Anti-ship (Heavy Mav): RB-75T*4, XT", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Rb-05A MCLOS ASM/AShM/AAM", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "U/22 Jammer pod", + "quantity": 1 + }, + { + "name": "KB Flare/Chaff dispenser pod", + "quantity": 1 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Hard Target (Countermeasures): RB-05, XT, KB, U22", + "name": "Hard Target (Countermeasures): RB-05, XT, KB, U22", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-75T (AGM-65A Maverick) (TV ASM Lg HE Whd)", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Hard Target (MAV): RB-75T*2, RB-74*2, XT", + "name": "Hard Target (MAV): RB-75T*2, RB-74*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "Ferry Flight: XT", + "name": "Ferry Flight: XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-75A (AGM-65A Maverick) (TV ASM)", + "quantity": 2 + }, + { + "name": "AKAN M/55 Gunpod, 150 rnds MINGR55-HE", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAS (75 GUN): RB-75*2, AKAN", + "name": "CAS (75 GUN): RB-75*2, AKAN", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "CAP: RB-74*4, XT", + "name": "CAP: RB-74*4, XT", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "U22/A Jammer", + "quantity": 1 + }, + { + "name": "KB Flare/Chaff dispenser pod", + "quantity": 1 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Countermeasures Escort: U/22A, KB", + "name": "Countermeasures Escort: U/22A, KB", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BK-90 MJ1 (72 x MJ1 HE-FRAG Bomblets)", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Strike: BK90 (MJ1)*2, RB-74*2, XT", + "name": "Strike: BK90 (MJ1)*2, RB-74*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-05A MCLOS ASM/AShM/AAM", + "quantity": 2 + }, + { + "name": "AKAN M/55 Gunpod, 150 rnds MINGR55-HE", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAS: AKAN, RB-05A", + "name": "CAS: AKAN, RB-05A", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAP (6 AAM): RB-74*4, RB-24J*2, XT", + "name": "CAP (6 AAM): RB-74*4, RB-24J*2, XT", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "ARAK M/70B HE 6x 135mm UnGd Rkts, Shu70 HE/FRAG", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Rocket Half Load HE: ARAK HE*2, RB-74*2, XT", + "name": "Rocket Half Load HE: ARAK HE*2, RB-74*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-05A MCLOS ASM/AShM/AAM", + "quantity": 2 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "CAP / Intecept: RB-05A*2, RB-74*2, XT", + "name": "CAP / Intecept: RB-05A*2, RB-74*2, XT", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "4x SB M/71 120kg GP Bomb Low-drag", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Bombs Low-drag: SB71LD*16, RB-24J*2, XT", + "name": "Bombs Low-drag: SB71LD*16, RB-24J*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-75T (AGM-65A Maverick) (TV ASM Lg HE Whd)", + "quantity": 2 + }, + { + "name": "KB Flare/Chaff dispenser pod", + "quantity": 1 + }, + { + "name": "U/22 Jammer pod", + "quantity": 1 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "SEAD: RB-75T*2, U22/A, KB, XT", + "name": "SEAD: RB-75T*2, U22/A, KB, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-15F Programmable Anti-ship Missile", + "quantity": 2 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "Anti-Ship (Modern): RB-15F*2, RB-74*2, XT", + "name": "Anti-Ship (Modern): RB-15F*2, RB-74*2, XT", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [], + "enabled": true, + "code": "New Payload", + "name": "New Payload", + "roles": [] + }, + { + "items": [ + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "CAP (AJ37): RB-24J*2", + "name": "CAP (AJ37): RB-24J*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "KB Flare/Chaff dispenser pod", + "quantity": 1 + }, + { + "name": "Rb-04E Anti-ship Missile", + "quantity": 1 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "ECM Escort Anti-ship: RB-04E, KB, RB-74*2, XT", + "name": "ECM Escort Anti-ship: RB-04E, KB, RB-74*2, XT", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "4x SB M/71 120kg GP Bomb High-drag", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Bombs High-drag: SB71HD*16, XT, RB-24J", + "name": "Bombs High-drag: SB71HD*16, XT, RB-24J", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-75A (AGM-65A Maverick) (TV ASM)", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "Anti-ship (Light Mav): RB-75*4, XT", + "name": "Anti-ship (Light Mav): RB-75*4, XT", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "ARAK M/70B HE 6x 135mm UnGd Rkts, Shu70 HE/FRAG", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Rocket Full Load HE: ARAK HE*4, RB-24J, XT", + "name": "Rocket Full Load HE: ARAK HE*4, RB-24J, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "2x 80kg LYSB-71 Illumination Bomb", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "Illumination: LYSB*8, XT", + "name": "Illumination: LYSB*8, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-05A MCLOS ASM/AShM/AAM", + "quantity": 2 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Anti-ship (RB05): RB-05A*2, RB-74*2, XT", + "name": "Anti-ship (RB05): RB-05A*2, RB-74*2, XT", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AKAN M/55 Gunpod, 150 rnds MINGR55-HE", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "CAP (Gun): AKAN*2, RB-74*2, XT", + "name": "CAP (Gun): AKAN*2, RB-74*2, XT", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Rb-05A MCLOS ASM/AShM/AAM", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Hard Target: RB-05A*2, RB-74*2, XT", + "name": "Hard Target: RB-05A*2, RB-74*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-05A MCLOS ASM/AShM/AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "RB-05*2, XT", + "name": "RB-05*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ARAK M/70B HE 6x 135mm UnGd Rkts, Shu70 HE/FRAG", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "CAS: ARAK M70 HE*4, XT", + "name": "CAS: ARAK M70 HE*4, XT", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "4x SB M/71 120kg GP Bomb High-drag", + "quantity": 4 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Runway Strike: SB71HD*16, RB-24J, XT", + "name": "Runway Strike: SB71HD*16, RB-24J, XT", + "roles": [ + "Runway Attack" + ] + } + ], + "filename": "viggen.png", + "enabled": true, + "liveries": { + "37": { + "name": "#1 Splinter F21 Norrbottens Flygflottilj", + "countries": "All" + }, + "37402": { + "name": "#3 JA-37 F21 Akktu Stakki", + "countries": "All" + }, + "se-dxnv4": { + "name": "SE-DXN by Mach3DS", + "countries": "All" + }, + "f7 skaraborg": { + "name": "#4 Splinter F7 Skaraborgs Flygflottilj 76", + "countries": "All" + }, + "sf-37 akktu stakki - f21": { + "name": "SF-37 Akktu Stakki - F21", + "countries": "All" + }, + "the show must go on": { + "name": "SHOW MUST GO ON! by Bender & Mach3DS", + "countries": "All" + }, + "baremetal": { + "name": "#2 Bare Metal F7 Skaraborgs Flygflottilj", + "countries": "All" + } + }, + "type": "Aircraft", + "description": "Single jet engine, delta wing, 1 crew, attack aircraft. Viggen", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "AV8BNA": { + "name": "AV8BNA", + "coalition": "blue", + "label": "AV8BNA Harrier", + "era": "Late Cold War", + "shortLabel": "AV8", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 6 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "H-L-H: Mk-82SEx6, GAU-12", + "name": "H-L-H: Mk-82SEx6, GAU-12", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", + "quantity": 2 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 (7 WP Tkts)x2, TPOD", + "name": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 (7 WP Tkts)x2, TPOD", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "GBU-16 - 1000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AS: AGM-122, AIM-9M, GBU-12, GBU-16x2, TPOD, Jammer Pod, GAU-12", + "name": "AS: AGM-122, AIM-9M, GBU-12, GBU-16x2, TPOD, Jammer Pod, GAU-12", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "2 GBU-38 */*", + "quantity": 1 + }, + { + "name": "AERO 1D 300 Gallons Fuel Tank ", + "quantity": 2 + }, + { + "name": "2 GBU-38 *\\*", + "quantity": 1 + }, + { + "name": "AGM-122 Sidearm", + "quantity": 1 + } + ], + "enabled": true, + "code": "H-M-H: AIM-9M, AGM-122, GBU-38x4, Fuel Tankx2", + "name": "H-M-H: AIM-9M, AGM-122, GBU-38x4, Fuel Tankx2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "2 Mk-83 *\\*", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "2 Mk-83 */*", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx6, Jammer Pod, GAU-12", + "name": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx6, Jammer Pod, GAU-12", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AERO 1D 300 Gallons Fuel Tank ", + "quantity": 2 + }, + { + "name": "2 Mk-83 *\\*", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "2 Mk-83 */*", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx4, Jammer Pod, GAU-12, Fuel Tankx2", + "name": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx4, Jammer Pod, GAU-12, Fuel Tankx2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", + "quantity": 2 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AFAC: AIM-9m, AGM-122, SUU-25x2, LAU-68 (7 WP Tkts)x2, Jammer Pod", + "name": "AFAC: AIM-9m, AGM-122, SUU-25x2, LAU-68 (7 WP Tkts)x2, Jammer Pod", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "2 Mk-82 Snakeye */*", + "quantity": 2 + }, + { + "name": "2 Mk-82 Snakeye *\\*", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Interdiction (H-L-L-H): AIM-9Mx2, Mk-82SEx8, Jammer Pod, GAU-12", + "name": "Interdiction (H-L-L-H): AIM-9Mx2, Mk-82SEx8, Jammer Pod, GAU-12", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 6 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "H-M-H: Mk-82LDx6, GAU-12", + "name": "H-M-H: Mk-82LDx6, GAU-12", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "2 GBU-12 *-*", + "quantity": 2 + }, + { + "name": "AERO 1D 300 Gallons Fuel Tank ", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM (H-H-H-H): GBU-12x4, TPOD, Fuel Tankx2", + "name": "PGM (H-H-H-H): GBU-12x4, TPOD, Fuel Tankx2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "2 Mk-82 Snakeye *\\*", + "quantity": 2 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "2 Mk-82 Snakeye */*", + "quantity": 2 + } + ], + "enabled": true, + "code": "L-L-L: Mk-82SEx10, Jammer Pod, GAU-12", + "name": "L-L-L: Mk-82SEx10, Jammer Pod, GAU-12", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", + "quantity": 2 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", + "quantity": 2 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 LAU-68 (7 WP Tkts)x2, GAU-12", + "name": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 LAU-68 (7 WP Tkts)x2, GAU-12", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "3 Mk-82", + "quantity": 2 + }, + { + "name": "2 Mk-82 *\\*", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "2 Mk-82 */*", + "quantity": 1 + } + ], + "enabled": true, + "code": "H-M-H: Mk-82LDx10, GAU-12", + "name": "H-M-H: Mk-82LDx10, GAU-12", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-20 Rockeye - 490lbs CBU, 247 x HEAT Bomblets", + "quantity": 2 + }, + { + "name": "2 Mk-20 Rockeye *\\*", + "quantity": 2 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "2 Mk-20 Rockeye */*", + "quantity": 2 + } + ], + "enabled": true, + "code": "Area Suppression: Mk-20x10, GAU-12", + "name": "Area Suppression: Mk-20x10, GAU-12", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-10 pod - 4 x 127mm ZUNI, UnGd Rkts Mk71, HE/FRAG", + "quantity": 2 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", + "quantity": 2 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Rockets: LAU-10 (4 HE Rkts)x2, LAU-68 (7 HE Rkts)x2", + "name": "Rockets: LAU-10 (4 HE Rkts)x2, LAU-68 (7 HE Rkts)x2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AS: AIM-9M, AGM-122, AGM-65Fx2, GBU-12, TPOD, Jammer Pod, GAU-12", + "name": "AS: AIM-9M, AGM-122, AGM-65Fx2, GBU-12, TPOD, Jammer Pod, GAU-12", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-7 with AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12", + "name": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "2 GBU-12 *-*", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM (H-H-H-H): GBU-12x5, TPOD, Jammer POd, GAU-12", + "name": "PGM (H-H-H-H): GBU-12x5, TPOD, Jammer POd, GAU-12", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-7 with AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AERO 1D 300 Gallons Fuel Tank ", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12, Fuel Tankx2", + "name": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12, Fuel Tankx2", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-16 - 1000lb Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM (H-H-H-H): AIM-9Mx2, GBU-16x4, TPOD, GAU-12", + "name": "PGM (H-H-H-H): AIM-9Mx2, GBU-16x4, TPOD, GAU-12", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", + "quantity": 4 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Anti Armor: AIM-9Mx2, AGM-65Fx4, GAU-12", + "name": "Anti Armor: AIM-9Mx2, AGM-65Fx4, GAU-12", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "2 Mk-83 *\\*", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "2 Mk-83 */*", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "RA (H-M-M-H): AIM-9M, AGM-122, Mk-83LDx6, Jammer Pod, GAU-12", + "name": "RA (H-M-M-H): AIM-9M, AGM-122, Mk-83LDx6, Jammer Pod, GAU-12", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", + "quantity": 4 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Stand Off: AIM-9M, AGM-122, AGM-65Fx4, Jammer Pod, GAU-12", + "name": "Stand Off: AIM-9M, AGM-122, AGM-65Fx4, Jammer Pod, GAU-12", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 3 + }, + { + "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Stand Off: AIM-9M, AGM-122x3, AGM-65Fx2, Jammer Pod, GAU-12", + "name": "Stand Off: AIM-9M, AGM-122x3, AGM-65Fx2, Jammer Pod, GAU-12", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-122 Sidearm", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Stand Off: AIM-9Mx2, AGM-122x2, AGM-65Fx2, Jammer Pod, GAU-12", + "name": "Stand Off: AIM-9Mx2, AGM-122x2, AGM-65Fx2, Jammer Pod, GAU-12", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 3 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Iron Hand: AIM-9Mx1, AGM-122x3, LAU-68 (7 HE Rkts)x2, Jammer Pod, GAU-12", + "name": "Iron Hand: AIM-9Mx1, AGM-122x3, LAU-68 (7 HE Rkts)x2, Jammer Pod, GAU-12", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 3 + }, + { + "name": "2 Mk-20 Rockeye *\\*", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "2 Mk-20 Rockeye */*", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Iron Hand: AIM-9M, AGM-122x3, Mk-20x4, Jammer Pod, GAU-12", + "name": "Iron Hand: AIM-9M, AGM-122x3, Mk-20x4, Jammer Pod, GAU-12", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AS: AIM-9M, AGM-122, AGM-65E2x2, GBU-12, TPOD, Jammer Pod, GAU-12", + "name": "AS: AIM-9M, AGM-122, AGM-65E2x2, GBU-12, TPOD, Jammer Pod, GAU-12", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM: AIM-9M, AGM-122, AGM-65E2x4, TPOD", + "name": "PGM: AIM-9M, AGM-122, AGM-65E2x4, TPOD", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM: AIM-9M, AGM-122, APKWSIIx4, TPOD", + "name": "PGM: AIM-9M, AGM-122, APKWSIIx4, TPOD", + "roles": [ + "Strike" + ] + } + ], + "filename": "av8bna.png", + "enabled": true, + "liveries": { + "vmat-203": { + "name": "VMAT-203", + "countries": "All" + }, + "vma-542": { + "name": "VMA-542", + "countries": "All" + }, + "vma-311d": { + "name": "VMA-311D", + "countries": "All" + }, + "vma-223d": { + "name": "VMA-223D", + "countries": "All" + }, + "vma-513": { + "name": "VMA-513", + "countries": "All" + }, + "vma-214d": { + "name": "VMA-214D", + "countries": "All" + }, + "vma-211": { + "name": "VMA-211", + "countries": "All" + }, + "vma-231-2": { + "name": "VMA-231-2", + "countries": "All" + }, + "vmat-203s": { + "name": "VMAT-203 Special", + "countries": "All" + }, + "vma-214": { + "name": "VMA-214", + "countries": "All" + }, + "vma-513d": { + "name": "VMA-513D", + "countries": "All" + }, + "vma-231d": { + "name": "VMA-231D", + "countries": "All" + }, + "vma-311": { + "name": "VMA-311", + "countries": "All" + }, + "default": { + "name": "default", + "countries": "All" + }, + "vma-231-1": { + "name": "VMA-231-1", + "countries": "All" + }, + "vma-211d": { + "name": "VMA-211D", + "countries": "All" + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew, all weather, VTOL attack aircraft. Harrier", + "abilities": "Drogue AAR, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "An-26B": { + "name": "An-26B", + "coalition": "red", + "label": "An-26B Curl", + "era": "Mid Cold War", + "shortLabel": "A26", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Transport" + ] + } + ], + "filename": "an-26.png", + "enabled": true, + "liveries": { + "china plaaf": { + "name": "China PLAAF", + "countries": [ + "CHN" + ] + }, + "rf navy": { + "name": "RF Navy", + "countries": [ + "RUS" + ] + }, + "abkhazian af": { + "name": "Abkhazian AF", + "countries": [ + "ABH" + ] + }, + "aeroflot": { + "name": "Aeroflot", + "countries": [ + "SUN", + "RUS" + ] + }, + "georgian af": { + "name": "Georgian AF", + "countries": [ + "GRG" + ] + }, + "rf air force": { + "name": "RF Air Force", + "countries": [ + "RUS" + ] + }, + "ukraine af": { + "name": "Ukraine AF", + "countries": [ + "UKR" + ] + } + }, + "type": "Aircraft", + "description": "2 turboprop, straight wing, 5 crew, cargo and passenger aircraft. NATO reporting name: Curl", + "abilities": "Transport", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "An-30M": { + "name": "An-30M", + "coalition": "red", + "label": "An-30M Clank", + "era": "Mid Cold War", + "shortLabel": "A30", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Transport" + ] + } + ], + "filename": "a-50.png", + "enabled": true, + "liveries": { + "15th transport ab": { + "name": "15th Transport AB", + "countries": [ + "UKR" + ] + }, + "china caac": { + "name": "China CAAC", + "countries": [ + "CHN" + ] + }, + "rf air force": { + "name": "RF Air Force", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 turboprop, straight wing, 7 crew, weather reseach aircraft. NATO reporting name: Clank", + "abilities": "Transport", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "B-1B": { + "name": "B-1B", + "coalition": "blue", + "label": "B-1B Lancer", + "era": "Late Cold War", + "shortLabel": "B1", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "28 x Mk-82 - 500lb GP Bombs LD", + "quantity": 3 + } + ], + "enabled": true, + "code": "Mk-82*84", + "name": "Mk-82*84", + "roles": [ + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "4 x AGM-154C - JSOW Unitary BROACH", + "quantity": 3 + } + ], + "enabled": true, + "code": "AGM-154*12", + "name": "AGM-154*12", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "16 x GBU-38 - JDAM, 500lb GPS Guided Bombs", + "quantity": 3 + } + ], + "enabled": true, + "code": "GBU-38*48", + "name": "GBU-38*48", + "roles": [ + "CAS", + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "10 x CBU-87 - 202 x CEM Cluster Bombs", + "quantity": 3 + } + ], + "enabled": true, + "code": "CBU-87*30", + "name": "CBU-87*30", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "10 x CBU-97 - 10 x SFW Cluster Bombs", + "quantity": 3 + } + ], + "enabled": true, + "code": "CBU-97*30", + "name": "CBU-97*30", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "10 x CBU-97 - 10 x SFW Cluster Bombs", + "quantity": 2 + }, + { + "name": "16 x GBU-38 - JDAM, 500lb GPS Guided Bombs", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-38*16, CBU-97*20", + "name": "GBU-38*16, CBU-97*20", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "8 x Mk-84 - 2000lb GP Bombs LD", + "quantity": 3 + } + ], + "enabled": true, + "code": "Mk-84*24", + "name": "Mk-84*24", + "roles": [ + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "8 x GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bombs", + "quantity": 3 + } + ], + "enabled": true, + "code": "GBU-31*24", + "name": "GBU-31*24", + "roles": [ + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "8 x GBU-31(V)3/B - JDAM, 2000lb GPS Guided Penetrator Bombs", + "quantity": 3 + } + ], + "enabled": true, + "code": "GBU-31(V)3/B*24", + "name": "GBU-31(V)3/B*24", + "roles": [ + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "16 x GBU-38 - JDAM, 500lb GPS Guided Bombs", + "quantity": 2 + }, + { + "name": "8 x GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bombs", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-31*8, GBU-38*32", + "name": "GBU-31*8, GBU-38*32", + "roles": [ + "Strike", + "Strike" + ] + } + ], + "filename": "b-1.png", + "enabled": true, + "liveries": { + "usaf standard": { + "name": "usaf standard", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swing wing, 2 crew bomber. Lancer", + "abilities": "Boom AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "B-52H": { + "name": "B-52H", + "coalition": "blue", + "label": "B-52H Stratofortress", + "era": "Early Cold War", + "shortLabel": "B52", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "HSAB with 9 x Mk-83 - 1000lb GP Bombs LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-84*18", + "name": "Mk-84*18", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "MER12 with 12 x Mk-82 - 500lb GP Bombs LD", + "quantity": 2 + }, + { + "name": "27 x Mk-82 - 500lb GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk 82*51", + "name": "Mk 82*51", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "HSAB with 9 x Mk-20 Rockeye - 490lbs CBUs, 247 x HEAT Bomblets", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk20*18", + "name": "Mk20*18", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "6 x AGM-86D on MER", + "quantity": 2 + }, + { + "name": "8 x AGM-86D", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-86C*20", + "name": "AGM-86C*20", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "8 x AGM-84A Harpoon ASM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-84A*8", + "name": "AGM-84A*8", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "b-52.png", + "enabled": true, + "liveries": { + "usaf standard": { + "name": "usaf standard", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "8 jet engine, swept wing, 6 crew bomber. Stratofortress", + "abilities": "Boom AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Bf-109K-4": { + "name": "Bf-109K-4", + "coalition": "red", + "label": "Bf-109K-4 Fritz", + "era": "WW2", + "shortLabel": "109", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "300 liter Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel Tank", + "name": "Fuel Tank", + "roles": [ + "CAP", + "FAC-A", + "Escort" + ] + }, + { + "items": [ + { + "name": "SC 250 Type 3 J - 250kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC250", + "name": "SC250", + "roles": [ + "Runway Attack", + "CAS", + "Antiship Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "SC 500 J - 500kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC500", + "name": "SC500", + "roles": [ + "Runway Attack", + "CAS", + "Antiship Strike", + "Strike" + ] + } + ], + "filename": "bf109.png", + "enabled": true, + "liveries": { + "germany_standard": { + "name": "Jagdgeschwader 27", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 white 6, jg 4": { + "name": "White 6, JG 4", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 dogfight red": { + "name": "RED", + "countries": "All" + }, + "bf-109 k4 dogfight blue": { + "name": "BLUE", + "countries": "All" + }, + "bf-109 k4 red7 eads": { + "name": "BF109G4 -red7- EADS -fondation messerschmitt V2", + "countries": [ + "GER" + ] + }, + "bf-109 k4 iijg52": { + "name": "II./JG52", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 us captured": { + "name": "US Captured", + "countries": [ + "USA" + ] + }, + "bf-109 k4 stab jg52": { + "name": "Stab JG52", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 334xxx batch": { + "name": "334xxx batch", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 ussr green": { + "name": "Green-trophy RKKA", + "countries": [ + "SUN", + "RUS" + ] + }, + "bf-109 k4 330xxx batch": { + "name": "330xxx batch", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 irmgard": { + "name": "Bf-109K-4 Irmgard Captured", + "countries": [ + "USA" + ] + }, + "bf-109 k4 swiss e-3a j-374 1940": { + "name": "Swiss E-3a J-374 1940 l'Seducteur", + "countries": [ + "SUI" + ] + }, + "green": { + "name": "Green", + "countries": "All" + }, + "bf-109 k4 9.jg77": { + "name": "9./JG77", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 croatia": { + "name": "Croatia Air Force - 'Black 4'", + "countries": [ + "HRV", + "NZG", + "GER" + ] + }, + "bf-109 k4 9.jg27 (w10+i)": { + "name": "9./JG27 (W10+I)", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 legion condor spain 1939": { + "name": "6-123 ESPA\u00d1A", + "countries": [ + "SPN" + ] + }, + "bf-109 k4 jagdgeschwader 53": { + "name": " Jagdgeschwader 53", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 1.njg 11": { + "name": "NJG 11", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 g10 of tibor tobak rhaf": { + "name": "BF109G10 RHAF Tibor Tobak by Reflected", + "countries": [ + "GER", + "HUN", + "NZG" + ] + }, + "bf-109 k4 jagdgeschwader 77": { + "name": "Jagdgeschwader 77", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 iaf s-199": { + "name": "S-199 IDF by Ovenmit", + "countries": [ + "ISR" + ] + }, + "bf-109 k4 iiijg27": { + "name": "III/JG27", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 1.njg 11 (white 5)": { + "name": "1./NJG 11 (W5)", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 raf vd 358 e-2": { + "name": "RAF VD 358 E-2 - UK Captured", + "countries": [ + "UK" + ] + }, + "bf-109 k4 335xxx batch": { + "name": "335xxx batch", + "countries": [ + "GER", + "NZG" + ] + } + }, + "type": "Aircraft", + "description": "Single propeller, straight wing, 1 crew. 109", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "C-101CC": { + "name": "C-101CC", + "coalition": "blue", + "label": "C-101CC", + "era": "Late Cold War", + "shortLabel": "101", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9P, DEFA 553 CANNON (I)", + "name": "2*AIM-9P, DEFA 553 CANNON (I)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9M, DEFA 553 CANNON (I)", + "name": "2*AIM-9M, DEFA 553 CANNON (I)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9P, DEFA 533 CANNON (II)", + "name": "2*AIM-9P, DEFA 533 CANNON (II)", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9P, AN-M3 CANNON (IV)", + "name": "2*AIM-9P, AN-M3 CANNON (IV)", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R.550 MAGIC, DEFA 553 CANNON", + "name": "2*R.550 MAGIC, DEFA 553 CANNON", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9M, AN-M3 CANNON (III)", + "name": "2*AIM-9M, AN-M3 CANNON (III)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9P, DEFA 553 CANNON", + "name": "2*AIM-9P, DEFA 553 CANNON", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R.550 MAGIC, DEFA 553 CANNON (III)", + "name": "2*R.550 MAGIC, DEFA 553 CANNON (III)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + }, + { + "name": "Belouga", + "quantity": 2 + }, + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*AIM-9P, 2*BELOUGA, DEFA 553 CANNON", + "name": "2*AIM-9P, 2*BELOUGA, DEFA 553 CANNON", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + }, + { + "name": "Sea Eagle - ASM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*AIM9-P, 2*SEA EAGLE, DEFA-553 CANNON", + "name": "2*AIM9-P, 2*SEA EAGLE, DEFA-553 CANNON", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Sea Eagle - ASM", + "quantity": 2 + }, + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9M 2*SEA EAGLE, AN-M3 CANNON", + "name": "2*AIM-9M 2*SEA EAGLE, AN-M3 CANNON", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9M, AN-M3 CANNON", + "name": "2*AIM-9M, AN-M3 CANNON", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Belouga", + "quantity": 2 + }, + { + "name": "4*BDU-33 - AF/B37K Rack with 4*25lb Practice Bomb LD", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*BELOUGA,2*BDU-33, DEFA-553 CANNON", + "name": "2*BELOUGA,2*BDU-33, DEFA-553 CANNON", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Sea Eagle - ASM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2* SEA EAGLE, DEFA-553 CANNON", + "name": "2* SEA EAGLE, DEFA-553 CANNON", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "BR-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + }, + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*AIM-9P, 2*BR-250,2*MK-82, DEFA 553 CANNON", + "name": "2*AIM-9P, 2*BR-250,2*MK-82, DEFA 553 CANNON", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + }, + { + "name": "Sea Eagle - ASM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R.550 MAGIC, 2*SEA EAGLE , DEFA-553 CANNON", + "name": "2*R.550 MAGIC, 2*SEA EAGLE , DEFA-553 CANNON", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + }, + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*R.550 MAGIC, DEFA 553 CANNON (IV)", + "name": "2*R.550 MAGIC, DEFA 553 CANNON (IV)", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "Belouga", + "quantity": 2 + }, + { + "name": "BR-500 - 500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*BELOUGA, 2*BR-500, DEFA 553 CANNON", + "name": "2*BELOUGA, 2*BR-500, DEFA 553 CANNON", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9M, DEFA 553 CANNON (IV)", + "name": "2*AIM-9M, DEFA 553 CANNON (IV)", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + }, + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R.550 MAGIC, AN-M3 CANNON (II)", + "name": "2*R.550 MAGIC, AN-M3 CANNON (II)", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic, DEFA 553 CANNON (I)", + "name": "2*R550 Magic, DEFA 553 CANNON (I)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + }, + { + "name": "BIN-200 - 200kg Napalm Incendiary Bomb", + "quantity": 2 + }, + { + "name": "Belouga", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*AIM-9M ,2*BELOUGA,2*BIN-200, AN-M3 CANNON", + "name": "2*AIM-9M ,2*BELOUGA,2*BIN-200, AN-M3 CANNON", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*AIM-9M, 2*LAU 68, 2*MK-82, DEFA 553 CANNON", + "name": "2*AIM-9M, 2*LAU 68, 2*MK-82, DEFA 553 CANNON", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9P, AN-M3 CANNON (III)", + "name": "2*AIM-9P, AN-M3 CANNON (III)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9M, DEFA 533 CANNON (II)", + "name": "2*AIM-9M, DEFA 533 CANNON (II)", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + }, + { + "name": "4*BDU-33 - AF/B37K Rack with 4*25lb Practice Bomb LD", + "quantity": 2 + }, + { + "name": "BR-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*R.550 MAGIC, 2*BR-250, 2*BDU-33, DEFA 553 CANNON", + "name": "2*R.550 MAGIC, 2*BR-250, 2*BDU-33, DEFA 553 CANNON", + "roles": [ + "CAS" + ] + } + ], + "filename": "c-101.png", + "enabled": true, + "liveries": { + "i brigada aerea - chile early green n.1 a-36 halcon": { + "name": "I Brigada Aerea - Chile Early Green", + "countries": [ + "CHL" + ] + }, + "aviodev skin": { + "name": "Aviodev Skin", + "countries": [ + "CUB", + "AUS", + "PRT", + "SUN", + "USA", + "BLR", + "HRV", + "LBN", + "SVK", + "TUR", + "ARG", + "BEL", + "FIN", + "SAU", + "UN", + "RSI", + "CHL", + "AUT", + "EGY", + "CAN", + "QAT", + "YUG", + "ISR", + "PER", + "BHR", + "NGA", + "IDN", + "KAZ", + "INS", + "AUSAF", + "PAK", + "SVN", + "RED", + "ROU", + "DEN", + "TUN", + "IND", + "CZE", + "MYS", + "GHA", + "OMN", + "CYP", + "RSO", + "IRN", + "UKR", + "JPN", + "THA", + "JOR", + "RSA", + "MEX", + "NOR", + "ITA", + "NETH", + "SUI", + "VNM", + "KOR", + "GRG", + "SDN", + "UK", + "BRA", + "ARE", + "ABH", + "BOL", + "RUS", + "PHL", + "SPN", + "MAR", + "DZA", + "GDR", + "HND", + "PRK", + "SRB", + "BGR", + "LBY", + "VEN", + "IRQ", + "SYR", + "NZG", + "GRC", + "POL", + "SWE", + "GER", + "CHN", + "YEM", + "FRA", + "HUN", + "ETH", + "BLUE", + "KWT" + ] + }, + "georgia combat fictional green": { + "name": "Georgia Combat Fictional Green", + "countries": [ + "GRG" + ] + }, + "i brigada aerea - chile early grey n.1 a-36 halcon": { + "name": "I Brigada Aerea - Chile Early Grey", + "countries": [ + "CHL" + ] + }, + "royal jordanian air force": { + "name": "Royal jordanian Air Force ", + "countries": [ + "JOR" + ] + }, + "georgia combat fictional spots": { + "name": "Georgia Combat Fictional Spots", + "countries": [ + "GRG" + ] + }, + "i brigada aerea - grupo de aviacion n.1 a-36 halcon desert skin": { + "name": "I Brigada Aerea - Grupo de Aviacion N.1 A-36 HALCON Desert Skin", + "countries": [ + "CHL" + ] + }, + "i brigada aerea - chile early agressor n\u00ba410 n.1 a-36 halcon": { + "name": "I Brigada Aerea - Chile Early Agressor N\u00ba410 ", + "countries": [ + "CHL" + ] + }, + "usaf agressor fictional": { + "name": "USAF Agressor Fictional", + "countries": [ + "USA", + "AUSAF", + "BLUE" + ] + }, + "i brigada aerea - grupo de aviacion n.1 a-36 halcon": { + "name": "I Brigada Aerea - Grupo de Aviacion N.1 A-36 HALCON", + "countries": [ + "CHL" + ] + }, + "i brigada aerea - chile early agressor n\u00ba411 n.1 a-36 halcon": { + "name": "I Brigada Aerea - Chile Early Agressor N\u00ba411", + "countries": [ + "CHL" + ] + }, + "claex green camu skin - centro logistico de armamento y experimentacion": { + "name": "CLAEX Green Camu Skin - Centro Logistico de Armamento y Experimentacion", + "countries": [ + "RED", + "SPN", + "BLUE" + ] + }, + "russia combat fictional": { + "name": "Russia Combat Fictional", + "countries": [ + "RED", + "RUS" + ] + }, + "georgia combat fictional wolf": { + "name": "Georgia Combat Fictional Wolf", + "countries": [ + "GRG" + ] + }, + "honduras - air force comayagua coronel jose enrique soto cano air base skin 1": { + "name": "Honduras - Air Force Comayagua Coronel Jose Enrique Soto Cano Air Base Skin 1", + "countries": [ + "HND" + ] + }, + "i brigada aerea - grupo de aviacion n.3 a-36 halcon": { + "name": "I Brigada Aerea - Grupo de Aviacion N.3 A-36 HALCON", + "countries": [ + "CHL" + ] + }, + "honduras - air force comayagua coronel jose enrique soto cano air base skin 2": { + "name": "Honduras - Air Force Comayagua Coronel Jose Enrique Soto Cano Air Base Skin 2", + "countries": [ + "HND" + ] + }, + "claex desert camu skin - centro logistico de armamento y experimentacion": { + "name": "CLAEX Desert Camu Skin - Centro Logistico de Armamento y Experimentacion", + "countries": [ + "RED", + "SPN", + "BLUE" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "C-130": { + "name": "C-130", + "coalition": "blue", + "label": "C-130 Hercules", + "era": "Early Cold War", + "shortLabel": "130", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Transport" + ] + } + ], + "filename": "c-130.png", + "enabled": true, + "liveries": { + "belgian air force": { + "name": "Belgian Air Force", + "countries": [ + "BEL" + ] + }, + "iriaf 5-8518": { + "name": "IRIAF 5-8518", + "countries": [ + "IRN" + ] + }, + "israel defence force": { + "name": "Israel Defence Force", + "countries": [ + "ISR" + ] + }, + "haf gray": { + "name": "Hellenic Airforce - Gray", + "countries": [ + "GRC" + ] + }, + "turkish air force": { + "name": "Turkish Air Force", + "countries": [ + "TUR" + ] + }, + "royal danish air force": { + "name": "Royal Danish Air Force", + "countries": [ + "DEN" + ] + }, + "algerian af green": { + "name": "Algerian AF Green", + "countries": [ + "DZA" + ] + }, + "royal netherlands air force": { + "name": "Royal Netherlands Air Force", + "countries": [ + "NETH" + ] + }, + "canada's air force": { + "name": "Canada's Air Force", + "countries": [ + "CAN" + ] + }, + "royal norwegian air force": { + "name": "Royal Norwegian Air Force", + "countries": [ + "NOR" + ] + }, + "iriaf 5-8503": { + "name": "IRIAF 5-8503", + "countries": [ + "IRN" + ] + }, + "us air force": { + "name": "US Air Force", + "countries": [ + "USA" + ] + }, + "royal air force": { + "name": "Royal Air Force", + "countries": [ + "UK" + ] + }, + "air algerie l-382 white": { + "name": "Air Algerie L-382 White", + "countries": [ + "DZA" + ] + }, + "french air force": { + "name": "French Air Force", + "countries": [ + "FRA" + ] + }, + "spanish air force": { + "name": "Spanish Air Force", + "countries": [ + "SPN" + ] + }, + "algerian af h30 white": { + "name": "Algerian AF H30 White", + "countries": [ + "DZA" + ] + } + }, + "type": "Aircraft", + "description": "4 turboprop, stright wing, 3 crew. Hercules", + "abilities": "Transport", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "C-17A": { + "name": "C-17A", + "coalition": "blue", + "label": "C-17A Globemaster", + "era": "Modern", + "shortLabel": "C17", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Transport" + ] + } + ], + "filename": "c-17.png", + "enabled": true, + "liveries": { + "usaf standard": { + "name": "usaf standard", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 3 crew. Globemaster", + "abilities": "Transport", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "E-2C": { + "name": "E-2C", + "coalition": "blue", + "label": "E-2D Hawkeye", + "era": "Mid Cold War", + "shortLabel": "E2", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "AWACS" + ] + } + ], + "filename": "e-2.png", + "enabled": true, + "liveries": { + "vaw-125 tigertails": { + "name": "VAW-125 Tigertails", + "countries": [ + "USA" + ] + }, + "e-2d demo": { + "name": "E-2D Demo", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "2 turboprop, straight wing, 5 crew. Hawkeye", + "abilities": "AEW, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "E-3A": { + "name": "E-3A", + "coalition": "blue", + "label": "E-3A Sentry", + "era": "Mid Cold War", + "shortLabel": "E3", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "AWACS" + ] + } + ], + "filename": "e-3.png", + "enabled": true, + "liveries": { + "nato": { + "name": "nato", + "countries": [ + "USA", + "FRA", + "UK" + ] + }, + "usaf standard": { + "name": "usaf standard", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 17 crew. Sentry", + "abilities": "AEW", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "F-117A": { + "name": "F-117A", + "coalition": "blue", + "label": "F-117A Nighthawk", + "era": "Late Cold War", + "shortLabel": "117", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-12*2", + "name": "GBU-12*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-10*2", + "name": "GBU-10*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-27 - 2000lb Laser Guided Penetrator Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-27*2", + "name": "GBU-27*2", + "roles": [ + "Strike" + ] + } + ], + "filename": "f-117.png", + "enabled": true, + "liveries": { + "usaf standard": { + "name": "usaf standard", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, delta wing, 1 crew. Nighthawk", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-14A-135-GR": { + "name": "F-14A-135-GR", + "coalition": "blue", + "label": "F-14A-135-GR Tomcat", + "era": "Late Cold War", + "shortLabel": "14A", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "XT*2", + "name": "XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 6 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*6, AIM-9L*2, XT*2", + "name": "AIM-54A-MK47*6, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-7F", + "quantity": 6 + }, + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-7F*6, AIM-9L*2, XT*2", + "name": "AIM-7F*6, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-7F", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2, XT*2", + "name": "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 2 + }, + { + "name": "AIM-7F", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4, XT*2", + "name": "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-9L*4, XT*2", + "name": "AIM-54A-MK47*4, AIM-9L*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-9M*4, XT*2", + "name": "AIM-54A-MK47*4, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*4, AIM-9M*4, XT*2", + "name": "AIM-54A-MK60*4, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-7F", + "quantity": 4 + }, + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-7F*4, AIM-9L*4, XT*2", + "name": "AIM-7F*4, AIM-9L*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "MAK79 4 BDU-33", + "quantity": 2 + }, + { + "name": "MAK79 3 BDU-33", + "quantity": 2 + } + ], + "enabled": true, + "code": "BDU-33*14", + "name": "BDU-33*14", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "3 BDU-33", + "quantity": 4 + } + ], + "enabled": true, + "code": "BDU-33*12", + "name": "BDU-33*12", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "GBU-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-10*2", + "name": "GBU-10*2", + "roles": [ + "Strike", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "GBU-12", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-12*4", + "name": "GBU-12*4", + "roles": [ + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-16", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-16*4", + "name": "GBU-16*4", + "roles": [ + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-24", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-24*2", + "name": "GBU-24*2", + "roles": [ + "Strike", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Mk-84", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-84*4", + "name": "Mk-84*4", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Mk-83", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-83*4", + "name": "Mk-83*4", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Mk-82", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-82*4", + "name": "Mk-82*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MAK79 4 Mk-82", + "quantity": 2 + }, + { + "name": "MAK79 3 Mk-82", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-82*14", + "name": "Mk-82*14", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "MAK79 4 Mk-81", + "quantity": 2 + }, + { + "name": "MAK79 3 Mk-81", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-81*14", + "name": "Mk-81*14", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-20", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-20*4", + "name": "Mk-20*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Mk-82AIR", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-82AIR*4", + "name": "Mk-82AIR*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "2 LAU-10 - 4 ZUNI MK 71", + "quantity": 1 + }, + { + "name": "LAU-10 - 4 ZUNI MK 71", + "quantity": 1 + } + ], + "enabled": true, + "code": "Zuni*12", + "name": "Zuni*12", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "2 LAU-10 - 4 ZUNI MK 71", + "quantity": 3 + }, + { + "name": "LAU-10 - 4 ZUNI MK 71", + "quantity": 1 + } + ], + "enabled": true, + "code": "Zuni*28", + "name": "Zuni*28", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "2 SUU-25 * 8 LUU-2", + "quantity": 1 + }, + { + "name": "SUU-25 * 8 LUU-2", + "quantity": 1 + } + ], + "enabled": true, + "code": "LUU-2*24", + "name": "LUU-2*24", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-82", + "quantity": 2 + }, + { + "name": "AIM-7F", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*2", + "name": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*2", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-82", + "quantity": 1 + }, + { + "name": "AIM-7F", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*1", + "name": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*1", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-20", + "quantity": 2 + }, + { + "name": "AIM-7F", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-20*2", + "name": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-20*2", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "GBU-12", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", + "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "GBU-24", + "quantity": 1 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", + "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-82", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-20", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + } + ], + "filename": "f-14.png", + "enabled": true, + "liveries": { + "rogue nation(top gun - maverick)": { + "name": "Top Gun: Maverick - Rogue Nation", + "countries": "All" + }, + "vf-21 freelancers 200": { + "name": "VF-21 Freelancers 200", + "countries": "All" + }, + "vf-11 ae106 1988": { + "name": "VF-11 AE106 1988", + "countries": "All" + }, + "vf-301 nd113": { + "name": "VF-301 ND113 by Mach3DS", + "countries": "All" + }, + "vf-301 nd111": { + "name": "VF-301 ND111 by Mach3DS", + "countries": "All" + }, + "vf-154 black knights 101": { + "name": "00 - VF-154 Black Knights 101", + "countries": "All" + }, + "vf-14 tophatters aj206 (1999 allied force)": { + "name": "VF-14 Tophatters AJ206 (1999 Allied Force)", + "countries": "All" + }, + "vf-31 ae204 1988": { + "name": "VF-31 AE204 1988", + "countries": "All" + }, + "vf-1 wolfpack nk102 (1974)": { + "name": "VF-1 Wolfpack NK102 (1974)", + "countries": "All" + }, + "vf-33 starfighters ab201 (1988)": { + "name": "VF-33 Starfighters AB201(Dale Snodgrass)", + "countries": "All" + }, + "vf-31 1991 ae200": { + "name": "VF-31 1991 AE200 by Mach3DS", + "countries": "All" + }, + "vf-41 black aces aj100 (1999 allied force)": { + "name": "VF-41 Black Aces AJ100 (1999 Allied Force)", + "countries": "All" + }, + "vf-41 black aces aj101 (1999 allied force)": { + "name": "VF-41 Black Aces AJ101 (1999 Allied Force)", + "countries": "All" + }, + "vf-31 1991 ae205": { + "name": "VF-31 1991 AE205 by Mach3DS", + "countries": "All" + }, + "vf-41 black aces aj102 (1999 allied force)": { + "name": "VF-41 Black Aces AJ102 (1999 Allied Force)", + "countries": "All" + }, + "vf-1 wolfpack nk101 (1974)": { + "name": "VF-1 Wolfpack NK101 (1974)", + "countries": "All" + }, + "vf-31 ae200 1988": { + "name": "VF-31 AE200 1988", + "countries": "All" + }, + "vf-11 red rippers 106": { + "name": "VF-11 Red Rippers 106", + "countries": "All" + }, + "vf-1 wolfpack nk103 (1974)": { + "name": "VF-1 Wolfpack NK103 (1974)", + "countries": "All" + }, + "vf-14 tophatters ab103 (1976)": { + "name": "VF-14 Tophatters AB103(1976)", + "countries": "All" + }, + "vf-111 sundowners 200": { + "name": "VF-111 Sundowners 200", + "countries": "All" + }, + "top gun 114": { + "name": "Top Gun 114 Maverick and Goose", + "countries": "All" + }, + "vf-11 ae103 1988": { + "name": "VF-11 AE103 1988", + "countries": "All" + }, + "vx-4 vandy one sad bunny (1992)": { + "name": "VX-4 Vandy One Sad Bunny (1992)", + "countries": "All" + }, + "vf-211 fighting checkmates 100 (2001)": { + "name": "VF-211 Fighting Checkmates 100 (2001)", + "countries": [ + "USA" + ] + }, + "vf-301 nd104": { + "name": "VF-301 ND104 by Mach3DS", + "countries": "All" + }, + "vf-32 swordsmen ab200 (1976)": { + "name": "VF-32 Swordsmen AB200 (1976)", + "countries": "All" + }, + "vf-211 fighting checkmates 105": { + "name": "VF-211 Fighting Checkmates 105", + "countries": "All" + }, + "vf-14 tophatters ab100 (1976)": { + "name": "VF-14 Tophatters AB100(1976)", + "countries": "All" + }, + "vf-11 ae101 1988": { + "name": "VF-11 AE101 1988", + "countries": "All" + }, + "vf-14 tophatters aj202 (1999 allied force)": { + "name": "VF-14 Tophatters AJ202 (1999 Allied Force)", + "countries": "All" + }, + "vf-1 wolfpack nk100 (1974)": { + "name": "VF-1 Wolfpack NK100 (1974)", + "countries": "All" + }, + "vf-301 nd101 hivis": { + "name": "VF-301 ND101 HiVis by Mach3DS", + "countries": "All" + }, + "vf-14 tophatters aj201 (1999 allied force)": { + "name": "VF-14 Tophatters AJ201 (1999 Allied Force)", + "countries": "All" + }, + "vf-14 tophatters aj200 (1999) 80th aniversary": { + "name": "VF-14 Tophatters AJ200 (1999) 80th Anniversary", + "countries": "All" + }, + "vf-41 black aces aj104 (1999 allied force)": { + "name": "VF-41 Black Aces AJ104 (1999 Allied Force)", + "countries": "All" + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swing wing, 2 crew. Tomcat", + "abilities": "Drogue AAR, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-14B": { + "name": "F-14B", + "coalition": "blue", + "label": "F-14B Tomcat", + "era": "Late Cold War", + "shortLabel": "14B", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "XT*2", + "name": "XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 6 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*6, AIM-9M*2, XT*2", + "name": "AIM-54A-MK47*6, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 6 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*6, AIM-9L*2, XT*2", + "name": "AIM-54A-MK47*6, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 6 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*6, AIM-9M*2, XT*2", + "name": "AIM-54A-MK60*6, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-54C-Mk47", + "quantity": 6 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54C-MK47*6, AIM-9M*2, XT*2", + "name": "AIM-54C-MK47*6, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-7M", + "quantity": 6 + }, + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-7M*6, AIM-9M*2, XT*2", + "name": "AIM-7M*6, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-7M", + "quantity": 6 + }, + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-7M*6, AIM-9L*2, XT*2", + "name": "AIM-7M*6, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", + "name": "AIM-54A-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-7M*2, AIM-9L*2, XT*2", + "name": "AIM-54A-MK47*4, AIM-7M*2, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*4, AIM-7M*2, AIM-9M*2, XT*2", + "name": "AIM-54A-MK60*4, AIM-7M*2, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54C-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54C-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", + "name": "AIM-54C-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*2, AIM-9L*2, XT*2", + "name": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*2, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", + "name": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*2, AIM-7M*1, AIM-9M*4, XT*2", + "name": "AIM-54A-MK60*2, AIM-7M*1, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54C-Mk47", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54C-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", + "name": "AIM-54C-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-9M*2, AIM-9L*2, XT*2", + "name": "AIM-54A-MK47*4, AIM-9M*2, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-9M*4, XT*2", + "name": "AIM-54A-MK47*4, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*4, AIM-9M*4, XT*2", + "name": "AIM-54A-MK60*4, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54C-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54C-MK47*4, AIM-9M*4, XT*2", + "name": "AIM-54C-MK47*4, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-7M*4, AIM-9M*2, AIM-9L*2, XT*2", + "name": "AIM-7M*4, AIM-9M*2, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-7M", + "quantity": 4 + }, + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-7M*4, AIM-9L*4, XT*2", + "name": "AIM-7M*4, AIM-9L*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 3 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", + "name": "AIM-54A-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 3 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*2, AIM-7M*3, AIM-9M*2, XT*2", + "name": "AIM-54A-MK60*2, AIM-7M*3, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 3 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54C-Mk47", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54C-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", + "name": "AIM-54C-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "MAK79 4 BDU-33", + "quantity": 2 + }, + { + "name": "MAK79 3 BDU-33", + "quantity": 2 + } + ], + "enabled": true, + "code": "BDU-33*14", + "name": "BDU-33*14", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "3 BDU-33", + "quantity": 4 + } + ], + "enabled": true, + "code": "BDU-33*12", + "name": "BDU-33*12", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "GBU-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-10*2", + "name": "GBU-10*2", + "roles": [ + "Strike", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "GBU-12", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-12*4", + "name": "GBU-12*4", + "roles": [ + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-16", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-16*4", + "name": "GBU-16*4", + "roles": [ + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-24", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-24*2", + "name": "GBU-24*2", + "roles": [ + "Strike", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Mk-84", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-84*4", + "name": "Mk-84*4", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Mk-83", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-83*4", + "name": "Mk-83*4", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Mk-82", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-82*4", + "name": "Mk-82*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MAK79 4 Mk-82", + "quantity": 2 + }, + { + "name": "MAK79 3 Mk-82", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-82*14", + "name": "Mk-82*14", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "MAK79 4 Mk-81", + "quantity": 2 + }, + { + "name": "MAK79 3 Mk-81", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-81*14", + "name": "Mk-81*14", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-20", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-20*4", + "name": "Mk-20*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Mk-82AIR", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-82AIR*4", + "name": "Mk-82AIR*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "2 LAU-10 - 4 ZUNI MK 71", + "quantity": 1 + }, + { + "name": "LAU-10 - 4 ZUNI MK 71", + "quantity": 1 + } + ], + "enabled": true, + "code": "Zuni*12", + "name": "Zuni*12", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "2 LAU-10 - 4 ZUNI MK 71", + "quantity": 3 + }, + { + "name": "LAU-10 - 4 ZUNI MK 71", + "quantity": 1 + } + ], + "enabled": true, + "code": "Zuni*28", + "name": "Zuni*28", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "2 SUU-25 * 8 LUU-2", + "quantity": 1 + }, + { + "name": "SUU-25 * 8 LUU-2", + "quantity": 1 + } + ], + "enabled": true, + "code": "LUU-2*24", + "name": "LUU-2*24", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-82", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-82", + "quantity": 1 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*1", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*1", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-20", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "GBU-12", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", + "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "GBU-24", + "quantity": 1 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", + "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-82", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-20", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + } + ], + "filename": "f-14.png", + "enabled": true, + "liveries": { + "vf-103 sluggers 206 (1995)": { + "name": "VF-103 Sluggers 206 (1995)", + "countries": "All" + }, + "vf-143 pukin dogs low vis": { + "name": "VF-143 Pukin Dogs Low Vis (1998)", + "countries": "All" + }, + "rogue nation(top gun - maverick)": { + "name": "Top Gun: Maverick - Rogue Nation", + "countries": "All" + }, + "vf-31 tomcatters nk101 (2004)": { + "name": "VF-31 Tomcatters NK101 (2004)", + "countries": "All" + }, + "vf-32 fighting swordsmen 103": { + "name": "VF-32 Fighting Swordsmen 103 (1998)", + "countries": "All" + }, + "vf-103 jolly rogers hi viz": { + "name": "VF-103 Jolly Rogers Hi Viz", + "countries": "All" + }, + "vf-101 dark": { + "name": "VF-101 Dark", + "countries": "All" + }, + "vf-102 diamondbacks": { + "name": "01 - VF-102 Diamondbacks 1996", + "countries": "All" + }, + "vf-143 pukin dogs low vis (1995)": { + "name": "VF-143 Pukin Dogs Low Vis (1995)", + "countries": "All" + }, + "vx-4 xf-51 1988": { + "name": "VX-4 XF-51 1988", + "countries": "All" + }, + "top gun 114 hb weather": { + "name": "Top Gun 114 Maverick and Goose", + "countries": "All" + }, + "vf-24 renegades": { + "name": "VF-24 Renegades Low-Viz", + "countries": "All" + }, + "vf-11 red rippers (1997)": { + "name": "VF-11 Red Rippers (1997)", + "countries": "All" + }, + "vf-32 fighting swordsmen 100 (2000)": { + "name": "VF-32 Fighting Swordsmen 100 (2000)", + "countries": [ + "USA" + ] + }, + "vf-74 bedevilers 1991": { + "name": "VF-74 Be-Devilers 1991", + "countries": "All" + }, + "santa": { + "name": "Fictional Christmas Livery", + "countries": "All" + }, + "vf-103 sluggers 207 (1991)": { + "name": "VF-103 Sluggers 207 (1991)", + "countries": "All" + }, + "vf-32 fighting swordsmen 101": { + "name": "VF-32 Fighting Swordsmen 101 (1998)", + "countries": "All" + }, + "vf-103 last ride": { + "name": "VF-103 Last Ride", + "countries": "All" + }, + "vf-143 pukin dogs cag": { + "name": "VF-143 Pukin' Dogs CAG", + "countries": "All" + }, + "vx-9 vampires xf240 white whale": { + "name": "VX-9 Vampires XF240 White Whale", + "countries": "All" + }, + "vf-74 adversary": { + "name": "VF-74 Adversary", + "countries": "All" + }, + "vx-9 vandy 41 (1995)": { + "name": "VX-9 Vandy 41 (1995)", + "countries": "All" + }, + "vf-142 ghostriders": { + "name": "VF-142 Ghostriders", + "countries": "All" + }, + "vf-211 fighting checkmates": { + "name": "VF-211 Fighting Checkmates", + "countries": "All" + }, + "vf-101 grim reapers low vis": { + "name": "VF-101 Grim Reapers Low Vis", + "countries": "All" + }, + "chromecat": { + "name": "Fictional Chrome Cat ", + "countries": "All" + }, + "vf-32 fighting swordsmen 102": { + "name": "VF-32 Fighting Swordsmen 102 (1998)", + "countries": "All" + }, + "vf-102 diamondbacks 102": { + "name": "VF-102 Diamondbacks 102 (2000)", + "countries": "All" + }, + "vf-101 red": { + "name": "VF-101 Red", + "countries": "All" + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swing wing, 2 crew. Tomcat", + "abilities": "Drogue AAR, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-15C": { + "name": "F-15C", + "coalition": "blue", + "label": "F-15C Eagle", + "era": "Late Cold War", + "shortLabel": "15C", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel tank 610 gal", + "quantity": 3 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-120B*4, AIM-7M*2, AIM-9M*2, Fuel*3", + "name": "AIM-120B*4, AIM-7M*2, AIM-9M*2, Fuel*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9*2,AIM-120*6,Fuel", + "name": "AIM-9*2,AIM-120*6,Fuel", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 3 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-9*4,AIM-120*4,Fuel*3", + "name": "AIM-9*4,AIM-120*4,Fuel*3", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9*4,AIM-120*4,Fuel", + "name": "AIM-9*4,AIM-120*4,Fuel", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 3 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel*3", + "name": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel*3", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 3 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-9*2,AIM-120*6,Fuel*3", + "name": "AIM-9*2,AIM-120*6,Fuel*3", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9*4,AIM-7*4,Fuel", + "name": "AIM-9*4,AIM-7*4,Fuel", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120*8,Fuel", + "name": "AIM-120*8,Fuel", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 3 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-9*4,AIM-7*4,Fuel*3", + "name": "AIM-9*4,AIM-7*4,Fuel*3", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 3 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-120*8,Fuel*3", + "name": "AIM-120*8,Fuel*3", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel", + "name": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel", + "roles": [ + "CAP" + ] + } + ], + "filename": "f-15.png", + "enabled": true, + "liveries": { + "106th sqn (8th airbase)": { + "name": "106th SQN (8th Airbase)", + "countries": [ + "ISR" + ] + }, + "433rd weapons sqn (wa)": { + "name": "433rd Weapons SQN (WA)", + "countries": [ + "USA" + ] + }, + "493rd fighter sqn (ln)": { + "name": "493rd Fighter SQN (LN)", + "countries": [ + "USA" + ] + }, + "12th fighter sqn (ak)": { + "name": "12th Fighter SQN (AK)", + "countries": [ + "USA" + ] + }, + "390th fighter sqn": { + "name": "390th Fighter SQN", + "countries": [ + "USA" + ] + }, + "65th aggressor sqn (wa) flanker": { + "name": "65th Aggressor SQN (WA) Flanker", + "countries": [ + "USA", + "AUSAF" + ] + }, + "65th aggressor sqn (wa) super_flanker": { + "name": "65th Aggressor SQN (WA) SUPER_Flanker", + "countries": [ + "USA", + "AUSAF" + ] + }, + "65th aggressor sqn (wa) mig": { + "name": "65th Aggressor SQN (WA) MiG", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ferris scheme": { + "name": "Ferris Scheme", + "countries": [ + "USA" + ] + }, + "58th fighter sqn (eg)": { + "name": "58th Fighter SQN (EG)", + "countries": [ + "USA" + ] + }, + "haf aegean ghost": { + "name": "Hellenic Airforece - Aegean Ghost (Fictional)", + "countries": [ + "GRC" + ] + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swept wing, 2 crew, all weather fighter. Eagle.", + "abilities": "Boom AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-16C_50": { + "name": "F-16C_50", + "coalition": "blue", + "label": "F-16C Viper", + "era": "Late Cold War", + "shortLabel": "16", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120B*2, AIM-9M*4, FUEL*3", + "name": "AIM-120B*2, AIM-9M*4, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120B*4, AIM-9M*2, FUEL*3", + "name": "AIM-120B*4, AIM-9M*2, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 6 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120B*6, FUEL*3", + "name": "AIM-120B*6, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*4, FUEL*2", + "name": "AIM-120C*2, AIM-9X*4, FUEL*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AIM-9X*2, FUEL*3", + "name": "AIM-120C*4, AIM-9X*2, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AIM-9X*2, FUEL*3, TGP", + "name": "AIM-120C*4, AIM-9X*2, FUEL*3, TGP", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AIM-9X*2, FUEL*2", + "name": "AIM-120C*4, AIM-9X*2, FUEL*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 6 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*6, FUEL*3", + "name": "AIM-120C*6, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM", + "name": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM, TGP", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 6 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*6, FUEL*2, ECM", + "name": "AIM-120C*6, FUEL*2, ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 6 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*6, FUEL*2, ECM, TGP", + "name": "AIM-120C*6, FUEL*2, ECM, TGP", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 6 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*6, FUEL*2", + "name": "AIM-120C*6, FUEL*2", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 6 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*6, FUEL*3, TGP", + "name": "AIM-120C*6, FUEL*3, TGP", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65D*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65D*2, FUEL*2, ECM, TGP", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65H*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65H*2, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65H*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65H*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65D*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65D*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, CBU-97*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, CBU-97*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-82*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-82*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, CBU-87*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, CBU-87*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-82HD*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-82HD*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BRU-57 with 2 x CBU-103 - 202 x CEM, CBU with WCMD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, CBU-103*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, CBU-103*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BRU-57 with 2 x CBU-105 - 10 x SFW, CBU with WCMD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, CBU-105*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, CBU-105*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 3 x Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-82*6, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-82*6, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 3 x Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-82HD*6, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-82HD*6, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120*2, AIM-9X*2, MK-82SE*4, FUEL*2, ECM, TGP", + "name": "AIM-120*2, AIM-9X*2, MK-82SE*4, FUEL*2, ECM, TGP", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 3 x Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120*2, AIM-9X*2, MK-82SE*6, FUEL*2, ECM, TGP", + "name": "AIM-120*2, AIM-9X*2, MK-82SE*6, FUEL*2, ECM, TGP", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-84*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-84*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-82P*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-82P*4, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-12*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-12*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-12*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-12*4, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-10*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-10*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-24 Paveway III - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-24*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-24*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-31-1B*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-31-1B*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-31(V)3/B - JDAM, 2000lb GPS Guided Penetrator Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-31-3B*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-31-3B*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-38*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-38*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BRU-57 with 2 x GBU-38 - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-38*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-38*4, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65K*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65K*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65G*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65G*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65G, AGM-65K, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65G, AGM-65K, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + }, + { + "name": "AN/ASQ-213 HTS - HARM Targeting System", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*3, TGP, HTS", + "name": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*3, TGP, HTS", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/ASQ-213 HTS - HARM Targeting System", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*2, ECM, TGP, HTS", + "name": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*2, ECM, TGP, HTS", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 4 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/ASQ-213 HTS - HARM Targeting System", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-88C*4, ECM, TGP, HTS", + "name": "AIM-120C*2, AIM-9X*2, AGM-88C*4, ECM, TGP, HTS", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + }, + { + "name": "AN/ASQ-213 HTS - HARM Targeting System", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AGM-88C*2, FUEL*3, TGP, HTS", + "name": "AIM-120C*4, AGM-88C*2, FUEL*3, TGP, HTS", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/ASQ-213 HTS - HARM Targeting System", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AGM-88C*2, FUEL*2, ECM, TGP, HTS", + "name": "AIM-120C*4, AGM-88C*2, FUEL*2, ECM, TGP, HTS", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 4 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/ASQ-213 HTS - HARM Targeting System", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AGM-88C*4, ECM, TGP, HTS", + "name": "AIM-120C*4, AGM-88C*4, ECM, TGP, HTS", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts Mk61, Practice", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-61*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-61*2, FUEL*2, ECM, TGP", + "roles": [ + "FAC-A" + ] + } + ], + "filename": "f-16c.png", + "enabled": true, + "liveries": { + "haf_347_perseus": { + "name": "HAF 347S Perseus Squadron", + "countries": [ + "GRC" + ] + }, + "ami, 5 stormo 23 gruppo": { + "name": "Italian Air Force, 5\u00b0 Stormo, 23 Gruppo", + "countries": [ + "ITA" + ] + }, + "haf_337_ghost": { + "name": "HAF 337 Ghost Squadron", + "countries": [ + "GRC" + ] + }, + "haf_ 330_thunder": { + "name": "HAF 330 Thunder Squadron", + "countries": [ + "GRC" + ] + }, + "haf_336_olympus": { + "name": "HAF 336 Olympus Squadron", + "countries": [ + "GRC" + ] + }, + "iaf_117th_squadron": { + "name": "IAF 117th squadron", + "countries": [ + "ISR" + ] + }, + "jasdf 8th tfs": { + "name": "JASDF 8th TFS", + "countries": [ + "JPN" + ] + }, + "haf_340_fox": { + "name": "HAF 340 Fox Squadron", + "countries": [ + "GRC" + ] + }, + "haf_346_jason": { + "name": "HAF 346 Jason Squadron", + "countries": [ + "GRC" + ] + }, + "paf_no.9_griffins_1": { + "name": "PAF No.9 Griffins (TRIBUTE TO WC NAUMAN)", + "countries": [ + "PAK" + ] + }, + "522nd_fighter_squadron": { + "name": "522nd Fighter Squadron 'Fireballs'", + "countries": [ + "USA" + ] + }, + "default": { + "name": "default livery", + "countries": [ + "USA" + ] + }, + "18th agrs arctic splinter": { + "name": "18th AGRS Ar\u0441tic Splinter", + "countries": [ + "USA", + "AUSAF" + ] + }, + "iaf_115th_aggressors_squadron": { + "name": "IAF 115th aggressors squadron", + "countries": [ + "ISR" + ] + }, + "chile air force 732": { + "name": "Chile Air Force 732", + "countries": [ + "CHL" + ] + }, + "iaf_110th_squadron": { + "name": "IAF 110th squadron", + "countries": [ + "ISR" + ] + }, + "paf_no.29_aggressors": { + "name": "PAF No.29 Aggressor", + "countries": [ + "PAK" + ] + }, + "79th_fighter_squadron": { + "name": "79th Fighter Squadron 'Tigers'", + "countries": [ + "USA" + ] + }, + "paf_no.5_falcons": { + "name": "PAF No.5 Falcons", + "countries": [ + "PAK" + ] + }, + "18th agrs splinter": { + "name": "18th AGRS Blue Splinter", + "countries": [ + "USA", + "AUSAF" + ] + }, + "dark_viper": { + "name": "F-16C Dark Viper", + "countries": [ + "USA" + ] + }, + "jasdf 6th tfs": { + "name": "JASDF 6th TFS", + "countries": [ + "JPN" + ] + }, + "23rd_fighter_squadron": { + "name": "23rd Fighter Squadron 'Fighting Hawks'", + "countries": [ + "USA" + ] + }, + "polish af standard": { + "name": "Polish AF standard", + "countries": [ + "POL" + ] + }, + "480th_fighter_squadron": { + "name": "480th Fighter Squadron 'Warhawks'", + "countries": [ + "USA" + ] + }, + "18th agrs bdu splinter": { + "name": "18th AGRS BDU Splinter", + "countries": [ + "USA", + "AUSAF" + ] + }, + "174th_fighter_squadron": { + "name": "174th Fighter Squadron ANG,Iowa AFB", + "countries": [ + "USA" + ] + }, + "thk_191_filo": { + "name": "T\u00fcrk Hava Kuvvetleri, 191 Filo", + "countries": [ + "TUR" + ] + }, + "chile air force 746": { + "name": "Chile Air Force 746", + "countries": [ + "CHL" + ] + }, + "haf_335_tiger": { + "name": "HAF 335 Tiger Squadron", + "countries": [ + "GRC" + ] + }, + "77th_fighter_squadron": { + "name": "77th Fighter Squadron 'Gamblers' ", + "countries": [ + "USA" + ] + }, + "132nd_wing _iowa_ang": { + "name": "132nd Wing Iowa ANG, Des Moines AFB", + "countries": [ + "USA" + ] + }, + "usaf 64th aggressor sqn-splinter": { + "name": "USAF 64th Aggressor SQN-Splinter", + "countries": [ + "USA", + "AUSAF" + ] + }, + "14th_fighter_squadron": { + "name": "14th Fighter Squadron 'Samurais'", + "countries": [ + "USA" + ] + }, + "152nd_fighter_squadron": { + "name": "152nd Fighter Squadron 'Las Vaqueros'", + "countries": [ + "USA" + ] + }, + "179th_fighter_squadron": { + "name": "179th Fighter Squadron 'Bulldogs'", + "countries": [ + "USA" + ] + }, + "paf_no.19_sherdils": { + "name": "PAF No.19 Sherdils", + "countries": [ + "PAK" + ] + }, + "64th_aggressor_squadron_ghost": { + "name": "64th Aggressor Squadron \u201cGhost", + "countries": [ + "USA", + "AUSAF" + ] + }, + "paf_no.9 griffins_2": { + "name": "PAF No.9 Griffins", + "countries": [ + "PAK" + ] + }, + "paf_no.11_arrows": { + "name": "PAF No.11 Arrows", + "countries": [ + "PAK" + ] + }, + "haf_343_star": { + "name": "HAF 343 Star Squadron", + "countries": [ + "GRC" + ] + }, + "80th_fighter_squadron": { + "name": "80th Fighter Squadron, Kunsan AFB", + "countries": [ + "USA" + ] + }, + "36th_fighter_squadron": { + "name": "36th Fighter Squadron Osan Air Base", + "countries": [ + "USA" + ] + }, + "22nd_fighter_squadron": { + "name": "22nd Fighter Squadron 'Stingers'", + "countries": [ + "USA" + ] + }, + "55th_fighter_squadron": { + "name": "55th Fighter Squadron 'Fifty Fifth'", + "countries": [ + "USA" + ] + }, + "iaf_101st_squadron": { + "name": "IAF 101st squadron", + "countries": [ + "ISR" + ] + }, + "polish_af_31blt6th_tactical_sqn": { + "name": "Polish AF 31.Blt 6th Tactical Sqn (Pozna\u0144-Krzesiny AB) - Tiger Meet", + "countries": [ + "POL" + ] + }, + "13th_fighter_squadron": { + "name": "13th Fighter Squadron 'Panthers'", + "countries": [ + "USA" + ] + }, + "haf_341_arrow": { + "name": "HAF 341 Arrow Squadron", + "countries": [ + "GRC" + ] + }, + "usaf 64th aggressor sqn - shark": { + "name": "USAF 64th Aggressor SQN - Shark", + "countries": [ + "USA", + "AUSAF" + ] + }, + "chile air force 851": { + "name": "Chile Air Force 851", + "countries": [ + "CHL" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew, all weather fighter and strike. Viper.", + "abilities": "Boom AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-4E": { + "name": "F-4E", + "coalition": "blue", + "label": "F-4E Phantom II", + "era": "Mid Cold War", + "shortLabel": "4", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-7 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-9*4,AIM-7*4", + "name": "AIM-9*4,AIM-7*4", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-118a with AGM-45B Shrike ARM (Imp)", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM45*2_AGM-65D*4_AIM7*2_ECM", + "name": "AGM45*2_AGM-65D*4_AIM7*2_ECM", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "LAU-118a with AGM-45B Shrike ARM (Imp)", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-45*2,AIM-7*2,Fuel*2,ECM", + "name": "AGM-45*2,AIM-7*2,Fuel*2,ECM", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "MER6 with 6 x Mk-82 - 500lb GP Bombs LD", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-82*18,AIM-7*2,ECM", + "name": "Mk-82*18,AIM-7*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-12*2,AIM-7*2,Fuel*2,ECM", + "name": "GBU-12*2,AIM-7*2,Fuel*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BRU-42 with 3 x Mk-20 Rockeye - 490lbs CBUs, 247 x HEAT Bomblets", + "quantity": 4 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk20*12,AIM-7*2,ECM", + "name": "Mk20*12,AIM-7*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-82*6,AIM-7*2,Fuel*2,ECM", + "name": "Mk-82*6,AIM-7*2,Fuel*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-10*2,AIM-7*2,Fuel*2,ECM", + "name": "GBU-10*2,AIM-7*2,Fuel*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-20 Rockeye - 490lbs CBUs, 247 x HEAT Bomblets", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk20*6,AIM-7*2,Fuel*2,ECM", + "name": "Mk20*6,AIM-7*2,Fuel*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-118a with AGM-45B Shrike ARM (Imp)", + "quantity": 4 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-45*4,AIM-7*2,ECM", + "name": "AGM-45*4,AIM-7*2,ECM", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65K*4,AIM-7*2,Fuel*2,ECM", + "name": "AGM-65K*4,AIM-7*2,Fuel*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "F-4 Fuel tank-C", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel*3", + "name": "Fuel*3", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "LAU-7 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-9*4,AIM-7*4,Fuel*2", + "name": "AIM-9*4,AIM-7*4,Fuel*2", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-84*2,AIM-7*2,ECM", + "name": "Mk-84*2,AIM-7*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + }, + { + "name": "F-4 Fuel tank-C", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65K*4,AIM-7M*4,Fuel*3", + "name": "AGM-65K*4,AIM-7M*4,Fuel*3", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "f-4.png", + "enabled": true, + "liveries": { + "haf aegean ghost": { + "name": "Hellenic Airforce - Aegean Ghost", + "countries": [ + "GRC" + ] + }, + "iriaf asia minor": { + "name": "IRIAF Asia Minor", + "countries": [ + "IRN" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "GER" + ] + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swept wing, 2 crew. Phantom", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-5E-3": { + "name": "F-5E-3", + "coalition": "blue", + "label": "F-5E Tiger", + "era": "Mid Cold War", + "shortLabel": "5", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82LD*4,AIM-9P*2,Fuel 275", + "name": "Mk-82LD*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9P*2, Fuel 275*3", + "name": "AIM-9P*2, Fuel 275*3", + "roles": [ + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P5 Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9P5*2, Fuel 275*3", + "name": "AIM-9P5*2, Fuel 275*3", + "roles": [ + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9P*2, Fuel 150*3", + "name": "AIM-9P*2, Fuel 150*3", + "roles": [ + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P5 Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9P5*2, Fuel 150*3", + "name": "AIM-9P5*2, Fuel 150*3", + "roles": [ + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 4 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82SE*4,AIM-9P*2,Fuel 275", + "name": "Mk-82SE*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "CBU-52B - 220 x HE/Frag bomblets", + "quantity": 4 + } + ], + "enabled": true, + "code": "CBU-52B*4,AIM-9P*2,Fuel 275", + "name": "CBU-52B*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 4 + } + ], + "enabled": true, + "code": "LAU-3 HE*4,AIM-9P*2,Fuel 275", + "name": "LAU-3 HE*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", + "quantity": 4 + } + ], + "enabled": true, + "code": "LAU-3 HEAT*4,AIM-9P*2,Fuel 275", + "name": "LAU-3 HEAT*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 4 + } + ], + "enabled": true, + "code": "LAU-68 HE*4,AIM-9P*2,Fuel 275", + "name": "LAU-68 HE*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", + "quantity": 4 + } + ], + "enabled": true, + "code": "LAU-68 HEAT*4,AIM-9P*2,Fuel 275", + "name": "LAU-68 HEAT*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "M117 - 750lb GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "M-117*4,AIM-9P*2,Fuel 275", + "name": "M-117*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-12*4,AIM-9P*2,Fuel 275", + "name": "GBU-12*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "CBU-52B - 220 x HE/Frag bomblets", + "quantity": 5 + } + ], + "enabled": true, + "code": "CBU-52B*5,AIM-9*2", + "name": "CBU-52B*5,AIM-9*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 5 + } + ], + "enabled": true, + "code": "Mk-82LD*5,AIM-9*2", + "name": "Mk-82LD*5,AIM-9*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 5 + } + ], + "enabled": true, + "code": "Mk-82SE*5,AIM-9*2", + "name": "Mk-82SE*5,AIM-9*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 2 + }, + { + "name": "5 x Mk-82 - 500lb GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82LD*7,AIM-9P*2, Fuel 275*2", + "name": "Mk-82LD*7,AIM-9P*2, Fuel 275*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 2 + }, + { + "name": "5 x Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82SE*7,AIM-9P*2, Fuel 275*2", + "name": "Mk-82SE*7,AIM-9P*2, Fuel 275*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 1 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 2 + }, + { + "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + } + ], + "enabled": true, + "code": "LAU-3 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", + "name": "LAU-3 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 1 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 2 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + } + ], + "enabled": true, + "code": "LAU-68 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", + "name": "LAU-68 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "M117 - 750lb GP Bomb LD", + "quantity": 5 + } + ], + "enabled": true, + "code": "M-117*5,AIM-9*2", + "name": "M-117*5,AIM-9*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9P*2, Fuel 275", + "name": "AIM-9P*2, Fuel 275", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9P*2, Fuel 150", + "name": "AIM-9P*2, Fuel 150", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P5 Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9P5*2, Fuel 275", + "name": "AIM-9P5*2, Fuel 275", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P5 Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9P5*2, Fuel 150", + "name": "AIM-9P5*2, Fuel 150", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9B Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9B*2, Fuel 275", + "name": "AIM-9B*2, Fuel 275", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9B Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9B*2, Fuel 150", + "name": "AIM-9B*2, Fuel 150", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9B Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9B*2, Fuel 275*3", + "name": "AIM-9B*2, Fuel 275*3", + "roles": [ + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9B Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9B*2, Fuel 150*3", + "name": "AIM-9B*2, Fuel 150*3", + "roles": [ + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AN/ASQ-T50 TCTS Pod - ACMI Pod", + "quantity": 1 + }, + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AN/ASQ-T50, AIM-9P, Fuel 150", + "name": "AN/ASQ-T50, AIM-9P, Fuel 150", + "roles": [] + }, + { + "items": [ + { + "name": "AIM-9B Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9B*2", + "name": "AIM-9B*2", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9P*2", + "name": "AIM-9P*2", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P5 Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9P5*2", + "name": "AIM-9P5*2", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P5 Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Antiship Mk82", + "name": "Antiship Mk82", + "roles": [ + "Antiship Strike" + ] + } + ], + "liveryID": [ + "ir iriaf 43rd tfs" + ], + "filename": "f-5.png", + "enabled": true, + "liveries": { + "us aggressor vfc-13 40": { + "name": "Aggressor VFC-13 40", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch swiss generic": { + "name": "Swiss Generic two-tone skin", + "countries": [ + "SUI" + ] + }, + "tw ngrc 5315": { + "name": "NGRC 5thFG 5315", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch j-3079": { + "name": "J-3079", + "countries": [ + "SUI" + ] + }, + "sa royal saudi air force": { + "name": "Royal Saudi Air Force", + "countries": [ + "SAU" + ] + }, + "no 336 sq": { + "name": "336 Skvadron", + "countries": [ + "NOR" + ] + }, + "tw rocaf 7thfg(m)": { + "name": "ROCAF 7thFG(LV)", + "countries": [ + "USA", + "AUSAF" + ] + }, + "us aggressor vfc-111 105 wwii b": { + "name": "Sundowners VFC-111 105 WWII B", + "countries": [ + "USA", + "AUSAF" + ] + }, + "br fab 4828": { + "name": "2/1 GAvCa - FAB 4828", + "countries": [ + "BRA" + ] + }, + "usaf 'southeast asia'": { + "name": "USAF 'Southeast Asia'", + "countries": [ + "USA", + "AUSAF" + ] + }, + "br fab 4846": { + "name": "FAB 4846", + "countries": [ + "BRA" + ] + }, + "aggressor vfc-13 21": { + "name": "Aggressor VFC-13 21", + "countries": [ + "USA", + "AUSAF" + ] + }, + "no 334 sqn 373": { + "name": "RNoAF 334 sqn 373", + "countries": [ + "NOR" + ] + }, + "rocaf 7th fighter group": { + "name": "ROCAF 7th Fighter Group", + "countries": [ + "AUSAF" + ] + }, + "ch j-3036 2017": { + "name": "J-3036 Sion 2017", + "countries": [ + "SUI" + ] + }, + "us aggressor vfc-111 116": { + "name": "Sundowners VFC-116", + "countries": [ + "USA", + "AUSAF" + ] + }, + "black 'mig-28'": { + "name": "black 'Mig-28'", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch j-3073 2017": { + "name": "J-3073_2017", + "countries": [ + "SUI" + ] + }, + "fi 11th fs lapland air command": { + "name": "FiAF 11th FS Lapland Air Command", + "countries": [ + "FIN" + ] + }, + "ir iriaf azarakhsh": { + "name": "HESA Azarakhsh", + "countries": [ + "IRN" + ] + }, + "ch j-3098": { + "name": "J-3098", + "countries": [ + "SUI" + ] + }, + "ir iriaf 43rd tfs": { + "name": "IRIAF - 43rd TFS", + "countries": [ + "IRN" + ] + }, + "no 338 sqn 215": { + "name": "RNoAF 338 sqn 215", + "countries": [ + "NOR" + ] + }, + "us usaf grape 31": { + "name": "USAF Grape 31", + "countries": [ + "USA", + "AUSAF" + ] + }, + "no 332 sqn ah-p": { + "name": "RNoAF 332 sqn AH-P", + "countries": [ + "NOR" + ] + }, + "ch j-3001 variante 1996": { + "name": "J-3001 GRD Emmen 1996", + "countries": [ + "SUI" + ] + }, + "us aggressor vfc-111 01": { + "name": "Sundowners VFC-111 01", + "countries": [ + "USA", + "AUSAF" + ] + }, + "3rd main jet base group command, turkey": { + "name": "133 squadron, 3rd Main Jet Base Group Command, Turkey", + "countries": [ + "TUR" + ] + }, + "kr rokaf 10th fighter wing": { + "name": "ROKAF 10th FW KF-5E 10-584", + "countries": [ + "KOR" + ] + }, + "sp spanish air force 21-51": { + "name": "Ejercito del Aire Camo 21-51", + "countries": [ + "SPN" + ] + }, + "aggressor vfc-13 11": { + "name": "Aggressor VFC-13 11", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch j-3001 variante 1986": { + "name": "J-3001 GRD Emmen 1986", + "countries": [ + "SUI" + ] + }, + "usa standard": { + "name": "Standard Gray", + "countries": [ + "BRA", + "MYS", + "AUS", + "ABH", + "RUS", + "SPN", + "ISR", + "USA", + "BHR", + "BLR", + "HRV", + "RSO", + "SVK", + "IRN", + "UKR", + "TUR", + "JPN", + "PRK", + "SRB", + "KAZ", + "BGR", + "BEL", + "INS", + "THA", + "AUSAF", + "PAK", + "JOR", + "FIN", + "MEX", + "NOR", + "IRQ", + "SYR", + "ITA", + "GRC", + "POL", + "NETH", + "GER", + "SUI", + "CHN", + "SAU", + "SWE", + "ROU", + "FRA", + "KOR", + "HUN", + "AUT", + "GRG", + "DEN", + "TUN", + "EGY", + "IND", + "CZE", + "CAN", + "SDN", + "UK" + ] + }, + "5th fs merzifon air base, turkey": { + "name": "5th fs Merzifon air base, Turkish air force", + "countries": [ + "TUR" + ] + }, + "ch j-3001 variante 2000": { + "name": "J-3001 FlSt 08 2000", + "countries": [ + "SUI" + ] + }, + "ir iriaf camo": { + "name": "IRIAF F-5E Standard", + "countries": [ + "IRN" + ] + }, + "it aereonautica militare italiana": { + "name": "Aereonautica Militare Italiana", + "countries": [ + "ITA" + ] + }, + "ch j-3038": { + "name": "J-3038", + "countries": [ + "SUI" + ] + }, + "ch j-3033_2017": { + "name": "J-3033_2017", + "countries": [ + "SUI" + ] + }, + "us aggressor vfc-13 28 fict splinter": { + "name": "Aggressor VFC-13 28 Fictional Splinter", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch j-3025": { + "name": "J-3025 FlSt 11/18 January 2006", + "countries": [ + "SUI" + ] + }, + "us aggressor vfc-13 01": { + "name": "Aggressor VFC-13 01", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch patrouille suisse j-3088": { + "name": "Patrouille Suisse J-3088", + "countries": [ + "SUI" + ] + }, + "us aggressor vfc-13 25": { + "name": "Aggressor VFC-13 25", + "countries": [ + "USA", + "AUSAF" + ] + }, + "no 334 sqn ri-h": { + "name": "RNoAF 334 sqn RI-H", + "countries": [ + "NOR" + ] + }, + "br fab 4841": { + "name": "FAB 4841 60th an", + "countries": [ + "BRA" + ] + }, + "aggressor marine scheme": { + "name": "Aggressor Marine Scheme", + "countries": [ + "USA", + "AUSAF" + ] + }, + "sp spanish air force 464-48": { + "name": "Ejercito del Aire 464-48", + "countries": [ + "SPN" + ] + }, + "gr haf f-5e grey": { + "name": "HAF F-5E Grey", + "countries": [ + "GRC" + ] + }, + "tr turkish stars": { + "name": "Turkish Stars", + "countries": [ + "TUR" + ] + }, + "gb no.29 squadron raf": { + "name": "No.29 Squadron RAF (Fictional)", + "countries": [ + "UK" + ] + }, + "br fab 4834": { + "name": "1/1 GAvCa - FAB 4834", + "countries": [ + "BRA" + ] + }, + "ch j-3026": { + "name": "J-3026 FlSt 11 approx. 1989", + "countries": [ + "SUI" + ] + }, + "aggressor snake scheme": { + "name": "Aggressor Snake Scheme", + "countries": [ + "USA", + "AUSAF" + ] + }, + "us aggressor vfc-111 115": { + "name": "Sundowners VFC-115", + "countries": [ + "USA", + "AUSAF" + ] + }, + "us aggressor vmft-401 02 2011": { + "name": "Aggressor VMFT-401 02 2011", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch j-3008": { + "name": "J-3008 FlSt 08/19 February 2005", + "countries": [ + "SUI" + ] + }, + "aggressor desert scheme": { + "name": "Aggressor Desert Scheme", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch j-3074": { + "name": "J-3074", + "countries": [ + "SUI" + ] + }, + "ch j-3036": { + "name": "J-3036 FlSt 01 1985", + "countries": [ + "SUI" + ] + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swept wing, single crew. Tiger", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-86F Sabre": { + "name": "F-86F Sabre", + "coalition": "blue", + "label": "F-86F Sabre", + "era": "Early Cold War", + "shortLabel": "86", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 120 gallons", + "quantity": 2 + } + ], + "enabled": true, + "code": "120gal Fuel*2", + "name": "120gal Fuel*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 200 gallons", + "quantity": 2 + } + ], + "enabled": true, + "code": "200gal Fuel*2", + "name": "200gal Fuel*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 200 gallons", + "quantity": 2 + }, + { + "name": "Fuel Tank 120 gallons", + "quantity": 2 + } + ], + "enabled": true, + "code": "120gal Fuel*2, 200gal Fuel*2", + "name": "120gal Fuel*2, 200gal Fuel*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-7 with AIM-9B Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "GAR-8*2", + "name": "GAR-8*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 120 gallons", + "quantity": 2 + }, + { + "name": "LAU-7 with AIM-9B Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "120gal Fuel*2, GAR-8*2", + "name": "120gal Fuel*2, GAR-8*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "2 x HVAR, UnGd Rkts", + "quantity": 8 + } + ], + "enabled": true, + "code": "HVAR*16", + "name": "HVAR*16", + "roles": [ + "Strike", + "CAS", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 200 gallons", + "quantity": 2 + }, + { + "name": "2 x HVAR, UnGd Rkts", + "quantity": 4 + } + ], + "enabled": true, + "code": "200gal Fuel*2, HVARx2*4", + "name": "200gal Fuel*2, HVARx2*4", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AN-M64 - 500lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AN-M64*2", + "name": "AN-M64*2", + "roles": [ + "CAS", + "Strike", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 200 gallons", + "quantity": 2 + }, + { + "name": "AN-M64 - 500lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "200gal Fuel*2, AN-M64*2", + "name": "200gal Fuel*2, AN-M64*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "M117 - 750lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "M117*2", + "name": "M117*2", + "roles": [ + "CAS", + "Strike", + "Antiship Strike" + ] + } + ], + "filename": "f-5.png", + "enabled": true, + "liveries": { + "us air force (skyblazers)": { + "name": "US Air Force Jet Team Skyblazer", + "countries": [ + "USA" + ] + }, + "canada air force": { + "name": "Canada Air Force", + "countries": [ + "CAN" + ] + }, + "us air force (squadron 39)": { + "name": "US Air Force (Squadron 39)", + "countries": [ + "USA" + ] + }, + "iiaf bare metall": { + "name": "IIAF Bare Metal Weathered", + "countries": [ + "IRN" + ] + }, + "us air force (green)": { + "name": "US Air Force (Green)", + "countries": [ + "USA" + ] + }, + "us air force (ex-usaf f-86a sabre)": { + "name": "US Air Force ex-USAF F-86A Sabre", + "countries": [ + "USA" + ] + }, + "default livery": { + "name": "default livery", + "countries": [ + "BRA", + "CUB", + "MYS", + "ARE", + "AUS", + "ABH", + "RUS", + "PHL", + "SPN", + "ISR", + "SUN", + "USA", + "BHR", + "MAR", + "BLR", + "HRV", + "DZA", + "OMN", + "RSO", + "SVK", + "HND", + "IRN", + "UKR", + "TUR", + "JPN", + "PRK", + "SRB", + "IDN", + "KAZ", + "BGR", + "BEL", + "INS", + "THA", + "LBY", + "AUSAF", + "VEN", + "PAK", + "JOR", + "RSA", + "FIN", + "MEX", + "KWT", + "NOR", + "IRQ", + "SYR", + "ITA", + "NZG", + "GRC", + "POL", + "NETH", + "GER", + "SUI", + "CHN", + "SAU", + "SWE", + "YEM", + "VNM", + "ROU", + "RSI", + "FRA", + "CHL", + "KOR", + "HUN", + "AUT", + "GRG", + "DEN", + "TUN", + "EGY", + "IND", + "CZE", + "ETH", + "CAN", + "SDN", + "QAT", + "UK", + "YUG" + ] + }, + "royal saudi air force": { + "name": "RSAF", + "countries": [ + "SAU" + ] + }, + "us air force": { + "name": "US Air Force", + "countries": [ + "USA" + ] + }, + "haf 342sqn": { + "name": "Hellenic Airforce 342sqn", + "countries": [ + "GRC" + ] + }, + "japan air force": { + "name": "Japan Air Force", + "countries": [ + "JPN" + ] + }, + "haf 341sqn": { + "name": "Hellenic Airforce 341sqn", + "countries": [ + "GRC" + ] + }, + "us air force (code fu-178)": { + "name": "US Air Force FU-178", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "Single engine, swept wing, 1 crew. Sabre", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "FA-18C_hornet": { + "name": "FA-18C_hornet", + "coalition": "blue", + "era": "Late Cold War", + "label": "F/A-18C", + "shortLabel": "18", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + }, + { + "name": "LAU-115 with 2 x LAU-127 AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9M*6, AIM-7M*2, FUEL*3", + "name": "AIM-9M*6, AIM-7M*2, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-115 with 2 x LAU-127 AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*6, AIM-7M*2, FUEL*2", + "name": "AIM-9M*6, AIM-7M*2, FUEL*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, MK-84*2, FUEL*2", + "name": "AIM-9M*2, MK-84*2, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, MK-83*4, FUEL*2", + "name": "AIM-9M*2, MK-83*4, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + } + ], + "enabled": true, + "code": "Carrier Landing", + "name": "Carrier Landing", + "roles": [] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-115C with AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9M*2, AIM-7M*4, FUEL*3", + "name": "AIM-9M*2, AIM-7M*4, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x CBU-99 - 490lbs, 247 x HEAT Bomblets", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, CBU-99*4, FUEL*2", + "name": "AIM-9M*2, CBU-99*4, FUEL*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, MK-82SE*4, FUEL*2", + "name": "AIM-9M*2, MK-82SE*4, FUEL*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x Mk-20 Rockeye - 490lbs CBU, 247 x HEAT Bomblets", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, MK-20*4, FUEL*2", + "name": "AIM-9M*2, MK-20*4, FUEL*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, MK-82*4, FUEL*2", + "name": "AIM-9M*2, MK-82*4, FUEL*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, AIM-7M*2, FUEL*2", + "name": "AIM-9M*2, AIM-7M*2, FUEL*2", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, MK-83*2, FUEL*2", + "name": "AIM-9M*2, MK-83*2, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x LAU-10 pod - 4 x 127mm ZUNI, UnGd Rkts Mk71, HE/FRAG", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, ZUNI*4, FUEL*2", + "name": "AIM-9M*2, ZUNI*4, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x LAU-61 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, LAU-61*4, FUEL*2", + "name": "AIM-9M*2, LAU-61*4, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, LAU-68*4, FUEL*2", + "name": "AIM-9M*2, LAU-68*4, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, AIM-7M*2, FUEL*1", + "name": "AIM-9M*2, AIM-7M*2, FUEL*1", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-31(V)4/B - JDAM, 2000lb GPS Guided Penetrator Bomb", + "quantity": 4 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9X*2, AIM-120C-5*1, GBU-31*4, ATFLIR, FUEL", + "name": "AIM-9X*2, AIM-120C-5*1, GBU-31*4, ATFLIR, FUEL", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "LAU-115 with 2 x LAU-127 AIM-120C AMRAAM - Active Radar AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9X*2, AIM-120C-5*6, FUEL*3", + "name": "AIM-9X*2, AIM-120C-5*6, FUEL*3", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", + "quantity": 4 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9X*2, AIM-120C-5*1, AGM-65D*4, ATFLIR, FUEL", + "name": "AIM-9X*2, AIM-120C-5*1, AGM-65D*4, ATFLIR, FUEL", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 4 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9X*2, AIM-120C-5*2, AGM-88C*2, FUEL", + "name": "AIM-9X*2, AIM-120C-5*2, AGM-88C*2, FUEL", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BRU-55 with 2 x GBU-38 - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9X*2, AIM-120C-5*1, GBU-38*4, GBU-12*4, ATFLIR, FUEL", + "name": "AIM-9X*2, AIM-120C-5*1, GBU-38*4, GBU-12*4, ATFLIR, FUEL", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-84H SLAM-ER (Expanded Response)", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + }, + { + "name": "AWW-13 DATALINK POD", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9X*2, AIM-120C-5*1, AGM-84E*2, DATALINK, ATFLIR, FUEL*2", + "name": "AIM-9X*2, AIM-120C-5*1, AGM-84E*2, DATALINK, ATFLIR, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-84D Harpoon AShM", + "quantity": 4 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M*2, AIM-120C-5*1, AGM-84D*4, ATFLIR, FUEL", + "name": "AIM-9M*2, AIM-120C-5*1, AGM-84D*4, ATFLIR, FUEL", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M*2, ATFLIR, FUEL", + "name": "AIM-9M*2, ATFLIR, FUEL", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M*2, ATFLIR, FUEL*2", + "name": "AIM-9M*2, ATFLIR, FUEL*2", + "roles": [ + "Reconnaissance" + ] + } + ], + "filename": "fa-18c.png", + "enabled": true, + "liveries": { + "vfa-192": { + "name": "VFA-192", + "countries": [ + "USA" + ] + }, + "nsawc brown splinter": { + "name": "NSAWC brown splinter", + "countries": [ + "USA", + "AUSAF" + ] + }, + "vfa-34": { + "name": "VFA-34", + "countries": [ + "USA" + ] + }, + "vmfa-232": { + "name": "VMFA-232", + "countries": [ + "USA" + ] + }, + "vmfat-101": { + "name": "VMFAT-101", + "countries": [ + "USA" + ] + }, + "vmfa-232 high visibility": { + "name": "VMFA-232 high visibility", + "countries": [ + "USA" + ] + }, + "vmfat-101 high visibility": { + "name": "VMFAT-101 high visibility", + "countries": [ + "USA" + ] + }, + "vfa-37": { + "name": "VFA-37", + "countries": [ + "USA" + ] + }, + "fictional russia air force": { + "name": "Fictional Russia Air Force", + "countries": [ + "AUSAF", + "RUS" + ] + }, + "canada 150 demo jet": { + "name": "Canada 150 Demo Jet", + "countries": [ + "CAN" + ] + }, + "fictional uk air force": { + "name": "Fictional UK Air Force", + "countries": [ + "UK" + ] + }, + "vfa-131": { + "name": "VFA-131", + "countries": [ + "USA" + ] + }, + "vmfa-122 high visibility": { + "name": "VMFA-122 high visibility", + "countries": [ + "USA" + ] + }, + "spain 462th escuadron c.15-79": { + "name": "Spain 462th Escuadron C.15-79", + "countries": [ + "SPN" + ] + }, + "vmfat-101 high visibility 2005": { + "name": "VMFAT-101 high visibility 2005", + "countries": [ + "USA" + ] + }, + "vmfa-323": { + "name": "VMFA-323", + "countries": [ + "USA" + ] + }, + "vx-31 cona": { + "name": "VX-31 CoNA", + "countries": [ + "USA" + ] + }, + "fictional turkey 162nd sq": { + "name": "162nd Sqn Harpoon", + "countries": [ + "TUR" + ] + }, + "nawdc brown": { + "name": "NAWDC brown", + "countries": [ + "USA", + "AUSAF" + ] + }, + "spain 151th escuadron c.15-14": { + "name": "Spain 151_14 Escuadron C.15-14", + "countries": [ + "SPN" + ] + }, + "spain 151th escuadron c.15-24": { + "name": "Spain 151_24 Escuadron C.15-24", + "countries": [ + "SPN" + ] + }, + "vfa-106": { + "name": "VFA-106", + "countries": [ + "USA" + ] + }, + "spain 121th escuadron c.15-45": { + "name": "Spain 121 Escuadron C.15-45", + "countries": [ + "SPN" + ] + }, + "vfa-97": { + "name": "VFA-97", + "countries": [ + "USA" + ] + }, + "vx-9": { + "name": "VX-9", + "countries": [ + "USA" + ] + }, + "spain 111th escuadron c.15-73": { + "name": "Spain 111 Escuadron C.15-73", + "countries": [ + "SPN" + ] + }, + "switzerland": { + "name": "Switzerland", + "countries": [ + "SUI" + ] + }, + "vx-23": { + "name": "VX-23", + "countries": [ + "USA" + ] + }, + "vfa-83": { + "name": "VFA-83", + "countries": [ + "USA" + ] + }, + "australian 75th squadron": { + "name": "Australian sqn 75", + "countries": [ + "AUS" + ] + }, + "canada 425th squadron": { + "name": "Canada 425th Squadron", + "countries": [ + "CAN" + ] + }, + "spain 151th escuadron c.15-18": { + "name": "Spain 151_18 Escuadron C.15-18", + "countries": [ + "SPN" + ] + }, + "nsawc gray": { + "name": "NSAWC gray", + "countries": [ + "USA" + ] + }, + "vfa-87": { + "name": "VFA-87", + "countries": [ + "USA" + ] + }, + "nawdc blue": { + "name": "NAWDC blue", + "countries": [ + "USA", + "AUSAF" + ] + }, + "australian 77th squadron": { + "name": "Australian sqn 77", + "countries": [ + "AUS" + ] + }, + "vmfa-251 high visibility": { + "name": "VMFA-251 high visibility", + "countries": [ + "USA" + ] + }, + "vmfa-531": { + "name": "VMFA-531", + "countries": [ + "USA" + ] + }, + "viper": { + "name": "Viper", + "countries": [ + "USA" + ] + }, + "iceman": { + "name": "Iceman", + "countries": [ + "USA", + "AUSAF" + ] + }, + "spain 121th escuadron c.15-60": { + "name": "Spain 121 Escuadron C.15-60", + "countries": [ + "SPN" + ] + }, + "nsawc blue": { + "name": "NSAWC blue", + "countries": [ + "USA", + "AUSAF" + ] + }, + "blue angels jet team": { + "name": "Blue Angels Jet Team", + "countries": [ + "USA" + ] + }, + "fictional israel air force": { + "name": "Fictional Israel Air Force", + "countries": [ + "ISR" + ] + }, + "spain 462th escuadron c.15-90": { + "name": "Spain 462th Escuadron C.15-90", + "countries": [ + "SPN" + ] + }, + "vmfa-323 high visibility": { + "name": "VMFA-323_high visibility", + "countries": [ + "USA" + ] + }, + "maverick": { + "name": "Maverick", + "countries": [ + "USA" + ] + }, + "nawdc black": { + "name": "NAWDC black", + "countries": [ + "USA", + "AUSAF" + ] + }, + "kuwait 9th squadron": { + "name": "9th Squadron", + "countries": [ + "KWT" + ] + }, + "vmfa-251": { + "name": "VMFA-251", + "countries": [ + "USA" + ] + }, + "vmfa-314": { + "name": "VMFA-314", + "countries": [ + "USA" + ] + }, + "fictional ukraine air force": { + "name": "Fictional Ukraine Air Force", + "countries": [ + "UKR" + ] + }, + "canada 409th squadron": { + "name": "Canada 409th Squadron", + "countries": [ + "CAN" + ] + }, + "canada norad 60 demo jet": { + "name": "Canada NORAD 60 Demo Jet", + "countries": [ + "CAN" + ] + }, + "spain 111th escuadron c.15-88": { + "name": "Spain 111 Escuadron C.15-88", + "countries": [ + "SPN" + ] + }, + "spain 211th escuadron c.15-76": { + "name": "Spain 211th Escuadron C.15-76", + "countries": [ + "SPN" + ] + }, + "finland 31": { + "name": "Finland", + "countries": [ + "FIN" + ] + }, + "spain 151th escuadron c.15-23": { + "name": "Spain 151_23 Escuadron C.15-23", + "countries": [ + "SPN" + ] + }, + "vfa-122": { + "name": "VFA-122", + "countries": [ + "USA" + ] + }, + "spain 151th escuadron c.15-14 tiger meet": { + "name": "Spain 151th Escuadron C.15-14 Tiger Meet", + "countries": [ + "SPN" + ] + }, + "vfc-12": { + "name": "VFC-12", + "countries": [ + "USA", + "AUSAF" + ] + }, + "spain 211th escuadron c.15-77": { + "name": "Spain 211th Escuadron C.15-77", + "countries": [ + "SPN" + ] + }, + "spain 121th escuadron c.15-34 50th anniversary": { + "name": "Spain 121th Escuadron C.15-34 34th Anniversary", + "countries": [ + "SPN" + ] + }, + "default livery": { + "name": "default livery", + "countries": [ + "BRA", + "CUB", + "MYS", + "ARE", + "AUS", + "ABH", + "RUS", + "PHL", + "SPN", + "ISR", + "SUN", + "USA", + "BHR", + "MAR", + "BLR", + "HRV", + "DZA", + "OMN", + "RSO", + "SVK", + "HND", + "IRN", + "UKR", + "TUR", + "JPN", + "PRK", + "SRB", + "IDN", + "KAZ", + "BGR", + "BEL", + "INS", + "THA", + "LBY", + "AUSAF", + "VEN", + "PAK", + "JOR", + "RSA", + "FIN", + "MEX", + "KWT", + "NOR", + "IRQ", + "SYR", + "ITA", + "NZG", + "GRC", + "POL", + "NETH", + "GER", + "SUI", + "CHN", + "SAU", + "SWE", + "YEM", + "VNM", + "ROU", + "RSI", + "FRA", + "CHL", + "KOR", + "HUN", + "AUT", + "GRG", + "DEN", + "TUN", + "EGY", + "IND", + "CZE", + "ETH", + "CAN", + "SDN", + "QAT", + "UK", + "YUG" + ] + }, + "spain 121th escuadron c.15-50": { + "name": "Spain 121 Escuadron C.15-50", + "countries": [ + "SPN" + ] + }, + "vfa-113": { + "name": "VFA-113", + "countries": [ + "USA" + ] + }, + "vmfa-312": { + "name": "VMFA-312", + "countries": [ + "USA" + ] + }, + "kuwait 25th squadron": { + "name": "9th Squadron", + "countries": [ + "KWT" + ] + }, + "vmfa-312 high visibility": { + "name": "VMFA-312 high visibility", + "countries": [ + "USA" + ] + }, + "vmfa-122": { + "name": "VMFA-122", + "countries": [ + "USA" + ] + }, + "vfa-106 high visibility": { + "name": "VFA-106 high visibility", + "countries": [ + "USA" + ] + }, + "finland 21": { + "name": "Finland", + "countries": [ + "FIN" + ] + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swept wing, 1 crew, fighter and strike. Hornet", + "abilities": "Drogue AAR, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "FW-190A8": { + "name": "FW-190A8", + "coalition": "red", + "label": "FW-190A8 W\u00fcrger", + "era": "WW2", + "shortLabel": "190", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "", + "quantity": 1 + } + ], + "enabled": true, + "code": "Without pylon", + "name": "Without pylon", + "roles": [] + }, + { + "items": [ + { + "name": "4 x SC 50 - 50kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC 50 * 4", + "name": "SC 50 * 4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AB 250-2 - 17 x SD-10A, 250kg CBU with 10kg Frag/HE submunitions", + "quantity": 1 + } + ], + "enabled": true, + "code": "AB 250 (w/ SD 10A)", + "name": "AB 250 (w/ SD 10A)", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AB 250-2 - 144 x SD-2, 250kg CBU with HE submunitions", + "quantity": 1 + } + ], + "enabled": true, + "code": "AB 250 (w/ SD 2)", + "name": "AB 250 (w/ SD 2)", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AB 500-1 - 34 x SD-10A, 500kg CBU with 10kg Frag/HE submunitions", + "quantity": 1 + } + ], + "enabled": true, + "code": "AB 500 (w/ SD 10A)", + "name": "AB 500 (w/ SD 10A)", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "SC 250 Type 1 L2 - 250kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC 250 L2", + "name": "SC 250 L2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "SC 250 Type 3 J - 250kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC 250 J", + "name": "SC 250 J", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "SC 500 J - 500kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC 500 J", + "name": "SC 500 J", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "SC 500 L2 - 500kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC 500 L2", + "name": "SC 500 L2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "SD 250 Stg - 250kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SD 250 Stg", + "name": "SD 250 Stg", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "SD 500 A - 500kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SD 500 A", + "name": "SD 500 A", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "300 liter Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel Tank 300 liters", + "name": "Fuel Tank 300 liters", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Werfer-Granate 21 - 21 cm UnGd air-to-air rocket", + "quantity": 2 + } + ], + "enabled": true, + "code": "BR 21", + "name": "BR 21", + "roles": [] + } + ], + "filename": "fw190.png", + "enabled": true, + "liveries": { + "fw190_fuselage_d_jg301": { + "name": "JG 301", + "countries": [ + "GER", + "NZG" + ] + }, + "captured_ra": { + "name": "Captured_RA", + "countries": [ + "SUN" + ] + }, + "fictional ijn carrier akagi ai-103": { + "name": "Fictional IJN Carrier Akagi AI-103", + "countries": [ + "JPN" + ] + }, + "fictional ijn otu tsukuba tsu-102": { + "name": "Fictional IJN OTU Tsukuba Tsu-102", + "countries": [ + "JPN" + ] + }, + "fw-190a8 yellow 4": { + "name": "FW190A8 Yellow 4", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190a8 rhaf": { + "name": "Fw 190 A8 RHAF", + "countries": [ + "HUN" + ] + }, + "jg3 white nose wulf": { + "name": "Fw190A8 'White nose Wulf'", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190a8_2.jg 54": { + "name": "2.JG 54", + "countries": [ + "GER", + "NZG" + ] + }, + "fictional ijn carrier soryu bi-112": { + "name": "Fictional IJN Carrier Soryu BI-112", + "countries": [ + "JPN" + ] + }, + "black 13 schwarze katze from jg1": { + "name": "Fw190_JG1_Gen._'Schwarze Katze'_Win.", + "countries": [ + "GER", + "NZG" + ] + }, + "turkish air force, 5th fr (1942)": { + "name": "Turkish Air Force, 5th FR (1942)", + "countries": [ + "AUSAF", + "TUR" + ] + }, + "fw-190a8 jg26 priller": { + "name": "Fw 190 A8 JG26 Priller", + "countries": [ + "GER", + "HUN", + "NZG" + ] + }, + "inspired by jg2 skin of early fw 190a": { + "name": "Fw190A8 JG2 Generic", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190a8": { + "name": "FW190A8", + "countries": "All" + }, + "fw190_alfred_bindseil": { + "name": "6.JG 1_Alfred Bindseil", + "countries": [ + "GER", + "NZG" + ] + }, + "fictional ijn 256th kokutai rai-153": { + "name": "Fictional IJN 256th Kokutai Rai-153", + "countries": [ + "JPN" + ] + }, + "fictional ijn carrier akagi ai-151": { + "name": "Fictional IJN Carrier Akagi AI-151", + "countries": [ + "JPN" + ] + }, + "fw-190a8_raf": { + "name": "FW190A8/R-2 PE882, No. 1426 Flight RAF - Late", + "countries": [ + "UK" + ] + }, + "factory skin": { + "name": "FW190A8 Luftwaffe", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190a8_2.jg 54_hans dortenmann": { + "name": "2.JG 54_Hans Dortenmann", + "countries": [ + "GER", + "NZG" + ] + }, + "fw 190 a-8 czech avia s.90": { + "name": "Fw 190 A-8 Czech Avia S.90", + "countries": [ + "CZE" + ] + }, + "fw190_ewald_preisz": { + "name": "6.JG 300_Ewald Preisz", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190a8 jg3 maximowitz": { + "name": "Fw 190 A8 JG3 Maximowitz", + "countries": [ + "GER", + "HUN", + "NZG" + ] + }, + "roaf-grupul7": { + "name": "RoAF-Grupul7", + "countries": [ + "ROU" + ] + } + }, + "type": "Aircraft", + "description": "Single propellor, straight wing, 1 crew. W\u00fcrger ", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "FW-190D9": { + "name": "FW-190D9", + "coalition": "red", + "label": "FW-190D9 Dora", + "era": "WW2", + "shortLabel": "190", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "SC 500 J - 500kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC500", + "name": "SC500", + "roles": [ + "Runway Attack", + "CAS", + "Antiship Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "300 liter Fuel Tank Type E2", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel Tank", + "name": "Fuel Tank", + "roles": [ + "CAP", + "FAC-A", + "Escort" + ] + }, + { + "items": [ + { + "name": "13 R4M 3.2kg UnGd air-to-air rocket", + "quantity": 2 + } + ], + "enabled": true, + "code": "R4M", + "name": "R4M", + "roles": [ + "CAP", + "CAP", + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "Werfer-Granate 21 - 21 cm UnGd air-to-air rocket", + "quantity": 2 + } + ], + "enabled": true, + "code": "BR 21", + "name": "BR 21", + "roles": [ + "CAP", + "CAP", + "Strike", + "CAS" + ] + } + ], + "filename": "fw190.png", + "enabled": true, + "liveries": { + "fw-190d9_5jg301": { + "name": "FW-190_5JG301.1945", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190d9_iv.jg 26_hans dortenmann": { + "name": " Oblt. Hans Dortenmann, IV./JG 26, 1945", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190d9_red": { + "name": "FW_190D9_Red.1945", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190d9_13.jg 51_heinz marquardt": { + "name": " Heinz-Marquardt, 13./JG 51, 1945", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190d9_jg54": { + "name": "FW-190D9_JG54.1945", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190d9_black 4 of stab iijg 6": { + "name": "FW-190D9_Black <4 of Stab II/JG 6", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190d9_usa": { + "name": "FW-190_USA_Standard.1943", + "countries": [ + "USA" + ] + }, + "fw-190d9_gb": { + "name": "FW-190_GB_Standart.1943", + "countries": [ + "UK" + ] + }, + "fw-190d9_ussr": { + "name": "FW-190 WNr 210251 USSR (Captured. 1943)", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "Single propellor, straight wing, 1 crew. Dora", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "H-6J": { + "name": "H-6J", + "coalition": "red", + "label": "H-6 J Badger", + "era": "Mid Cold War", + "shortLabel": "H6", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "YJ-12", + "quantity": 2 + } + ], + "enabled": true, + "code": "YJ-12 x 2", + "name": "YJ-12 x 2", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "YJ-12", + "quantity": 4 + } + ], + "enabled": true, + "code": "YJ-12 x 4", + "name": "YJ-12 x 4", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "YJ-83K", + "quantity": 6 + } + ], + "enabled": true, + "code": "YJ-83K x 6", + "name": "YJ-83K x 6", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "12 x 250-2 - 250kg GP Bombs HD", + "quantity": 1 + } + ], + "enabled": true, + "code": "250-2 HD Bomb x 12 in Bay", + "name": "250-2 HD Bomb x 12 in Bay", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "24 x 250-2 - 250kg GP Bombs HD", + "quantity": 1 + } + ], + "enabled": true, + "code": "250-2 HD Bomb x 24 in Bay", + "name": "250-2 HD Bomb x 24 in Bay", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MER6 - 6 x 250-3 - 250kg GP Bombs LD", + "quantity": 6 + } + ], + "enabled": true, + "code": "250-3 LD Bomb x 36", + "name": "250-3 LD Bomb x 36", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "KD-63", + "quantity": 4 + }, + { + "name": "DATA-LINK POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "KD-63 x 4", + "name": "KD-63 x 4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "KD-20", + "quantity": 6 + } + ], + "enabled": true, + "code": "KD-20 x 6", + "name": "KD-20 x 6", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "KD-20", + "quantity": 4 + } + ], + "enabled": true, + "code": "KD-20 x 4", + "name": "KD-20 x 4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "KD-63", + "quantity": 2 + }, + { + "name": "DATA-LINK POD", + "quantity": 1 + }, + { + "name": "KD-20", + "quantity": 4 + } + ], + "enabled": true, + "code": "KD-63 x 2, KD-20 x 4", + "name": "KD-63 x 2, KD-20 x 4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "KD-63", + "quantity": 2 + }, + { + "name": "DATA-LINK POD", + "quantity": 1 + }, + { + "name": "KD-20", + "quantity": 2 + } + ], + "enabled": true, + "code": "KD-63 x 2, KD-20 x 2", + "name": "KD-63 x 2, KD-20 x 2", + "roles": [ + "Strike" + ] + } + ], + "filename": "h-6.png", + "enabled": true, + "liveries": { + "planaf standard": { + "name": "PLANAF Standard", + "countries": [ + "CHN" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 4 crew bomber. Badger", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "I-16": { + "name": "I-16", + "coalition": "red", + "label": "I-16", + "era": "WW2", + "shortLabel": "I16", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "RS-82", + "quantity": 6 + } + ], + "enabled": true, + "code": "6xRS-82", + "name": "6xRS-82", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-100SV", + "quantity": 2 + } + ], + "enabled": true, + "code": "2xFAB-100", + "name": "2xFAB-100", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "RS-82", + "quantity": 6 + }, + { + "name": "FAB-100SV", + "quantity": 2 + } + ], + "enabled": true, + "code": "6xRS-82, 2xFAB-100", + "name": "6xRS-82, 2xFAB-100", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "RS-82", + "quantity": 6 + }, + { + "name": "I-16 External Fuel Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "6xRS-82, 2xDropTank-93L", + "name": "6xRS-82, 2xDropTank-93L", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "I-16 External Fuel Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "2xDropTank-93L", + "name": "2xDropTank-93L", + "roles": [ + "CAP", + "Reconnaissance", + "Escort" + ] + } + ], + "filename": "i-16.png", + "enabled": true, + "liveries": { + "silver-black demo": { + "name": "Silver-black paint scheme", + "countries": [ + "SUN", + "RUS" + ] + }, + "red army camo": { + "name": "Red Army Air Force Camouflage", + "countries": [ + "SUN", + "RUS" + ] + }, + "spain nationalists": { + "name": "Spain (Nationalists)", + "countries": [ + "SPN", + "NZG" + ] + }, + "japan": { + "name": "Japan (Captured), Manchuria 1939", + "countries": [ + "NZG", + "JPN" + ] + }, + "finnish af": { + "name": "Finland, AFB Rompotti 1943", + "countries": [ + "FIN", + "NZG" + ] + }, + "red army standard": { + "name": "1 Red Army Air Force Standard", + "countries": [ + "SUN", + "RUS" + ] + }, + "spain republicans": { + "name": "Spain (Republicans)", + "countries": [ + "SUN", + "SPN" + ] + }, + "red five demo": { + "name": "RED FIVE Aerobatic Team", + "countries": [ + "SUN", + "RUS" + ] + }, + "clear": { + "name": "Green unmarked", + "countries": "All" + }, + "silver demo": { + "name": "Silver paint scheme", + "countries": [ + "SUN", + "RUS" + ] + }, + "red army winter": { + "name": "Red Army Air Force winter", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "Single propellor, straight wing, 1 crew. Ishak", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "IL-76MD": { + "name": "IL-76MD", + "coalition": "red", + "label": "IL-76MD Candid", + "era": "Mid Cold War", + "shortLabel": "76", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Transport" + ] + } + ], + "filename": "il-76.png", + "enabled": true, + "liveries": { + "ukrainian af aeroflot": { + "name": "Ukrainian AF aeroflot", + "countries": [ + "UKR" + ] + }, + "algerian af il-76md": { + "name": "Algerian AF IL-76MD", + "countries": [ + "DZA" + ] + }, + "china air force old": { + "name": "China Air Force Old", + "countries": [ + "CHN" + ] + }, + "ukrainian af": { + "name": "Ukrainian AF", + "countries": [ + "UKR" + ] + }, + "rf air force": { + "name": "RF Air Force", + "countries": [ + "RUS" + ] + }, + "china air force new": { + "name": "China Air Force New", + "countries": [ + "CHN" + ] + }, + "mvd aeroflot": { + "name": "MVD aeroflot", + "countries": [ + "RUS" + ] + }, + "fsb aeroflot": { + "name": "FSB aeroflot", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 5 crew. Cargo and passenger aircraft. NATO reporting name: Candid", + "abilities": "AEW", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "IL-78M": { + "name": "IL-78M", + "coalition": "red", + "label": "IL-78M Midas", + "era": "Late Cold War", + "shortLabel": "78", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Tanker" + ] + } + ], + "filename": "il-76.png", + "enabled": true, + "liveries": { + "rf air force aeroflot": { + "name": "RF Air Force aeroflot", + "countries": [ + "SUN", + "RUS" + ] + }, + "rf air force new": { + "name": "RF Air Force new", + "countries": [ + "RUS" + ] + }, + "algerian af il-78m": { + "name": "Algerian AF IL-78M", + "countries": [ + "DZA" + ] + }, + "china air force": { + "name": "China Air Force", + "countries": [ + "CHN" + ] + }, + "rf air force": { + "name": "RF Air Force", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 6 crew. Tanker aircraft. NATO reporting name: Midas", + "abilities": "Tanker, Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "J-11A": { + "name": "J-11A", + "coalition": "red", + "label": "J-11A Flaming Dragon", + "era": "Modern", + "shortLabel": "J11", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", + "quantity": 6 + } + ], + "enabled": true, + "code": "FAB-100x36,R-73x2,ECM", + "name": "FAB-100x36,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x FAB-250", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250x8,R-73x2,ECM", + "name": "FAB-250x8,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x FAB-500", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500x8,R-73x2,ECM", + "name": "FAB-500x8,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x B-8M1 - 20 S-8KOM", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-8KOMx80,FAB-250x4,R-73x2,ECM", + "name": "S-8KOMx80,FAB-250x4,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x B-13L - 5 S-13 OF", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-13x20,FAB-250x4,R-73x2,ECM", + "name": "S-13x20,FAB-250x4,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x S-25", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-25x4,FAB-500x4,R-73x2,ECM", + "name": "S-25x4,FAB-500x4,R-73x2,ECM", + "roles": [ + "Strike", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-27ERx4,R-27ETx2,R-73x2,ECM", + "name": "R-27ERx4,R-27ETx2,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 6 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-77x6,R-73x2,ECM", + "name": "R-77x6,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-27ERx6,R-73x2,ECM", + "name": "R-27ERx6,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-77x4,R-27ETx2,R-73x2,ECM", + "name": "R-77x4,R-27ETx2,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-77x4,R-27ERx2,R-73x2,ECM", + "name": "R-77x4,R-27ERx2,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", + "quantity": 6 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500ShPx6,R-73x2,ECM", + "name": "BetAB-500ShPx6,R-73x2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73x4,ECM", + "name": "R-73x4,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-77x2,R-27ETx2,R-73x2,ECM", + "name": "R-77x2,R-27ETx2,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-77x6,R-73x4", + "name": "R-77x6,R-73x4", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-77x2,R-27ETx2,R-27ERx2,R-73x2,ECM", + "name": "R-77x2,R-27ETx2,R-27ERx2,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-27ETx2,R-27ERx4,R-73x2,ECM", + "name": "R-27ETx2,R-27ERx4,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x B-8M1 - 20 S-8TsM", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-8TsMx80,FAB-250x4,R-73x2,ECM", + "name": "S-8TsMx80,FAB-250x4,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x B-8M1 - 20 S-8OFP2", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-8OFP2x80,FAB-250x4,R-73x2,ECM", + "name": "S-8OFP2x80,FAB-250x4,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-250 - 250kg GP Bombs LD", + "quantity": 3 + } + ], + "enabled": true, + "code": "FAB-250x18,R-73x2,ECM", + "name": "FAB-250x18,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x B-8M1 - 20 S-8KOM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*S8-KOMx2, R-73x2, ECM", + "name": "2*S8-KOMx2, R-73x2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x B-8M1 - 20 S-8OFP2", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*S8-OFP2x2, R-73x2, ECM", + "name": "2*S8-OFP2x2, R-73x2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "2 x FAB-500", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250x4, 2*FAB-500x2, R-73x2", + "name": "FAB-250x4, 2*FAB-500x2, R-73x2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "2 x FAB-250", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250x4, 2*FAB-250x2, R-73x2", + "name": "FAB-250x4, 2*FAB-250x2, R-73x2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + }, + { + "name": "RBK-250-275 - 150 x AO-1SCh, 250kg CBU HE/Frag", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-250 HEAT/APx2, RBK-250 HE/Fragx2, R-73x2", + "name": "RBK-250 HEAT/APx2, RBK-250 HE/Fragx2, R-73x2", + "roles": [ + "CAS" + ] + } + ], + "filename": "su-27.png", + "enabled": true, + "liveries": { + "plaaf 19th ad": { + "name": "PLAAF 19th AD", + "countries": [ + "CHN" + ] + }, + "plaaf 17th ab": { + "name": "PLAAF 17th AB", + "countries": [ + "CHN" + ] + }, + "plaaf 18th ad 'thunderclap wing' (fictional)": { + "name": "PLAAF 18th AD 'Thunderclap Wing' (Fictional)", + "countries": [ + "CHN" + ] + }, + "usn aggressor vfc-13 'ferris' (fictional)": { + "name": "Aggressor VFC-13 'Ferris' (Fictional)", + "countries": [ + "AUSAF" + ] + }, + "plaaf 19th ad (reworked)": { + "name": "PLAAF 19th AD (Reworked)", + "countries": [ + "CHN" + ] + }, + "plaaf 14th ad": { + "name": "PLAAF 14th AD", + "countries": [ + "CHN" + ] + }, + "plaaf 6th ad": { + "name": "PLAAF 6th AD", + "countries": [ + "CHN" + ] + }, + "plaaf 14th ad (reworked)": { + "name": "PLAAF 14th AD (Reworked)", + "countries": [ + "CHN" + ] + }, + "plaaf opfor 'desert' (fictional)": { + "name": "PLAAF OPFOR 'Desert' (Fictional)", + "countries": [ + "CHN" + ] + }, + "plaaf 7th ad (reworked)": { + "name": "PLAAF 7th AD (Reworked)", + "countries": [ + "CHN" + ] + }, + "usaf 65th aggressor sqn 'desert' (fictional)": { + "name": "65th Aggressor SQN 'Desert' (Fictional)", + "countries": [ + "AUSAF" + ] + }, + "sky hunter": { + "name": "Sky Hunter", + "countries": [ + "CHN" + ] + }, + "plaaf 2nd ad (parade)": { + "name": "PLAAF 2nd AD (Parade)", + "countries": [ + "CHN" + ] + }, + "plaaf opfor 'jungle' (fictional)": { + "name": "PLAAF OPFOR 'Jungle' (Fictional) ", + "countries": [ + "CHN" + ] + }, + "plaaf 33th ad (reworked)": { + "name": "PLAAF 33th AD (Reworked)", + "countries": [ + "CHN" + ] + }, + "plaaf 33th ad": { + "name": "PLAAF 33th AD", + "countries": [ + "CHN" + ] + }, + "usaf 65th aggressor sqn 'gray' (fictional)": { + "name": "65th Aggressor SQN 'Gray' (Fictional)", + "countries": [ + "AUSAF" + ] + }, + "plaaf 2nd ad": { + "name": "PLAAF 2nd AD", + "countries": [ + "CHN" + ] + }, + "plaaf 7th ad": { + "name": "PLAAF 7th AD", + "countries": [ + "CHN" + ] + }, + "plaaf ghost gray (fictional)": { + "name": "PLAAF Ghost Gray (Fictional)", + "countries": [ + "CHN" + ] + }, + "plaaf 2nd ad (reworked)": { + "name": "PLAAF 2nd AD (Reworked)", + "countries": [ + "CHN" + ] + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swept wing, 1 crew, fighter and strike. NATO reporting name: Flanker", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "JF-17": { + "name": "JF-17", + "coalition": "red", + "label": "JF-17 Thunder", + "era": "Modern", + "shortLabel": "J17", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "C802AK (DIS)", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C802AKx2, 800L Tank", + "name": "PL-5Ex2, C802AKx2, 800L Tank", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IRx2, 1100L Tank, 800L Tank", + "name": "PL-5Ex2, C-701 IRx2, 1100L Tank, 800L Tank", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, SD-10x2, 1100L Tankx2, WMD7", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "LD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, LD-10x2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, LD-10x2, 1100L Tankx2, WMD7", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 800L Tank, WMD7", + "name": "PL-5Ex2, 800L Tank, WMD7", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "GBU-10", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, GBU-10x2, WMD7", + "name": "PL-5Ex2, GBU-10x2, WMD7", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "GDJ-II19 - 2 x GBU-12", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*GBU-12x2, 800L Tank, WMD7", + "name": "PL-5Ex2, 2*GBU-12x2, 800L Tank, WMD7", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "GDJ-II19 - 2 x Mk-82 SnakeEye", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*Mk-82x2, Mk-83x2, 800L Tank", + "name": "PL-5Ex2, 2*Mk-82x2, Mk-83x2, 800L Tank", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 1100L Tankx2, 800L Tank", + "name": "PL-5Ex2, 1100L Tankx2, 800L Tank", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "CM802AKG (DIS)", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "DATA-LINK POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, WMD7, CM802AKGx2, 800L Tank, DL", + "name": "PL-5Ex2, WMD7, CM802AKGx2, 800L Tank, DL", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "C-701T", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 CCDx2, 1100L Tank, 800L Tank", + "name": "PL-5Ex2, C-701 CCDx2, 1100L Tank, 800L Tank", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "GBU-12", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, GBU-12x2, 1100L Tank, WMD7", + "name": "PL-5Ex2, GBU-12x2, 1100L Tank, WMD7", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "GBU-16", + "quantity": 2 + }, + { + "name": "GDJ-II19 - 2 x GBU-12", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*GBU-12x2, GBU-16x2, WMD7", + "name": "PL-5Ex2, 2*GBU-12x2, GBU-16x2, WMD7", + "roles": [ + "CAS", + "Strike", + "FAC-A" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, 1100L Tankx2, WMD7", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "LD-10 x 2", + "quantity": 1 + }, + { + "name": "KG-600", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, WMD7, 800L Tankx2, SPJ, 2*LD-10", + "name": "PL-5Ex2, WMD7, 800L Tankx2, SPJ, 2*LD-10", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "LS-6-500", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, LS-6x2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, LS-6x2, 1100L Tankx2, WMD7", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IRx2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, C-701 IRx2, 1100L Tankx2, WMD7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "GBU-12", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, GBU-12x2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, GBU-12x2, 1100L Tankx2, WMD7", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "LD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LD-10x2, 1100L Tankx2, SPJ", + "name": "PL-5Ex2, 2*LD-10x2, 1100L Tankx2, SPJ", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "LD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, LD-10x2, 1100L Tankx2, SPJ", + "name": "PL-5Ex2, LD-10x2, 1100L Tankx2, SPJ", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "LS-6-500", + "quantity": 2 + }, + { + "name": "LD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LD-10x2, LS-6x2, SPJ", + "name": "PL-5Ex2, 2*LD-10x2, LS-6x2, SPJ", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "GB-6-HE", + "quantity": 2 + }, + { + "name": "LD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LD-10x2, GB-6-HEx2, SPJ", + "name": "PL-5Ex2, 2*LD-10x2, GB-6-HEx2, SPJ", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IRx2, 800L Tankx2, WMD7", + "name": "PL-5Ex2, C-701 IRx2, 800L Tankx2, WMD7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "C-701T", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 CCDx2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, C-701 CCDx2, 1100L Tankx2, WMD7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "C-701T", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 CCDx2, 800L Tankx2, WMD7", + "name": "PL-5Ex2, C-701 CCDx2, 800L Tankx2, WMD7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "GDJ-II19 - 2 x GBU-12", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*GBU-12x2, 1100L Tank, WMD7", + "name": "PL-5Ex2, 2*GBU-12x2, 1100L Tank, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IRx2, 1100L Tank, WMD7", + "name": "PL-5Ex2, C-701 IRx2, 1100L Tank, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IRx2, 800L Tank, WMD7", + "name": "PL-5Ex2, C-701 IRx2, 800L Tank, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701T", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 CCDx2, 1100L Tank, WMD7", + "name": "PL-5Ex2, C-701 CCDx2, 1100L Tank, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701T", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 CCDx2, 800L Tank, WMD7", + "name": "PL-5Ex2, C-701 CCDx2, 800L Tank, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 1 + }, + { + "name": "C-701T", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "LS-6-500", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IRx2, LS-6x2, 800L Tank", + "name": "PL-5Ex2, C-701 IRx2, LS-6x2, 800L Tank", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 1 + }, + { + "name": "C-701T", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "GB-6-HE", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IR/CCD, GB-6-HEx2, 800L Tank", + "name": "PL-5Ex2, C-701 IR/CCD, GB-6-HEx2, 800L Tank", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 1 + }, + { + "name": "C-701T", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "GB-6-SFW", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IR/CCD, GB-6-SFWx2, 800L Tank", + "name": "PL-5Ex2, C-701 IR/CCD, GB-6-SFWx2, 800L Tank", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "GB-6-SFW", + "quantity": 2 + }, + { + "name": "BRM-1_90MM", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, BRM1", + "name": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, BRM1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "GB-6-SFW", + "quantity": 2 + }, + { + "name": "GBU-12", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, GBU-12", + "name": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, GBU-12", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 3 + }, + { + "name": "GDJ-II19 - 2 x Mk-82 SnakeEye", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*Mk-82SEx2, Mk-83x3", + "name": "PL-5Ex2, 2*Mk-82SEx2, Mk-83x3", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 3 + } + ], + "enabled": true, + "code": "PL-5Ex2, Mk-84x3", + "name": "PL-5Ex2, Mk-84x3", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "GDJ-II19 - 2 x LAU68 MK5", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*Mk5x2, 800L Tank", + "name": "PL-5Ex2, 2*Mk5x2, 800L Tank", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "UG_90MM", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, Unguided 90mmx2, 800L Tank", + "name": "PL-5Ex2, Unguided 90mmx2, 800L Tank", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 3 + }, + { + "name": "GDJ-II19 - 2 x LAU68 MK5", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*Mk5x2, Mk-83x3", + "name": "PL-5Ex2, 2*Mk5x2, Mk-83x3", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "BRM-1_90MM", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, BRM1x2, 1100L Tank, WMD7", + "name": "PL-5Ex2, BRM1x2, 1100L Tank, WMD7", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2x1100L Tank", + "name": "PL-5Ex2, 2x1100L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2, 2x1100L Tank", + "name": "PL-5Ex2, SD-10x2, 2x1100L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*SD-10x2, 2x1100L Tank", + "name": "PL-5Ex2, 2*SD-10x2, 2x1100L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, 800L Tank", + "name": "PL-5Ex2, 800L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2, 800L Tank", + "name": "PL-5Ex2, SD-10x2, 800L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "SD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*SD-10x2, 800L Tank", + "name": "PL-5Ex2, 2*SD-10x2, 800L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2, SPJ", + "name": "PL-5Ex2, SD-10x2, SPJ", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, SPJ", + "name": "PL-5Ex2, SPJ", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "SD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*SD-10x2, SPJ", + "name": "PL-5Ex2, 2*SD-10x2, SPJ", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2", + "name": "PL-5Ex2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2", + "name": "PL-5Ex2, SD-10x2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*SD-10", + "name": "PL-5Ex2, 2*SD-10", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2, SPJ, 1100L Tankx2", + "name": "PL-5Ex2, SD-10x2, SPJ, 1100L Tankx2", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*SD-10x2, 1100L Tankx2, 800L Tank", + "name": "PL-5Ex2, 2*SD-10x2, 1100L Tankx2, 800L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2, 1100L Tankx2, 800L Tank", + "name": "PL-5Ex2, SD-10x2, 1100L Tankx2, 800L Tank", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "BRM-1_90MM", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "GBU-16", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, GBU-16x2, BRM1x2, WMD7", + "name": "PL-5Ex2, GBU-16x2, BRM1x2, WMD7", + "roles": [ + "FAC-A", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, WMD7", + "name": "PL-5Ex2, WMD7", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "LD-10 x 2", + "quantity": 1 + }, + { + "name": "SD-10 x 2", + "quantity": 1 + }, + { + "name": "GB-6", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LD-10, GB-6x2, 2*SD-10, SPJ", + "name": "PL-5Ex2, 2*LD-10, GB-6x2, 2*SD-10, SPJ", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701T", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 CCDx2, SPJ", + "name": "PL-5Ex2, C-701 CCDx2, SPJ", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "LD-10 x 2", + "quantity": 1 + }, + { + "name": "SD-10 x 2", + "quantity": 1 + }, + { + "name": "CM802AKG (DIS)", + "quantity": 2 + }, + { + "name": "DATA-LINK POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LD-10, CM802AKGx2, 2*SD-10, DL", + "name": "PL-5Ex2, 2*LD-10, CM802AKGx2, 2*SD-10, DL", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 1 + }, + { + "name": "GDJ-II19 - 2 x Mk-82", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*MK-82x2, MK-83x2, MK-84", + "name": "PL-5Ex2, 2*MK-82x2, MK-83x2, MK-84", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "LS-6-500", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "GB-6", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, LS-6x2, GB-6x2, 800L Tank", + "name": "PL-5Ex2, LS-6x2, GB-6x2, 800L Tank", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "GDJ-II19 - 2 x GBU-12", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "LS-6-500", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*GBU-12x2, LS-6x2, WMD7", + "name": "PL-5Ex2, 2*GBU-12x2, LS-6x2, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "GDJ-II19 - 2 x GBU-12", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "GB-6", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*GBU-12x2, GB-6x2, WMD7", + "name": "PL-5Ex2, 2*GBU-12x2, GB-6x2, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "TYPE-200A Dual", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*Type-200Ax2", + "name": "PL-5Ex2, 2*Type-200Ax2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "TYPE-200A", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, Type-200Ax2", + "name": "PL-5Ex2, Type-200Ax2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "LS-6-250 Dual", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LS6-250x2, 800L Tankx2, WMD7", + "name": "PL-5Ex2, 2*LS6-250x2, 800L Tankx2, WMD7", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "LS-6-250 Dual", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LS6-250x2, 800L Tank, 1100L Tankx2", + "name": "PL-5Ex2, 2*LS6-250x2, 800L Tank, 1100L Tankx2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "LS-6-100 Dual", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LS6-100x2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, 2*LS6-100x2, 1100L Tankx2, WMD7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "LS-6-100 Dual", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LS6-100x2, 800L Tankx2, WMD7", + "name": "PL-5Ex2, 2*LS6-100x2, 800L Tankx2, WMD7", + "roles": [ + "CAS" + ] + } + ], + "filename": "jf-17.png", + "enabled": true, + "liveries": { + "paf black panthers 07-101": { + "name": "Pakistan Air Force No.16 Sqn Black Panthers 07-101", + "countries": [ + "PAK" + ] + }, + "paf phoenixes": { + "name": "Pakistan Air Force No.28 Sqn Phoenixes", + "countries": [ + "PAK" + ] + }, + "paf black spiders 07-101 (fictional)": { + "name": "Pakistan Air Force No.26 Sqn Black Spiders 07-101 (Fictional)", + "countries": [ + "PAK" + ] + }, + "paf 07-101 (overhauled)": { + "name": "Pakistan Air Force 07-101 (Overhauled)", + "countries": [ + "PAK" + ] + }, + "paf black panthers (b2v2)": { + "name": "Pakistan Air Force No.16 Sqn Black Panthers (Block2 Camo2)", + "countries": [ + "PAK" + ] + }, + "plaaf 125th ab (fictional)": { + "name": "PLAAF 125th AB (Fictional)", + "countries": [ + "CHN" + ] + }, + "naf 722": { + "name": "Nigerian Air Force 722", + "countries": [ + "NGA" + ] + }, + "paf dark camo": { + "name": "Pakistan Air Force Dark Camo", + "countries": [ + "PAK" + ] + }, + "'splinter' camo for blue side (fictional)": { + "name": "\"Splinter\" Camo for Blue Side (Fictional)", + "countries": "All" + }, + "paf black spiders (web camo)": { + "name": "Pakistan Air Force No.26 Sqn Black Spiders (Web Camo)", + "countries": [ + "PAK" + ] + }, + "plaaf 111th ab (fictional)": { + "name": "PLAAF 111th AB (Fictional)", + "countries": [ + "CHN" + ] + }, + "paf black panthers": { + "name": "Pakistan Air Force No.16 Sqn Black Panthers", + "countries": [ + "PAK" + ] + }, + "paf black spiders (default)": { + "name": "Pakistan Air Force No.26 Sqn Black Spiders", + "countries": [ + "PAK" + ] + }, + "paf ccs fierce fragons": { + "name": "Pakistan Air Force CCS Sqn Fierce Dragons", + "countries": [ + "PAK" + ] + }, + "plaaf ghost gray camo (fictional)": { + "name": "PLAAF \"Ghost Gray\" Camo (Fictional)", + "countries": [ + "CHN" + ] + }, + "'chips' camo for blue side (fictional)": { + "name": "USAF \"Chips\" Camo (Fictional)", + "countries": [ + "USA" + ] + }, + "paf black panthers (reworked)": { + "name": "Pakistan Air Force No.16 Sqn Black Panthers (Reworked)", + "countries": [ + "PAK" + ] + }, + "maf blue sea camo": { + "name": "Myanmar Air Force Blue Sea Camo", + "countries": "All" + }, + "proto 06": { + "name": "FC-1 Prototype 06", + "countries": [ + "CHN" + ] + }, + "paf minhasians": { + "name": "Pakistan Air Force No.2 Sqn Minhasians", + "countries": [ + "PAK" + ] + }, + "paf sharp shooters": { + "name": "Pakistan Air Force No.18 Sqn Sharp Shooters", + "countries": [ + "PAK" + ] + }, + "paf tail choppers": { + "name": "Pakistan Air Force No.14 Sqn Tail Choppers", + "countries": [ + "PAK" + ] + }, + "paf black panthers (b2v1)": { + "name": "Pakistan Air Force No.16 Sqn Black Panthers (Block2 Camo1)", + "countries": [ + "PAK" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew, fighter and strike. Geoff", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "KC-135": { + "name": "KC-135", + "coalition": "blue", + "label": "KC-135 Stratotanker", + "era": "Early Cold War", + "shortLabel": "135", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Tanker" + ] + } + ], + "filename": "kc-135.png", + "enabled": true, + "liveries": { + "standard usaf": { + "name": "USAF Standard", + "countries": [ + "USA" + ] + }, + "turaf standard": { + "name": "Turkish Air Force", + "countries": [ + "TUR" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 3 crew. Tanker aircraft. Stratotanker", + "abilities": "Tanker, Boom AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "KC135MPRS": { + "name": "KC135MPRS", + "coalition": "blue", + "label": "KC-135 MPRS Stratotanker", + "era": "Early Cold War", + "shortLabel": "135M", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Tanker" + ] + } + ], + "filename": "kc-135.png", + "enabled": true, + "liveries": { + "100th arw": { + "name": "100th ARW", + "countries": [ + "USA" + ] + }, + "22nd arw": { + "name": "22nd ARW", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 3 crew. Tanker aircraft. Stratotanker", + "abilities": "Tanker, Drogue AAR, MPRS", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "L-39ZA": { + "name": "L-39ZA", + "coalition": "red", + "label": "L-39ZA", + "era": "Mid Cold War", + "shortLabel": "L39", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-5KOx32", + "name": "S-5KOx32", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-5KOx64", + "name": "S-5KOx64", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + }, + { + "name": "Fuel Tank 150 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-5KOx32, PTB-150x2", + "name": "S-5KOx32, PTB-150x2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + }, + { + "name": "Fuel Tank 350 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-5KOx32, PTB-350x2", + "name": "S-5KOx32, PTB-350x2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + }, + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-5KOx32, FAB-100x2", + "name": "S-5KOx32, FAB-100x2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "2 x OFAB-100 Jupiter - 100kg GP Bombs HD", + "quantity": 2 + }, + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "OFAB-100 Jupiter x4, FAB-100x2", + "name": "OFAB-100 Jupiter x4, FAB-100x2", + "roles": [ + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100x2", + "name": "FAB-100x2", + "roles": [ + "Antiship Strike", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "FAB-100x4", + "name": "FAB-100x4", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "2 x OFAB-100 Jupiter - 100kg GP Bombs HD", + "quantity": 4 + } + ], + "enabled": true, + "code": "OFAB-100 Jupiter x8", + "name": "OFAB-100 Jupiter x8", + "roles": [ + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel Tank 150 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100x2, PTB-150x2", + "name": "FAB-100x2, PTB-150x2", + "roles": [ + "Antiship Strike", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel Tank 350 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100x2, PTB-350x2", + "name": "FAB-100x2, PTB-350x2", + "roles": [ + "Antiship Strike", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "PK-3 - 7.62mm GPMG", + "quantity": 4 + } + ], + "enabled": true, + "code": "PK-3x4", + "name": "PK-3x4", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PK-3 - 7.62mm GPMG", + "quantity": 2 + }, + { + "name": "Fuel Tank 150 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "PK-3x2, PTB-150x2", + "name": "PK-3x2, PTB-150x2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-60Mx2", + "name": "R-60Mx2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "SAB-100MN - 100 kg Illumination Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "SAB-100x4", + "name": "SAB-100x4", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "R-3S - AAM, IR guided", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-3Sx2", + "name": "R-3Sx2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-3S - AAM, IR guided", + "quantity": 2 + }, + { + "name": "PK-3 - 7.62mm GPMG", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-3Sx2, PK-3x2", + "name": "R-3Sx2, PK-3x2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "PK-3 - 7.62mm GPMG", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-60Mx2, PK-3x2", + "name": "R-60Mx2, PK-3x2", + "roles": [ + "CAP" + ] + } + ], + "filename": "l-39.png", + "enabled": true, + "liveries": { + "splinter camo woodland": { + "name": "Splinter camo woodland", + "countries": "All" + }, + "algerian af tiger nl-36": { + "name": "Algerian AF Tiger NL-36", + "countries": [ + "DZA" + ] + }, + "czech air force": { + "name": "Czech Air Force", + "countries": [ + "CZE" + ] + }, + "algerian af nl-44": { + "name": "Algerian AF NL-44", + "countries": [ + "DZA" + ] + }, + "splinter camo desert": { + "name": "Splinter camo desert", + "countries": "All" + }, + "slovak air force": { + "name": "2nd SQN AFB Sliac", + "countries": [ + "SVK" + ] + }, + "russian air force": { + "name": "1 Russian Air Force", + "countries": [ + "RUS" + ] + }, + "czechoslovakia air force": { + "name": "Czechoslovakia_Air Force", + "countries": [ + "CZE" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "M-2000C": { + "name": "M-2000C", + "coalition": "blue", + "label": "M-2000C Mirage", + "era": "Late Cold War", + "shortLabel": "2k", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fox", + "name": "Fox", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fox / Magic (QRA)", + "name": "Fox / Magic (QRA)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Super 530D", + "quantity": 2 + } + ], + "enabled": true, + "code": "Alpha / S530D", + "name": "Alpha / S530D", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "Matra Super 530D", + "quantity": 2 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fox / S530D / Magic", + "name": "Fox / S530D / Magic", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "Matra Super 530D", + "quantity": 2 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + }, + { + "name": "Eclair 16 flares 16 chaffs", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fox / S530D / Magic / Eclair", + "name": "Fox / S530D / Magic / Eclair", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + } + ], + "enabled": true, + "code": "Bravo", + "name": "Bravo", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + } + ], + "enabled": true, + "code": "Bravo / Magic", + "name": "Bravo / Magic", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kilo", + "name": "Kilo", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kilo / Magic", + "name": "Kilo / Magic", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "Bravo / 4xMk-82 / Magic", + "name": "Bravo / 4xMk-82 / Magic", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + } + ], + "enabled": true, + "code": "Bravo / GBU-12 / Magic", + "name": "Bravo / GBU-12 / Magic", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "AUF2 GBU-12 x 2", + "quantity": 1 + } + ], + "enabled": true, + "code": "Bravo / 2xGBU-12 / Magic", + "name": "Bravo / 2xGBU-12 / Magic", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "GBU-16 - 1000lb Laser Guided Bomb", + "quantity": 1 + } + ], + "enabled": true, + "code": "Bravo / GBU-16 / Magic", + "name": "Bravo / GBU-16 / Magic", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "GBU-24 Paveway III - 2000lb Laser Guided Bomb", + "quantity": 1 + } + ], + "enabled": true, + "code": "Bravo / GBU-24 / Magic", + "name": "Bravo / GBU-24 / Magic", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "BAP-100 x 18", + "quantity": 1 + } + ], + "enabled": true, + "code": "Bravo / BAP-100 / Magic", + "name": "Bravo / BAP-100 / Magic", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 4 + } + ], + "enabled": true, + "code": "Bravo / 4xSnakeEye / Magic", + "name": "Bravo / 4xSnakeEye / Magic", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fox / 4xMk-82 / Magic", + "name": "Fox / 4xMk-82 / Magic", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kilo / 4xMk-82 / Magic", + "name": "Kilo / 4xMk-82 / Magic", + "roles": [ + "Strike" + ] + } + ], + "filename": "m2000.png", + "enabled": true, + "liveries": { + "ada alsace lf-2": { + "name": "Ada Alsace LF-2", + "countries": [ + "FRA" + ] + }, + "peru052": { + "name": "Fuerza Aerea Peruana 052", + "countries": [ + "FRA", + "PER" + ] + }, + "mission accomplie": { + "name": "2022 MISSION ACCOMPLIE by MALBAK", + "countries": "All" + }, + "cambresis": { + "name": "AdA Cambresis", + "countries": [ + "FRA" + ] + }, + "greek air force": { + "name": "Polemikh Aeroporia (Greek Air Force)", + "countries": [ + "FRA", + "GRC" + ] + }, + "brasilian air force": { + "name": "Forca Aerea Brasileira (Brazilian Air Force)", + "countries": [ + "BRA", + "FRA" + ] + }, + "2003 tigermeet": { + "name": "NATO Tigermeet 2003", + "countries": [ + "FRA" + ] + }, + "peru064": { + "name": "Fuerza Aerea Peruana 064", + "countries": [ + "FRA", + "PER" + ] + }, + "2010 tigermeet": { + "name": "NATO Tigermeet 2010", + "countries": [ + "FRA" + ] + }, + "uae air force": { + "name": "UAE Air Defense Air Force", + "countries": [ + "FRA", + "ARE" + ] + }, + "2004 tigermeet": { + "name": "NATO Tigermeet 2004", + "countries": [ + "FRA" + ] + }, + "ada chasse 2-5": { + "name": "AdA Chasse 2/5", + "countries": [ + "FRA" + ] + }, + "iaf silver 59": { + "name": "Israeli Air Force 101 Sqn 1967 scheme", + "countries": [ + "ABH", + "RUS", + "SPN", + "ISR", + "USA", + "RSO", + "UKR", + "TUR", + "BEL", + "NOR", + "ITA", + "POL", + "NETH", + "GER", + "FRA", + "GRG", + "DEN", + "CZE", + "CAN", + "UK" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew, fighter and strike.", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MB-339A": { + "name": "MB-339A", + "coalition": "blue", + "label": "MB-339A", + "era": "Mid Cold War", + "shortLabel": "339", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Mk-81 - 250lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + } + ], + "enabled": true, + "code": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.83 + 2*Mk.81 ", + "name": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.83 + 2*Mk.81 ", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "", + "quantity": 6 + } + ], + "enabled": true, + "code": "A - 2*320L TipTanks [Clean]", + "name": "A - 2*320L TipTanks [Clean]", + "roles": [ + "Transport" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "AN/M3 Gunpod Right", + "quantity": 1 + }, + { + "name": "Photo-Recon Pod (4*70mm Vinten Cameras)", + "quantity": 1 + }, + { + "name": "Fuel Tank 330lt", + "quantity": 2 + }, + { + "name": "", + "quantity": 2 + } + ], + "enabled": true, + "code": "Recon", + "name": "Recon", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "Cylindrical Tip Tank 500lt", + "quantity": 2 + }, + { + "name": "BRD-4-250 - 4 x Mk 76 - 25lb Practice Bomb LD", + "quantity": 1 + }, + { + "name": "", + "quantity": 2 + }, + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + } + ], + "enabled": true, + "code": "Training", + "name": "Training", + "roles": [] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "LAU-10 pod - 4 x 127mm ZUNI, UnGd Rkts Mk71, HE/FRAG", + "quantity": 2 + }, + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + } + ], + "enabled": true, + "code": "AA - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*LAU-10(Zuni Rockets) [ARMADA]", + "name": "AA - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*LAU-10(Zuni Rockets) [ARMADA]", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "Fuel Tank 330lt", + "quantity": 2 + }, + { + "name": "AN/M3 Gunpod Right", + "quantity": 1 + }, + { + "name": "AN/M3 Gunpod Left", + "quantity": 1 + } + ], + "enabled": true, + "code": "AM - 2*320L TipTanks + 2*AN/M3 GunPods + 2*330L Tanks + 2*LAU-3 (Hydra rockets)", + "name": "AM - 2*320L TipTanks + 2*AN/M3 GunPods + 2*330L Tanks + 2*LAU-3 (Hydra rockets)", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 330lt", + "quantity": 2 + }, + { + "name": "", + "quantity": 3 + }, + { + "name": "Cylindrical Tip Tank 500lt", + "quantity": 2 + }, + { + "name": "Luggage Container", + "quantity": 1 + } + ], + "enabled": true, + "code": "A - 2*500L TipTanks + 2*330L Tanks + Luggage Container [Ferry Long Range]", + "name": "A - 2*500L TipTanks + 2*330L Tanks + Luggage Container [Ferry Long Range]", + "roles": [ + "No task", + "Transport" + ] + }, + { + "items": [ + { + "name": "Cylindrical Tip Tank 500lt", + "quantity": 2 + }, + { + "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 API", + "quantity": 2 + }, + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 4 + } + ], + "enabled": true, + "code": "A - 2*500L TipTanks + 4*Mk.82HD + 2*LR-25 (API Rockets)", + "name": "A - 2*500L TipTanks + 4*Mk.82HD + 2*LR-25 (API Rockets)", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "Fuel Tank 330lt", + "quantity": 2 + }, + { + "name": "", + "quantity": 3 + } + ], + "enabled": true, + "code": "A - 2*320L TipTanks + 2*330L Tanks [Ferry Medium Range]", + "name": "A - 2*320L TipTanks + 2*330L Tanks [Ferry Medium Range]", + "roles": [ + "Transport" + ] + }, + { + "items": [ + { + "name": "Cylindrical Tip Tank 500lt", + "quantity": 2 + }, + { + "name": "Matra Type 155 Rocket Pod", + "quantity": 2 + }, + { + "name": "BLG-66-AC Belouga", + "quantity": 2 + }, + { + "name": "AN/M3 Gunpod Right", + "quantity": 1 + }, + { + "name": "AN/M3 Gunpod Left", + "quantity": 1 + } + ], + "enabled": true, + "code": "A - 2*500L TipTanks + 2*AN/M3 GunPods + 2*Matra 155 + 2* Belouga", + "name": "A - 2*500L TipTanks + 2*AN/M3 GunPods + 2*Matra 155 + 2* Belouga", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "BLU-107/B Durandal - 219kg Concrete Piercing Chute Retarded Bomb w/Booster", + "quantity": 4 + }, + { + "name": "Matra Type 155 Rocket Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "Runway Interdiction", + "name": "Runway Interdiction", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + }, + { + "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 API", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Cylindrical Tip Tank 500lt", + "quantity": 2 + } + ], + "enabled": true, + "code": "A - 2*500L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (API Rockets)", + "name": "A - 2*500L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (API Rockets)", + "roles": [] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 API", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + } + ], + "enabled": true, + "code": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD Bombs + 2*LR-25(API Rockets)", + "name": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD Bombs + 2*LR-25(API Rockets)", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 HEI Heavy", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + } + ], + "enabled": true, + "code": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (HEI Rockets)", + "name": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (HEI Rockets)", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 6 + } + ], + "enabled": true, + "code": "A - 2*320L TipTanks + 6*Mk.82LD", + "name": "A - 2*320L TipTanks + 6*Mk.82LD", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "14-3-M2 - 6 x BAP-100 - 32kg Concrete Piercing Chute Retarded Bomb w/Booster", + "quantity": 6 + } + ], + "enabled": true, + "code": "Runway Interdiction (36*BAP-100)", + "name": "Runway Interdiction (36*BAP-100)", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "14-3-M2 - 6 x BAT-120 ABL - 34kg HE/Frag Chute Retarded Bomb HD", + "quantity": 6 + } + ], + "enabled": true, + "code": "Anti - Light Armoured Vehicle (36*BAT-120 ABL)", + "name": "Anti - Light Armoured Vehicle (36*BAT-120 ABL)", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "Matra Type 155 Rocket Pod", + "quantity": 2 + }, + { + "name": "Fuel Tank 330lt", + "quantity": 2 + }, + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + } + ], + "enabled": true, + "code": "AP - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*330L Tanks + 2*Matra 155 (SNEB rockets)", + "name": "AP - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*330L Tanks + 2*Matra 155 (SNEB rockets)", + "roles": [ + "CAS" + ] + } + ], + "filename": "c-101.png", + "enabled": true, + "liveries": { + "mb339an 'nigeria'": { + "name": "Nigerian Air Force | Camo (Low-Vis)", + "countries": [ + "NGA" + ] + }, + "mb339a italian camo - late": { + "name": "Italian Camo - Late", + "countries": [ + "ITA" + ] + }, + "mb339a italian factory": { + "name": "Italian Orange/White", + "countries": [ + "ITA" + ] + }, + "mb339am 'malaysia'": { + "name": "Royal Malaysian Air Force | Camo (Low-Vis)", + "countries": [ + "MYS" + ] + }, + "mb339aa 'armada' - yellow band": { + "name": "ARMADA Argentina | Camo (Yellow Band)", + "countries": [ + "ARG" + ] + }, + "mb339ag 'ghana'": { + "name": "Ghana Air Force | Camo (Low-Vis)", + "countries": [ + "GHA" + ] + }, + "mb339a italian gray": { + "name": "Italian Gray", + "countries": [ + "ITA" + ] + }, + "mb339a italian camo - early": { + "name": "Italian Camo - Early", + "countries": [ + "ITA" + ] + }, + "mb339 'factory'": { + "name": "Aermacchi Factory Scheme | S-001 I-NEUF", + "countries": "All" + }, + "mb339ad 'uae'": { + "name": "UAE Air Force", + "countries": [ + "ARE" + ] + }, + "mb339aa 'armada' - crippa": { + "name": "ARMADA Argentina | Camo (Lt. Crippa's killmark)", + "countries": [ + "ARG" + ] + }, + "mb339ap 'peru'": { + "name": "Peruvian Air Force | Camo (Late)", + "countries": [ + "PER" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MQ-9 Reaper": { + "name": "MQ-9 Reaper", + "coalition": "blue", + "label": "MQ-9 Reaper", + "era": "Modern", + "shortLabel": "MQ9", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-12*4", + "name": "GBU-12*4", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-38*4", + "name": "GBU-38*4", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "M299 - 4 x AGM-114K Hellfire", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-114K*8,GBU-38*2", + "name": "AGM-114K*8,GBU-38*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "M299 - 4 x AGM-114K Hellfire", + "quantity": 2 + }, + { + "name": "AGM-114K * 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-114K*12", + "name": "AGM-114K*12", + "roles": [ + "CAS", + "Strike" + ] + } + ], + "filename": "i-16.png", + "enabled": true, + "liveries": { + "standard": { + "name": "standard", + "countries": [ + "USA" + ] + }, + "standard uk": { + "name": "standard UK", + "countries": [ + "UK" + ] + }, + "standard italy": { + "name": "standard Italy", + "countries": [ + "ITA" + ] + }, + "standard france": { + "name": "standard France", + "countries": [ + "FRA" + ] + }, + "'camo' scheme": { + "name": "'camo' scheme", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "Single turboprop, straight wing, attack aircraft. Reaper", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-15bis": { + "name": "MiG-15bis", + "coalition": "red", + "label": "MiG-15 Fagot", + "era": "Early Cold War", + "shortLabel": "M15", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "FAB-50 - 50kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*FAB-50", + "name": "2*FAB-50", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-100M - 100kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*FAB-100M", + "name": "2*FAB-100M", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 300 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*300L", + "name": "2*300L", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 400 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*400L", + "name": "2*400L", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 600 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*600L", + "name": "2*600L", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 300 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "Fuel tank 300", + "name": "Fuel tank 300", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 400 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "Fuel tank 400", + "name": "Fuel tank 400", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + } + ], + "filename": "mig-15.png", + "enabled": true, + "liveries": { + "china_air force": { + "name": "People's Liberation Army Air Force", + "countries": [ + "CHN" + ] + }, + "china volunteer air force": { + "name": "People's Volunteer Army Air Force", + "countries": [ + "CHN" + ] + }, + "ussr_red": { + "name": "USSR Red", + "countries": [ + "SUN", + "RUS" + ] + }, + "algerian af 1962": { + "name": "Algerian AF 1962", + "countries": [ + "DZA" + ] + }, + "north_korea_air force_major_ arkady_ boitsow": { + "name": "North Korea - Major Arkady Boitsow", + "countries": [ + "RUS", + "PRK" + ] + }, + "gdr_air force": { + "name": "Air Forces of the National People's Army", + "countries": [ + "GER" + ] + }, + "default livery": { + "name": "default livery", + "countries": [ + "BRA", + "CUB", + "MYS", + "ARE", + "AUS", + "ABH", + "RUS", + "PHL", + "SPN", + "ISR", + "SUN", + "USA", + "BHR", + "MAR", + "BLR", + "HRV", + "DZA", + "OMN", + "RSO", + "SVK", + "HND", + "IRN", + "UKR", + "TUR", + "JPN", + "PRK", + "SRB", + "IDN", + "KAZ", + "BGR", + "BEL", + "INS", + "THA", + "LBY", + "AUSAF", + "VEN", + "PAK", + "JOR", + "RSA", + "FIN", + "MEX", + "KWT", + "NOR", + "IRQ", + "SYR", + "ITA", + "NZG", + "GRC", + "POL", + "NETH", + "GER", + "SUI", + "CHN", + "SAU", + "SWE", + "YEM", + "VNM", + "ROU", + "RSI", + "FRA", + "CHL", + "KOR", + "HUN", + "AUT", + "GRG", + "DEN", + "TUN", + "EGY", + "IND", + "CZE", + "ETH", + "CAN", + "SDN", + "QAT", + "UK", + "YUG" + ] + }, + "haf fictional": { + "name": "Hellenic Airforce - Fictional", + "countries": [ + "GRC" + ] + }, + "ussr_air forces": { + "name": "Air Forces of Soviet Union", + "countries": [ + "SUN", + "RUS" + ] + }, + "north_korea_air force": { + "name": "Korean People's Air Force", + "countries": [ + "PRK" + ] + }, + "polish_air force": { + "name": "Polish Air Force", + "countries": [ + "POL" + ] + }, + "ussr_air forces old": { + "name": "USSR Old", + "countries": [ + "SUN", + "RUS" + ] + }, + "czechoslovakia_air force": { + "name": "Czechoslovak Air Force", + "countries": [ + "CZE" + ] + }, + "ussr_pepelyaev": { + "name": "USSR Pepelyaev", + "countries": [ + "SUN", + "RUS", + "PRK" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew. Fagot", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-19P": { + "name": "MiG-19P", + "coalition": "red", + "label": "MiG-19 Farmer", + "era": "Early Cold War", + "shortLabel": "M19", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 760 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "PTB-760 x 2", + "name": "PTB-760 x 2", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "K-13A", + "quantity": 2 + }, + { + "name": "Fuel Tank 760 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "K-13A x 2, PTB-760 x 2", + "name": "K-13A x 2, PTB-760 x 2", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "K-13A", + "quantity": 2 + } + ], + "enabled": true, + "code": "K-13A x 2", + "name": "K-13A x 2", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "K-13A", + "quantity": 2 + }, + { + "name": "Fuel Tank 760 liters", + "quantity": 2 + }, + { + "name": "ORO-57K - S-5M x 8", + "quantity": 2 + } + ], + "enabled": true, + "code": "K-13A x 2, ORO-57K x 2, PTB-760 x 2", + "name": "K-13A x 2, ORO-57K x 2, PTB-760 x 2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 760 liters", + "quantity": 2 + }, + { + "name": "ORO-57K - S-5M x 8", + "quantity": 2 + } + ], + "enabled": true, + "code": "ORO-57K x 2, PTB-760 x 2", + "name": "ORO-57K x 2, PTB-760 x 2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "ORO-57K - S-5M x 8", + "quantity": 4 + } + ], + "enabled": true, + "code": "ORO-57K x 4", + "name": "ORO-57K x 4", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "ORO-57K - S-5M x 8", + "quantity": 2 + } + ], + "enabled": true, + "code": "ORO-57K x 2", + "name": "ORO-57K x 2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-100M - 100kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "ORO-57K - S-5M x 8", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100M x 2, ORO-57K x 2", + "name": "FAB-100M x 2, ORO-57K x 2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "ORO-57K - S-5M x 8", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250 x 2, ORO-57K x 2", + "name": "FAB-250 x 2, ORO-57K x 2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-100M - 100kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100M x 2", + "name": "FAB-100M x 2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250 x 2", + "name": "FAB-250 x 2", + "roles": [ + "CAS", + "Strike" + ] + } + ], + "filename": "mig-19.png", + "enabled": true, + "liveries": { + "ussr_2": { + "name": "764th Fighter Aviation Regiment", + "countries": [ + "SUN", + "RUS" + ] + }, + "plaaf camo": { + "name": "PLAAF Snow Camo", + "countries": [ + "CHN" + ] + }, + "cuba": { + "name": " 211 Escuadron de Caza", + "countries": [ + "CUB" + ] + }, + "iap": { + "name": "234 Fighter Regiment (234 IAP)", + "countries": "All" + }, + "ddr - fictional": { + "name": "Germany DDR camouflage (Fictional)", + "countries": "All" + }, + "snow - fictional": { + "name": "Snow Camouflage Fictional", + "countries": "All" + }, + "plaaf": { + "name": "112th Air Regiment", + "countries": [ + "CHN" + ] + }, + "romania - 66th fighter division": { + "name": "91st Fighter Regiment", + "countries": [ + "ROU" + ] + }, + "poland 39 plm": { + "name": "39 PLM Squadron", + "countries": [ + "POL" + ] + }, + "poland 62 plm": { + "name": "62 PLM Squadron", + "countries": [ + "POL" + ] + }, + "default": { + "name": "default", + "countries": "All" + }, + "czechoslovakia": { + "name": "2nd Fighter-Bomber Regiment", + "countries": [ + "CZE" + ] + }, + "bulgaria": { + "name": "1st Squadron, 18th Fighter Regiment", + "countries": [ + "BGR" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew. Farmer", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-21Bis": { + "name": "MiG-21Bis", + "coalition": "red", + "label": "MiG-21 Fishbed", + "era": "Mid Cold War", + "shortLabel": "M21", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 2 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 2 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Patrol, long range", + "name": "Patrol, long range", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 2 + }, + { + "name": "R-60 x 2", + "quantity": 2 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Patrol, medium range", + "name": "Patrol, medium range", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 490 L Central (21)", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 2 + }, + { + "name": "R-60 x 2", + "quantity": 2 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Patrol, short range", + "name": "Patrol, short range", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "Hard targets, BOMBS", + "name": "Hard targets, BOMBS", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "UB-32M - 32 S-5M", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "Unknown or mixed targets, BOMBS + ROCKETS", + "name": "Unknown or mixed targets, BOMBS + ROCKETS", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "UB-32M - 32 S-5M", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + } + ], + "enabled": true, + "code": "Soft targets, CLUSTERS + ROCKETS", + "name": "Soft targets, CLUSTERS + ROCKETS", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "BL-755 CBU - 450kg, 147 Frag/Pen bomblets", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + } + ], + "enabled": true, + "code": "Soft targets, CLUSTERS", + "name": "Soft targets, CLUSTERS", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "UPK-23-250 - gun pod", + "quantity": 2 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "Soft targets, scattered", + "name": "Soft targets, scattered", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "Kh-66 Grom (21) - AGM, radar guided APU-68", + "quantity": 2 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Few big targets, GROM + BOMBS", + "name": "Few big targets, GROM + BOMBS", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 2 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "Very hard target, PENETRATION", + "name": "Very hard target, PENETRATION", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 4 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Aerial attack, hard targets, CLUSTERS", + "name": "Aerial attack, hard targets, CLUSTERS", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "S-24A (21) - 180 kg, cumulative unguided rocket", + "quantity": 4 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Hard targets, ROCKETS, PENETRATION", + "name": "Hard targets, ROCKETS, PENETRATION", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "S-24B (21) - 180 kg, fragmented unguided rocket", + "quantity": 4 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Soft targets, ROCKETS, BLAST-FRAGMENTS", + "name": "Soft targets, ROCKETS, BLAST-FRAGMENTS", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 490 L Central (21)", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 1 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 1 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + } + ], + "enabled": true, + "code": "Long range, MIX", + "name": "Long range, MIX", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 490 L Central (21)", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 2 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + } + ], + "enabled": true, + "code": "Long range, RADAR GUIDED MISSILES", + "name": "Long range, RADAR GUIDED MISSILES", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 490 L Central (21)", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 2 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + } + ], + "enabled": true, + "code": "Long range, INFRA RED MISSILES", + "name": "Long range, INFRA RED MISSILES", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 2 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 2 + } + ], + "enabled": true, + "code": "Escort", + "name": "Escort", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "SPS-141-100 (21) - jamming and countermeasures pod", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 1 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 1 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + } + ], + "enabled": true, + "code": "Escort, JAMMER", + "name": "Escort, JAMMER", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "SAB-100MN - 100 kg Illumination Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "Night, ILLUMINATOR", + "name": "Night, ILLUMINATOR", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "SPS-141-100 (21) - jamming and countermeasures pod", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 1 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 1 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + } + ], + "enabled": true, + "code": "Long range, JAMMER", + "name": "Long range, JAMMER", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "UPK-23-250 - gun pod", + "quantity": 2 + }, + { + "name": "UB-16UM - 16 S-5M", + "quantity": 2 + } + ], + "enabled": true, + "code": "Soft targets, UPK + ROCKETS", + "name": "Soft targets, UPK + ROCKETS", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + }, + { + "name": "UPK-23-250 - gun pod", + "quantity": 2 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Soft targets, UPK + CLUSTERS", + "name": "Soft targets, UPK + CLUSTERS", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-3R - AAM, radar guided", + "quantity": 1 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 1 + }, + { + "name": "SPS-141-100 (21) - jamming and countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + } + ], + "enabled": true, + "code": "Patrol, JAMMER", + "name": "Patrol, JAMMER", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "RN-24 - 470kg, nuclear bomb, free fall", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 1 + } + ], + "enabled": true, + "code": "NUCLEAR A", + "name": "NUCLEAR A", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RN-28 - 260 kg, nuclear bomb, free fall", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 1 + } + ], + "enabled": true, + "code": "NUCLEAR B", + "name": "NUCLEAR B", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 2 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 2 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Short range", + "name": "Short range", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Smoke - white - 21", + "quantity": 1 + } + ], + "enabled": true, + "code": "AEROBATIC", + "name": "AEROBATIC", + "roles": [] + } + ], + "filename": "mig-21.png", + "enabled": true, + "liveries": { + "afghanistan (1)": { + "name": "Afghanistan (1)", + "countries": "All" + }, + "bulgaria - 1-3 iae (3)": { + "name": "Bulgaria - 1/3 IAE (3)", + "countries": "All" + }, + "germany east - jg-8": { + "name": "East Germany - JG-8", + "countries": "All" + }, + "plaaf - white": { + "name": "PLAAF - White", + "countries": "All" + }, + "croatia - 21st fs": { + "name": "Croatia - 21st Fighter Squadron (Zagreb AB)", + "countries": "All" + }, + "plaaf - sky blue": { + "name": "PLAAF - Sky Blue", + "countries": "All" + }, + "iraq - 17th sqn (2)": { + "name": "Iraq - 17th Sqn (2)", + "countries": "All" + }, + "vvs - amt-11 grey": { + "name": "VVS - AMT-11 Grey", + "countries": "All" + }, + "vvs - 234 gviap": { + "name": "VVS - 234 GvIAP", + "countries": "All" + }, + "bare metal": { + "name": "Bare Metal", + "countries": "All" + }, + "bulgaria - 1-3 iae (2)": { + "name": "Bulgaria - 1/3 IAE (2)", + "countries": "All" + }, + "plaaf - splinter": { + "name": "PLAAF - Splinter", + "countries": "All" + }, + "argentina (2)": { + "name": "Argentina (2)", + "countries": "All" + }, + "vvs - demonstrator": { + "name": "VVS Demonstrator", + "countries": "All" + }, + "vvs - 115 gviap": { + "name": "VVS - 115 GvIAP (Kokaydy AB)", + "countries": "All" + }, + "romania - lancer a": { + "name": "Romania - Lancer A", + "countries": "All" + }, + "sweden - 16th air wing": { + "name": "Sweden - 16th Air Wing", + "countries": "All" + }, + "syria (1)": { + "name": "Syria (1)", + "countries": "All" + }, + "egypt - grey 1982": { + "name": "Egypt - Grey 1982", + "countries": "All" + }, + "finland - h\u00e4vllv 31": { + "name": "Finland - HavLLv 31", + "countries": "All" + }, + "huaf 47th ab - 6115 (griff sqn)": { + "name": "HunAF Griff Sqn. (47th AB) 6115", + "countries": "All" + }, + "libya - 2017": { + "name": "Lybia - 2017", + "countries": "All" + }, + "huaf 47th ab (griff sqn)": { + "name": "HunAF Griff Sqn. (47th AB)", + "countries": "All" + }, + "cuba - 1990s": { + "name": "Cuba - 1990s", + "countries": "All" + }, + "serbia - 101st lae": { + "name": "Serbia - 101st LAE", + "countries": "All" + }, + "slovakia - 1998": { + "name": "Slovakia - 1998", + "countries": "All" + }, + "iran - 51st sqn": { + "name": "Iran - 51st Sqn (Umidiyeh AB)", + "countries": "All" + }, + "vvs - 116 cbp": { + "name": "VVS - 116 CBP", + "countries": "All" + }, + "georgia (2)": { + "name": "Georgia (2)", + "countries": "All" + }, + "huaf metal": { + "name": "HuAF Metal", + "countries": "All" + }, + "bulgaria - 1-3 iae": { + "name": "Bulgaria - 1/3 IAE", + "countries": "All" + }, + "india - 101st sqn (1)": { + "name": "India - 101st Sqn Falcons", + "countries": "All" + }, + "ukraine (2)": { + "name": "Ukraine 02", + "countries": "All" + }, + "vpaf - 927th fighter regiment metal": { + "name": "VPAF - 927th Fighter Regiment Metal", + "countries": "All" + }, + "iran - standard": { + "name": "Iran - Standard", + "countries": "All" + }, + "romania - lancer c": { + "name": "Romania - Lancer C", + "countries": "All" + }, + "angola - c41": { + "name": "Angola - C41", + "countries": "All" + }, + "poland - 1 dlmw": { + "name": "Poland - 1 DLMW", + "countries": "All" + }, + "yugoslavia - gray": { + "name": "Yugoslavia - Grey", + "countries": "All" + }, + "angola - c314": { + "name": "Angola - C314", + "countries": "All" + }, + "argentina (1)": { + "name": "Argentina (1)", + "countries": "All" + }, + "romania - gray": { + "name": "Romania - Gray", + "countries": "All" + }, + "dprk - 2016 - 42": { + "name": "DPRK - 2016 Nr.42", + "countries": "All" + }, + "libya - early": { + "name": "Lybia - Early", + "countries": "All" + }, + "poland - metal": { + "name": "Poland - Lacquer Metal", + "countries": "All" + }, + "syria (2)": { + "name": "Syria (2)", + "countries": "All" + }, + "india - 15th sqn": { + "name": "India - 15 Sqn War Games", + "countries": "All" + }, + "cuba - um 5010 is": { + "name": "Cuba - UM 5010 IS", + "countries": "All" + }, + "afghanistan (2)": { + "name": "Afghanistan (2)", + "countries": "All" + }, + "iraq - 9th sqn": { + "name": "Iraq - 9th Sqn", + "countries": "All" + }, + "vpaf - 927th lam son - 6122": { + "name": "VPAF - 927th Lam Son", + "countries": "All" + }, + "yugoslavia - camo": { + "name": "Yugoslavia - Camo", + "countries": "All" + }, + "egypt - tan 1982": { + "name": "Egypt - Tan 1982", + "countries": "All" + }, + "croatia - 1st fs 1992": { + "name": "Croatia - 1st FS 1992", + "countries": "All" + }, + "southeria": { + "name": "Southeria", + "countries": "All" + }, + "ukraine (1)": { + "name": "Ukraine 01", + "countries": "All" + }, + "georgia (1)": { + "name": "Georgia (1)", + "countries": "All" + }, + "northeria - 32nd fs": { + "name": "Northeria - 32nd FG", + "countries": "All" + }, + "cuba - metal": { + "name": "Cuba - Metal", + "countries": "All" + }, + "huaf 47th ab - early": { + "name": "HunAF Griff Sqn. (47th AB) - Early ", + "countries": "All" + }, + "jasdf": { + "name": "JASDF", + "countries": "All" + }, + "raf - 111th sqn": { + "name": "RAF - 111th Sqn", + "countries": "All" + }, + "sweden - m90": { + "name": "Sweden - M90", + "countries": "All" + }, + "algeria": { + "name": "Algeria FD-43", + "countries": "All" + }, + "india - 101st sqn (2)": { + "name": "India - 101st Sqn Falcons (2)", + "countries": "All" + }, + "draken international": { + "name": "Draken International", + "countries": "All" + }, + "raf - 11th sqn": { + "name": "RAF - 11th Sqn", + "countries": "All" + }, + "vpaf - 921st sao do - 5040": { + "name": "VPAF - 921st Sao Do", + "countries": "All" + }, + "vvs - metal": { + "name": "VVS Metal", + "countries": "All" + }, + "iraq - 17th sqn (1)": { + "name": "Iraq - 17th Sqn (1)", + "countries": "All" + }, + "vvs - 185th gviap": { + "name": "VVS 185th GvIAP", + "countries": "All" + }, + "poland - 10 elt": { + "name": "Poland - 10 ELT", + "countries": "All" + }, + "dprk - 2014 - 34": { + "name": "DPRK - 2014 Nr.34", + "countries": "All" + }, + "huaf grey": { + "name": "HuAF Grey", + "countries": "All" + }, + "huaf 31st ab (turul sqn)": { + "name": "HunAF 1904 Capeti (51th AB)", + "countries": "All" + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew. Fishbed", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-23MLD": { + "name": "MiG-23MLD", + "coalition": "red", + "label": "MiG-23 Flogger", + "era": "Mid Cold War", + "shortLabel": "23", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-60M*4", + "name": "R-60M*4", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "B-8*2,R-60M*2,Fuel-800", + "name": "B-8*2,R-60M*2,Fuel-800", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "UB-32*2,R-60M*2,Fuel-800", + "name": "UB-32*2,R-60M*2,Fuel-800", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-24R*2,R-60M*4,Fuel-800", + "name": "R-24R*2,R-60M*4,Fuel-800", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-24T (AA-7 Apex IR) - Infra Red", + "quantity": 1 + }, + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + }, + { + "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-24R,R-24T,R-60M*4,Fuel-800", + "name": "R-24R,R-24T,R-60M*4,Fuel-800", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-60M*4,Fuel-800", + "name": "R-60M*4,Fuel-800", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*2,R-60M*2,Fuel-800", + "name": "FAB-500*2,R-60M*2,Fuel-800", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-24R*2,R-60M*4", + "name": "R-24R*2,R-60M*4", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*2,R-60M*2,Fuel-800", + "name": "FAB-250*2,R-60M*2,Fuel-800", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-250*2,R-60M*2,Fuel-800", + "name": "RBK-250*2,R-60M*2,Fuel-800", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-500*2,R-60M*2,Fuel-800", + "name": "RBK-500*2,R-60M*2,Fuel-800", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-24T (AA-7 Apex IR) - Infra Red", + "quantity": 1 + }, + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-24R,R-24T,R-60M*4", + "name": "R-24R,R-24T,R-60M*4", + "roles": [ + "CAP" + ] + } + ], + "filename": "mig-23.png", + "enabled": true, + "liveries": { + "af standard-2": { + "name": "af standard-2", + "countries": [ + "SUN", + "RUS" + ] + }, + "af standard-3 (worn-out)": { + "name": "af standard-3 (worn-out)", + "countries": [ + "SUN", + "RUS" + ] + }, + "algerian air force": { + "name": "Algerian Air Force", + "countries": [ + "DZA" + ] + }, + "af standard-1": { + "name": "af standard-1", + "countries": [ + "SUN", + "RUS" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swing wing, 1 crew. Flogger", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-25PD": { + "name": "MiG-25PD", + "coalition": "red", + "label": "MiG-25PD Foxbat", + "era": "Mid Cold War", + "shortLabel": "25P", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-40TD (AA-6 Acrid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-40R*2,R-40T*2", + "name": "R-40R*2,R-40T*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-40R*4", + "name": "R-40R*4", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-40R*2,R-60M*2", + "name": "R-40R*2,R-60M*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + } + ], + "filename": "mig-25.png", + "enabled": true, + "liveries": { + "algerian air force": { + "name": "Algeria Air Force standard", + "countries": [ + "DZA" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Foxbat", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-25RBT": { + "name": "MiG-25RBT", + "coalition": "red", + "label": "MiG-25RBT Foxbat", + "era": "Mid Cold War", + "shortLabel": "25R", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-500x2_60x2", + "name": "FAB-500x2_60x2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-60M*2", + "name": "R-60M*2", + "roles": [ + "Reconnaissance" + ] + } + ], + "filename": "mig-25.png", + "enabled": true, + "liveries": { + "algerian air force": { + "name": "Algeria Air Force standard", + "countries": [ + "DZA" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Foxbat", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-27K": { + "name": "MiG-27K", + "coalition": "red", + "label": "MiG-27K Flogger-D", + "era": "Mid Cold War", + "shortLabel": "M27", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*6,R-60M*2,Fuel", + "name": "FAB-250*6,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "BetAB-500ShP*2,FAB-250*2,R-60*2", + "name": "BetAB-500ShP*2,FAB-250*2,R-60*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Kh-25MR (AS-10 Karen) - 300kg, ASM, 10km, RC Guided", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-25MR*2,R-60M*2,Fuel", + "name": "Kh-25MR*2,R-60M*2,Fuel", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*2,R-60M*2,Fuel", + "name": "Kh-29L*2,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + } + ], + "enabled": true, + "code": "B-8*4", + "name": "B-8*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "BetAB-500*2,FAB-500*2,R-60*2", + "name": "BetAB-500*2,FAB-500*2,R-60*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-25MPU*2,R-60M*2,Fuel", + "name": "Kh-25MPU*2,R-60M*2,Fuel", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29T*2,R-60M*2,Fuel", + "name": "Kh-29T*2,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*2,FAB-250*2,R-60M*2,Fuel", + "name": "FAB-500*2,FAB-250*2,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-25ML*2,R-60M*2,Fuel", + "name": "Kh-25ML*2,R-60M*2,Fuel", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "KAB-500LG - 500kg Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "KAB-500*2,R-60M*2,Fuel", + "name": "KAB-500*2,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-500AO*2,RBK-250*2,R-60M*2", + "name": "RBK-500AO*2,RBK-250*2,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + } + ], + "enabled": true, + "code": "UB-32*4", + "name": "UB-32*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*2,R-60*2,Fuel", + "name": "Kh-29L*2,R-60*2,Fuel", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "mig-23.png", + "enabled": true, + "liveries": { + "algerian air force": { + "name": "Algerian Air Force", + "countries": [ + "DZA" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swing wing, 1 crew. Flogger", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-29A": { + "name": "MiG-29A", + "coalition": "red", + "label": "MiG-29A Fulcrum", + "era": "Late Cold War", + "shortLabel": "M29", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel tank 1150L MiG-29", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel-1150*2,Fuel-1500", + "name": "Fuel-1150*2,Fuel-1500", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-500AO*4,R-73*2,Fuel", + "name": "RBK-500AO*4,R-73*2,Fuel", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*4,R-73*2,Fuel", + "name": "FAB-250*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "B-8*4,R-73*2,Fuel", + "name": "B-8*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-60M*4,R-27R*2", + "name": "R-60M*4,R-27R*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*4,R-27R*2,Fuel-1500", + "name": "R-73*4,R-27R*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 6 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*6,Fuel-1500", + "name": "R-73*6,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 6 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-60M*6,Fuel-1500", + "name": "R-60M*6,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-24*4,R-73*2,Fuel", + "name": "S-24*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*4,R-73*2,Fuel", + "name": "FAB-500*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-60M*6", + "name": "R-60M*6", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500*4,R-73*2,Fuel", + "name": "BetAB-500*4,R-73*2,Fuel", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*6", + "name": "R-73*6", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", + "name": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-60M*4,R-27R*2,Fuel-1500", + "name": "R-60M*4,R-27R*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-250*4,R-73*2,Fuel", + "name": "RBK-250*4,R-73*2,Fuel", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-73*4,R-27R*2", + "name": "R-73*4,R-27R*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-73*2,R-60M*2,R-27R*2", + "name": "R-73*2,R-60M*2,R-27R*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-24*2,FAB-500*2,R-73*2,Fuel", + "name": "S-24*2,FAB-500*2,R-73*2,Fuel", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "mig-29.png", + "enabled": true, + "liveries": { + "air force ukraine standard": { + "name": "Air Force (Standard)", + "countries": [ + "UKR" + ] + }, + "air force standard": { + "name": "Air Force (Standard)", + "countries": [ + "SUN", + "RUS" + ] + }, + "strizhi": { + "name": "Strizhi 1992", + "countries": [ + "RUS" + ] + }, + "domna 120th ar": { + "name": "Domna - 120th Aviation Regiment", + "countries": [ + "RUS" + ] + }, + "mary-1 agressors": { + "name": "Soviet Air Forces, a/b 1521 (Mary-1)", + "countries": [ + "RUS" + ] + }, + "polish 41st sqn standard1": { + "name": "41st Sqn Standard 1", + "countries": [ + "POL" + ] + }, + "iriaf sand-blue": { + "name": "IRIAF sand-blue", + "countries": [ + "IRN" + ] + }, + "strizhi (w)": { + "name": "Strizhi 1992(W)", + "countries": [ + "RUS" + ] + }, + "polish 41st sqn standard2": { + "name": "41st Sqn Standard 2", + "countries": [ + "POL" + ] + }, + "vasylkiv 40th brta": { + "name": "Vasylkiv - 40th Brigade of Tactical Aviation", + "countries": [ + "UKR" + ] + }, + "kazakhstan air defense forces": { + "name": "KazAADF 600th Airbase 2015", + "countries": [ + "KAZ" + ] + }, + "kazakhstan kazaadf 2008": { + "name": "KazAADF 600th Airbase 2008", + "countries": [ + "KAZ" + ] + }, + "iriaf blue-grey": { + "name": "IRIAF blue-grey", + "countries": [ + "IRN" + ] + }, + "syaaf": { + "name": "Syrian Arab Air Force", + "countries": [ + "SYR" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Flanker", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-29S": { + "name": "MiG-29S", + "coalition": "red", + "label": "MiG-29S Fulcrum", + "era": "Late Cold War", + "shortLabel": "M29", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-73*2,R-60M*2,R-27R*2", + "name": "R-73*2,R-60M*2,R-27R*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*4,R-27R*2,Fuel-1500", + "name": "R-73*4,R-27R*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 6 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*6,Fuel-1500", + "name": "R-73*6,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 6 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-60M*6,Fuel-1500", + "name": "R-60M*6,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-24*4,R-73*2,Fuel", + "name": "S-24*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*4,R-73*2,Fuel", + "name": "FAB-500*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500*4,R-73*2,Fuel", + "name": "BetAB-500*4,R-73*2,Fuel", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-500AO*4,R-73*2,Fuel", + "name": "RBK-500AO*4,R-73*2,Fuel", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", + "name": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1150L MiG-29", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-77*2,R-73*2,Fuel-1500,Fuel-1150*2", + "name": "R-77*2,R-73*2,Fuel-1500,Fuel-1150*2", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "B-8*4,R-73*2,Fuel", + "name": "B-8*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-250*4,R-73*2,Fuel", + "name": "RBK-250*4,R-73*2,Fuel", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*6", + "name": "R-73*6", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel tank 1150L MiG-29", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel-1150*2,Fuel-1500", + "name": "Fuel-1150*2,Fuel-1500", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-60M*6", + "name": "R-60M*6", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-60M*4,R-27R*2", + "name": "R-60M*4,R-27R*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-73*4,R-27R*2", + "name": "R-73*4,R-27R*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-77*4,R-73*2", + "name": "R-77*4,R-73*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*4,R-73*2,Fuel", + "name": "FAB-250*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-60M*4,R-27R*2,Fuel-1500", + "name": "R-60M*4,R-27R*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-77*4,R-73*2,Fuel-1500", + "name": "R-77*4,R-73*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-24*2,FAB-500*2,R-73*2,Fuel", + "name": "S-24*2,FAB-500*2,R-73*2,Fuel", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "mig-29.png", + "enabled": true, + "liveries": { + "algerian af fc-16": { + "name": "Algerian AF FC-16", + "countries": [ + "DZA" + ] + }, + "air force ukraine standard": { + "name": "Air Force (Standard)", + "countries": [ + "UKR" + ] + }, + "air force standard": { + "name": "Air Force (Standard)", + "countries": [ + "RUS" + ] + }, + "kazaadf new faded (fictional)": { + "name": "KazAADF new faded (fictional)", + "countries": [ + "KAZ" + ] + }, + "strizhi": { + "name": "Strizhi 2003", + "countries": [ + "RUS" + ] + }, + "115 gviap_termez": { + "name": "Termez AFB, 115th Guards Aviation Regiment", + "countries": [ + "RUS" + ] + }, + "1521th air base_mary-1": { + "name": "Mary-1 AFB, 1521st Air Force Base", + "countries": [ + "RUS" + ] + }, + "kazaadf old (fictional)": { + "name": "KazAADF old (fictional)", + "countries": [ + "KAZ" + ] + }, + "swifts": { + "name": "Swifts (Aerobatic team)", + "countries": [ + "RUS" + ] + }, + "773 iap_damgarten": { + "name": "Damgarten AFB, 773rd Aviation Regiment", + "countries": [ + "RUS" + ] + }, + "426th air group_erebuni": { + "name": "Erebuni AFB, 426th Air Group", + "countries": [ + "RUS" + ] + }, + "31 gviap_zernograd": { + "name": "Zernograd AFB, 31st Guards Aviation Regiment", + "countries": [ + "RUS" + ] + }, + "28 gviap_andreapol": { + "name": "Andreapol AFB, 28th Guards Aviation Regiment", + "countries": [ + "RUS" + ] + }, + "belarusian air force": { + "name": "Belarusian Air Force 61 FAB Baranavichy (2017)", + "countries": [ + "BLR" + ] + }, + "kazaadf new (fictional)": { + "name": "KazAADF new (fictional)", + "countries": [ + "KAZ" + ] + }, + "falcons of russia": { + "name": "Lipetsk, aerobatic group Falcons of Russia", + "countries": [ + "RUS" + ] + }, + "kazaadf new (fictional digital)": { + "name": "KazAADF new digital (fictional digital)", + "countries": [ + "KAZ" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Flanker", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-31": { + "name": "MiG-31", + "coalition": "red", + "label": "MiG-31 Foxhound", + "era": "Late Cold War", + "shortLabel": "M31", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-40TD (AA-6 Acrid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-40T*2,R-33*4", + "name": "R-40T*2,R-33*4", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", + "quantity": 1 + }, + { + "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", + "quantity": 4 + }, + { + "name": "R-40TD (AA-6 Acrid) - Infra Red", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-40T,R-33*4,R-40R", + "name": "R-40T,R-33*4,R-40R", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-40R*2,R-33*4", + "name": "R-40R*2,R-33*4", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-60M*4,R-33*4", + "name": "R-60M*4,R-33*4", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + } + ], + "filename": "mig-23.png", + "enabled": true, + "liveries": { + "174 gviap_boris safonov": { + "name": "174 GvIAP Boris Safonov", + "countries": [ + "RUS" + ] + }, + "903_white": { + "name": "Demo 903 White", + "countries": [ + "RUS" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 2 crew. Foxhound", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Mirage-F1EE": { + "name": "Mirage-F1EE", + "coalition": "blue", + "label": "Mirage-F1EE", + "era": "Mid Cold War", + "shortLabel": "MF1", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "R530F IR", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", + "name": "2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "R530F EM", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM9-JULI, 2*R530EM, 1*Fuel Tank", + "name": "2*AIM9-JULI, 2*R530EM, 1*Fuel Tank", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "R530F IR", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", + "name": "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "R530F EM", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM9-JULI, 1*R530EM", + "name": "2*AIM9-JULI, 1*R530EM", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "R530F IR", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 1*R530IR", + "name": "2*R550 Magic I, 1*R530IR", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 2 + }, + { + "name": "R530F IR", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", + "name": "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 2 + }, + { + "name": "R530F IR", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", + "name": "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9J Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "MATRA F4 - 18 x UnGd Rkts, 68 mm SNEB Type 251 F1B HE", + "quantity": 2 + }, + { + "name": "R530F IR", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", + "name": "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9J Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 2 + }, + { + "name": "CLB 4 - 4 x SAMP-400 - 400 kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", + "name": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9J Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 2 + }, + { + "name": "CLB 4 - 4 x SAMP-400 - 400 kg GP Chute Retarded Bomb HD", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", + "name": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "MATRA F1 - 36 x UnGd Rkts, 68 mm SNEB Type 253 F1B HEAT", + "quantity": 4 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", + "name": "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "MATRA F4 - 18 x UnGd Rkts, 68 mm SNEB Type 253 F1B HEAT", + "quantity": 4 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", + "name": "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "MATRA F1 - 36 x UnGd Rkts, 68 mm SNEB Type 256 F1B HE/Frag", + "quantity": 4 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", + "name": "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "MATRA F4 - 18 x UnGd Rkts, 68 mm SNEB Type 256 F1B HE/Frag", + "quantity": 4 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", + "name": "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "SAMP-250 - 250 kg GP Chute Retarded Bomb HD", + "quantity": 2 + }, + { + "name": "MATRA F1 - 36 x UnGd Rkts, 68 mm SNEB Type 256 F1B HE/Frag", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", + "name": "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "SAMP-250 - 250 kg GP Chute Retarded Bomb HD", + "quantity": 4 + }, + { + "name": "CLB 4 - 4 x SAMP-250 - 250 kg GP Chute Retarded Bomb HD", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9JULI, 8*SAMP 250 HD", + "name": "2*AIM-9JULI, 8*SAMP 250 HD", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "SAMP-400 - 400 kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "CLB 4 - 4 x SAMP-400 - 400 kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9JULI, 8*SAMP 400 LD", + "name": "2*AIM-9JULI, 8*SAMP 400 LD", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BLU-107/B Durandal - 219kg Concrete Piercing Chute Retarded Bomb w/Booster", + "quantity": 4 + }, + { + "name": "CLB 4 - 4 x BLU-107/B Durandal - 219kg Concrete Piercing Chute Retarded Bomb w/Booster", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9JULI, 8*BLU107 Durandal", + "name": "2*AIM-9JULI, 8*BLU107 Durandal", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "S530F", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM9-JULI, 2*S530F, 1*Fuel Tank", + "name": "2*AIM9-JULI, 2*S530F, 1*Fuel Tank", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "S530F", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 2*S530F, 1*Fuel Tank", + "name": "2*R550 Magic I, 2*S530F, 1*Fuel Tank", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "S530F", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + }, + { + "name": "BARAX - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 2*S530F, 1*Fuel Tank, 1*BARAX ECM Pod", + "name": "2*R550 Magic I, 2*S530F, 1*Fuel Tank, 1*BARAX ECM Pod", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + } + ], + "filename": "f-5.png", + "enabled": true, + "liveries": { + "ec 330 lorraine": { + "name": "EC 330 Lorraine", + "countries": [ + "FRA" + ] + }, + "ec 5 330 cote d'argent (fictional ct)": { + "name": "EC 5/330 Cote d'Argent (FICTIONAL CT)", + "countries": [ + "FRA" + ] + }, + "er 2 33 savoie 100 ans de reco (fictional cr)": { + "name": "ER 233 Savoie 100 ans de reco (FICTIONAL CR)", + "countries": [ + "FRA" + ] + }, + "iriaf 3-6210 _ 2017 blue (eq variant)": { + "name": "IRIAF 3-6210 _ 2017 Blue (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "iriaf 3-6209 _ 2010s blue_gray (eq variant)": { + "name": "IRIAF 3-6209 _ 2010s Blue_Gray (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "er 233 savoie ba 118 mont de marsan (fictional cr)": { + "name": "ER 2/33 Savoie BA 118 Mont de Marsan (FICTIONAL CR)", + "countries": [ + "FRA" + ] + }, + "ala 14 blue skin (ee) albacete": { + "name": "ALA 14 Blue Skin (EE) Albacete", + "countries": [ + "SPN" + ] + }, + "usa company skin (m-ee)": { + "name": "USA Company Skin EE", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ala 14 nato skin 1 (ee)": { + "name": "ALA 14 NATO Skin 1 (EE)", + "countries": [ + "SPN" + ] + }, + "iriaf 3-6210 _ 2013 gray (eq variant)": { + "name": "IRIAF 3-6210 _ 2013 Gray (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "usa company skin 2 (m-ee)": { + "name": "USA Company Skin 2 EE", + "countries": [ + "USA", + "AUSAF" + ] + }, + "iriaf 3-6214 _ 2021 blue (eq variant)": { + "name": "IRIAF 3-6214 _ 2021 Blue (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "aerges nato grey": { + "name": "AERGES NATO GREY", + "countries": [ + "CUB", + "AUS", + "PRT", + "SUN", + "USA", + "BLR", + "HRV", + "LBN", + "SVK", + "TUR", + "ARG", + "BEL", + "FIN", + "SAU", + "RSI", + "CHL", + "AUT", + "EGY", + "ECU", + "CAN", + "QAT", + "YUG", + "ISR", + "PER", + "BHR", + "NGA", + "IDN", + "KAZ", + "INS", + "AUSAF", + "PAK", + "SVN", + "ROU", + "DEN", + "TUN", + "IND", + "CZE", + "MYS", + "GHA", + "OMN", + "RSO", + "IRN", + "UKR", + "JPN", + "THA", + "JOR", + "RSA", + "MEX", + "NOR", + "ITA", + "NETH", + "SUI", + "VNM", + "KOR", + "GRG", + "SDN", + "UK", + "BRA", + "ARE", + "ABH", + "BOL", + "RUS", + "PHL", + "SPN", + "MAR", + "DZA", + "GDR", + "HND", + "PRK", + "SRB", + "BGR", + "LBY", + "VEN", + "IRQ", + "SYR", + "NZG", + "GRC", + "POL", + "SWE", + "GER", + "CHN", + "YEM", + "FRA", + "HUN", + "ETH", + "KWT" + ] + }, + "ec 3 33 lorraine ba 112 reims - champagne ardennes": { + "name": "EC 333 Lorraine BA 112 Reims - Champagne Ardennes", + "countries": [ + "FRA" + ] + }, + "ec 1 12 cambresis": { + "name": "EC 112 BA 103 Cambrai-\u00c9pinoy", + "countries": [ + "FRA" + ] + }, + "ala 46 blue skin (ee) gando": { + "name": "ALA 46 Blue Skin (EE) Gando", + "countries": [ + "SPN" + ] + }, + "aerges blue": { + "name": "AERGES BLUE", + "countries": [ + "CUB", + "AUS", + "PRT", + "SUN", + "USA", + "BLR", + "HRV", + "LBN", + "SVK", + "TUR", + "ARG", + "BEL", + "FIN", + "SAU", + "RSI", + "CHL", + "AUT", + "EGY", + "ECU", + "CAN", + "QAT", + "YUG", + "ISR", + "PER", + "BHR", + "NGA", + "IDN", + "KAZ", + "INS", + "AUSAF", + "PAK", + "SVN", + "ROU", + "DEN", + "TUN", + "IND", + "CZE", + "MYS", + "GHA", + "OMN", + "RSO", + "IRN", + "UKR", + "JPN", + "THA", + "JOR", + "RSA", + "MEX", + "NOR", + "ITA", + "NETH", + "SUI", + "VNM", + "KOR", + "GRG", + "SDN", + "UK", + "BRA", + "ARE", + "ABH", + "BOL", + "RUS", + "PHL", + "SPN", + "MAR", + "DZA", + "GDR", + "HND", + "PRK", + "SRB", + "BGR", + "LBY", + "VEN", + "IRQ", + "SYR", + "NZG", + "GRC", + "POL", + "SWE", + "GER", + "CHN", + "YEM", + "FRA", + "HUN", + "ETH", + "KWT" + ] + }, + "ec 212 picardie": { + "name": "EC 212 Picardie", + "countries": [ + "FRA" + ] + }, + "iriaf 3-6212 _ col. naghdibake (eq variant)": { + "name": "IRIAF 3-6212 _ Col. Naghdibake (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "iriaf 3-6211 _ 2010s blue_gray (eq variant)": { + "name": "IRIAF 3-6211 _ 2010s Blue_Gray (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "ec 1 5 vendee ba orange-cariat": { + "name": "EC 1/5 Vendee BA 115 Orange-Cariat", + "countries": [ + "FRA" + ] + }, + "er 233 savoie ba 118 mont de marsan dessert camu (fictional cr)": { + "name": "ER 233 Savoie BA 118 Mont de Marsan Dessert Camu (FICTIONAL CR)", + "countries": [ + "FRA" + ] + }, + "iriaf 3-6215 _ 2021 blue (eq variant)": { + "name": "IRIAF 3-6215 _ 2021 Blue (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "iriaf 3-6210 _ 2021 blue (eq variant)": { + "name": "IRIAF 3-6210 _ 2021 Blue (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "ala 46 sq 462 blue skin (ee) gando": { + "name": "ALA 46 SQ 462 Blue Skin (EE) Gando", + "countries": [ + "SPN" + ] + }, + "ec 2 30 normandie niemen (fictional ct)": { + "name": "EC 2/30 Normandie Niemen (FICTIONAL CT)", + "countries": [ + "FRA" + ] + }, + "iriaf 3-6215 _ 1990-2010s desert (eq variant)": { + "name": "IRIAF 3-6215 _ 1990-2010s Desert (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "aerges camo": { + "name": "AERGES CAMO", + "countries": [ + "CUB", + "AUS", + "PRT", + "SUN", + "USA", + "BLR", + "HRV", + "LBN", + "SVK", + "TUR", + "ARG", + "BEL", + "FIN", + "SAU", + "RSI", + "CHL", + "AUT", + "EGY", + "ECU", + "CAN", + "QAT", + "YUG", + "ISR", + "PER", + "BHR", + "NGA", + "IDN", + "KAZ", + "INS", + "AUSAF", + "PAK", + "SVN", + "ROU", + "DEN", + "TUN", + "IND", + "CZE", + "MYS", + "GHA", + "OMN", + "RSO", + "IRN", + "UKR", + "JPN", + "THA", + "JOR", + "RSA", + "MEX", + "NOR", + "ITA", + "NETH", + "SUI", + "VNM", + "KOR", + "GRG", + "SDN", + "UK", + "BRA", + "ARE", + "ABH", + "BOL", + "RUS", + "PHL", + "SPN", + "MAR", + "DZA", + "GDR", + "HND", + "PRK", + "SRB", + "BGR", + "LBY", + "VEN", + "IRQ", + "SYR", + "NZG", + "GRC", + "POL", + "SWE", + "GER", + "CHN", + "YEM", + "FRA", + "HUN", + "ETH", + "KWT" + ] + }, + "usa company grey (m-ee)": { + "name": "USA Company Grey EE", + "countries": [ + "USA", + "AUSAF" + ] + } + }, + "type": "Aircraft", + "description": "Single Jet engine, swept wing, 1 crew.", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MosquitoFBMkVI": { + "name": "MosquitoFBMkVI", + "coalition": "blue", + "label": "Mosquito FB MkVI", + "era": "WW2", + "shortLabel": "Mos", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "500 lb S.A.P.", + "quantity": 2 + }, + { + "name": "250 lb S.A.P.", + "quantity": 2 + } + ], + "enabled": true, + "code": "250 lb S.A.P*2; 500 lb S.A.P.*2", + "name": "250 lb S.A.P*2; 500 lb S.A.P.*2", + "roles": [ + "CAP", + "Strike" + ] + }, + { + "items": [ + { + "name": "500 lb GP Mk.V", + "quantity": 2 + }, + { + "name": "500 lb MC Short tail", + "quantity": 2 + } + ], + "enabled": true, + "code": "500 lb GP Mk.V*2, 500 lb GP Short tail*2", + "name": "500 lb GP Mk.V*2, 500 lb GP Short tail*2", + "roles": [ + "CAP", + "Strike", + "CAS", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "100 gal. Drop Tank", + "quantity": 2 + }, + { + "name": "500 lb MC Short tail", + "quantity": 2 + } + ], + "enabled": true, + "code": "100 gal Drop tank*2, 500 lb MC Short tail*2", + "name": "100 gal Drop tank*2, 500 lb MC Short tail*2", + "roles": [ + "CAP", + "Strike" + ] + }, + { + "items": [ + { + "name": "", + "quantity": 2 + }, + { + "name": "250 lb S.A.P.", + "quantity": 2 + }, + { + "name": "4 x RP-3 60lb SAP No2 Mk.I", + "quantity": 2 + } + ], + "enabled": true, + "code": "RP-3 60lb SAP No2 Mk.I*8, 250 lb A.A.P.*2", + "name": "RP-3 60lb SAP No2 Mk.I*8, 250 lb A.A.P.*2", + "roles": [ + "CAP", + "Antiship Strike", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "2 x RP-3 60lb F No1 Mk.I", + "quantity": 2 + }, + { + "name": "100 gal. Drop Tank", + "quantity": 2 + }, + { + "name": "250 lb MC Mk.II", + "quantity": 2 + } + ], + "enabled": true, + "code": "100 gal. Drop tank*2, 250 lb MC Mk.II, RP-3 60lb F No1 Mk.I*4", + "name": "100 gal. Drop tank*2, 250 lb MC Mk.II, RP-3 60lb F No1 Mk.I*4", + "roles": [ + "CAP", + "Antiship Strike", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "500 lb GP Short tail", + "quantity": 4 + } + ], + "enabled": true, + "code": "500 lb GP Short tail*4", + "name": "500 lb GP Short tail*4", + "roles": [ + "CAP", + "Strike", + "CAS", + "Runway Attack" + ] + } + ], + "filename": "mosquito.png", + "enabled": true, + "liveries": { + "25th bombardment group p": { + "name": "USAAF 25th Bombardment Group \"P\" (Invasion Stripes)", + "countries": [ + "USA" + ] + }, + "l-3 pz474 1945": { + "name": "L-3 PZ474 1945", + "countries": [] + }, + "raf": { + "name": "RAF 1944", + "countries": "All" + }, + "605 sqn up-j wag's war wagon": { + "name": "605 Sqn UP-J \"Wag's War Wagon\"", + "countries": "All" + }, + "605 sqn up-o": { + "name": "605 Sqn UP-O", + "countries": "All" + }, + "605 sqn": { + "name": "605 Sqn", + "countries": "All" + }, + "iaf - 1956 - 110th squadron": { + "name": "IAF - 1956 - 110th Squadron", + "countries": "All" + }, + "ussr air force": { + "name": "USSR Air Force", + "countries": [] + }, + "no. 235 squadron raf 1944": { + "name": "No. 235 Squadron RAF 1944", + "countries": [] + }, + "no. 613 squadron raf june 1944": { + "name": "No. 613 Squadron RAF, June 1944", + "countries": [ + "UK" + ] + }, + "arm\u00e9e de l'air blue": { + "name": "Arm\u00e9e de L'air Blue Camo", + "countries": [ + "FRA" + ] + }, + "raf, ml897d, no.1409 met flight, wyton, late 1943": { + "name": "RAF, ML897/D, No.1409 Met Flight, Wyton, late 1943", + "countries": [ + "UK" + ] + }, + "no. 27 squadron raf popeye camo letters on": { + "name": "No. 27 Squadron RAF Popeye Camo Letters on", + "countries": [] + }, + "25th bombardment group f": { + "name": "USAAF 25th Bombardment Group \"F\"", + "countries": [ + "USA" + ] + }, + "305sqn july": { + "name": "305Sqn July 1944", + "countries": [] + }, + "305sqn june": { + "name": "305Sqn June 1944", + "countries": [] + }, + "25th bombardment group z": { + "name": "USAAF 25th Bombardment Group \"Z\" (Invasion Stripes)", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "2 propeller, straight wing, 2 crew. Mosquito.", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "P-47D-40": { + "name": "P-47D-40", + "coalition": "blue", + "label": "P-47D Thunderbolt", + "era": "WW2", + "shortLabel": "P47", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "AN-M65 - 1000lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AN-M65*2", + "name": "AN-M65*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "150 US gal. Fuel Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "Fuel150*2", + "name": "Fuel150*2", + "roles": [ + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AN-M57 - 250lb GP Bomb LD", + "quantity": 3 + } + ], + "enabled": true, + "code": "AN-M57*3", + "name": "AN-M57*3", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "AN-M64 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "110 US gal. Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AN-M64*2, Fuel110", + "name": "AN-M64*2, Fuel110", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "3 x 4.5 inch M8 UnGd Rocket", + "quantity": 2 + }, + { + "name": "AN-M57 - 250lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "110 US gal. Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "M8*6, AN-M57*2, Fuel110", + "name": "M8*6, AN-M57*2, Fuel110", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "5 x HVAR, UnGd Rkt", + "quantity": 2 + }, + { + "name": "110 US gal. Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "HVAR*10, Fuel110", + "name": "HVAR*10, Fuel110", + "roles": [ + "Strike", + "CAS" + ] + } + ], + "filename": "p-47.png", + "enabled": true, + "liveries": { + "79thfg 86thfs the trojan warhorse": { + "name": "79thFG 86thFS The Trojan Warhorse", + "countries": [ + "USA" + ] + }, + "61st_fs_d_day": { + "name": "61st FS, D-day", + "countries": [ + "USA" + ] + }, + "lt_col_gabreski_d_day": { + "name": "Lt.Col. Gabby Gabreski, 61st FS, D-day", + "countries": [ + "USA" + ] + }, + "lt_col_benjamin_mayo": { + "name": "Lt.Col. Benjamin Mayo", + "countries": [ + "USA" + ] + }, + "eagle dynamics commemorative": { + "name": "Eagle Dynamics Commemorative", + "countries": [ + "USA" + ] + }, + "tony 5th emergency rescue squadron": { + "name": "TONY 5th Emergency Rescue Squadron", + "countries": [ + "USA" + ] + }, + "usaf standard": { + "name": "USAF standard", + "countries": [ + "USA" + ] + }, + "maj_howard_park_1945": { + "name": "Maj. Howard Park, 513th FS, France 1945", + "countries": [ + "USA" + ] + }, + "61st_fs_8th_af_hvz": { + "name": "61st FS 8th Air Force HV-Z (Capt. Witold Lanowski)", + "countries": [ + "USA", + "POL" + ] + }, + "53rd_fs_9th_air_force": { + "name": "53rd Fighter Squadron", + "countries": [ + "USA" + ] + }, + "1st brazilian ftr sq-jambock a1-menezes": { + "name": "1st Brazilian Ftr Sq-Jambock A1-Menezes", + "countries": [] + }, + "61st_fs_1944": { + "name": "61st FS, July 1944", + "countries": [ + "USA" + ] + }, + "lt_col_gabreski_1944": { + "name": "Lt.Col. Gabby Gabreski, 61st FS, July 1944", + "countries": [ + "USA" + ] + }, + "lend-lease": { + "name": "Lend-Lease", + "countries": [ + "SUN", + "RUS" + ] + }, + "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d28": { + "name": "509th FS 405th FG \"Chief Ski-U-Mah\" for D-30 (Early) ", + "countries": "All" + }, + "ussr-blue-scheme": { + "name": "USSR - blue", + "countries": [ + "SUN", + "RUS" + ] + }, + "raf thunderbolt": { + "name": "RAF Thunderbolt", + "countries": [] + }, + "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d40": { + "name": "509th FS 405th FG \"Chief Ski-U-Mah\"", + "countries": "All" + }, + "warchief": { + "name": "WarChief", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "Single propellor, straight wing, 1 crew. Thunderbolt", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "P-51D-30-NA": { + "name": "P-51D-30-NA", + "coalition": "blue", + "label": "P-51D Mustang", + "era": "WW2", + "shortLabel": "P51", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "75 US gal. Fuel Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "Fuel75*2", + "name": "Fuel75*2", + "roles": [ + "CAP", + "CAP", + "FAC-A" + ] + }, + { + "items": [ + { + "name": "HVAR, UnGd Rkt", + "quantity": 6 + }, + { + "name": "75 US gal. Fuel Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "HVAR*6,Fuel75*2", + "name": "HVAR*6,Fuel75*2", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "HVAR, UnGd Rkt", + "quantity": 6 + }, + { + "name": "AN-M64 - 500lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "HVAR*6,M64*2", + "name": "HVAR*6,M64*2", + "roles": [ + "CAS", + "Strike", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "HVAR, UnGd Rkt", + "quantity": 6 + } + ], + "enabled": true, + "code": "HVAR*6", + "name": "HVAR*6", + "roles": [ + "CAS", + "Strike", + "Antiship Strike", + "FAC-A" + ] + }, + { + "items": [ + { + "name": "AN-M64 - 500lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "M64*2", + "name": "M64*2", + "roles": [ + "Strike", + "Antiship Strike", + "CAS", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "HVAR, UnGd Rkt", + "quantity": 10 + } + ], + "enabled": true, + "code": "HVAR*10", + "name": "HVAR*10", + "roles": [ + "CAS", + "Strike", + "Runway Attack", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "HVAR Smoke Generator", + "quantity": 2 + } + ], + "enabled": true, + "code": "Smokes", + "name": "Smokes", + "roles": [] + } + ], + "filename": "p-51.png", + "enabled": true, + "liveries": { + "79thfg 86thfs the trojan warhorse": { + "name": "79thFG 86thFS The Trojan Warhorse", + "countries": [ + "USA" + ] + }, + "61st_fs_d_day": { + "name": "61st FS, D-day", + "countries": [ + "USA" + ] + }, + "lt_col_gabreski_d_day": { + "name": "Lt.Col. Gabby Gabreski, 61st FS, D-day", + "countries": [ + "USA" + ] + }, + "lt_col_benjamin_mayo": { + "name": "Lt.Col. Benjamin Mayo", + "countries": [ + "USA" + ] + }, + "eagle dynamics commemorative": { + "name": "Eagle Dynamics Commemorative", + "countries": [ + "USA" + ] + }, + "tony 5th emergency rescue squadron": { + "name": "TONY 5th Emergency Rescue Squadron", + "countries": [ + "USA" + ] + }, + "usaf standard": { + "name": "USAF standard", + "countries": [ + "USA" + ] + }, + "maj_howard_park_1945": { + "name": "Maj. Howard Park, 513th FS, France 1945", + "countries": [ + "USA" + ] + }, + "61st_fs_8th_af_hvz": { + "name": "61st FS 8th Air Force HV-Z (Capt. Witold Lanowski)", + "countries": [ + "USA", + "POL" + ] + }, + "53rd_fs_9th_air_force": { + "name": "53rd Fighter Squadron", + "countries": [ + "USA" + ] + }, + "1st brazilian ftr sq-jambock a1-menezes": { + "name": "1st Brazilian Ftr Sq-Jambock A1-Menezes", + "countries": [] + }, + "61st_fs_1944": { + "name": "61st FS, July 1944", + "countries": [ + "USA" + ] + }, + "lt_col_gabreski_1944": { + "name": "Lt.Col. Gabby Gabreski, 61st FS, July 1944", + "countries": [ + "USA" + ] + }, + "lend-lease": { + "name": "Lend-Lease", + "countries": [ + "SUN", + "RUS" + ] + }, + "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d28": { + "name": "509th FS 405th FG \"Chief Ski-U-Mah\" for D-30 (Early) ", + "countries": "All" + }, + "ussr-blue-scheme": { + "name": "USSR - blue", + "countries": [ + "SUN", + "RUS" + ] + }, + "raf thunderbolt": { + "name": "RAF Thunderbolt", + "countries": [] + }, + "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d40": { + "name": "509th FS 405th FG \"Chief Ski-U-Mah\"", + "countries": "All" + }, + "warchief": { + "name": "WarChief", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "Single propellor, straight wing, 1 crew. Mustang", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "S-3B Tanker": { + "name": "S-3B Tanker", + "coalition": "blue", + "label": "S-3B Tanker", + "era": "Early Cold War", + "shortLabel": "S3B", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Tanker" + ] + } + ], + "filename": "s-3.png", + "enabled": true, + "liveries": { + "usaf standard": { + "name": "NAVY Standard", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, straight wing, 4 crew. Viking", + "abilities": "Tanker, Drogue AAR, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "Su-17M4": { + "name": "Su-17M4", + "coalition": "red", + "label": "Su-17M4 Fitter", + "era": "Mid Cold War", + "shortLabel": "S17", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "UB-32*4,R-60M*2,FAB-250*4", + "name": "UB-32*4,R-60M*2,FAB-250*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", + "quantity": 6 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100*24,R-60M*2", + "name": "FAB-100*24,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "UB-32*4,R-60M*2,Fuel*2", + "name": "UB-32*4,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "B-8*4,R-60M*2,FAB-250*4", + "name": "B-8*4,R-60M*2,FAB-250*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,R-60M*2,Fuel*2", + "name": "Kh-29L*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "B-8*4,R-60M*2,Fuel*2", + "name": "B-8*4,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29T*2,R-60M*2,Fuel*2", + "name": "Kh-29T*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 6 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "BetAB-500*6,R-60M*2", + "name": "BetAB-500*6,R-60M*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Kh-25MR (AS-10 Karen) - 300kg, ASM, 10km, RC Guided", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-25MR*4,R-60M*2,Fuel*2", + "name": "Kh-25MR*4,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-24*4,R-60M*2,Fuel*2", + "name": "S-24*4,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh25MPU*2_Kh25ML*2_,R60M*2_Fuel*2", + "name": "Kh25MPU*2_Kh25ML*2_,R60M*2_Fuel*2", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh58*2_Kh25MPU*2_R60M*2_Fuel*2", + "name": "Kh58*2_Kh25MPU*2_R60M*2_Fuel*2", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 4 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*16,R-60M*2", + "name": "FAB-250*16,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-25ML*4,R-60M*2,Fuel*2", + "name": "Kh-25ML*4,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-500AO*4,SPPU-22*2,R-60M*2", + "name": "RBK-500AO*4,SPPU-22*2,R-60M*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-24*4,R-60M*2,FAB-250*4", + "name": "S-24*4,R-60M*2,FAB-250*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel tank 1150L", + "quantity": 4 + } + ], + "enabled": true, + "code": "Fuel*4", + "name": "Fuel*4", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-500*6,R-60M*2", + "name": "FAB-500*6,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-25ML*2,Kh-29L*2,R-60*2", + "name": "Kh-25ML*2,Kh-29L*2,R-60*2", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "su-17.png", + "enabled": true, + "liveries": { + "af standard (worn-out)": { + "name": "af standard (worn-out)", + "countries": [ + "UKR" + ] + }, + "shap limanskoye ab": { + "name": "shap limanskoye ab", + "countries": [ + "UKR" + ] + }, + "af standard (rus)": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + }, + "af standard (worn-out) (rus)": { + "name": "af standard (worn-out)", + "countries": [ + "RUS" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "UKR" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew. Fitter", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Su-24M": { + "name": "Su-24M", + "coalition": "red", + "label": "Su-24M Fencer", + "era": "Mid Cold War", + "shortLabel": "S24", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 4 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "UB-13*4,FAB-500*2", + "name": "UB-13*4,FAB-500*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-31A*2,R-60M*2,Fuel", + "name": "Kh-31A*2,R-60M*2,Fuel", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 4 + } + ], + "enabled": true, + "code": "UB-13*4", + "name": "UB-13*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "KAB-500LG - 500kg Laser Guided Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "KAB-500*4,R-60M*2", + "name": "KAB-500*4,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "Fuel tank 3000L", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-25*2,Fuel*3", + "name": "S-25*2,Fuel*3", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "L-081 Fantasmagoria ELINT pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh31P*2_Kh25ML*2_L-081", + "name": "Kh31P*2_Kh25ML*2_L-081", + "roles": [ + "SEAD", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "Fuel tank 3000L", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "B-8*2,Fuel*3", + "name": "B-8*2,Fuel*3", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-1500 M-54 - 1500kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-1500*2,R-60M*2", + "name": "FAB-1500*2,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-24*4", + "name": "S-24*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "BetAB-500*4,R-60M*2", + "name": "BetAB-500*4,R-60M*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + } + ], + "enabled": true, + "code": "Kh-25ML*4", + "name": "Kh-25ML*4", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Kh-25MR (AS-10 Karen) - 300kg, ASM, 10km, RC Guided", + "quantity": 4 + } + ], + "enabled": true, + "code": "Kh-25MR*4", + "name": "Kh-25MR*4", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "FAB-100*24", + "name": "FAB-100*24", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-31A*2,R-60M*2", + "name": "Kh-31A*2,R-60M*2", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "Fuel tank 3000L", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "UB-13*2,Fuel*3", + "name": "UB-13*2,Fuel*3", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "Fuel tank 3000L", + "quantity": 2 + } + ], + "enabled": true, + "code": "B-8*2,Fuel*2", + "name": "B-8*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "L-081 Fantasmagoria ELINT pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh58*2_Kh25ML*2_L-081", + "name": "Kh58*2_Kh25ML*2_L-081", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 8 + } + ], + "enabled": true, + "code": "RBK-250*8", + "name": "RBK-250*8", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + } + ], + "enabled": true, + "code": "UB-32*4", + "name": "UB-32*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,R-60M*2", + "name": "Kh-29L*2,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 2 + }, + { + "name": "Fuel tank 3000L", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-24*2,Fuel*3", + "name": "S-24*2,Fuel*3", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "L-081 Fantasmagoria ELINT pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh25MPU*2_Kh25ML*2_L-081", + "name": "Kh25MPU*2_Kh25ML*2_L-081", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "FAB-500*4,R-60M*2", + "name": "FAB-500*4,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 8 + } + ], + "enabled": true, + "code": "FAB-250*8", + "name": "FAB-250*8", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel tank 3000L", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel*3", + "name": "Fuel*3", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "RBK-500AO*4,R-60M*2", + "name": "RBK-500AO*4,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "KAB-1500L - 1500kg Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "KAB-1500*2,R-60M*2,Fuel", + "name": "KAB-1500*2,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "UB-32*4,FAB-250*4", + "name": "UB-32*4,FAB-250*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29T*2,R-60M*2", + "name": "Kh-29T*2,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + }, + { + "name": "Fuel tank 3000L", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "UB-32*2,Fuel*3", + "name": "UB-32*2,Fuel*3", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-59M (AS-18 Kazoo) - 930kg, ASM, IN", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-59M*2,R-60M*2,Fuel", + "name": "Kh-59M*2,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-25*4", + "name": "S-25*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + } + ], + "enabled": true, + "code": "B-8*6", + "name": "B-8*6", + "roles": [ + "Strike" + ] + } + ], + "filename": "su-24.png", + "enabled": true, + "liveries": { + "syrian air force": { + "name": "Syrian Air Force", + "countries": [ + "SYR" + ] + }, + "iran air force": { + "name": "Iran Air Force", + "countries": [ + "IRN" + ] + }, + "algerian af kx-12": { + "name": "Algerian AF KX-12", + "countries": [ + "DZA" + ] + }, + "ukrainian air force standard": { + "name": "Ukrainian Air Force", + "countries": [ + "UKR" + ] + }, + "kazakhstan air force": { + "name": "600th Airbase Kazakhstan", + "countries": [ + "KAZ" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swing wing, 2 crew. Fencer", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Su-25": { + "name": "Su-25", + "coalition": "red", + "label": "Su-25T Frogfoot", + "era": "Late Cold War", + "shortLabel": "S25", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-250*2,S-8KOM*80,R-60M*2,Fuel*2", + "name": "RBK-250*2,S-8KOM*80,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", + "name": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", + "quantity": 6 + } + ], + "enabled": true, + "code": "S-25L*6,UB-13*2,R-60M*2", + "name": "S-25L*6,UB-13*2,R-60M*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 6 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-25*6,SPPU-22*2,R-60M*2", + "name": "S-25*6,SPPU-22*2,R-60M*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", + "quantity": 2 + } + ], + "enabled": true, + "code": "2-25L*2, KH-25ML*2, RBK-500*2, B-8MI*2, R-60M*2", + "name": "2-25L*2, KH-25ML*2, RBK-500*2, B-8MI*2, R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-8KOM*120,R-60M*2,Fuel*2", + "name": "S-8KOM*120,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", + "name": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-500AO*4,S-8KOM*40,R-60M*2,Fuel*2", + "name": "RBK-500AO*4,S-8KOM*40,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "SAB-100MN - 100 kg Illumination Bomb", + "quantity": 4 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*2,SPPU-22*2,SAB-100*4,R-60M*2", + "name": "FAB-250*2,SPPU-22*2,SAB-100*4,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-500AO*6,R-60M*2,Fuel*2", + "name": "RBK-500AO*6,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 8 + } + ], + "enabled": true, + "code": "RBK-250*8,R-60M*2", + "name": "RBK-250*8,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,Kh-25ML*4,R-60M*2", + "name": "Kh-29L*2,Kh-25ML*4,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "RBK-250*4,S-8KOM*80,R-60M*2", + "name": "RBK-250*4,S-8KOM*80,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", + "name": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8TsM SM Orange", + "quantity": 8 + } + ], + "enabled": true, + "code": "S-8TsM*160,R-60*2", + "name": "S-8TsM*160,R-60*2", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-25ML*4,R-60M*2,Fuel*2", + "name": "Kh-25ML*4,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", + "quantity": 8 + } + ], + "enabled": true, + "code": "BetAB-500ShP*8,R-60M*2", + "name": "BetAB-500ShP*8,R-60M*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "SAB-100MN - 100 kg Illumination Bomb", + "quantity": 8 + } + ], + "enabled": true, + "code": "SAB-100*8,R-60*2", + "name": "SAB-100*8,R-60*2", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,Kh-25ML*4,S-25L*2,R-60M*2", + "name": "Kh-29L*2,Kh-25ML*4,S-25L*2,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-500*6,R-60M*2,Fuel*2", + "name": "FAB-500*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,Kh-25ML*2,R-60M*2,Fuel*2", + "name": "Kh-29L*2,Kh-25ML*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,R-60M*2,Fuel*2", + "name": "Kh-29L*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", + "quantity": 8 + } + ], + "enabled": true, + "code": "FAB-100*32,R-60M*2", + "name": "FAB-100*32,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100*16,R-60M*2,Fuel*2", + "name": "FAB-100*16,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*6,R-60M*2,Fuel*2", + "name": "FAB-250*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "BetAB-500*6,R-60M*2,Fuel*2", + "name": "BetAB-500*6,R-60M*2,Fuel*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-25*6,R-60M*2,Fuel*2", + "name": "S-25*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "UB-13*6,R-60M*2,Fuel*2", + "name": "UB-13*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-25*4,Kh-29T*2,R-60*2", + "name": "Kh-25*4,Kh-29T*2,R-60*2", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-25L*6,R-60*2,Fuel*2", + "name": "S-25L*6,R-60*2,Fuel*2", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "su-25.png", + "enabled": false, + "liveries": { + "broken camo scheme #2 (native). 452th shap": { + "name": "broken camo scheme #2 (native). 452th shap.", + "countries": [ + "UKR" + ] + }, + "broken camo scheme #1 (native). 299th oshap": { + "name": "broken camo scheme #1 (native). 299th oshap.", + "countries": [ + "UKR" + ] + }, + "field camo scheme #1 (native)": { + "name": "field camo scheme #1 (native)", + "countries": [ + "SUN", + "RUS" + ] + }, + "field camo scheme #1 (native)01": { + "name": "field camo scheme #1 (native)", + "countries": [ + "GRG" + ] + }, + "haf camo": { + "name": "Hellenic Airforce - Camo (Fictional)", + "countries": [ + "GRC" + ] + }, + "`scorpion` demo scheme (native)": { + "name": "`scorpion` demo scheme (native)", + "countries": [ + "GRG" + ] + }, + "abkhazian air force": { + "name": "Abkhazian Air Force", + "countries": [ + "ABH" + ] + }, + "field camo scheme #3 (worn-out). 960th shap": { + "name": "field camo scheme #3 (worn-out). 960th shap.", + "countries": [ + "RUS" + ] + }, + "petal camo scheme #1 (native). 299th brigade": { + "name": "petal camo scheme #1 (native). 299th brigade.", + "countries": [ + "UKR" + ] + }, + "petal camo scheme #2 (native). 299th brigade": { + "name": "petal camo scheme #2 (native). 299th brigade.", + "countries": [ + "UKR" + ] + }, + "algerian af desert fictional": { + "name": "Algerian AF Desert Fictional", + "countries": [ + "DZA" + ] + }, + "forest camo scheme #1 (native)": { + "name": "forest camo scheme #1 (native)", + "countries": [ + "RUS" + ] + }, + "irgc 54": { + "name": "IRGC 54", + "countries": [ + "IRN" + ] + }, + "field camo scheme #2 (native). 960th shap": { + "name": "field camo scheme #2 (native). 960th shap.", + "countries": [ + "RUS" + ] + }, + "haf aegean ghost": { + "name": "Hellenic Airforce - Aegean Ghost (Fictional)", + "countries": [ + "GRC" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Frogfoot", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Su-25T": { + "name": "Su-25", + "coalition": "red", + "label": "Su-25T Frogfoot", + "era": "Late Cold War", + "shortLabel": "S25", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "SAB-100MN - 100 kg Illumination Bomb", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,SPPU-22*2,SAB-100*2,R-60M*2", + "name": "FAB-250*4,SPPU-22*2,SAB-100*2,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Mercury LLTV Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*2,Kh-25ML*4,R-73*2,Mercury LLTV Pod,MPS-410", + "name": "Kh-29L*2,Kh-25ML*4,R-73*2,Mercury LLTV Pod,MPS-410", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "KAB-500Kr - 500kg TV Guided Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "KAB-500Kr*2,Kh-25ML*2,R-73*2,MPS-410,Fuel*2", + "name": "KAB-500Kr*2,Kh-25ML*2,R-73*2,MPS-410,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-500AO*4,UB-32*2,R-60M*2,Fuel*2", + "name": "RBK-500AO*4,UB-32*2,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", + "quantity": 8 + } + ], + "enabled": true, + "code": "BetAB-500ShP*8,R-60M*2", + "name": "BetAB-500ShP*8,R-60M*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "UB-13*6,R-60M*2,Fuel*2", + "name": "UB-13*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29T*2,R-73*2,Fuel*2,MPS-410", + "name": "Kh-29T*2,R-73*2,Fuel*2,MPS-410", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "L-081 Fantasmagoria ELINT pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh58*2_Kh25ML*4_R73*2_L-081_MPS-410", + "name": "Kh58*2_Kh25ML*4_R73*2_L-081_MPS-410", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", + "name": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "APU-8 - 8 x 9M127-1 Vikhr-M ATGM, LOSBR, Tandem HEAT/Frag", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 2 + } + ], + "enabled": true, + "code": "KH-29T*2, VIKHR*2, ECM", + "name": "KH-29T*2, VIKHR*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29T*2,Kh-25ML*4,R-73*2,MPS-410", + "name": "Kh-29T*2,Kh-25ML*4,R-73*2,MPS-410", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", + "name": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-500*6,R-60M*2,Fuel*2", + "name": "FAB-500*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel tank 800L Wing", + "quantity": 4 + } + ], + "enabled": true, + "code": "Fuel*4", + "name": "Fuel*4", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-8 - 8 x 9M127-1 Vikhr-M ATGM, LOSBR, Tandem HEAT/Frag", + "quantity": 2 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + }, + { + "name": "Mercury LLTV Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "APU-8 Vikhr-M*2,Kh-25ML,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", + "name": "APU-8 Vikhr-M*2,Kh-25ML,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-8KOM*120,R-60M*2,Fuel*2", + "name": "S-8KOM*120,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "KMGU-2 - 96 x PTAB-2.5KO Dispenser (CBU) HEAT/AP", + "quantity": 8 + } + ], + "enabled": true, + "code": "KMGU-2 (PTAB-2.5KO)*8,R-60M*2", + "name": "KMGU-2 (PTAB-2.5KO)*8,R-60M*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*6,R-60M*2,Fuel*2", + "name": "FAB-250*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Mercury LLTV Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*2,R-73*2,Fuel*2,Mercury LLTV Pod,MPS-410", + "name": "Kh-29L*2,R-73*2,Fuel*2,Mercury LLTV Pod,MPS-410", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", + "quantity": 8 + } + ], + "enabled": true, + "code": "FAB-100*32,R-60M*2", + "name": "FAB-100*32,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 8 + } + ], + "enabled": true, + "code": "RBK-250*8,R-60M*2", + "name": "RBK-250*8,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", + "quantity": 6 + } + ], + "enabled": true, + "code": "S-25L*6,UB-13*2,R-60M*2", + "name": "S-25L*6,UB-13*2,R-60M*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", + "name": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-25*2,SPPU-22*4,R-60M*2,R-73*2", + "name": "S-25*2,SPPU-22*4,R-60M*2,R-73*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "KMGU-2 - 96 x AO-2.5RT Dispenser (CBU) HE/Frag", + "quantity": 8 + } + ], + "enabled": true, + "code": "KMGU-2 (AO-2.5RT)*8,R-60M*2", + "name": "KMGU-2 (AO-2.5RT)*8,R-60M*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", + "quantity": 2 + }, + { + "name": "APU-8 - 8 x 9M127-1 Vikhr-M ATGM, LOSBR, Tandem HEAT/Frag", + "quantity": 2 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + }, + { + "name": "Mercury LLTV Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "APU-8 Vikhr-M*2,S-25L*2,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", + "name": "APU-8 Vikhr-M*2,S-25L*2,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-25*6,R-60M*2,Fuel*2", + "name": "S-25*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-500AO*6,R-60M*2,Fuel*2", + "name": "RBK-500AO*6,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "L-081 Fantasmagoria ELINT pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh58*2_Kh25MPU*2_Kh25ML*2_R73*2_L-081_MPS-410", + "name": "Kh58*2_Kh25MPU*2_Kh25ML*2_R73*2_L-081_MPS-410", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "RBK-250*4,UB-32*4,R-60M*2", + "name": "RBK-250*4,UB-32*4,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + }, + { + "name": "L-081 Fantasmagoria ELINT pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh25MPU*4_R73*2_Fuel*2_L-081_MPS-410", + "name": "Kh25MPU*4_R73*2_Fuel*2_L-081_MPS-410", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "BetAB-500*6,R-60M*2,Fuel*2", + "name": "BetAB-500*6,R-60M*2,Fuel*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-250*2,UB-32*4,R-60M*2,Fuel*2", + "name": "RBK-250*2,UB-32*4,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100*16,R-60M*2,Fuel*2", + "name": "FAB-100*16,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,Kh-25ML*4,R-73*2,ECM", + "name": "Kh-29L*2,Kh-25ML*4,R-73*2,ECM", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "su-25.png", + "enabled": true, + "liveries": { + "af standard 2": { + "name": "af standard 2", + "countries": [ + "SUN", + "RUS" + ] + }, + "algerian af grey ku-02": { + "name": "Algerian AF Grey KU-02", + "countries": [ + "DZA" + ] + }, + "su-25t test scheme": { + "name": "su-25t test scheme", + "countries": [ + "RUS" + ] + }, + "haf - fictional": { + "name": "Hellenic Airforce (Fictional)", + "countries": [ + "GRC" + ] + }, + "algerian af trainer ku-04": { + "name": "Algerian AF Trainer KU-04", + "countries": [ + "DZA" + ] + }, + "algerian af grey ku-01": { + "name": "Algerian AF Grey KU-01", + "countries": [ + "DZA" + ] + }, + "af standard 101": { + "name": "af standard 1", + "countries": [ + "GRG" + ] + }, + "algerian af desert ku-03": { + "name": "Algerian AF Desert KU-03", + "countries": [ + "DZA" + ] + }, + "af standard 1": { + "name": "af standard 1", + "countries": [ + "SUN", + "RUS" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "GRG" + ] + } + }, + "type": "Attack", + "description": "2 jet engine, swept wing, 1 crew. Frogfoot", + "abilities": "Fox 2 and gun, Dumb bombs, rockets, SEAD and ATGMs, Subsonic" + }, + "Su-27": { + "name": "Su-27", + "coalition": "red", + "label": "Su-27 Flanker", + "era": "Late Cold War", + "shortLabel": "S27", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-73*4,R-27ER*4,R-27ET*2", + "name": "R-73*4,R-27ER*4,R-27ET*2", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "KMGU-2 - 96 x AO-2.5RT Dispenser (CBU) HE/Frag", + "quantity": 5 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "KMGU-2 (AO-2.5RT)*5,R-73*2,ECM", + "name": "KMGU-2 (AO-2.5RT)*5,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500ShP*6,R-73*2,ECM", + "name": "BetAB-500ShP*6,R-73*2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "KMGU-2 - 96 x PTAB-2.5KO Dispenser (CBU) HEAT/AP", + "quantity": 5 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "KMGU-2 (PTAB-2.5KO)*5,R-73*2,ECM", + "name": "KMGU-2 (PTAB-2.5KO)*5,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27ER*6,ECM", + "name": "R-73*2,R-27ER*6,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*6", + "name": "R-73*6", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-13*10,RBK-500AO*2,FAB-500*2,R-73*2,ECM", + "name": "S-13*10,RBK-500AO*2,FAB-500*2,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*4,R-27ER*6", + "name": "R-73*4,R-27ER*6", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27ER*4,R-27ET*2,ECM", + "name": "R-73*2,R-27ER*4,R-27ET*2,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*4,ECM", + "name": "R-73*4,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "ECM", + "name": "ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*6,R-73*2,ECM", + "name": "FAB-500*6,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-25*2,FAB-500*4,R-73*4", + "name": "S-25*2,FAB-500*4,R-73*4", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-25*4, FAB-500*4, R-73*2, ECM", + "name": "S-25*4, FAB-500*4, R-73*2, ECM", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500 - 268 x PTAB-1M, 500kg CBU Light HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + RBK-500 PTAB1", + "name": "CAS S-8KOM Rockets + RBK-500 PTAB1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8OFP Rockets + FAB-500 Bombs", + "name": "CAS S-8OFP Rockets + FAB-500 Bombs", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAS S-8OFP Rockets", + "name": "CAS S-8OFP Rockets", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8OFP Rockets + FAB-100 Bombs", + "name": "CAS S-8OFP Rockets + FAB-100 Bombs", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + FAB-100 Bombs", + "name": "CAS S-8KOM Rockets + FAB-100 Bombs", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-13L pods - 10 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAS S-13 Rockets", + "name": "CAS S-13 Rockets", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 5 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-250 - 250kg GP Bombs LD", + "quantity": 1 + }, + { + "name": "MBD3-U6-68 with 3 x FAB-250 - 250kg GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + FAB-250 Bombs", + "name": "CAS S-8KOM Rockets + FAB-250 Bombs", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + RBK-250 PTAB2.5", + "name": "CAS S-8KOM Rockets + RBK-250 PTAB2.5", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets", + "name": "CAS S-8KOM Rockets", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + FAB-500 Bombs", + "name": "CAS S-8KOM Rockets + FAB-500 Bombs", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + RBK-500 PTAB10", + "name": "CAS S-8KOM Rockets + RBK-500 PTAB10", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "KMGU-2 - 96 x PTAB-2.5KO Dispenser (CBU) HEAT/AP", + "quantity": 3 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + KMGU PTAB", + "name": "CAS S-8KOM Rockets + KMGU PTAB", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": " CAS S-25 Rockets", + "name": " CAS S-25 Rockets", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-25 Rockets + FAB-500 Bombs", + "name": "CAS S-25 Rockets + FAB-500 Bombs", + "roles": [ + "CAS" + ] + } + ], + "filename": "su-27.png", + "enabled": true, + "liveries": { + "kubinka afb (russian knights old)": { + "name": "Kubinka AFB (Russian Knights Old)", + "countries": [ + "RUS" + ] + }, + "mirgorod afb (831th brigade)": { + "name": "Mirgorod AFB (831th brigade)", + "countries": [ + "UKR" + ] + }, + "lypetsk afb (falcons of russia)": { + "name": "Lypetsk AFB (Falcons of Russia)", + "countries": [ + "RUS" + ] + }, + "hotilovo afb": { + "name": "Hotilovo AFB", + "countries": [ + "RUS" + ] + }, + "plaaf k2s new parade": { + "name": "PLAAF K2S new parade", + "countries": [ + "CHN" + ] + }, + "plaaf standard": { + "name": "PLAAF Standard", + "countries": [ + "CHN" + ] + }, + "algerian af grey 04": { + "name": "Algerian AF GREY 04", + "countries": [ + "DZA" + ] + }, + "air force standard early": { + "name": "Air Force Standard Early", + "countries": [ + "SUN", + "RUS" + ] + }, + "air force ukraine standard": { + "name": "Air Force Ukraine Standard", + "countries": [ + "UKR" + ] + }, + "planaf hh8s": { + "name": "PLANAF HH8S", + "countries": [ + "CHN" + ] + }, + "ozerne afb (9th brigade)": { + "name": "Ozerne AFB (9th brigade)", + "countries": [ + "UKR" + ] + }, + "air force ukraine standard early": { + "name": "Air Force Ukraine Standard Early", + "countries": [ + "UKR" + ] + }, + "algerian af blue 02": { + "name": "Algerian AF Blue 02", + "countries": [ + "DZA" + ] + }, + "plaaf k1s old": { + "name": "PLAAF K1S old", + "countries": [ + "CHN" + ] + }, + "m gromov fri": { + "name": "M Gromov FRI", + "countries": [ + "RUS" + ] + }, + "plaaf k33s": { + "name": "PLAAF K33S", + "countries": [ + "CHN" + ] + }, + "air force standard": { + "name": "Air Force Standard", + "countries": [ + "SUN", + "RUS" + ] + }, + "plaaf k2s old": { + "name": "PLAAF K2S old", + "countries": [ + "CHN" + ] + }, + "chkalovsk afb (689 gviap)": { + "name": "Chkalovsk AFB (689 GvIAP)", + "countries": [ + "RUS" + ] + }, + "kazakhstan air defense forces": { + "name": "Kazakhstan Air Defense Forces", + "countries": [ + "KAZ" + ] + }, + "haf aegean ghost": { + "name": "Hellenic Airforce - Aegean Ghost (Fictional)", + "countries": [ + "GRC" + ] + }, + "besovets afb": { + "name": "Besovets AFB", + "countries": [ + "RUS" + ] + }, + "kilpyavr afb (maresyev)": { + "name": "Kilpyavr AFB (Maresyev)", + "countries": [ + "RUS" + ] + }, + "mirgorod afb (digital camo)": { + "name": "Mirgorod AFB (Digital camo)", + "countries": [ + "UKR" + ] + }, + "plaaf k2s new": { + "name": "PLAAF K2S new", + "countries": [ + "CHN" + ] + }, + "air force standard old": { + "name": "Air Force Standard old", + "countries": [ + "SUN", + "RUS" + ] + }, + "lodeynoye pole afb (177 iap)": { + "name": "Lodeynoye pole AFB (177 IAP)", + "countries": [ + "RUS" + ] + }, + "kubinka afb (russian knights)": { + "name": "Kubinka AFB (Russian Knights)", + "countries": [ + "RUS" + ] + }, + "lypetsk afb (shark)": { + "name": "Lypetsk AFB (Shark)", + "countries": [ + "RUS" + ] + }, + "besovets afb 2 squadron": { + "name": "Besovets AFB 2 squadron", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Flanker", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Su-30": { + "name": "Su-30", + "coalition": "red", + "label": "Su-30 Super Flanker", + "era": "Late Cold War", + "shortLabel": "S30", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-77*6,ECM", + "name": "R-73*2,R-77*6,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27T (AA-10 Alamo B) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27T*2,R-27R*4", + "name": "R-73*2,R-27T*2,R-27R*4", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-500AO*6,R-73*2,ECM", + "name": "RBK-500AO*6,R-73*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-31P*2,Kh-31A*2,R-73*2,R-77*2,ECM", + "name": "Kh-31P*2,Kh-31A*2,R-73*2,R-77*2,ECM", + "roles": [ + "Antiship Strike", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27T (AA-10 Alamo B) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-73*4,R-27T*2,R-27R*4", + "name": "R-73*4,R-27T*2,R-27R*4", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "Kh-35 (AS-20 Kayak) - 520kg, AShM, IN & Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-77*2,Kh-35*2,ECM", + "name": "R-73*2,R-77*2,Kh-35*2,ECM", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "Kh-35 (AS-20 Kayak) - 520kg, AShM, IN & Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-35*2,Kh-31P*2,R-73*2,R-77*2,ECM", + "name": "Kh-35*2,Kh-31P*2,R-73*2,R-77*2,ECM", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*4,B-8*2,R-73*2,ECM", + "name": "FAB-250*4,B-8*2,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "ECM", + "name": "ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "KAB-1500L - 1500kg Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "KAB-1500*2,R-73*2,R-77*2,ECM", + "name": "KAB-1500*2,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-250*6,R-73*2,ECM", + "name": "RBK-250*6,R-73*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*4,R-77*6", + "name": "R-73*4,R-77*6", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*4,S-25*2,R-73*2,ECM", + "name": "FAB-250*4,S-25*2,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27R*2,R-27ER*4,ECM", + "name": "R-73*2,R-27R*2,R-27ER*4,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27T (AA-10 Alamo B) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27T*2,R-27ER*2,R-77*2,ECM", + "name": "R-73*2,R-27T*2,R-27ER*2,R-77*2,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-1500 M-54 - 1500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-1500*2,R-73*2,R-77*2,ECM", + "name": "FAB-1500*2,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27T (AA-10 Alamo B) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-73*4,R-27T*2,R-27ER*2,R-77*2", + "name": "R-73*4,R-27T*2,R-27ER*2,R-77*2", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-59M (AS-18 Kazoo) - 930kg, ASM, IN", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-59M*2,R-73*2,R-77*2,ECM", + "name": "Kh-59M*2,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*6,R-73*2,ECM", + "name": "FAB-500*6,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-73*4,R-27R*2,R-27ER*4", + "name": "R-73*4,R-27R*2,R-27ER*4", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*4,R-73*2,R-77*2,ECM", + "name": "Kh-29L*4,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500*6,R-73*2,ECM", + "name": "BetAB-500*6,R-73*2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-73*4", + "name": "R-73*4", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*4,UB-13*2,R-73*2,ECM", + "name": "FAB-250*4,UB-13*2,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 4 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-77*4,R-27ER*2,ECM", + "name": "R-73*2,R-77*4,R-27ER*2,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "KAB-500LG - 500kg Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "KAB-500*4,R-73*2,R-77*2,ECM", + "name": "KAB-500*4,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*6,R-73*2,ECM", + "name": "FAB-250*6,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 4 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-73*4,R-77*4,R-27ER*2", + "name": "R-73*4,R-77*4,R-27ER*2", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29T*4,R-73*2,R-77*2,ECM", + "name": "Kh-29T*4,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-31P*4,R-73*2,R-77*2,ECM", + "name": "Kh-31P*4,R-73*2,R-77*2,ECM", + "roles": [ + "SEAD" + ] + } + ], + "filename": "su-34.png", + "enabled": true, + "liveries": { + "af standard last": { + "name": "af standard last", + "countries": [ + "RUS" + ] + }, + "`russian knights` team #25": { + "name": "`russian knights` team #25", + "countries": [ + "RUS" + ] + }, + "adf 148th ctc savasleyka ab": { + "name": "adf 148th ctc savasleyka ab", + "countries": [ + "RUS" + ] + }, + "`desert` test paint scheme": { + "name": "`desert` test paint scheme", + "countries": [ + "RUS" + ] + }, + "`test-pilots` team #597": { + "name": "`test-pilots` team #597", + "countries": [ + "RUS" + ] + }, + "`snow` test paint scheme": { + "name": "`snow` test paint scheme", + "countries": [ + "RUS" + ] + }, + "af standard early": { + "name": "af standard early", + "countries": [ + "SUN", + "RUS" + ] + }, + "af standard last (worn-out)": { + "name": "af standard last (worn-out)", + "countries": [ + "RUS" + ] + }, + "af standard early (worn-out)": { + "name": "af standard early (worn-out)", + "countries": [ + "RUS" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Flanker", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Su-33": { + "name": "Su-33", + "coalition": "red", + "label": "Su-33 Navy Flanker", + "era": "Late Cold War", + "shortLabel": "S33", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-250*6,R-73*2,R-27R*2,ECM", + "name": "RBK-250*6,R-73*2,R-27R*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-73*4", + "name": "R-73*4", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*4,R-27R*2,R-27ER*6", + "name": "R-73*4,R-27R*2,R-27ER*6", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27ET*2,R-27ER*6,ECM", + "name": "R-73*2,R-27ET*2,R-27ER*6,ECM", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*4,R-27ET*2,R-27ER*6", + "name": "R-73*4,R-27ET*2,R-27ER*6", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*6,R-73*2,R-27R*2,ECM", + "name": "FAB-250*6,R-73*2,R-27R*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27R*2,R-27ER*6,ECM", + "name": "R-73*2,R-27R*2,R-27ER*6,ECM", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "ECM", + "name": "ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500*6,R-73*2,R-27R*2,ECM", + "name": "BetAB-500*6,R-73*2,R-27R*2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-500AO*6,R-73*2,R-27R*2,ECM", + "name": "RBK-500AO*6,R-73*2,R-27R*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 4 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "UB-13*4,FAB-250*4,R-73*2,ECM", + "name": "UB-13*4,FAB-250*4,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 4 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-25*4,FAB-250*4,R-73*2,ECM", + "name": "S-25*4,FAB-250*4,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*6,R-73*2,R-27R*2,ECM", + "name": "FAB-500*6,R-73*2,R-27R*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "B-8*4,FAB-250*4,R-73*2,ECM", + "name": "B-8*4,FAB-250*4,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 4 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-25*4,FAB-500*4,R-73*4", + "name": "S-25*4,FAB-500*4,R-73*4", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM rockets + FAB500", + "name": "CAS S-8KOM rockets + FAB500", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8OFP rockets + FAB500", + "name": "CAS S-8OFP rockets + FAB500", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-13L pods - 10 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-13 Rockets + FAB500", + "name": "CAS S-13 Rockets + FAB500", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-13L pods - 10 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-13 Rockets + FAB100", + "name": "CAS S-13 Rockets + FAB100", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 4 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAS S-8KOM rockets + FAB250", + "name": "CAS S-8KOM rockets + FAB250", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-25 Rockets + FAB500", + "name": "CAS S-25 Rockets + FAB500", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM rockets + RBK500 PTAB10", + "name": "CAS S-8KOM rockets + RBK500 PTAB10", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500 - 268 x PTAB-1M, 500kg CBU Light HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM rockets + RBK500 PTAB1", + "name": "CAS S-8KOM rockets + RBK500 PTAB1", + "roles": [ + "CAS" + ] + } + ], + "filename": "su-34.png", + "enabled": true, + "liveries": { + "t-10k-9 test paint scheme": { + "name": "t-10k-9 test paint scheme", + "countries": [ + "RUS" + ] + }, + "279th kiap 1st squad navy": { + "name": "Navy, 279th kiap, 1st squad", + "countries": [ + "RUS" + ] + }, + "aaf blue 68": { + "name": "Algerian AF BLUE No 68", + "countries": [ + "DZA" + ] + }, + "haf - aegean ghost": { + "name": "Hellenic Airforce - Aegean Ghost (Fictional)", + "countries": [ + "GRC" + ] + }, + "279th kiap 2nd squad syria 2017": { + "name": "Syria 2017, 279th kiap, 2nd squad", + "countries": [ + "RUS" + ] + }, + "aaf grey 12": { + "name": "Algerian AF GREY No 12", + "countries": [ + "DZA" + ] + }, + "t-10k-5 test paint scheme": { + "name": "t-10k-5 test paint scheme", + "countries": [ + "RUS" + ] + }, + "279th kiap 1st squad syria 2017": { + "name": "Syria 2017, 279th kiap, 1st squad", + "countries": [ + "RUS" + ] + }, + "279th kiap 2nd squad navy": { + "name": "Navy, 279th kiap, 2nd squad", + "countries": [ + "RUS" + ] + }, + "t-10k-1 test paint scheme": { + "name": "t-10k-1 test paint scheme", + "countries": [ + "SUN", + "RUS" + ] + }, + "plan carrier air wings j-15": { + "name": "PLAN Carrier Air Wings J-15", + "countries": "All" + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Flanker", + "abilities": "Drogue AAR, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Su-34": { + "name": "Su-34", + "coalition": "red", + "label": "Su-34 Hellduck", + "era": "Modern", + "shortLabel": "S34", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 4 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "UB-13*4,FAB-250*4,R-73*2,ECM", + "name": "UB-13*4,FAB-250*4,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-100*28,R-73*2,ECM", + "name": "FAB-100*28,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 8 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500*8,R-73*2,ECM", + "name": "BetAB-500*8,R-73*2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*4,R-73*2,R-77*2,ECM", + "name": "Kh-29L*4,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "KAB-500LG - 500kg Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "KAB-500*4,R-73*2,R-77*2,ECM", + "name": "KAB-500*4,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 8 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-250 PTAB-2.5M*8,R-73*2,ECM", + "name": "RBK-250 PTAB-2.5M*8,R-73*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 8 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*8,R-73*2,ECM", + "name": "FAB-250*8,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "ECM", + "name": "ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29T*4,R-73*2,R-77*2,ECM", + "name": "Kh-29T*4,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 8 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-500 PTAB-10-5*8,R-73*2,ECM", + "name": "RBK-500 PTAB-10-5*8,R-73*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "FAB-1500 M-54 - 1500kg GP Bomb LD", + "quantity": 3 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-1500*3,R-73*2,R-77*2,ECM", + "name": "FAB-1500*3,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "Kh-59M (AS-18 Kazoo) - 930kg, ASM, IN", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-59M*2,R-73*2,R-77*2,ECM", + "name": "Kh-59M*2,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "B-8*6,R-73*2,R-27R*2,ECM", + "name": "B-8*6,R-73*2,R-27R*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 8 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*8,R-73*2,ECM", + "name": "FAB-500*8,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "KAB-1500L - 1500kg Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "KAB-1500*2,R-73*2,R-77*2,ECM", + "name": "KAB-1500*2,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29T*4,R-73*2,R-27R*2,ECM", + "name": "Kh-29T*4,R-73*2,R-27R*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", + "quantity": 4 + }, + { + "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-31A*4,Kh-31P*2,R-73*2,R-27R*2,ECM", + "name": "Kh-31A*4,Kh-31P*2,R-73*2,R-27R*2,ECM", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", + "quantity": 6 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-31A*6,R-73*2,R-27R*2,ECM", + "name": "Kh-31A*6,R-73*2,R-27R*2,ECM", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-31P*4,R-73*2,R-27R*2,ECM", + "name": "Kh-31P*4,R-73*2,R-27R*2,ECM", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*4,R-73*2,R-27R*2,ECM", + "name": "Kh-29L*4,R-73*2,R-27R*2,ECM", + "roles": [ + "CAS" + ] + } + ], + "filename": "su-34.png", + "enabled": true, + "liveries": { + "russian air force": { + "name": "1 Russian Air Force", + "countries": [ + "RUS" + ] + }, + "russian air force old": { + "name": "Russian Air Force Old", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swept wing, 2 crew, all weather fighter and strike. Fullback", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Tornado GR4": { + "name": "Tornado GR4", + "coalition": "blue", + "label": "Tornado GR4", + "era": "Late Cold War", + "shortLabel": "GR4", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 1 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Sky-Shadow ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M*2, Fuel*2, ECM", + "name": "AIM-9M*2, Fuel*2, ECM", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "ALARM", + "quantity": 4 + }, + { + "name": "", + "quantity": 4 + } + ], + "enabled": true, + "code": "ALARM*4, Fuel*2, ECM", + "name": "ALARM*4, Fuel*2, ECM", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 1 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-16 - 1000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Sky-Shadow ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-16*2, AIM-9M*2, Fuel*2, ECM", + "name": "GBU-16*2, AIM-9M*2, Fuel*2, ECM", + "roles": [ + "Strike", + "FAC-A", + "Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 1 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BL-755 CBU - 450kg, 147 Frag/Pen bomblets", + "quantity": 4 + }, + { + "name": "Sky-Shadow ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "BL755*4, AIM-9M*2, Fuel*2, ECM", + "name": "BL755*4, AIM-9M*2, Fuel*2, ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 1 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Sea Eagle - ASM", + "quantity": 2 + }, + { + "name": "Sky-Shadow ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Sea Eagle*2, AIM-9M*2, Fuel*2, ECM", + "name": "Sea Eagle*2, AIM-9M*2, Fuel*2, ECM", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "tornado.png", + "enabled": true, + "liveries": { + "no. 14 squadron raf lossiemouth ab (morayshire)": { + "name": "no. 14 squadron raf lossiemouth ab (morayshire)", + "countries": [ + "UK" + ] + }, + "o of ii (ac) squadron raf marham": { + "name": "o of ii (ac) squadron raf marham", + "countries": [ + "UK" + ] + }, + "bb of 14 squadron raf lossiemouth": { + "name": "bb of 14 squadron raf lossiemouth", + "countries": [ + "UK" + ] + }, + "no. 9 squadron raf marham ab (norfolk)": { + "name": "no. 9 squadron raf marham ab (norfolk)", + "countries": [ + "UK" + ] + }, + "no. 12 squadron raf lossiemouth ab (morayshire)": { + "name": "no. 12 squadron raf lossiemouth ab (morayshire)", + "countries": [ + "UK" + ] + }, + "no. 617 squadron raf lossiemouth ab (morayshire)": { + "name": "no. 617 squadron raf lossiemouth ab (morayshire)", + "countries": [ + "UK" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swing wing, 2 crew, all weather strike.", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Tornado IDS": { + "name": "Tornado IDS", + "coalition": "blue", + "label": "Tornado IDS", + "era": "Late Cold War", + "shortLabel": "IDS", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Kormoran - ASM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kormoran*2,AIM-9*2,Fuel*2", + "name": "Kormoran*2,AIM-9*2,Fuel*2", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-16 - 1000lb Laser Guided Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-16*2,AIM-9*2,Fuel*2", + "name": "GBU-16*2,AIM-9*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "Fuel*2", + "name": "Fuel*2", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 1 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 4 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Sky-Shadow ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-88*4,AIM-9*2,ECM", + "name": "AGM-88*4,AIM-9*2,ECM", + "roles": [ + "SEAD", + "CAS" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 1 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 2 + }, + { + "name": "Sky-Shadow ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-88*2,AIM-9*2,Fuel*2,ECM", + "name": "AGM-88*2,AIM-9*2,Fuel*2,ECM", + "roles": [ + "SEAD", + "CAS" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "Kormoran - ASM", + "quantity": 4 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kormoran*4,AIM-9*2", + "name": "Kormoran*4,AIM-9*2", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Kormoran - ASM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kormoran*2,AIM-9*2,AGM-88*2", + "name": "Kormoran*2,AIM-9*2,AGM-88*2", + "roles": [ + "Antiship Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-82*4,AIM-9*2,Fuel*2", + "name": "Mk-82*4,AIM-9*2,Fuel*2", + "roles": [ + "Strike" + ] + } + ], + "filename": "tornado.png", + "enabled": true, + "liveries": { + "ita tornado black": { + "name": "Tornado Black", + "countries": [ + "ITA" + ] + }, + "marinefliegergeschwader 2 eggebek ab marineflieger": { + "name": "marinefliegergeschwader 2 eggebek ab marineflieger", + "countries": [ + "GER" + ] + }, + "jagdbombergeschwader 31 `boelcke` norvenich ab luftwaffe": { + "name": "jagdbombergeschwader 31 `boelcke` norvenich ab luftwaffe", + "countries": [ + "GER" + ] + }, + "ita tornado mm7042": { + "name": "Tornado MM7042", + "countries": [ + "ITA" + ] + }, + "ita tornado mm55004": { + "name": "Tornado MM55004", + "countries": [ + "ITA" + ] + }, + "aufklarungsgeschwader 51 `immelmann` jagel ab luftwaffe": { + "name": "aufklarungsgeschwader 51 `immelmann` jagel ab luftwaffe", + "countries": [ + "GER" + ] + }, + "jagdbombergeschwader 33 buchel ab no. 43+19 experimental scheme": { + "name": "jagdbombergeschwader 33 buchel ab no. 43+19 experimental scheme", + "countries": [ + "GER" + ] + }, + "jagdbombergeschwader 32 lechfeld ab luftwaffe": { + "name": "jagdbombergeschwader 32 lechfeld ab luftwaffe", + "countries": [ + "GER" + ] + }, + "ita tornado (sesto stormo diavoli rossi)": { + "name": "Tornado (Sesto Stormo Diavoli Rossi)", + "countries": [ + "ITA" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swing wing, 2 crew, all weather strike.", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Tu-142": { + "name": "Tu-142", + "coalition": "red", + "label": "Tu-142 Bear", + "era": "Mid Cold War", + "shortLabel": "142", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "6 x Kh-35 (AS-20 Kayak) - 520kg, AShM, IN & Act Rdr", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-35*6", + "name": "Kh-35*6", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "tu-95.png", + "enabled": true, + "liveries": { + "af standard": { + "name": "af standard", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "4 turboprop, swept wing, 11 crew, bomber. Bear", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Tu-160": { + "name": "Tu-160", + "coalition": "red", + "label": "Tu-160 Blackjack", + "era": "Late Cold War", + "shortLabel": "160", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "6 x Kh-65 (AS-15B Kent) - 1250kg, ASM, IN & MCC", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-65*12", + "name": "Kh-65*12", + "roles": [ + "Strike" + ] + } + ], + "filename": "tu-160.png", + "enabled": true, + "liveries": { + "af standard": { + "name": "af standard", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swing wing, 4 crew bomber. Blackjack", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Tu-22M3": { + "name": "Tu-22M3", + "coalition": "red", + "label": "Tu-22M3 Backfire", + "era": "Late Cold War", + "shortLabel": "T22", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Kh-22 (AS-4 Kitchen) - 1000kg, AShM, IN & Act/Pas Rdr", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-22N", + "name": "Kh-22N", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Kh-22 (AS-4 Kitchen) - 1000kg, AShM, IN & Act/Pas Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-22N*2", + "name": "Kh-22N*2", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "MBD3-U9M with 9 x FAB-250 - 250kg GP Bombs LD", + "quantity": 4 + }, + { + "name": "33 x FAB-250 - 250kg GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*69", + "name": "FAB-250*69", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "33 x FAB-500 M-62 - 500kg GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*33", + "name": "FAB-500*33", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "MBD3-U9M with 9 x FAB-250 - 250kg GP Bombs LD", + "quantity": 4 + }, + { + "name": "33 x FAB-500 M-62 - 500kg GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*33, FAB-250*36", + "name": "FAB-500*33, FAB-250*36", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "33 x FAB-250 - 250kg GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*33", + "name": "FAB-250*33", + "roles": [ + "Strike", + "Runway Attack" + ] + } + ], + "filename": "tu-22.png", + "enabled": true, + "liveries": { + "af standard": { + "name": "af standard", + "countries": [ + "UKR", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swing wing, 4 crew bomber. Backfire", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Tu-95MS": { + "name": "Tu-95MS", + "coalition": "red", + "label": "Tu-95MS Bear", + "era": "Mid Cold War", + "shortLabel": "T95", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "6 x Kh-65 (AS-15B Kent) - 1250kg, ASM, IN & MCC", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-65*6", + "name": "Kh-65*6", + "roles": [ + "Strike" + ] + } + ], + "filename": "tu-95.png", + "enabled": true, + "liveries": { + "af standard": { + "name": "af standard", + "countries": [ + "UKR", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "4 turboprop, swept wing, 6 crew, bomber. Bear", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-15ESE": { + "name": "F-15ESE", + "coalition": "", + "label": "F-15E Strike Eagle", + "shortLabel": "15E", + "era": "", + "enabled": true, + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel tank 610 gal", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BLU-107 * 6", + "quantity": 2 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C x 2, AIM-9M x 2, BLU-107 x 12, TGP, NVP, Fuel Tank", + "name": "AIM-120C x 2, AIM-9M x 2, BLU-107 x 12, TGP, NVP, Fuel Tank", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C x 4, AIM-9M x4, TGP, NVP, FUel Tank x 2", + "name": "AIM-120C x 4, AIM-9M x4, TGP, NVP, FUel Tank x 2", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "CBU-87 * 3", + "quantity": 2 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M x 4, CBU-87 x 6, TGP, Fuel Tank x 2", + "name": "AIM-9M x 4, CBU-87 x 6, TGP, Fuel Tank x 2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-120Cx4, AIM-9Mx4, Fuel Tanks x 2", + "name": "AIM-120Cx4, AIM-9Mx4, Fuel Tanks x 2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M x 4, TGP, NVP, Fuel Tanks x 2", + "name": "AIM-9M x 4, TGP, NVP, Fuel Tanks x 2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Mk-82 * 6", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "CBU-97 * 3", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M x 4, Mk-84 x 2, Mk-82 x 6, CBU-87 x 3, TGP, NVP", + "name": "AIM-9M x 4, Mk-84 x 2, Mk-82 x 6, CBU-87 x 3, TGP, NVP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Captive AIM-9M for ACM", + "quantity": 3 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "CATM-9M x 3, AIM-120B", + "name": "CATM-9M x 3, AIM-120B", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M x 4, AIM-120B x 4, TGP, NVP, Fuel Tanks x 2", + "name": "AIM-9M x 4, AIM-120B x 4, TGP, NVP, Fuel Tanks x 2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Captive AIM-9M for ACM", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "CATM-9M, CAIM-120", + "name": "CATM-9M, CAIM-120", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Captive AIM-9M for ACM", + "quantity": 1 + }, + { + "name": "BDU-50LGB * 2", + "quantity": 2 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": " AIM-120C x 2, CATM-9M, GBU-12 x 4, TGP, NVP", + "name": " AIM-120C x 2, CATM-9M, GBU-12 x 4, TGP, NVP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-12 * 4", + "quantity": 2 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 9, TGP, NVP, FUel Tank x 2", + "name": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 9, TGP, NVP, FUel Tank x 2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "Mk-82 * 6", + "quantity": 2 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": " AIM-9M x 4, MK-82 x 12, TGP, Fuel Tank x 2", + "name": " AIM-9M x 4, MK-82 x 12, TGP, Fuel Tank x 2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "CBU-87 * 6", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M x 4, AIM-120C x 2, CBU-87 x 6, TGP", + "name": "AIM-9M x 4, AIM-120C x 2, CBU-87 x 6, TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-12 * 4", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "GBU-10 * 2", + "quantity": 1 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 4, GBU-10 x 2, TGP, NVP, FUel Tank x 2", + "name": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 4, GBU-10 x 2, TGP, NVP, FUel Tank x 2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "", + "quantity": 3 + } + ], + "enabled": true, + "code": "Clean", + "name": "Clean", + "roles": [] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "Mk-20 Rockeye * 6", + "quantity": 2 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M x 4, Mk-20 x 12, NVP, Fuel Tanks x 2", + "name": "AIM-9M x 4, Mk-20 x 12, NVP, Fuel Tanks x 2", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "AIM-7MH Sparrow Semi-Active Radar", + "quantity": 2 + }, + { + "name": "Mk-20 Rockeye * 6", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M x 4, AIM-7M x 2, Mk-20 x 2, NVP, Fuel Tanks x 2", + "name": "AIM-9M x 4, AIM-7M x 2, Mk-20 x 2, NVP, Fuel Tanks x 2", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 3 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 AIR * 6", + "quantity": 2 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C x2, AIM-9M x 2, Mk-84 x 3, Mk-82AIR x 12", + "name": "AIM-120C x2, AIM-9M x 2, Mk-84 x 3, Mk-82AIR x 12", + "roles": [ + "Strike", + "CAS" + ] + } + ], + "filename": "f-15.png", + "liveries": { + "usaf 334th eagles fs af89 aim high": { + "name": "USAF 334th Eagles AF89-475 'Aim High'", + "countries": [ + "USA" + ] + }, + "usaf 335th chiefs fs af89 low vis combat": { + "name": "USAF 335th Chiefs AF89 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af91 low vis combat": { + "name": "USAF 492nd Madhatters AF91 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 335th chiefs fs af89 high vis clean": { + "name": "USAF 335th Chiefs AF89 High Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 335th chiefs fs af89-0487 lucky": { + "name": "USAF 335th Chiefs AF89-0487 'Lucky'", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af88-1690 darkness falls": { + "name": "USAF 336th Rocketeers AF88-1690 'Darkness Falls'", + "countries": [ + "USA" + ] + }, + "usaf 391st bold tigers fs af92-366 billy the kid": { + "name": "USAF 391st Bold Tigers AF92-366 'Billy the Kid'", + "countries": [ + "USA" + ] + }, + "idf ra'am, 69 hammer sqn": { + "name": "IDF 69th Hammers Scheme B", + "countries": [ + "ISR" + ] + }, + "usaf 336th rocketeers fs af89 high vis clean": { + "name": "USAF 336th Rocketeers AF89 High Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af89-496 shadow": { + "name": "USAF 336th Rocketeers AF89-496 'Shadow'", + "countries": [ + "USA" + ] + }, + "usaf 389th thunderbolts fs af90 low vis combat": { + "name": "USAF 389th Thunderbolts AF90 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd mad hatters fs 97-219 75th d-day anniversary": { + "name": "USAF 492nd Madhatters AF97-219 '75th Anniversary D-Day'", + "countries": [ + "USA" + ] + }, + "usaf 334th eagles fs af89 high vis clean": { + "name": "USAF 334th Eagles AF89 High Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 391st bold tigers fs af91-300 leo": { + "name": "USAF 391st Bold Tigers AF91-300 'Leo'", + "countries": [ + "USA" + ] + }, + "usaf 494th panthers fs af01 low vis clean": { + "name": "USAF 494th Panthers AF01 Low Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af97-220 thanos": { + "name": "USAF 492nd Madhatters AF97-220 'Thanos'", + "countries": [ + "USA" + ] + }, + "usaf 48th fw 70th anniversary af92-364 heritage": { + "name": "USAF 48th FW 70th Aniversary AF92-364 Heritage", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af88 low vis combat": { + "name": "USAF 336th Rocketeers AF88 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af97-221 low vis combat": { + "name": "USAF 492nd Madhatters AF97-221 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af91-315 vader": { + "name": "USAF 492nd Madhatters AF91-315 'Vader'", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af91-327 green goblin": { + "name": "USAF 492nd Madhatters AF91-327 'Green Goblin'", + "countries": [ + "USA" + ] + }, + "usaf 391st bold tigers fs af90-247 kraken": { + "name": "USAF 391st Bold Tigers AF90-247 'kraken'", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af88-1700 dragon betty": { + "name": "USAF 336th Rocketeers AF88-1700 'Dragon Betty'", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af89-501": { + "name": "USAF 336th Rocketeers AF89-501", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af88 high vis clean": { + "name": "USAF 336th Rocketeers AF88 High Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 333rd rocketeers fs af87-199 333 fgs": { + "name": "USAF 333rd Lancers AF87-0199 333 FGS", + "countries": [ + "USA" + ] + }, + "usaf 391st bold tigers fs af90-241 high vis combat": { + "name": "USAF 391st Bold Tigers AF90-241 High Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af96 low vis clean": { + "name": "USAF 492nd Madhatters AF96 Low Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 494th panthers fs af00 low vis combat": { + "name": "USAF 494th Panthers AF00 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af91 low vis clean": { + "name": "USAF 492nd Madhatters AF91 Low Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 494th panthers fs af01 low vis combat": { + "name": "USAF 494th Panthers AF01 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af98 low vis clean": { + "name": "USAF 492nd Madhatters AF98 Low Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 17th ws af90 low vis clean": { + "name": "USAF 17th Weapons Squadron AF90 Low Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af88-1673 336 fgs": { + "name": "USAF 336th Rocketeers AF88-1673 336 FGS", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af89 low vis combat": { + "name": "USAF 336th Rocketeers AF89 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af91-308 low vis clean": { + "name": "USAF 492nd Madhatters AF91-308 Low Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af98 low vis combat": { + "name": "USAF 492nd Madhatters AF98 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 391st bold tigers af90-250 tmota": { + "name": "USAF 391ST Bold Tigers 2005 Tiger Meet of the Americas", + "countries": [ + "USA" + ] + }, + "usaf af86-183 number1": { + "name": "USAF Test AF86-183 'Number 1'", + "countries": [ + "USA" + ] + }, + "usaf 17th wps af90-257": { + "name": "USAF 17th Weapons Squadron AF90-257 High Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 17th ws af90 high vis clean": { + "name": "USAF 17th Weapons Squadron AF90 High Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af96 low vis combat": { + "name": "USAF 492nd Madhatters AF96 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 391st bold tigers fs af90 low vis combat": { + "name": "USAF 391st Bold Tigers AF90 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 494th panthers fs 91-603 75th d-day anniversary": { + "name": "USAF 494th Panthers AF91-603 '75th Anniversary D-Day'", + "countries": [ + "USA" + ] + }, + "usaf 336th fw mountain home 75 years af87-173": { + "name": "USAF 366th FW 'Mountain Home 75 Years' AF87-0173", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af88-1687 mad duck iv": { + "name": "USAF 336th Rocketeers AF88-1687 'Mad Duck IV'", + "countries": [ + "USA" + ] + } + } + } } \ No newline at end of file From 20f99c287f191863f0be61c9cdea607d44eed7de Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Thu, 23 Nov 2023 20:32:42 +0100 Subject: [PATCH 34/41] Minor change in unit label dropdown It now expands to fill the space, but it still overflows with long unit names as per #542 --- client/public/stylesheets/other/contextmenus.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/public/stylesheets/other/contextmenus.css b/client/public/stylesheets/other/contextmenus.css index fda0b78b..6e2bed6d 100644 --- a/client/public/stylesheets/other/contextmenus.css +++ b/client/public/stylesheets/other/contextmenus.css @@ -247,6 +247,10 @@ column-gap: 5px; } +.unit-label-count-container>*:first-child { + width: 100%; +} + .unit-label-count-container button { display: flex !important; flex-direction: row; From e811c7bd46712be4714f070a5c032fc415f3e938 Mon Sep 17 00:00:00 2001 From: PeekabooSteam Date: Thu, 23 Nov 2023 22:44:24 +0000 Subject: [PATCH 35/41] Fixed toggles --- .../public/stylesheets/panels/unitcontrol.css | 19 ++++++------------- client/public/stylesheets/style/style.css | 15 +++++++++------ client/src/contextmenus/mapcontextmenu.ts | 10 +++++----- client/views/contextmenus/map.ejs | 3 +-- client/views/toolbars/primary.ejs | 2 +- 5 files changed, 22 insertions(+), 27 deletions(-) diff --git a/client/public/stylesheets/panels/unitcontrol.css b/client/public/stylesheets/panels/unitcontrol.css index 902622e6..7c7917a4 100644 --- a/client/public/stylesheets/panels/unitcontrol.css +++ b/client/public/stylesheets/panels/unitcontrol.css @@ -264,41 +264,33 @@ body.feature-forceShowUnitControlPanel #unit-control-panel { content: "GS"; } -#unit-control-panel .switch-control .ol-switch { +.switch-control .ol-switch { height: 23px; width: 40px; } -#unit-control-panel .switch-control .ol-switch[data-value="true"]>.ol-switch-fill::before { - content: "YES"; -} -#unit-control-panel .switch-control .ol-switch[data-value="false"]>.ol-switch-fill::before { - content: "NO"; -} - - -#unit-control-panel .ol-slider-value { +.ol-slider-value { color: var(--accent-light-blue); cursor: pointer; font-size: 14px; font-weight: bold; } -#unit-control-panel .switch-control { +.switch-control { align-items: center; display: flex; width: 100%; justify-content: space-between; } -#unit-control-panel .switch-control h4 { +.switch-control h4 { margin: 0px; display: flex; align-items: center; } -#unit-control-panel .switch-control h4 img { +.switch-control h4 img { height: 15px; margin-left: 10px; cursor: pointer; @@ -316,6 +308,7 @@ body.feature-forceShowUnitControlPanel #unit-control-panel { #advanced-settings-div > button { background-color: var(--background-grey); + box-shadow: 0px 2px 5px #000A; font-size:13px; height: 40px; padding:0 20px; diff --git a/client/public/stylesheets/style/style.css b/client/public/stylesheets/style/style.css index 1bd3c351..c9269623 100644 --- a/client/public/stylesheets/style/style.css +++ b/client/public/stylesheets/style/style.css @@ -232,7 +232,6 @@ form { .ol-select>.ol-select-options>div { background-color: var(--background-grey); - box-shadow: 0 4px 4px rgba(0, 0, 0, 0.25); display: flex; justify-content: left; padding: 2px 15px; @@ -1496,15 +1495,19 @@ input[type=number]::-webkit-outer-spin-button { } .switch-control.coalition [data-value="undefined"] .ol-switch-fill { - background-color: var(--ol-switch-undefined); + background-color: var(--primary-neutral); } -.switch-control.coalition [data-value="true"]>.ol-switch-fill::before { - content: "BLUE" !important; +.switch-control.coalition [data-value="true"] .ol-switch-fill::before { + content: "BLUE"; } -.switch-control.coalition [data-value="false"]>.ol-switch-fill::before { - content: "RED" !important; +.switch-control.coalition [data-value="false"] .ol-switch-fill::before { + content: "RED"; +} + +.switch-control.no-label [data-value] .ol-switch-fill::before { + content:""; } .ol-context-menu>ul { diff --git a/client/src/contextmenus/mapcontextmenu.ts b/client/src/contextmenus/mapcontextmenu.ts index 866e2543..d7619c99 100644 --- a/client/src/contextmenus/mapcontextmenu.ts +++ b/client/src/contextmenus/mapcontextmenu.ts @@ -30,7 +30,7 @@ export class MapContextMenu extends ContextMenu { /* Create the coalition switch */ this.#coalitionSwitch = new Switch("coalition-switch", (value: boolean) => this.#onSwitchClick(value)); - this.#coalitionSwitch.setValue(false); + this.#coalitionSwitch.setValue(true); this.#coalitionSwitch.getContainer()?.addEventListener("contextmenu", (e) => this.#onSwitchRightClick()); /* Create the spawn menus for the different unit types */ @@ -128,9 +128,9 @@ export class MapContextMenu extends ContextMenu { this.getContainer()?.querySelectorAll('[data-coalition]').forEach((element: any) => { element.setAttribute("data-coalition", getApp().getActiveCoalition()) }); if (getApp().getActiveCoalition() == "blue") - this.#coalitionSwitch.setValue(false); - else if (getApp().getActiveCoalition() == "red") this.#coalitionSwitch.setValue(true); + else if (getApp().getActiveCoalition() == "red") + this.#coalitionSwitch.setValue(false); else this.#coalitionSwitch.setValue(undefined); @@ -232,10 +232,10 @@ export class MapContextMenu extends ContextMenu { /** Callback called when the user left clicks on the coalition switch * - * @param value Switch position (false: "blue", true: "red") + * @param value Switch position (true: "blue", false: "red") */ #onSwitchClick(value: boolean) { - value ? getApp().setActiveCoalition("red") : getApp().setActiveCoalition("blue"); + value ? getApp().setActiveCoalition("blue") : getApp().setActiveCoalition("red"); this.getContainer()?.querySelectorAll('[data-coalition]').forEach((element: any) => { element.setAttribute("data-coalition", getApp().getActiveCoalition()) }); this.#aircraftSpawnMenu.setCountries(); this.#helicopterSpawnMenu.setCountries(); diff --git a/client/views/contextmenus/map.ejs b/client/views/contextmenus/map.ejs index 3e37ba57..aecd99c6 100644 --- a/client/views/contextmenus/map.ejs +++ b/client/views/contextmenus/map.ejs @@ -1,7 +1,7 @@
-
+
-
Github From 771695af59ad0ee1b153ba70ba5d81b10ef940e0 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Thu, 23 Nov 2023 23:45:00 +0100 Subject: [PATCH 36/41] Added indirect fire mode --- .../databases/units/aircraftdatabase.json | 64780 ++++++++-------- .../databases/units/groundunitdatabase.json | 4 +- client/src/constants/constants.ts | 6 +- client/src/unit/unit.ts | 23 +- src/core/src/groundunit.cpp | 63 +- 5 files changed, 32473 insertions(+), 32403 deletions(-) diff --git a/client/public/databases/units/aircraftdatabase.json b/client/public/databases/units/aircraftdatabase.json index 9a4fe63b..d6bfca83 100644 --- a/client/public/databases/units/aircraftdatabase.json +++ b/client/public/databases/units/aircraftdatabase.json @@ -1,32392 +1,32392 @@ { - "A-10C_2": { - "name": "A-10C_2", - "coalition": "blue", - "era": "Late Cold War", - "label": "A-10C Warthog", - "shortLabel": "A10", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", - "quantity": 6 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "LAU-68 42 rkt M156 WP, AIM-9*2, ECM", - "name": "LAU-68 42 rkt M156 WP, AIM-9*2, ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65D*4, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", - "name": "AGM-65D*4, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x LAU-131 pods - 21 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "LAU-131 98 rkt M156 WP, AIM-9*2,ECM", - "name": "LAU-131 98 rkt M156 WP, AIM-9*2,ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", - "quantity": 9 - } - ], - "enabled": true, - "code": "SUU-25*9,AIM-9*2,ECM", - "name": "SUU-25*9,AIM-9*2,ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "AGM-65D*4, CBU-97*4,TGP, ECM, AIM-9*2", - "name": "AGM-65D*4, CBU-97*4,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 8 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82AIR*8,AIM-9*2,ECM", - "name": "Mk-82AIR*8,AIM-9*2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M257, Para Illum", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "MK-84*2,LAU-68*2,AGM-65K*2", - "name": "MK-84*2,LAU-68*2,AGM-65K*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", - "quantity": 2 - }, - { - "name": "BDU-50LGB - 500lb Laser Guided Inert Practice Bomb LD", - "quantity": 2 - }, - { - "name": "LAU-117 with TGM-65D - Trg Round for Mav D (IIR)", - "quantity": 1 - }, - { - "name": "LAU-117 with TGM-65H - Trg Round for Mav H (CCD)", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-33*6, TGM-65H, TGM-65D, TGP, BDU-50LGB*2, CAP-9*1", - "name": "BDU-33*6, TGM-65H, TGM-65D, TGP, BDU-50LGB*2, CAP-9*1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 6 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82*6,Mk-84*2,AIM-9*2,ECM", - "name": "Mk-82*6,Mk-84*2,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 4 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-84*4,AIM-9*2,ECM", - "name": "Mk-84*4,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 8 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82*8,AIM-9*2,ECM", - "name": "Mk-82*8,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-33*12, TGP, CAP-9*1", - "name": "BDU-33*12, TGP, CAP-9*1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*4,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", - "name": "AGM-65D*4,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 1 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*4,GBU-12*2,GBU-38,Mk-82,AIM-9,TGP,ECM", - "name": "AGM-65D*4,GBU-12*2,GBU-38,Mk-82,AIM-9,TGP,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*2, AGM-65H*2, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", - "name": "AGM-65D*2, AGM-65H*2, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "BDU-50HD - 500lb Inert Practice Bomb HD", - "quantity": 6 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk1, Practice", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-50HD*6,Mk1*7,TGP, CAP-9*1", - "name": "BDU-50HD*6,Mk1*7,TGP, CAP-9*1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65H*4, CBU-97*4,TGP, ECM, AIM-9*2", - "name": "AGM-65H*4, CBU-97*4,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", - "name": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65K*2,GBU-38*4,AIM-9*2,TGP,ECM", - "name": "AGM-65K*2,GBU-38*4,AIM-9*2,TGP,ECM", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-33*6, TGP, CAP-9*1", - "name": "BDU-33*6, TGP, CAP-9*1", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*2,AGM-65H*2,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK151*7", - "name": "AGM-65D*2,AGM-65H*2,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK151*7", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP", - "name": "TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "BDU-50LD - 500lb Inert Practice Bomb LD", - "quantity": 2 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-33*6, TGP, CAP-9*1, BDU-50LD*2", - "name": "BDU-33*6, TGP, CAP-9*1, BDU-50LD*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "BRU-42 with 3 x GBU-12 - 500lb Laser Guided Bombs", - "quantity": 2 - }, - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-12*6,GBU-10*2,TGP, AIM-9*2", - "name": "GBU-12*6,GBU-10*2,TGP, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 3 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP, CBU-87*3, M151*28, AIM-9*2, ECM", - "name": "TGP, CBU-87*3, M151*28, AIM-9*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*4,Mk-82*6,CBU-87*2,TGP,AIM-9*2,Mk151*7", - "name": "AGM-65D*4,Mk-82*6,CBU-87*2,TGP,AIM-9*2,Mk151*7", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM- GBU-10*2,GBU-12*4,AIM-9*2,TGP,ECM", - "name": "PGM- GBU-10*2,GBU-12*4,AIM-9*2,TGP,ECM", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*4,TGP, ECM, AIM-9*2", - "name": "AGM-65D*4,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-117 with CATM-65K - Captive Trg Round for Mav K (CCD)", - "quantity": 1 - }, - { - "name": "LAU-117 with TGM-65G - Trg Round for Mav G (IIR)", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP, CAP-9*1, CATM-65K*1, TGM-65G*1", - "name": "TGP, CAP-9*1, CATM-65K*1, TGM-65G*1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65G*2,GBU-31*2,AIM-9*2,TGP,ECM", - "name": "AGM-65G*2,GBU-31*2,AIM-9*2,TGP,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP, M151*14, Mk-82*2, Mk-82AIR*2, AIM-9*2, ECM", - "name": "TGP, M151*14, Mk-82*2, Mk-82AIR*2, AIM-9*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM- GBU-10*4, AGM-65K*2,AIM-9*2,TGP,ECM", - "name": "PGM- GBU-10*4, AGM-65K*2,AIM-9*2,TGP,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", - "quantity": 2 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*2,AGM-65H*2,Mk-82AIR*6,CBU-87*2,Mk151*7,AIM-9*2,TGP,ECM", - "name": "AGM-65D*2,AGM-65H*2,Mk-82AIR*6,CBU-87*2,Mk151*7,AIM-9*2,TGP,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-31*2,GBU-38*2, AGM-65H*2, AIM-9*2,TGP, ECM", - "name": "GBU-31*2,GBU-38*2, AGM-65H*2, AIM-9*2,TGP, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "CBU-103 - 202 x CEM, CBU with WCMD", - "quantity": 4 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "CBU-103*4, M151*14, AIM-9*2, ECM", - "name": "CBU-103*4, M151*14, AIM-9*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 4 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "CBU-87*4, M151*42, AIM-9*2, ECM", - "name": "CBU-87*4, M151*42, AIM-9*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 3 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65D*6, CBU-97*4,TGP, ECM, AIM-9*2", - "name": "AGM-65D*6, CBU-97*4,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", - "quantity": 2 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "CBU-87*2, M151*14, MK-82AIR*6, AIM-9*2,ECM", - "name": "CBU-87*2, M151*14, MK-82AIR*6, AIM-9*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-105 - 10 x SFW, CBU with WCMD", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65D*4, CBU-105*4,TGP, ECM, AIM-9*2", - "name": "AGM-65D*4, CBU-105*4,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "BDU-50HD - 500lb Inert Practice Bomb HD", - "quantity": 2 - }, - { - "name": "BDU-50LGB - 500lb Laser Guided Inert Practice Bomb LD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk61, Practice", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-50HD*2,BDU-50LGB*2,TGP, CAP-9*1", - "name": "BDU-50HD*2,BDU-50LGB*2,TGP, CAP-9*1", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 4 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 4 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "CBU-87*4, M151*28, AIM-9*2,ECM", - "name": "CBU-87*4, M151*28, AIM-9*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 4 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "M151*98, Mk-82*2,AIM-9*2,ECM", - "name": "M151*98, Mk-82*2,AIM-9*2,ECM", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*2,AGM-65H*2,GBU-12,GBU-38,MK82*3,MK82AIR*3,MK5*7,TGP,AM-9*2", - "name": "AGM-65D*2,AGM-65H*2,GBU-12,GBU-38,MK82*3,MK82AIR*3,MK5*7,TGP,AM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP, M151*42, Mk-82*6, Mk-82AIR*6, AIM-9*2, ECM", - "name": "TGP, M151*42, Mk-82*6, Mk-82AIR*6, AIM-9*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 4 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP, M151*84, Mk-82*2,AIM-9*2, ECM", - "name": "TGP, M151*84, Mk-82*2,AIM-9*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "BDU-50HD - 500lb Inert Practice Bomb HD", - "quantity": 2 - }, - { - "name": "BDU-50LD - 500lb Inert Practice Bomb LD", - "quantity": 2 - }, - { - "name": "LAU-117 with CATM-65K - Captive Trg Round for Mav K (CCD)", - "quantity": 1 - }, - { - "name": "LAU-117 with TGM-65G - Trg Round for Mav G (IIR)", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts WTU-1/B, Practice", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - } - ], - "enabled": true, - "code": "BDU-50LD*2, BDU-50HD*2,CATM-65K, TGM-65G, TGP, CAP-9*1", - "name": "BDU-50LD*2, BDU-50HD*2,CATM-65K, TGM-65G, TGP, CAP-9*1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "TGP, M151*49, Mk-82*2, CBU-87*2, AIM-9*2, ECM", - "name": "TGP, M151*49, Mk-82*2, CBU-87*2, AIM-9*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 1 x Captive AIM-9M for ACM", - "quantity": 1 - }, - { - "name": "BDU-50LGB - 500lb Laser Guided Inert Practice Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "TGP, CAP-9*1, BDU-50LGB*4", - "name": "TGP, CAP-9*1, BDU-50LGB*4", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "BRU-42 with 3 x GBU-12 - 500lb Laser Guided Bombs", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-12*14,TGP, AIM-9*2", - "name": "GBU-12*14,TGP, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 3 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "LAU-88 with 3 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*3, AGM-65H*3, CBU-97*4,TGP, ECM, AIM-9*2", - "name": "AGM-65D*3, AGM-65H*3, CBU-97*4,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,TGP,ECM", - "name": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,TGP,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 2 - }, - { - "name": "CBU-105 - 10 x SFW, CBU with WCMD", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65D*4, CBU-105*2,CBU-97*2, TGP, ECM, AIM-9*2", - "name": "AGM-65D*4, CBU-105*2,CBU-97*2, TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 6 - }, - { - "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*2,Mk-82*6,AIM-9*2,ECM", - "name": "AGM-65D*2,Mk-82*6,AIM-9*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*2,AGM-65H*2,TGP, ECM, AIM-9*2", - "name": "AGM-65D*2,AGM-65H*2,TGP, ECM, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 4 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-38*4,GBU-31*2,TGP, AIM-9*2", - "name": "GBU-38*4,GBU-31*2,TGP, AIM-9*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", - "quantity": 1 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*4,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK5*7", - "name": "AGM-65D*4,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK5*7", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", - "quantity": 1 - }, - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65G,AGM-65K,GBU-10*2,AIM-9*2,TGP,ECM", - "name": "AGM-65G,AGM-65K,GBU-10*2,AIM-9*2,TGP,ECM", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 7 - }, - { - "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65G,AGM-65D,Mk-82*7,AIM-9*2,ECM", - "name": "AGM-65G,AGM-65D,Mk-82*7,AIM-9*2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 4 - }, - { - "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-31*2,GBU-38*4,AIM-9*2,TGP,ECM, AIM-9*2", - "name": "GBU-31*2,GBU-38*4,AIM-9*2,TGP,ECM, AIM-9*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x GBU-12 - 500lb Laser Guided Bombs", - "quantity": 2 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65K*2,GBU-12*8,AIM-9M*2.ECM,TGP", - "name": "AGM-65K*2,GBU-12*8,AIM-9M*2.ECM,TGP", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-88 with 3 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65D*6,GBU-12*4,AIM-9M*2,ECM,TGP", - "name": "AGM-65D*6,GBU-12*4,AIM-9M*2,ECM,TGP", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 2 - }, - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65L*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,ECM,TGP", - "name": "AGM-65L*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,ECM,TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 4 - }, - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65L*2,CBU-97*4,AIM-9M*2,ECM,TGP", - "name": "AGM-65L*2,CBU-97*4,AIM-9M*2,ECM,TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 4 - }, - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65L*2,CBU-97*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", - "name": "AGM-65L*2,CBU-97*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "CBU-105 - 10 x SFW, CBU with WCMD", - "quantity": 4 - }, - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65L*2,CBU-105*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", - "name": "AGM-65L*2,CBU-105*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 4 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82*4,Mk-8AIR*4,AIM-9*2,ECM", - "name": "Mk-82*4,Mk-8AIR*4,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", - "quantity": 5 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82*20,AIM-9*2,ECM", - "name": "Mk-82*20,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 7 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82*6,AIM-9*2,TGP,ECM", - "name": "Mk-82*6,AIM-9*2,TGP,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 6 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-84*6,AIM-9*2,TGP,ECM", - "name": "Mk-84*6,AIM-9*2,TGP,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 5 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82AIR*6,Mk-8AIR*4,M151*1,TGP,AIM-9*2,ECM", - "name": "Mk-82AIR*6,Mk-8AIR*4,M151*1,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", - "quantity": 1 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 4 - }, - { - "name": "LAU-117 with AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-38*4,M151 APKWS*7,AGM-65D*1,AGM-65H*1,TGP,AIM-9*2,ECM", - "name": "GBU-38*4,M151 APKWS*7,AGM-65D*1,AGM-65H*1,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-38*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", - "name": "GBU-38*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-12*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", - "name": "GBU-12*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-12*2,GBU-38*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", - "name": "GBU-12*2,GBU-38*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 2 - }, - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-10*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", - "name": "GBU-10*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 2 - }, - { - "name": "GBU-31(V)3/B - JDAM, 2000lb GPS Guided Penetrator Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-31*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", - "name": "GBU-31*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 2 - }, - { - "name": "GBU-54(V)1/B - LJDAM, 500lb Laser & GPS Guided Bomb LD", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-54*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", - "name": "GBU-54*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "GBU-54(V)1/B - LJDAM, 500lb Laser & GPS Guided Bomb LD", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-54*4,M151 APKWS*7,AGM-65D*4,TGP,AIM-9*2,ECM", - "name": "GBU-54*4,M151 APKWS*7,AGM-65D*4,TGP,AIM-9*2,ECM", - "roles": [ - "Strike" - ] - } - ], - "filename": "a-10.png", - "enabled": true, - "liveries": { - "81st fs spangdahlem ab, germany (sp) 1": { - "name": "81st FS Spangdahlem AB, Germany (SP) 1", - "countries": [ - "USA" - ] - }, - "fictional spanish tritonal": { - "name": "Fictional Spanish Tritonal", - "countries": [ - "SPN" - ] - }, - "47th fs barksdale afb, louisiana (bd)": { - "name": "47th FS Barksdale AFB, Louisiana (BD)", - "countries": [ - "USA" - ] - }, - "fictional georgian olive": { - "name": "Fictional Georgian Olive", - "countries": [ - "GRG" - ] - }, - "algerian af fictional grey": { - "name": "Algerian AF Fictional Grey", - "countries": [ - "DZA" - ] - }, - "fictional russian air force 1": { - "name": "Fictional Russian Air Force 1", - "countries": [ - "RUS" - ] - }, - "fictional israel 115 sqn flying dragon": { - "name": "Fictional Israel 115 Sqn Flying Dragon", - "countries": [ - "ISR" - ] - }, - "172nd fs battle creek angb, michigan (bc)": { - "name": "172nd FS Battle Creek ANGB, Michigan (BC)", - "countries": [ - "USA" - ] - }, - "190th fs boise angb, idaho (id)": { - "name": "190th FS Boise ANGB, Idaho (ID)", - "countries": [ - "USA" - ] - }, - "81st fs spangdahlem ab, germany (sp) 2": { - "name": "81st FS Spangdahlem AB, Germany (SP) 2", - "countries": [ - "USA" - ] - }, - "fictional german 3322": { - "name": "Fictional German 3322", - "countries": [ - "GER" - ] - }, - "66th ws nellis afb, nevada (wa)": { - "name": "66th WS Nellis AFB, Nevada (WA)", - "countries": [ - "USA" - ] - }, - "algerian af fictional desert": { - "name": "Algerian AF Fictional Desert", - "countries": [ - "DZA" - ] - }, - "fictional italian am (23gruppo)": { - "name": "AM (23Gruppo)", - "countries": [ - "ITA" - ] - }, - "haf fictional": { - "name": "Hellenic Airforce (Fictional)", - "countries": [ - "GRC" - ] - }, - "184th fs arkansas ang, fort smith (fs)": { - "name": "184th FS Arkansas ANG, Fort Smith (FS)", - "countries": [ - "USA" - ] - }, - "354th fs davis monthan afb, arizona (dm)": { - "name": "354th FS Davis Monthan AFB, Arizona (DM)", - "countries": [ - "USA" - ] - }, - "fictional royal norwegian air force": { - "name": "Fictional Royal Norwegian Air Force", - "countries": [ - "NOR" - ] - }, - "422nd tes nellis afb, nevada (ot)": { - "name": "422nd TES Nellis AFB, Nevada (OT)", - "countries": [ - "USA" - ] - }, - "118th fs bradley angb, connecticut (ct)": { - "name": "118th FS Bradley ANGB, Connecticut (CT)", - "countries": [ - "USA" - ] - }, - "fictional spanish aga": { - "name": "Fictional Spanish AGA", - "countries": [ - "SPN" - ] - }, - "74th fs moody afb, georgia (ft)": { - "name": "74th FS Moody AFB, Georgia (FT)", - "countries": [ - "USA" - ] - }, - "fictional russian air force 2": { - "name": "Fictional Russian Air Force 2", - "countries": [ - "RUS" - ] - }, - "118th fs bradley angb, connecticut (ct) n621": { - "name": "118th FS Bradley ANGB, Connecticut (CT) N621", - "countries": [ - "USA" - ] - }, - "357th fs davis monthan afb, arizona (dm)": { - "name": "357th FS Davis Monthan AFB, Arizona (DM)", - "countries": [ - "USA" - ] - }, - "canada rcaf 409 squadron": { - "name": "Fictional RCAF 409 Squadron", - "countries": [ - "CAN" - ] - }, - "355th fs eielson afb, alaska (ak)": { - "name": "355th FS Eielson AFB, Alaska (AK)", - "countries": [ - "USA" - ] - }, - "25th fs osan ab, korea (os)": { - "name": "25th FS Osan AB, Korea (OS)", - "countries": [ - "USA" - ] - }, - "358th fs davis monthan afb, arizona (dm)": { - "name": "358th FS Davis Monthan AFB, Arizona (DM)", - "countries": [ - "USA" - ] - }, - "australia notional raaf": { - "name": "Australia Notional RAAF", - "countries": [ - "AUS" - ] - }, - "fictional canadian air force pixel camo": { - "name": "Fictional Canadian Air Force Pixel Camo", - "countries": [ - "CAN" - ] - }, - "fictional france escadron de chasse 03.003 ardennes": { - "name": "Fictional France Escadron de Chasse 03.003 ARDENNES", - "countries": [ - "FRA" - ] - }, - "canada rcaf 442 snow scheme": { - "name": "Fictional RCAF 442 Snow Scheme", - "countries": [ - "CAN" - ] - }, - "23rd tfw england afb (el)": { - "name": "23rd TFW England AFB (EL)", - "countries": [ - "USA" - ] - }, - "fictional georgian grey": { - "name": "Fictional Georgian Grey", - "countries": [ - "GRG" - ] - }, - "fictional ukraine air force 1": { - "name": "Fictional Ukraine Air Force 1", - "countries": [ - "UKR" - ] - }, - "104th fs maryland ang, baltimore (md)": { - "name": "104th FS Maryland ANG, Baltimore (MD)", - "countries": [ - "USA" - ] - }, - "fictional spanish 12nd wing": { - "name": "Fictional Spanish 12nd Wing", - "countries": [ - "SPN" - ] - }, - "a-10 grey": { - "name": "A-10 Grey", - "countries": [ - "DEN", - "TUR", - "NETH", - "BEL", - "UK" - ] - }, - "fictional german 3323": { - "name": "Fictional German 3323", - "countries": [ - "GER" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, straight wing, 1 crew, attack aircraft. Warthog", - "abilities": "Boom AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "A-20G": { - "name": "A-20G", - "coalition": "blue", - "label": "A-20G Havoc", - "era": "WW2", - "shortLabel": "A20", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "4 x AN-M64 - 500lb GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "500 lb GP bomb LD*4", - "name": "500 lb GP bomb LD*4", - "roles": [ - "CAS", - "Strike", - "Runway Attack", - "Antiship Strike" - ] - } - ], - "filename": "a-20.png", - "enabled": true, - "liveries": { - "ussr 1st gmtap": { - "name": "1st GMTAP", - "countries": [ - "SUN", - "RUS" - ] - }, - "usaf 645th bs": { - "name": "645th BS, 410th BG, 9th AF", - "countries": [ - "USA" - ] - }, - "107 sqn": { - "name": "107 SQN", - "countries": [ - "UK" - ] - }, - "ussr 27 ape dd": { - "name": "27th API DD", - "countries": [ - "SUN", - "RUS" - ] - }, - "usaf 668th bs": { - "name": "668th BS, 416th BG", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "2 propeller, straight wing, 3 crew, medium attack bomber. Havoc", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "A-50": { - "name": "A-50", - "coalition": "red", - "label": "A-50 Mainstay", - "era": "Late Cold War", - "shortLabel": "A50", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "AWACS" - ] - } - ], - "filename": "a-50.png", - "enabled": true, - "liveries": { - "rf air force": { - "name": "RF Air Force", - "countries": [ - "RUS" - ] - }, - "rf air force new": { - "name": "RF Air Force new", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 15 crew. NATO reporting name: Mainstay", - "abilities": "AEW", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "AJS37": { - "name": "AJS37", - "coalition": "blue", - "label": "AJS37 Viggen", - "era": "Mid Cold War", - "shortLabel": "AJS", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "Rb-75A (AGM-65A Maverick) (TV ASM)", - "quantity": 4 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "Battlefield Air Interdiction: RB-75*4, RB-24J*2, XT", - "name": "Battlefield Air Interdiction: RB-75*4, RB-24J*2, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Rb-04E Anti-ship Missile", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Anti-ship: RB-04E*2, RB-74*2, XT", - "name": "Anti-ship: RB-04E*2, RB-74*2, XT", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Rb-75T (AGM-65A Maverick) (TV ASM Lg HE Whd)", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "Anti-ship (Heavy Mav): RB-75T*4, XT", - "name": "Anti-ship (Heavy Mav): RB-75T*4, XT", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Rb-05A MCLOS ASM/AShM/AAM", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "U/22 Jammer pod", - "quantity": 1 - }, - { - "name": "KB Flare/Chaff dispenser pod", - "quantity": 1 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Hard Target (Countermeasures): RB-05, XT, KB, U22", - "name": "Hard Target (Countermeasures): RB-05, XT, KB, U22", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Rb-75T (AGM-65A Maverick) (TV ASM Lg HE Whd)", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Hard Target (MAV): RB-75T*2, RB-74*2, XT", - "name": "Hard Target (MAV): RB-75T*2, RB-74*2, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "Ferry Flight: XT", - "name": "Ferry Flight: XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Rb-75A (AGM-65A Maverick) (TV ASM)", - "quantity": 2 - }, - { - "name": "AKAN M/55 Gunpod, 150 rnds MINGR55-HE", - "quantity": 2 - } - ], - "enabled": true, - "code": "CAS (75 GUN): RB-75*2, AKAN", - "name": "CAS (75 GUN): RB-75*2, AKAN", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "CAP: RB-74*4, XT", - "name": "CAP: RB-74*4, XT", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "U22/A Jammer", - "quantity": 1 - }, - { - "name": "KB Flare/Chaff dispenser pod", - "quantity": 1 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Countermeasures Escort: U/22A, KB", - "name": "Countermeasures Escort: U/22A, KB", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BK-90 MJ1 (72 x MJ1 HE-FRAG Bomblets)", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Strike: BK90 (MJ1)*2, RB-74*2, XT", - "name": "Strike: BK90 (MJ1)*2, RB-74*2, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Rb-05A MCLOS ASM/AShM/AAM", - "quantity": 2 - }, - { - "name": "AKAN M/55 Gunpod, 150 rnds MINGR55-HE", - "quantity": 2 - } - ], - "enabled": true, - "code": "CAS: AKAN, RB-05A", - "name": "CAS: AKAN, RB-05A", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "CAP (6 AAM): RB-74*4, RB-24J*2, XT", - "name": "CAP (6 AAM): RB-74*4, RB-24J*2, XT", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "ARAK M/70B HE 6x 135mm UnGd Rkts, Shu70 HE/FRAG", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Rocket Half Load HE: ARAK HE*2, RB-74*2, XT", - "name": "Rocket Half Load HE: ARAK HE*2, RB-74*2, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Rb-05A MCLOS ASM/AShM/AAM", - "quantity": 2 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "CAP / Intecept: RB-05A*2, RB-74*2, XT", - "name": "CAP / Intecept: RB-05A*2, RB-74*2, XT", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "4x SB M/71 120kg GP Bomb Low-drag", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Bombs Low-drag: SB71LD*16, RB-24J*2, XT", - "name": "Bombs Low-drag: SB71LD*16, RB-24J*2, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Rb-75T (AGM-65A Maverick) (TV ASM Lg HE Whd)", - "quantity": 2 - }, - { - "name": "KB Flare/Chaff dispenser pod", - "quantity": 1 - }, - { - "name": "U/22 Jammer pod", - "quantity": 1 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "SEAD: RB-75T*2, U22/A, KB, XT", - "name": "SEAD: RB-75T*2, U22/A, KB, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Rb-15F Programmable Anti-ship Missile", - "quantity": 2 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "Anti-Ship (Modern): RB-15F*2, RB-74*2, XT", - "name": "Anti-Ship (Modern): RB-15F*2, RB-74*2, XT", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [], - "enabled": true, - "code": "New Payload", - "name": "New Payload", - "roles": [] - }, - { - "items": [ - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "CAP (AJ37): RB-24J*2", - "name": "CAP (AJ37): RB-24J*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "KB Flare/Chaff dispenser pod", - "quantity": 1 - }, - { - "name": "Rb-04E Anti-ship Missile", - "quantity": 1 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "ECM Escort Anti-ship: RB-04E, KB, RB-74*2, XT", - "name": "ECM Escort Anti-ship: RB-04E, KB, RB-74*2, XT", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "4x SB M/71 120kg GP Bomb High-drag", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Bombs High-drag: SB71HD*16, XT, RB-24J", - "name": "Bombs High-drag: SB71HD*16, XT, RB-24J", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Rb-75A (AGM-65A Maverick) (TV ASM)", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "Anti-ship (Light Mav): RB-75*4, XT", - "name": "Anti-ship (Light Mav): RB-75*4, XT", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "ARAK M/70B HE 6x 135mm UnGd Rkts, Shu70 HE/FRAG", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Rocket Full Load HE: ARAK HE*4, RB-24J, XT", - "name": "Rocket Full Load HE: ARAK HE*4, RB-24J, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "2x 80kg LYSB-71 Illumination Bomb", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "Illumination: LYSB*8, XT", - "name": "Illumination: LYSB*8, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-05A MCLOS ASM/AShM/AAM", - "quantity": 2 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Anti-ship (RB05): RB-05A*2, RB-74*2, XT", - "name": "Anti-ship (RB05): RB-05A*2, RB-74*2, XT", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AKAN M/55 Gunpod, 150 rnds MINGR55-HE", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "CAP (Gun): AKAN*2, RB-74*2, XT", - "name": "CAP (Gun): AKAN*2, RB-74*2, XT", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Rb-05A MCLOS ASM/AShM/AAM", - "quantity": 2 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Hard Target: RB-05A*2, RB-74*2, XT", - "name": "Hard Target: RB-05A*2, RB-74*2, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "Rb-05A MCLOS ASM/AShM/AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "RB-05*2, XT", - "name": "RB-05*2, XT", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ARAK M/70B HE 6x 135mm UnGd Rkts, Shu70 HE/FRAG", - "quantity": 4 - }, - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - } - ], - "enabled": true, - "code": "CAS: ARAK M70 HE*4, XT", - "name": "CAS: ARAK M70 HE*4, XT", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AJS External-tank 1013kg fuel", - "quantity": 1 - }, - { - "name": "4x SB M/71 120kg GP Bomb High-drag", - "quantity": 4 - }, - { - "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Runway Strike: SB71HD*16, RB-24J, XT", - "name": "Runway Strike: SB71HD*16, RB-24J, XT", - "roles": [ - "Runway Attack" - ] - } - ], - "filename": "viggen.png", - "enabled": true, - "liveries": { - "37": { - "name": "#1 Splinter F21 Norrbottens Flygflottilj", - "countries": "All" - }, - "37402": { - "name": "#3 JA-37 F21 Akktu Stakki", - "countries": "All" - }, - "se-dxnv4": { - "name": "SE-DXN by Mach3DS", - "countries": "All" - }, - "f7 skaraborg": { - "name": "#4 Splinter F7 Skaraborgs Flygflottilj 76", - "countries": "All" - }, - "sf-37 akktu stakki - f21": { - "name": "SF-37 Akktu Stakki - F21", - "countries": "All" - }, - "the show must go on": { - "name": "SHOW MUST GO ON! by Bender & Mach3DS", - "countries": "All" - }, - "baremetal": { - "name": "#2 Bare Metal F7 Skaraborgs Flygflottilj", - "countries": "All" - } - }, - "type": "Aircraft", - "description": "Single jet engine, delta wing, 1 crew, attack aircraft. Viggen", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "AV8BNA": { - "name": "AV8BNA", - "coalition": "blue", - "label": "AV8BNA Harrier", - "era": "Late Cold War", - "shortLabel": "AV8", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 6 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "H-L-H: Mk-82SEx6, GAU-12", - "name": "H-L-H: Mk-82SEx6, GAU-12", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", - "quantity": 2 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 (7 WP Tkts)x2, TPOD", - "name": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 (7 WP Tkts)x2, TPOD", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "GBU-16 - 1000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AS: AGM-122, AIM-9M, GBU-12, GBU-16x2, TPOD, Jammer Pod, GAU-12", - "name": "AS: AGM-122, AIM-9M, GBU-12, GBU-16x2, TPOD, Jammer Pod, GAU-12", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "2 GBU-38 */*", - "quantity": 1 - }, - { - "name": "AERO 1D 300 Gallons Fuel Tank ", - "quantity": 2 - }, - { - "name": "2 GBU-38 *\\*", - "quantity": 1 - }, - { - "name": "AGM-122 Sidearm", - "quantity": 1 - } - ], - "enabled": true, - "code": "H-M-H: AIM-9M, AGM-122, GBU-38x4, Fuel Tankx2", - "name": "H-M-H: AIM-9M, AGM-122, GBU-38x4, Fuel Tankx2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "2 Mk-83 *\\*", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "2 Mk-83 */*", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx6, Jammer Pod, GAU-12", - "name": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx6, Jammer Pod, GAU-12", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AERO 1D 300 Gallons Fuel Tank ", - "quantity": 2 - }, - { - "name": "2 Mk-83 *\\*", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "2 Mk-83 */*", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx4, Jammer Pod, GAU-12, Fuel Tankx2", - "name": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx4, Jammer Pod, GAU-12, Fuel Tankx2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", - "quantity": 2 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AFAC: AIM-9m, AGM-122, SUU-25x2, LAU-68 (7 WP Tkts)x2, Jammer Pod", - "name": "AFAC: AIM-9m, AGM-122, SUU-25x2, LAU-68 (7 WP Tkts)x2, Jammer Pod", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "2 Mk-82 Snakeye */*", - "quantity": 2 - }, - { - "name": "2 Mk-82 Snakeye *\\*", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Interdiction (H-L-L-H): AIM-9Mx2, Mk-82SEx8, Jammer Pod, GAU-12", - "name": "Interdiction (H-L-L-H): AIM-9Mx2, Mk-82SEx8, Jammer Pod, GAU-12", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 6 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "H-M-H: Mk-82LDx6, GAU-12", - "name": "H-M-H: Mk-82LDx6, GAU-12", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "2 GBU-12 *-*", - "quantity": 2 - }, - { - "name": "AERO 1D 300 Gallons Fuel Tank ", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM (H-H-H-H): GBU-12x4, TPOD, Fuel Tankx2", - "name": "PGM (H-H-H-H): GBU-12x4, TPOD, Fuel Tankx2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "2 Mk-82 Snakeye *\\*", - "quantity": 2 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "2 Mk-82 Snakeye */*", - "quantity": 2 - } - ], - "enabled": true, - "code": "L-L-L: Mk-82SEx10, Jammer Pod, GAU-12", - "name": "L-L-L: Mk-82SEx10, Jammer Pod, GAU-12", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", - "quantity": 2 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", - "quantity": 2 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 LAU-68 (7 WP Tkts)x2, GAU-12", - "name": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 LAU-68 (7 WP Tkts)x2, GAU-12", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "3 Mk-82", - "quantity": 2 - }, - { - "name": "2 Mk-82 *\\*", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "2 Mk-82 */*", - "quantity": 1 - } - ], - "enabled": true, - "code": "H-M-H: Mk-82LDx10, GAU-12", - "name": "H-M-H: Mk-82LDx10, GAU-12", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Mk-20 Rockeye - 490lbs CBU, 247 x HEAT Bomblets", - "quantity": 2 - }, - { - "name": "2 Mk-20 Rockeye *\\*", - "quantity": 2 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "2 Mk-20 Rockeye */*", - "quantity": 2 - } - ], - "enabled": true, - "code": "Area Suppression: Mk-20x10, GAU-12", - "name": "Area Suppression: Mk-20x10, GAU-12", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-10 pod - 4 x 127mm ZUNI, UnGd Rkts Mk71, HE/FRAG", - "quantity": 2 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", - "quantity": 2 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Rockets: LAU-10 (4 HE Rkts)x2, LAU-68 (7 HE Rkts)x2", - "name": "Rockets: LAU-10 (4 HE Rkts)x2, LAU-68 (7 HE Rkts)x2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AS: AIM-9M, AGM-122, AGM-65Fx2, GBU-12, TPOD, Jammer Pod, GAU-12", - "name": "AS: AIM-9M, AGM-122, AGM-65Fx2, GBU-12, TPOD, Jammer Pod, GAU-12", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-7 with AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12", - "name": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "2 GBU-12 *-*", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM (H-H-H-H): GBU-12x5, TPOD, Jammer POd, GAU-12", - "name": "PGM (H-H-H-H): GBU-12x5, TPOD, Jammer POd, GAU-12", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-7 with AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AERO 1D 300 Gallons Fuel Tank ", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12, Fuel Tankx2", - "name": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12, Fuel Tankx2", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-16 - 1000lb Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM (H-H-H-H): AIM-9Mx2, GBU-16x4, TPOD, GAU-12", - "name": "PGM (H-H-H-H): AIM-9Mx2, GBU-16x4, TPOD, GAU-12", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", - "quantity": 4 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Anti Armor: AIM-9Mx2, AGM-65Fx4, GAU-12", - "name": "Anti Armor: AIM-9Mx2, AGM-65Fx4, GAU-12", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "2 Mk-83 *\\*", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "2 Mk-83 */*", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "RA (H-M-M-H): AIM-9M, AGM-122, Mk-83LDx6, Jammer Pod, GAU-12", - "name": "RA (H-M-M-H): AIM-9M, AGM-122, Mk-83LDx6, Jammer Pod, GAU-12", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", - "quantity": 4 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Stand Off: AIM-9M, AGM-122, AGM-65Fx4, Jammer Pod, GAU-12", - "name": "Stand Off: AIM-9M, AGM-122, AGM-65Fx4, Jammer Pod, GAU-12", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 3 - }, - { - "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Stand Off: AIM-9M, AGM-122x3, AGM-65Fx2, Jammer Pod, GAU-12", - "name": "Stand Off: AIM-9M, AGM-122x3, AGM-65Fx2, Jammer Pod, GAU-12", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-122 Sidearm", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - } - ], - "enabled": true, - "code": "Stand Off: AIM-9Mx2, AGM-122x2, AGM-65Fx2, Jammer Pod, GAU-12", - "name": "Stand Off: AIM-9Mx2, AGM-122x2, AGM-65Fx2, Jammer Pod, GAU-12", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 3 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Iron Hand: AIM-9Mx1, AGM-122x3, LAU-68 (7 HE Rkts)x2, Jammer Pod, GAU-12", - "name": "Iron Hand: AIM-9Mx1, AGM-122x3, LAU-68 (7 HE Rkts)x2, Jammer Pod, GAU-12", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 3 - }, - { - "name": "2 Mk-20 Rockeye *\\*", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "2 Mk-20 Rockeye */*", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "Iron Hand: AIM-9M, AGM-122x3, Mk-20x4, Jammer Pod, GAU-12", - "name": "Iron Hand: AIM-9M, AGM-122x3, Mk-20x4, Jammer Pod, GAU-12", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 2 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - }, - { - "name": "AN/ALQ-164 DECM Pod", - "quantity": 1 - }, - { - "name": "GAU 12 Gunpod w/SAPHEI-T", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AS: AIM-9M, AGM-122, AGM-65E2x2, GBU-12, TPOD, Jammer Pod, GAU-12", - "name": "AS: AIM-9M, AGM-122, AGM-65E2x2, GBU-12, TPOD, Jammer Pod, GAU-12", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM: AIM-9M, AGM-122, AGM-65E2x4, TPOD", - "name": "PGM: AIM-9M, AGM-122, AGM-65E2x4, TPOD", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "AGM-122 Sidearm", - "quantity": 1 - }, - { - "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", - "quantity": 4 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "PGM: AIM-9M, AGM-122, APKWSIIx4, TPOD", - "name": "PGM: AIM-9M, AGM-122, APKWSIIx4, TPOD", - "roles": [ - "Strike" - ] - } - ], - "filename": "av8bna.png", - "enabled": true, - "liveries": { - "vmat-203": { - "name": "VMAT-203", - "countries": "All" - }, - "vma-542": { - "name": "VMA-542", - "countries": "All" - }, - "vma-311d": { - "name": "VMA-311D", - "countries": "All" - }, - "vma-223d": { - "name": "VMA-223D", - "countries": "All" - }, - "vma-513": { - "name": "VMA-513", - "countries": "All" - }, - "vma-214d": { - "name": "VMA-214D", - "countries": "All" - }, - "vma-211": { - "name": "VMA-211", - "countries": "All" - }, - "vma-231-2": { - "name": "VMA-231-2", - "countries": "All" - }, - "vmat-203s": { - "name": "VMAT-203 Special", - "countries": "All" - }, - "vma-214": { - "name": "VMA-214", - "countries": "All" - }, - "vma-513d": { - "name": "VMA-513D", - "countries": "All" - }, - "vma-231d": { - "name": "VMA-231D", - "countries": "All" - }, - "vma-311": { - "name": "VMA-311", - "countries": "All" - }, - "default": { - "name": "default", - "countries": "All" - }, - "vma-231-1": { - "name": "VMA-231-1", - "countries": "All" - }, - "vma-211d": { - "name": "VMA-211D", - "countries": "All" - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew, all weather, VTOL attack aircraft. Harrier", - "abilities": "Drogue AAR, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "An-26B": { - "name": "An-26B", - "coalition": "red", - "label": "An-26B Curl", - "era": "Mid Cold War", - "shortLabel": "A26", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Transport" - ] - } - ], - "filename": "an-26.png", - "enabled": true, - "liveries": { - "china plaaf": { - "name": "China PLAAF", - "countries": [ - "CHN" - ] - }, - "rf navy": { - "name": "RF Navy", - "countries": [ - "RUS" - ] - }, - "abkhazian af": { - "name": "Abkhazian AF", - "countries": [ - "ABH" - ] - }, - "aeroflot": { - "name": "Aeroflot", - "countries": [ - "SUN", - "RUS" - ] - }, - "georgian af": { - "name": "Georgian AF", - "countries": [ - "GRG" - ] - }, - "rf air force": { - "name": "RF Air Force", - "countries": [ - "RUS" - ] - }, - "ukraine af": { - "name": "Ukraine AF", - "countries": [ - "UKR" - ] - } - }, - "type": "Aircraft", - "description": "2 turboprop, straight wing, 5 crew, cargo and passenger aircraft. NATO reporting name: Curl", - "abilities": "Transport", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "An-30M": { - "name": "An-30M", - "coalition": "red", - "label": "An-30M Clank", - "era": "Mid Cold War", - "shortLabel": "A30", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Transport" - ] - } - ], - "filename": "a-50.png", - "enabled": true, - "liveries": { - "15th transport ab": { - "name": "15th Transport AB", - "countries": [ - "UKR" - ] - }, - "china caac": { - "name": "China CAAC", - "countries": [ - "CHN" - ] - }, - "rf air force": { - "name": "RF Air Force", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 turboprop, straight wing, 7 crew, weather reseach aircraft. NATO reporting name: Clank", - "abilities": "Transport", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "B-1B": { - "name": "B-1B", - "coalition": "blue", - "label": "B-1B Lancer", - "era": "Late Cold War", - "shortLabel": "B1", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "28 x Mk-82 - 500lb GP Bombs LD", - "quantity": 3 - } - ], - "enabled": true, - "code": "Mk-82*84", - "name": "Mk-82*84", - "roles": [ - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "4 x AGM-154C - JSOW Unitary BROACH", - "quantity": 3 - } - ], - "enabled": true, - "code": "AGM-154*12", - "name": "AGM-154*12", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "16 x GBU-38 - JDAM, 500lb GPS Guided Bombs", - "quantity": 3 - } - ], - "enabled": true, - "code": "GBU-38*48", - "name": "GBU-38*48", - "roles": [ - "CAS", - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "10 x CBU-87 - 202 x CEM Cluster Bombs", - "quantity": 3 - } - ], - "enabled": true, - "code": "CBU-87*30", - "name": "CBU-87*30", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "10 x CBU-97 - 10 x SFW Cluster Bombs", - "quantity": 3 - } - ], - "enabled": true, - "code": "CBU-97*30", - "name": "CBU-97*30", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "10 x CBU-97 - 10 x SFW Cluster Bombs", - "quantity": 2 - }, - { - "name": "16 x GBU-38 - JDAM, 500lb GPS Guided Bombs", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-38*16, CBU-97*20", - "name": "GBU-38*16, CBU-97*20", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "8 x Mk-84 - 2000lb GP Bombs LD", - "quantity": 3 - } - ], - "enabled": true, - "code": "Mk-84*24", - "name": "Mk-84*24", - "roles": [ - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "8 x GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bombs", - "quantity": 3 - } - ], - "enabled": true, - "code": "GBU-31*24", - "name": "GBU-31*24", - "roles": [ - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "8 x GBU-31(V)3/B - JDAM, 2000lb GPS Guided Penetrator Bombs", - "quantity": 3 - } - ], - "enabled": true, - "code": "GBU-31(V)3/B*24", - "name": "GBU-31(V)3/B*24", - "roles": [ - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "16 x GBU-38 - JDAM, 500lb GPS Guided Bombs", - "quantity": 2 - }, - { - "name": "8 x GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bombs", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-31*8, GBU-38*32", - "name": "GBU-31*8, GBU-38*32", - "roles": [ - "Strike", - "Strike" - ] - } - ], - "filename": "b-1.png", - "enabled": true, - "liveries": { - "usaf standard": { - "name": "usaf standard", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swing wing, 2 crew bomber. Lancer", - "abilities": "Boom AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "B-52H": { - "name": "B-52H", - "coalition": "blue", - "label": "B-52H Stratofortress", - "era": "Early Cold War", - "shortLabel": "B52", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "HSAB with 9 x Mk-83 - 1000lb GP Bombs LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-84*18", - "name": "Mk-84*18", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "MER12 with 12 x Mk-82 - 500lb GP Bombs LD", - "quantity": 2 - }, - { - "name": "27 x Mk-82 - 500lb GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk 82*51", - "name": "Mk 82*51", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "HSAB with 9 x Mk-20 Rockeye - 490lbs CBUs, 247 x HEAT Bomblets", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk20*18", - "name": "Mk20*18", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "6 x AGM-86D on MER", - "quantity": 2 - }, - { - "name": "8 x AGM-86D", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-86C*20", - "name": "AGM-86C*20", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "8 x AGM-84A Harpoon ASM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-84A*8", - "name": "AGM-84A*8", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "b-52.png", - "enabled": true, - "liveries": { - "usaf standard": { - "name": "usaf standard", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "8 jet engine, swept wing, 6 crew bomber. Stratofortress", - "abilities": "Boom AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Bf-109K-4": { - "name": "Bf-109K-4", - "coalition": "red", - "label": "Bf-109K-4 Fritz", - "era": "WW2", - "shortLabel": "109", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "300 liter Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel Tank", - "name": "Fuel Tank", - "roles": [ - "CAP", - "FAC-A", - "Escort" - ] - }, - { - "items": [ - { - "name": "SC 250 Type 3 J - 250kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC250", - "name": "SC250", - "roles": [ - "Runway Attack", - "CAS", - "Antiship Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "SC 500 J - 500kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC500", - "name": "SC500", - "roles": [ - "Runway Attack", - "CAS", - "Antiship Strike", - "Strike" - ] - } - ], - "filename": "bf109.png", - "enabled": true, - "liveries": { - "germany_standard": { - "name": "Jagdgeschwader 27", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 white 6, jg 4": { - "name": "White 6, JG 4", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 dogfight red": { - "name": "RED", - "countries": "All" - }, - "bf-109 k4 dogfight blue": { - "name": "BLUE", - "countries": "All" - }, - "bf-109 k4 red7 eads": { - "name": "BF109G4 -red7- EADS -fondation messerschmitt V2", - "countries": [ - "GER" - ] - }, - "bf-109 k4 iijg52": { - "name": "II./JG52", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 us captured": { - "name": "US Captured", - "countries": [ - "USA" - ] - }, - "bf-109 k4 stab jg52": { - "name": "Stab JG52", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 334xxx batch": { - "name": "334xxx batch", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 ussr green": { - "name": "Green-trophy RKKA", - "countries": [ - "SUN", - "RUS" - ] - }, - "bf-109 k4 330xxx batch": { - "name": "330xxx batch", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 irmgard": { - "name": "Bf-109K-4 Irmgard Captured", - "countries": [ - "USA" - ] - }, - "bf-109 k4 swiss e-3a j-374 1940": { - "name": "Swiss E-3a J-374 1940 l'Seducteur", - "countries": [ - "SUI" - ] - }, - "green": { - "name": "Green", - "countries": "All" - }, - "bf-109 k4 9.jg77": { - "name": "9./JG77", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 croatia": { - "name": "Croatia Air Force - 'Black 4'", - "countries": [ - "HRV", - "NZG", - "GER" - ] - }, - "bf-109 k4 9.jg27 (w10+i)": { - "name": "9./JG27 (W10+I)", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 legion condor spain 1939": { - "name": "6-123 ESPA\u00d1A", - "countries": [ - "SPN" - ] - }, - "bf-109 k4 jagdgeschwader 53": { - "name": " Jagdgeschwader 53", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 1.njg 11": { - "name": "NJG 11", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 g10 of tibor tobak rhaf": { - "name": "BF109G10 RHAF Tibor Tobak by Reflected", - "countries": [ - "GER", - "HUN", - "NZG" - ] - }, - "bf-109 k4 jagdgeschwader 77": { - "name": "Jagdgeschwader 77", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 iaf s-199": { - "name": "S-199 IDF by Ovenmit", - "countries": [ - "ISR" - ] - }, - "bf-109 k4 iiijg27": { - "name": "III/JG27", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 1.njg 11 (white 5)": { - "name": "1./NJG 11 (W5)", - "countries": [ - "GER", - "NZG" - ] - }, - "bf-109 k4 raf vd 358 e-2": { - "name": "RAF VD 358 E-2 - UK Captured", - "countries": [ - "UK" - ] - }, - "bf-109 k4 335xxx batch": { - "name": "335xxx batch", - "countries": [ - "GER", - "NZG" - ] - } - }, - "type": "Aircraft", - "description": "Single propeller, straight wing, 1 crew. 109", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "C-101CC": { - "name": "C-101CC", - "coalition": "blue", - "label": "C-101CC", - "era": "Late Cold War", - "shortLabel": "101", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9P, DEFA 553 CANNON (I)", - "name": "2*AIM-9P, DEFA 553 CANNON (I)", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9M, DEFA 553 CANNON (I)", - "name": "2*AIM-9M, DEFA 553 CANNON (I)", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9P, DEFA 533 CANNON (II)", - "name": "2*AIM-9P, DEFA 533 CANNON (II)", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9P, AN-M3 CANNON (IV)", - "name": "2*AIM-9P, AN-M3 CANNON (IV)", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R.550 MAGIC, DEFA 553 CANNON", - "name": "2*R.550 MAGIC, DEFA 553 CANNON", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9M, AN-M3 CANNON (III)", - "name": "2*AIM-9M, AN-M3 CANNON (III)", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9P, DEFA 553 CANNON", - "name": "2*AIM-9P, DEFA 553 CANNON", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R.550 MAGIC, DEFA 553 CANNON (III)", - "name": "2*R.550 MAGIC, DEFA 553 CANNON (III)", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - }, - { - "name": "Belouga", - "quantity": 2 - }, - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*AIM-9P, 2*BELOUGA, DEFA 553 CANNON", - "name": "2*AIM-9P, 2*BELOUGA, DEFA 553 CANNON", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - }, - { - "name": "Sea Eagle - ASM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*AIM9-P, 2*SEA EAGLE, DEFA-553 CANNON", - "name": "2*AIM9-P, 2*SEA EAGLE, DEFA-553 CANNON", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Sea Eagle - ASM", - "quantity": 2 - }, - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9M 2*SEA EAGLE, AN-M3 CANNON", - "name": "2*AIM-9M 2*SEA EAGLE, AN-M3 CANNON", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9M, AN-M3 CANNON", - "name": "2*AIM-9M, AN-M3 CANNON", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Belouga", - "quantity": 2 - }, - { - "name": "4*BDU-33 - AF/B37K Rack with 4*25lb Practice Bomb LD", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*BELOUGA,2*BDU-33, DEFA-553 CANNON", - "name": "2*BELOUGA,2*BDU-33, DEFA-553 CANNON", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Sea Eagle - ASM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2* SEA EAGLE, DEFA-553 CANNON", - "name": "2* SEA EAGLE, DEFA-553 CANNON", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "BR-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - }, - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*AIM-9P, 2*BR-250,2*MK-82, DEFA 553 CANNON", - "name": "2*AIM-9P, 2*BR-250,2*MK-82, DEFA 553 CANNON", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - }, - { - "name": "Sea Eagle - ASM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R.550 MAGIC, 2*SEA EAGLE , DEFA-553 CANNON", - "name": "2*R.550 MAGIC, 2*SEA EAGLE , DEFA-553 CANNON", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - }, - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*R.550 MAGIC, DEFA 553 CANNON (IV)", - "name": "2*R.550 MAGIC, DEFA 553 CANNON (IV)", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "Belouga", - "quantity": 2 - }, - { - "name": "BR-500 - 500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*BELOUGA, 2*BR-500, DEFA 553 CANNON", - "name": "2*BELOUGA, 2*BR-500, DEFA 553 CANNON", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9M, DEFA 553 CANNON (IV)", - "name": "2*AIM-9M, DEFA 553 CANNON (IV)", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - }, - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R.550 MAGIC, AN-M3 CANNON (II)", - "name": "2*R.550 MAGIC, AN-M3 CANNON (II)", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic, DEFA 553 CANNON (I)", - "name": "2*R550 Magic, DEFA 553 CANNON (I)", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - }, - { - "name": "BIN-200 - 200kg Napalm Incendiary Bomb", - "quantity": 2 - }, - { - "name": "Belouga", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*AIM-9M ,2*BELOUGA,2*BIN-200, AN-M3 CANNON", - "name": "2*AIM-9M ,2*BELOUGA,2*BIN-200, AN-M3 CANNON", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*AIM-9M, 2*LAU 68, 2*MK-82, DEFA 553 CANNON", - "name": "2*AIM-9M, 2*LAU 68, 2*MK-82, DEFA 553 CANNON", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9P, AN-M3 CANNON (III)", - "name": "2*AIM-9P, AN-M3 CANNON (III)", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9M, DEFA 533 CANNON (II)", - "name": "2*AIM-9M, DEFA 533 CANNON (II)", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "DEFA-553 - 30mm Revolver Cannon", - "quantity": 1 - }, - { - "name": "4*BDU-33 - AF/B37K Rack with 4*25lb Practice Bomb LD", - "quantity": 2 - }, - { - "name": "BR-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "R550 Magic 2 IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*R.550 MAGIC, 2*BR-250, 2*BDU-33, DEFA 553 CANNON", - "name": "2*R.550 MAGIC, 2*BR-250, 2*BDU-33, DEFA 553 CANNON", - "roles": [ - "CAS" - ] - } - ], - "filename": "c-101.png", - "enabled": true, - "liveries": { - "i brigada aerea - chile early green n.1 a-36 halcon": { - "name": "I Brigada Aerea - Chile Early Green", - "countries": [ - "CHL" - ] - }, - "aviodev skin": { - "name": "Aviodev Skin", - "countries": [ - "CUB", - "AUS", - "PRT", - "SUN", - "USA", - "BLR", - "HRV", - "LBN", - "SVK", - "TUR", - "ARG", - "BEL", - "FIN", - "SAU", - "UN", - "RSI", - "CHL", - "AUT", - "EGY", - "CAN", - "QAT", - "YUG", - "ISR", - "PER", - "BHR", - "NGA", - "IDN", - "KAZ", - "INS", - "AUSAF", - "PAK", - "SVN", - "RED", - "ROU", - "DEN", - "TUN", - "IND", - "CZE", - "MYS", - "GHA", - "OMN", - "CYP", - "RSO", - "IRN", - "UKR", - "JPN", - "THA", - "JOR", - "RSA", - "MEX", - "NOR", - "ITA", - "NETH", - "SUI", - "VNM", - "KOR", - "GRG", - "SDN", - "UK", - "BRA", - "ARE", - "ABH", - "BOL", - "RUS", - "PHL", - "SPN", - "MAR", - "DZA", - "GDR", - "HND", - "PRK", - "SRB", - "BGR", - "LBY", - "VEN", - "IRQ", - "SYR", - "NZG", - "GRC", - "POL", - "SWE", - "GER", - "CHN", - "YEM", - "FRA", - "HUN", - "ETH", - "BLUE", - "KWT" - ] - }, - "georgia combat fictional green": { - "name": "Georgia Combat Fictional Green", - "countries": [ - "GRG" - ] - }, - "i brigada aerea - chile early grey n.1 a-36 halcon": { - "name": "I Brigada Aerea - Chile Early Grey", - "countries": [ - "CHL" - ] - }, - "royal jordanian air force": { - "name": "Royal jordanian Air Force ", - "countries": [ - "JOR" - ] - }, - "georgia combat fictional spots": { - "name": "Georgia Combat Fictional Spots", - "countries": [ - "GRG" - ] - }, - "i brigada aerea - grupo de aviacion n.1 a-36 halcon desert skin": { - "name": "I Brigada Aerea - Grupo de Aviacion N.1 A-36 HALCON Desert Skin", - "countries": [ - "CHL" - ] - }, - "i brigada aerea - chile early agressor n\u00ba410 n.1 a-36 halcon": { - "name": "I Brigada Aerea - Chile Early Agressor N\u00ba410 ", - "countries": [ - "CHL" - ] - }, - "usaf agressor fictional": { - "name": "USAF Agressor Fictional", - "countries": [ - "USA", - "AUSAF", - "BLUE" - ] - }, - "i brigada aerea - grupo de aviacion n.1 a-36 halcon": { - "name": "I Brigada Aerea - Grupo de Aviacion N.1 A-36 HALCON", - "countries": [ - "CHL" - ] - }, - "i brigada aerea - chile early agressor n\u00ba411 n.1 a-36 halcon": { - "name": "I Brigada Aerea - Chile Early Agressor N\u00ba411", - "countries": [ - "CHL" - ] - }, - "claex green camu skin - centro logistico de armamento y experimentacion": { - "name": "CLAEX Green Camu Skin - Centro Logistico de Armamento y Experimentacion", - "countries": [ - "RED", - "SPN", - "BLUE" - ] - }, - "russia combat fictional": { - "name": "Russia Combat Fictional", - "countries": [ - "RED", - "RUS" - ] - }, - "georgia combat fictional wolf": { - "name": "Georgia Combat Fictional Wolf", - "countries": [ - "GRG" - ] - }, - "honduras - air force comayagua coronel jose enrique soto cano air base skin 1": { - "name": "Honduras - Air Force Comayagua Coronel Jose Enrique Soto Cano Air Base Skin 1", - "countries": [ - "HND" - ] - }, - "i brigada aerea - grupo de aviacion n.3 a-36 halcon": { - "name": "I Brigada Aerea - Grupo de Aviacion N.3 A-36 HALCON", - "countries": [ - "CHL" - ] - }, - "honduras - air force comayagua coronel jose enrique soto cano air base skin 2": { - "name": "Honduras - Air Force Comayagua Coronel Jose Enrique Soto Cano Air Base Skin 2", - "countries": [ - "HND" - ] - }, - "claex desert camu skin - centro logistico de armamento y experimentacion": { - "name": "CLAEX Desert Camu Skin - Centro Logistico de Armamento y Experimentacion", - "countries": [ - "RED", - "SPN", - "BLUE" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "C-130": { - "name": "C-130", - "coalition": "blue", - "label": "C-130 Hercules", - "era": "Early Cold War", - "shortLabel": "130", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Transport" - ] - } - ], - "filename": "c-130.png", - "enabled": true, - "liveries": { - "belgian air force": { - "name": "Belgian Air Force", - "countries": [ - "BEL" - ] - }, - "iriaf 5-8518": { - "name": "IRIAF 5-8518", - "countries": [ - "IRN" - ] - }, - "israel defence force": { - "name": "Israel Defence Force", - "countries": [ - "ISR" - ] - }, - "haf gray": { - "name": "Hellenic Airforce - Gray", - "countries": [ - "GRC" - ] - }, - "turkish air force": { - "name": "Turkish Air Force", - "countries": [ - "TUR" - ] - }, - "royal danish air force": { - "name": "Royal Danish Air Force", - "countries": [ - "DEN" - ] - }, - "algerian af green": { - "name": "Algerian AF Green", - "countries": [ - "DZA" - ] - }, - "royal netherlands air force": { - "name": "Royal Netherlands Air Force", - "countries": [ - "NETH" - ] - }, - "canada's air force": { - "name": "Canada's Air Force", - "countries": [ - "CAN" - ] - }, - "royal norwegian air force": { - "name": "Royal Norwegian Air Force", - "countries": [ - "NOR" - ] - }, - "iriaf 5-8503": { - "name": "IRIAF 5-8503", - "countries": [ - "IRN" - ] - }, - "us air force": { - "name": "US Air Force", - "countries": [ - "USA" - ] - }, - "royal air force": { - "name": "Royal Air Force", - "countries": [ - "UK" - ] - }, - "air algerie l-382 white": { - "name": "Air Algerie L-382 White", - "countries": [ - "DZA" - ] - }, - "french air force": { - "name": "French Air Force", - "countries": [ - "FRA" - ] - }, - "spanish air force": { - "name": "Spanish Air Force", - "countries": [ - "SPN" - ] - }, - "algerian af h30 white": { - "name": "Algerian AF H30 White", - "countries": [ - "DZA" - ] - } - }, - "type": "Aircraft", - "description": "4 turboprop, stright wing, 3 crew. Hercules", - "abilities": "Transport", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "C-17A": { - "name": "C-17A", - "coalition": "blue", - "label": "C-17A Globemaster", - "era": "Modern", - "shortLabel": "C17", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Transport" - ] - } - ], - "filename": "c-17.png", - "enabled": true, - "liveries": { - "usaf standard": { - "name": "usaf standard", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 3 crew. Globemaster", - "abilities": "Transport", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "E-2C": { - "name": "E-2C", - "coalition": "blue", - "label": "E-2D Hawkeye", - "era": "Mid Cold War", - "shortLabel": "E2", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "AWACS" - ] - } - ], - "filename": "e-2.png", - "enabled": true, - "liveries": { - "vaw-125 tigertails": { - "name": "VAW-125 Tigertails", - "countries": [ - "USA" - ] - }, - "e-2d demo": { - "name": "E-2D Demo", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "2 turboprop, straight wing, 5 crew. Hawkeye", - "abilities": "AEW, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "E-3A": { - "name": "E-3A", - "coalition": "blue", - "label": "E-3A Sentry", - "era": "Mid Cold War", - "shortLabel": "E3", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "AWACS" - ] - } - ], - "filename": "e-3.png", - "enabled": true, - "liveries": { - "nato": { - "name": "nato", - "countries": [ - "USA", - "FRA", - "UK" - ] - }, - "usaf standard": { - "name": "usaf standard", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 17 crew. Sentry", - "abilities": "AEW", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "F-117A": { - "name": "F-117A", - "coalition": "blue", - "label": "F-117A Nighthawk", - "era": "Late Cold War", - "shortLabel": "117", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-12*2", - "name": "GBU-12*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-10*2", - "name": "GBU-10*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-27 - 2000lb Laser Guided Penetrator Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-27*2", - "name": "GBU-27*2", - "roles": [ - "Strike" - ] - } - ], - "filename": "f-117.png", - "enabled": true, - "liveries": { - "usaf standard": { - "name": "usaf standard", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, delta wing, 1 crew. Nighthawk", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-14A-135-GR": { - "name": "F-14A-135-GR", - "coalition": "blue", - "label": "F-14A-135-GR Tomcat", - "era": "Late Cold War", - "shortLabel": "14A", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "XT*2", - "name": "XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 6 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*6, AIM-9L*2, XT*2", - "name": "AIM-54A-MK47*6, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-7F", - "quantity": 6 - }, - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-7F*6, AIM-9L*2, XT*2", - "name": "AIM-7F*6, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-7F", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2, XT*2", - "name": "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 2 - }, - { - "name": "AIM-7F", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4, XT*2", - "name": "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-9L*4, XT*2", - "name": "AIM-54A-MK47*4, AIM-9L*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-9M*4, XT*2", - "name": "AIM-54A-MK47*4, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*4, AIM-9M*4, XT*2", - "name": "AIM-54A-MK60*4, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-7F", - "quantity": 4 - }, - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-7F*4, AIM-9L*4, XT*2", - "name": "AIM-7F*4, AIM-9L*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "MAK79 4 BDU-33", - "quantity": 2 - }, - { - "name": "MAK79 3 BDU-33", - "quantity": 2 - } - ], - "enabled": true, - "code": "BDU-33*14", - "name": "BDU-33*14", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "3 BDU-33", - "quantity": 4 - } - ], - "enabled": true, - "code": "BDU-33*12", - "name": "BDU-33*12", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "GBU-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-10*2", - "name": "GBU-10*2", - "roles": [ - "Strike", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "GBU-12", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-12*4", - "name": "GBU-12*4", - "roles": [ - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-16", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-16*4", - "name": "GBU-16*4", - "roles": [ - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-24", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-24*2", - "name": "GBU-24*2", - "roles": [ - "Strike", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Mk-84", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-84*4", - "name": "Mk-84*4", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Mk-83", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-83*4", - "name": "Mk-83*4", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Mk-82", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-82*4", - "name": "Mk-82*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MAK79 4 Mk-82", - "quantity": 2 - }, - { - "name": "MAK79 3 Mk-82", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-82*14", - "name": "Mk-82*14", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "MAK79 4 Mk-81", - "quantity": 2 - }, - { - "name": "MAK79 3 Mk-81", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-81*14", - "name": "Mk-81*14", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "Mk-20", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-20*4", - "name": "Mk-20*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-82AIR", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-82AIR*4", - "name": "Mk-82AIR*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "2 LAU-10 - 4 ZUNI MK 71", - "quantity": 1 - }, - { - "name": "LAU-10 - 4 ZUNI MK 71", - "quantity": 1 - } - ], - "enabled": true, - "code": "Zuni*12", - "name": "Zuni*12", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "2 LAU-10 - 4 ZUNI MK 71", - "quantity": 3 - }, - { - "name": "LAU-10 - 4 ZUNI MK 71", - "quantity": 1 - } - ], - "enabled": true, - "code": "Zuni*28", - "name": "Zuni*28", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "2 SUU-25 * 8 LUU-2", - "quantity": 1 - }, - { - "name": "SUU-25 * 8 LUU-2", - "quantity": 1 - } - ], - "enabled": true, - "code": "LUU-2*24", - "name": "LUU-2*24", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-82", - "quantity": 2 - }, - { - "name": "AIM-7F", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*2", - "name": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*2", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-82", - "quantity": 1 - }, - { - "name": "AIM-7F", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*1", - "name": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*1", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-20", - "quantity": 2 - }, - { - "name": "AIM-7F", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-20*2", - "name": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-20*2", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "GBU-12", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", - "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "GBU-24", - "quantity": 1 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", - "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-82", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-20", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - } - ], - "filename": "f-14.png", - "enabled": true, - "liveries": { - "rogue nation(top gun - maverick)": { - "name": "Top Gun: Maverick - Rogue Nation", - "countries": "All" - }, - "vf-21 freelancers 200": { - "name": "VF-21 Freelancers 200", - "countries": "All" - }, - "vf-11 ae106 1988": { - "name": "VF-11 AE106 1988", - "countries": "All" - }, - "vf-301 nd113": { - "name": "VF-301 ND113 by Mach3DS", - "countries": "All" - }, - "vf-301 nd111": { - "name": "VF-301 ND111 by Mach3DS", - "countries": "All" - }, - "vf-154 black knights 101": { - "name": "00 - VF-154 Black Knights 101", - "countries": "All" - }, - "vf-14 tophatters aj206 (1999 allied force)": { - "name": "VF-14 Tophatters AJ206 (1999 Allied Force)", - "countries": "All" - }, - "vf-31 ae204 1988": { - "name": "VF-31 AE204 1988", - "countries": "All" - }, - "vf-1 wolfpack nk102 (1974)": { - "name": "VF-1 Wolfpack NK102 (1974)", - "countries": "All" - }, - "vf-33 starfighters ab201 (1988)": { - "name": "VF-33 Starfighters AB201(Dale Snodgrass)", - "countries": "All" - }, - "vf-31 1991 ae200": { - "name": "VF-31 1991 AE200 by Mach3DS", - "countries": "All" - }, - "vf-41 black aces aj100 (1999 allied force)": { - "name": "VF-41 Black Aces AJ100 (1999 Allied Force)", - "countries": "All" - }, - "vf-41 black aces aj101 (1999 allied force)": { - "name": "VF-41 Black Aces AJ101 (1999 Allied Force)", - "countries": "All" - }, - "vf-31 1991 ae205": { - "name": "VF-31 1991 AE205 by Mach3DS", - "countries": "All" - }, - "vf-41 black aces aj102 (1999 allied force)": { - "name": "VF-41 Black Aces AJ102 (1999 Allied Force)", - "countries": "All" - }, - "vf-1 wolfpack nk101 (1974)": { - "name": "VF-1 Wolfpack NK101 (1974)", - "countries": "All" - }, - "vf-31 ae200 1988": { - "name": "VF-31 AE200 1988", - "countries": "All" - }, - "vf-11 red rippers 106": { - "name": "VF-11 Red Rippers 106", - "countries": "All" - }, - "vf-1 wolfpack nk103 (1974)": { - "name": "VF-1 Wolfpack NK103 (1974)", - "countries": "All" - }, - "vf-14 tophatters ab103 (1976)": { - "name": "VF-14 Tophatters AB103(1976)", - "countries": "All" - }, - "vf-111 sundowners 200": { - "name": "VF-111 Sundowners 200", - "countries": "All" - }, - "top gun 114": { - "name": "Top Gun 114 Maverick and Goose", - "countries": "All" - }, - "vf-11 ae103 1988": { - "name": "VF-11 AE103 1988", - "countries": "All" - }, - "vx-4 vandy one sad bunny (1992)": { - "name": "VX-4 Vandy One Sad Bunny (1992)", - "countries": "All" - }, - "vf-211 fighting checkmates 100 (2001)": { - "name": "VF-211 Fighting Checkmates 100 (2001)", - "countries": [ - "USA" - ] - }, - "vf-301 nd104": { - "name": "VF-301 ND104 by Mach3DS", - "countries": "All" - }, - "vf-32 swordsmen ab200 (1976)": { - "name": "VF-32 Swordsmen AB200 (1976)", - "countries": "All" - }, - "vf-211 fighting checkmates 105": { - "name": "VF-211 Fighting Checkmates 105", - "countries": "All" - }, - "vf-14 tophatters ab100 (1976)": { - "name": "VF-14 Tophatters AB100(1976)", - "countries": "All" - }, - "vf-11 ae101 1988": { - "name": "VF-11 AE101 1988", - "countries": "All" - }, - "vf-14 tophatters aj202 (1999 allied force)": { - "name": "VF-14 Tophatters AJ202 (1999 Allied Force)", - "countries": "All" - }, - "vf-1 wolfpack nk100 (1974)": { - "name": "VF-1 Wolfpack NK100 (1974)", - "countries": "All" - }, - "vf-301 nd101 hivis": { - "name": "VF-301 ND101 HiVis by Mach3DS", - "countries": "All" - }, - "vf-14 tophatters aj201 (1999 allied force)": { - "name": "VF-14 Tophatters AJ201 (1999 Allied Force)", - "countries": "All" - }, - "vf-14 tophatters aj200 (1999) 80th aniversary": { - "name": "VF-14 Tophatters AJ200 (1999) 80th Anniversary", - "countries": "All" - }, - "vf-41 black aces aj104 (1999 allied force)": { - "name": "VF-41 Black Aces AJ104 (1999 Allied Force)", - "countries": "All" - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swing wing, 2 crew. Tomcat", - "abilities": "Drogue AAR, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-14B": { - "name": "F-14B", - "coalition": "blue", - "label": "F-14B Tomcat", - "era": "Late Cold War", - "shortLabel": "14B", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "XT*2", - "name": "XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 6 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*6, AIM-9M*2, XT*2", - "name": "AIM-54A-MK47*6, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 6 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*6, AIM-9L*2, XT*2", - "name": "AIM-54A-MK47*6, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 6 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*6, AIM-9M*2, XT*2", - "name": "AIM-54A-MK60*6, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-54C-Mk47", - "quantity": 6 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54C-MK47*6, AIM-9M*2, XT*2", - "name": "AIM-54C-MK47*6, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-7M", - "quantity": 6 - }, - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-7M*6, AIM-9M*2, XT*2", - "name": "AIM-7M*6, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-7M", - "quantity": 6 - }, - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-7M*6, AIM-9L*2, XT*2", - "name": "AIM-7M*6, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", - "name": "AIM-54A-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-7M*2, AIM-9L*2, XT*2", - "name": "AIM-54A-MK47*4, AIM-7M*2, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*4, AIM-7M*2, AIM-9M*2, XT*2", - "name": "AIM-54A-MK60*4, AIM-7M*2, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54C-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54C-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", - "name": "AIM-54C-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*2, AIM-9L*2, XT*2", - "name": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*2, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", - "name": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*2, AIM-7M*1, AIM-9M*4, XT*2", - "name": "AIM-54A-MK60*2, AIM-7M*1, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54C-Mk47", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54C-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", - "name": "AIM-54C-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-9M*2, AIM-9L*2, XT*2", - "name": "AIM-54A-MK47*4, AIM-9M*2, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*4, AIM-9M*4, XT*2", - "name": "AIM-54A-MK47*4, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*4, AIM-9M*4, XT*2", - "name": "AIM-54A-MK60*4, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54C-Mk47", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-54C-MK47*4, AIM-9M*4, XT*2", - "name": "AIM-54C-MK47*4, AIM-9M*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9M", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-7M*4, AIM-9M*2, AIM-9L*2, XT*2", - "name": "AIM-7M*4, AIM-9M*2, AIM-9L*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-7M", - "quantity": 4 - }, - { - "name": "LAU-138 AIM-9L", - "quantity": 2 - }, - { - "name": "LAU-7 AIM-9L", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-7M*4, AIM-9L*4, XT*2", - "name": "AIM-7M*4, AIM-9L*4, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 3 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk47", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54A-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", - "name": "AIM-54A-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 3 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*2, AIM-7M*3, AIM-9M*2, XT*2", - "name": "AIM-54A-MK60*2, AIM-7M*3, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 3 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "AIM-54C-Mk47", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-54C-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", - "name": "AIM-54C-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "MAK79 4 BDU-33", - "quantity": 2 - }, - { - "name": "MAK79 3 BDU-33", - "quantity": 2 - } - ], - "enabled": true, - "code": "BDU-33*14", - "name": "BDU-33*14", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "3 BDU-33", - "quantity": 4 - } - ], - "enabled": true, - "code": "BDU-33*12", - "name": "BDU-33*12", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "GBU-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-10*2", - "name": "GBU-10*2", - "roles": [ - "Strike", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "GBU-12", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-12*4", - "name": "GBU-12*4", - "roles": [ - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-16", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-16*4", - "name": "GBU-16*4", - "roles": [ - "Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-24", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-24*2", - "name": "GBU-24*2", - "roles": [ - "Strike", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Mk-84", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-84*4", - "name": "Mk-84*4", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Mk-83", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-83*4", - "name": "Mk-83*4", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Mk-82", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-82*4", - "name": "Mk-82*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MAK79 4 Mk-82", - "quantity": 2 - }, - { - "name": "MAK79 3 Mk-82", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-82*14", - "name": "Mk-82*14", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "MAK79 4 Mk-81", - "quantity": 2 - }, - { - "name": "MAK79 3 Mk-81", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-81*14", - "name": "Mk-81*14", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "Mk-20", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-20*4", - "name": "Mk-20*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Mk-82AIR", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-82AIR*4", - "name": "Mk-82AIR*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "2 LAU-10 - 4 ZUNI MK 71", - "quantity": 1 - }, - { - "name": "LAU-10 - 4 ZUNI MK 71", - "quantity": 1 - } - ], - "enabled": true, - "code": "Zuni*12", - "name": "Zuni*12", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "2 LAU-10 - 4 ZUNI MK 71", - "quantity": 3 - }, - { - "name": "LAU-10 - 4 ZUNI MK 71", - "quantity": 1 - } - ], - "enabled": true, - "code": "Zuni*28", - "name": "Zuni*28", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "2 SUU-25 * 8 LUU-2", - "quantity": 1 - }, - { - "name": "SUU-25 * 8 LUU-2", - "quantity": 1 - } - ], - "enabled": true, - "code": "LUU-2*24", - "name": "LUU-2*24", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-82", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-82", - "quantity": 1 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*1", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*1", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-20", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "GBU-12", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", - "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "GBU-24", - "quantity": 1 - }, - { - "name": "AIM-7M", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", - "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-82", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - }, - { - "items": [ - { - "name": "LAU-138 AIM-9M", - "quantity": 2 - }, - { - "name": "LANTIRN Targeting Pod", - "quantity": 1 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 2 - }, - { - "name": "Mk-20", - "quantity": 2 - }, - { - "name": "AIM-7M", - "quantity": 1 - }, - { - "name": "AIM-54A-Mk60", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", - "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", - "roles": [ - "Strike", - "CAS", - "Runway Attack", - "Strike" - ] - } - ], - "filename": "f-14.png", - "enabled": true, - "liveries": { - "vf-103 sluggers 206 (1995)": { - "name": "VF-103 Sluggers 206 (1995)", - "countries": "All" - }, - "vf-143 pukin dogs low vis": { - "name": "VF-143 Pukin Dogs Low Vis (1998)", - "countries": "All" - }, - "rogue nation(top gun - maverick)": { - "name": "Top Gun: Maverick - Rogue Nation", - "countries": "All" - }, - "vf-31 tomcatters nk101 (2004)": { - "name": "VF-31 Tomcatters NK101 (2004)", - "countries": "All" - }, - "vf-32 fighting swordsmen 103": { - "name": "VF-32 Fighting Swordsmen 103 (1998)", - "countries": "All" - }, - "vf-103 jolly rogers hi viz": { - "name": "VF-103 Jolly Rogers Hi Viz", - "countries": "All" - }, - "vf-101 dark": { - "name": "VF-101 Dark", - "countries": "All" - }, - "vf-102 diamondbacks": { - "name": "01 - VF-102 Diamondbacks 1996", - "countries": "All" - }, - "vf-143 pukin dogs low vis (1995)": { - "name": "VF-143 Pukin Dogs Low Vis (1995)", - "countries": "All" - }, - "vx-4 xf-51 1988": { - "name": "VX-4 XF-51 1988", - "countries": "All" - }, - "top gun 114 hb weather": { - "name": "Top Gun 114 Maverick and Goose", - "countries": "All" - }, - "vf-24 renegades": { - "name": "VF-24 Renegades Low-Viz", - "countries": "All" - }, - "vf-11 red rippers (1997)": { - "name": "VF-11 Red Rippers (1997)", - "countries": "All" - }, - "vf-32 fighting swordsmen 100 (2000)": { - "name": "VF-32 Fighting Swordsmen 100 (2000)", - "countries": [ - "USA" - ] - }, - "vf-74 bedevilers 1991": { - "name": "VF-74 Be-Devilers 1991", - "countries": "All" - }, - "santa": { - "name": "Fictional Christmas Livery", - "countries": "All" - }, - "vf-103 sluggers 207 (1991)": { - "name": "VF-103 Sluggers 207 (1991)", - "countries": "All" - }, - "vf-32 fighting swordsmen 101": { - "name": "VF-32 Fighting Swordsmen 101 (1998)", - "countries": "All" - }, - "vf-103 last ride": { - "name": "VF-103 Last Ride", - "countries": "All" - }, - "vf-143 pukin dogs cag": { - "name": "VF-143 Pukin' Dogs CAG", - "countries": "All" - }, - "vx-9 vampires xf240 white whale": { - "name": "VX-9 Vampires XF240 White Whale", - "countries": "All" - }, - "vf-74 adversary": { - "name": "VF-74 Adversary", - "countries": "All" - }, - "vx-9 vandy 41 (1995)": { - "name": "VX-9 Vandy 41 (1995)", - "countries": "All" - }, - "vf-142 ghostriders": { - "name": "VF-142 Ghostriders", - "countries": "All" - }, - "vf-211 fighting checkmates": { - "name": "VF-211 Fighting Checkmates", - "countries": "All" - }, - "vf-101 grim reapers low vis": { - "name": "VF-101 Grim Reapers Low Vis", - "countries": "All" - }, - "chromecat": { - "name": "Fictional Chrome Cat ", - "countries": "All" - }, - "vf-32 fighting swordsmen 102": { - "name": "VF-32 Fighting Swordsmen 102 (1998)", - "countries": "All" - }, - "vf-102 diamondbacks 102": { - "name": "VF-102 Diamondbacks 102 (2000)", - "countries": "All" - }, - "vf-101 red": { - "name": "VF-101 Red", - "countries": "All" - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swing wing, 2 crew. Tomcat", - "abilities": "Drogue AAR, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-15C": { - "name": "F-15C", - "coalition": "blue", - "label": "F-15C Eagle", - "era": "Late Cold War", - "shortLabel": "15C", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel tank 610 gal", - "quantity": 3 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-120B*4, AIM-7M*2, AIM-9M*2, Fuel*3", - "name": "AIM-120B*4, AIM-7M*2, AIM-9M*2, Fuel*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9*2,AIM-120*6,Fuel", - "name": "AIM-9*2,AIM-120*6,Fuel", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 3 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-9*4,AIM-120*4,Fuel*3", - "name": "AIM-9*4,AIM-120*4,Fuel*3", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9*4,AIM-120*4,Fuel", - "name": "AIM-9*4,AIM-120*4,Fuel", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 3 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel*3", - "name": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel*3", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 3 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-9*2,AIM-120*6,Fuel*3", - "name": "AIM-9*2,AIM-120*6,Fuel*3", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9*4,AIM-7*4,Fuel", - "name": "AIM-9*4,AIM-7*4,Fuel", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120*8,Fuel", - "name": "AIM-120*8,Fuel", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 3 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-9*4,AIM-7*4,Fuel*3", - "name": "AIM-9*4,AIM-7*4,Fuel*3", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 3 - }, - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-120*8,Fuel*3", - "name": "AIM-120*8,Fuel*3", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel", - "name": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel", - "roles": [ - "CAP" - ] - } - ], - "filename": "f-15.png", - "enabled": true, - "liveries": { - "106th sqn (8th airbase)": { - "name": "106th SQN (8th Airbase)", - "countries": [ - "ISR" - ] - }, - "433rd weapons sqn (wa)": { - "name": "433rd Weapons SQN (WA)", - "countries": [ - "USA" - ] - }, - "493rd fighter sqn (ln)": { - "name": "493rd Fighter SQN (LN)", - "countries": [ - "USA" - ] - }, - "12th fighter sqn (ak)": { - "name": "12th Fighter SQN (AK)", - "countries": [ - "USA" - ] - }, - "390th fighter sqn": { - "name": "390th Fighter SQN", - "countries": [ - "USA" - ] - }, - "65th aggressor sqn (wa) flanker": { - "name": "65th Aggressor SQN (WA) Flanker", - "countries": [ - "USA", - "AUSAF" - ] - }, - "65th aggressor sqn (wa) super_flanker": { - "name": "65th Aggressor SQN (WA) SUPER_Flanker", - "countries": [ - "USA", - "AUSAF" - ] - }, - "65th aggressor sqn (wa) mig": { - "name": "65th Aggressor SQN (WA) MiG", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ferris scheme": { - "name": "Ferris Scheme", - "countries": [ - "USA" - ] - }, - "58th fighter sqn (eg)": { - "name": "58th Fighter SQN (EG)", - "countries": [ - "USA" - ] - }, - "haf aegean ghost": { - "name": "Hellenic Airforece - Aegean Ghost (Fictional)", - "countries": [ - "GRC" - ] - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swept wing, 2 crew, all weather fighter. Eagle.", - "abilities": "Boom AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-16C_50": { - "name": "F-16C_50", - "coalition": "blue", - "label": "F-16C Viper", - "era": "Late Cold War", - "shortLabel": "16", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120B*2, AIM-9M*4, FUEL*3", - "name": "AIM-120B*2, AIM-9M*4, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120B*4, AIM-9M*2, FUEL*3", - "name": "AIM-120B*4, AIM-9M*2, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120B AMRAAM - Active Rdr AAM", - "quantity": 6 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120B*6, FUEL*3", - "name": "AIM-120B*6, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*4, FUEL*2", - "name": "AIM-120C*2, AIM-9X*4, FUEL*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AIM-9X*2, FUEL*3", - "name": "AIM-120C*4, AIM-9X*2, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AIM-9X*2, FUEL*3, TGP", - "name": "AIM-120C*4, AIM-9X*2, FUEL*3, TGP", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AIM-9X*2, FUEL*2", - "name": "AIM-120C*4, AIM-9X*2, FUEL*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 6 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*6, FUEL*3", - "name": "AIM-120C*6, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM", - "name": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM, TGP", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 6 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*6, FUEL*2, ECM", - "name": "AIM-120C*6, FUEL*2, ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 6 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*6, FUEL*2, ECM, TGP", - "name": "AIM-120C*6, FUEL*2, ECM, TGP", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 6 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*6, FUEL*2", - "name": "AIM-120C*6, FUEL*2", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 6 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*6, FUEL*3, TGP", - "name": "AIM-120C*6, FUEL*3, TGP", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65D*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65D*2, FUEL*2, ECM, TGP", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65H*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65H*2, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65H*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65H*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65D*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65D*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x CBU-97 - 10 x SFW Cluster Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, CBU-97*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, CBU-97*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-82*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-82*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x CBU-87 - 202 x CEM Cluster Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, CBU-87*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, CBU-87*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-82HD*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-82HD*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BRU-57 with 2 x CBU-103 - 202 x CEM, CBU with WCMD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, CBU-103*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, CBU-103*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BRU-57 with 2 x CBU-105 - 10 x SFW, CBU with WCMD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, CBU-105*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, CBU-105*4, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 3 x Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-82*6, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-82*6, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 3 x Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-82HD*6, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-82HD*6, FUEL*2, ECM, TGP", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120*2, AIM-9X*2, MK-82SE*4, FUEL*2, ECM, TGP", - "name": "AIM-120*2, AIM-9X*2, MK-82SE*4, FUEL*2, ECM, TGP", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 3 x Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120*2, AIM-9X*2, MK-82SE*6, FUEL*2, ECM, TGP", - "name": "AIM-120*2, AIM-9X*2, MK-82SE*6, FUEL*2, ECM, TGP", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-84*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-84*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x Mk-82 AIR Ballute - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-82P*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-82P*4, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-12*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-12*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "TER-9A with 2 x GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-12*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-12*4, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-10*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-10*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-24 Paveway III - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-24*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-24*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-31-1B*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-31-1B*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-31(V)3/B - JDAM, 2000lb GPS Guided Penetrator Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-31-3B*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-31-3B*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-38*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-38*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BRU-57 with 2 x GBU-38 - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, GBU-38*4, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, GBU-38*4, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65K*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65K*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65G*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65G*2, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 1 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-65G, AGM-65K, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, AGM-65G, AGM-65K, FUEL*2, ECM, TGP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - }, - { - "name": "AN/ASQ-213 HTS - HARM Targeting System", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*3, TGP, HTS", - "name": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*3, TGP, HTS", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/ASQ-213 HTS - HARM Targeting System", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*2, ECM, TGP, HTS", - "name": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*2, ECM, TGP, HTS", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 4 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/ASQ-213 HTS - HARM Targeting System", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, AGM-88C*4, ECM, TGP, HTS", - "name": "AIM-120C*2, AIM-9X*2, AGM-88C*4, ECM, TGP, HTS", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "Fuel tank 300 gal", - "quantity": 1 - }, - { - "name": "AN/ASQ-213 HTS - HARM Targeting System", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AGM-88C*2, FUEL*3, TGP, HTS", - "name": "AIM-120C*4, AGM-88C*2, FUEL*3, TGP, HTS", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/ASQ-213 HTS - HARM Targeting System", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AGM-88C*2, FUEL*2, ECM, TGP, HTS", - "name": "AIM-120C*4, AGM-88C*2, FUEL*2, ECM, TGP, HTS", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 4 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/ASQ-213 HTS - HARM Targeting System", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*4, AGM-88C*4, ECM, TGP, HTS", - "name": "AIM-120C*4, AGM-88C*4, ECM, TGP, HTS", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts Mk61, Practice", - "quantity": 2 - }, - { - "name": "Fuel tank 370 gal", - "quantity": 2 - }, - { - "name": "ALQ-184 Long - ECM Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-28 LITENING - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C*2, AIM-9X*2, MK-61*2, FUEL*2, ECM, TGP", - "name": "AIM-120C*2, AIM-9X*2, MK-61*2, FUEL*2, ECM, TGP", - "roles": [ - "FAC-A" - ] - } - ], - "filename": "f-16c.png", - "enabled": true, - "liveries": { - "haf_347_perseus": { - "name": "HAF 347S Perseus Squadron", - "countries": [ - "GRC" - ] - }, - "ami, 5 stormo 23 gruppo": { - "name": "Italian Air Force, 5\u00b0 Stormo, 23 Gruppo", - "countries": [ - "ITA" - ] - }, - "haf_337_ghost": { - "name": "HAF 337 Ghost Squadron", - "countries": [ - "GRC" - ] - }, - "haf_ 330_thunder": { - "name": "HAF 330 Thunder Squadron", - "countries": [ - "GRC" - ] - }, - "haf_336_olympus": { - "name": "HAF 336 Olympus Squadron", - "countries": [ - "GRC" - ] - }, - "iaf_117th_squadron": { - "name": "IAF 117th squadron", - "countries": [ - "ISR" - ] - }, - "jasdf 8th tfs": { - "name": "JASDF 8th TFS", - "countries": [ - "JPN" - ] - }, - "haf_340_fox": { - "name": "HAF 340 Fox Squadron", - "countries": [ - "GRC" - ] - }, - "haf_346_jason": { - "name": "HAF 346 Jason Squadron", - "countries": [ - "GRC" - ] - }, - "paf_no.9_griffins_1": { - "name": "PAF No.9 Griffins (TRIBUTE TO WC NAUMAN)", - "countries": [ - "PAK" - ] - }, - "522nd_fighter_squadron": { - "name": "522nd Fighter Squadron 'Fireballs'", - "countries": [ - "USA" - ] - }, - "default": { - "name": "default livery", - "countries": [ - "USA" - ] - }, - "18th agrs arctic splinter": { - "name": "18th AGRS Ar\u0441tic Splinter", - "countries": [ - "USA", - "AUSAF" - ] - }, - "iaf_115th_aggressors_squadron": { - "name": "IAF 115th aggressors squadron", - "countries": [ - "ISR" - ] - }, - "chile air force 732": { - "name": "Chile Air Force 732", - "countries": [ - "CHL" - ] - }, - "iaf_110th_squadron": { - "name": "IAF 110th squadron", - "countries": [ - "ISR" - ] - }, - "paf_no.29_aggressors": { - "name": "PAF No.29 Aggressor", - "countries": [ - "PAK" - ] - }, - "79th_fighter_squadron": { - "name": "79th Fighter Squadron 'Tigers'", - "countries": [ - "USA" - ] - }, - "paf_no.5_falcons": { - "name": "PAF No.5 Falcons", - "countries": [ - "PAK" - ] - }, - "18th agrs splinter": { - "name": "18th AGRS Blue Splinter", - "countries": [ - "USA", - "AUSAF" - ] - }, - "dark_viper": { - "name": "F-16C Dark Viper", - "countries": [ - "USA" - ] - }, - "jasdf 6th tfs": { - "name": "JASDF 6th TFS", - "countries": [ - "JPN" - ] - }, - "23rd_fighter_squadron": { - "name": "23rd Fighter Squadron 'Fighting Hawks'", - "countries": [ - "USA" - ] - }, - "polish af standard": { - "name": "Polish AF standard", - "countries": [ - "POL" - ] - }, - "480th_fighter_squadron": { - "name": "480th Fighter Squadron 'Warhawks'", - "countries": [ - "USA" - ] - }, - "18th agrs bdu splinter": { - "name": "18th AGRS BDU Splinter", - "countries": [ - "USA", - "AUSAF" - ] - }, - "174th_fighter_squadron": { - "name": "174th Fighter Squadron ANG,Iowa AFB", - "countries": [ - "USA" - ] - }, - "thk_191_filo": { - "name": "T\u00fcrk Hava Kuvvetleri, 191 Filo", - "countries": [ - "TUR" - ] - }, - "chile air force 746": { - "name": "Chile Air Force 746", - "countries": [ - "CHL" - ] - }, - "haf_335_tiger": { - "name": "HAF 335 Tiger Squadron", - "countries": [ - "GRC" - ] - }, - "77th_fighter_squadron": { - "name": "77th Fighter Squadron 'Gamblers' ", - "countries": [ - "USA" - ] - }, - "132nd_wing _iowa_ang": { - "name": "132nd Wing Iowa ANG, Des Moines AFB", - "countries": [ - "USA" - ] - }, - "usaf 64th aggressor sqn-splinter": { - "name": "USAF 64th Aggressor SQN-Splinter", - "countries": [ - "USA", - "AUSAF" - ] - }, - "14th_fighter_squadron": { - "name": "14th Fighter Squadron 'Samurais'", - "countries": [ - "USA" - ] - }, - "152nd_fighter_squadron": { - "name": "152nd Fighter Squadron 'Las Vaqueros'", - "countries": [ - "USA" - ] - }, - "179th_fighter_squadron": { - "name": "179th Fighter Squadron 'Bulldogs'", - "countries": [ - "USA" - ] - }, - "paf_no.19_sherdils": { - "name": "PAF No.19 Sherdils", - "countries": [ - "PAK" - ] - }, - "64th_aggressor_squadron_ghost": { - "name": "64th Aggressor Squadron \u201cGhost", - "countries": [ - "USA", - "AUSAF" - ] - }, - "paf_no.9 griffins_2": { - "name": "PAF No.9 Griffins", - "countries": [ - "PAK" - ] - }, - "paf_no.11_arrows": { - "name": "PAF No.11 Arrows", - "countries": [ - "PAK" - ] - }, - "haf_343_star": { - "name": "HAF 343 Star Squadron", - "countries": [ - "GRC" - ] - }, - "80th_fighter_squadron": { - "name": "80th Fighter Squadron, Kunsan AFB", - "countries": [ - "USA" - ] - }, - "36th_fighter_squadron": { - "name": "36th Fighter Squadron Osan Air Base", - "countries": [ - "USA" - ] - }, - "22nd_fighter_squadron": { - "name": "22nd Fighter Squadron 'Stingers'", - "countries": [ - "USA" - ] - }, - "55th_fighter_squadron": { - "name": "55th Fighter Squadron 'Fifty Fifth'", - "countries": [ - "USA" - ] - }, - "iaf_101st_squadron": { - "name": "IAF 101st squadron", - "countries": [ - "ISR" - ] - }, - "polish_af_31blt6th_tactical_sqn": { - "name": "Polish AF 31.Blt 6th Tactical Sqn (Pozna\u0144-Krzesiny AB) - Tiger Meet", - "countries": [ - "POL" - ] - }, - "13th_fighter_squadron": { - "name": "13th Fighter Squadron 'Panthers'", - "countries": [ - "USA" - ] - }, - "haf_341_arrow": { - "name": "HAF 341 Arrow Squadron", - "countries": [ - "GRC" - ] - }, - "usaf 64th aggressor sqn - shark": { - "name": "USAF 64th Aggressor SQN - Shark", - "countries": [ - "USA", - "AUSAF" - ] - }, - "chile air force 851": { - "name": "Chile Air Force 851", - "countries": [ - "CHL" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew, all weather fighter and strike. Viper.", - "abilities": "Boom AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-4E": { - "name": "F-4E", - "coalition": "blue", - "label": "F-4E Phantom II", - "era": "Mid Cold War", - "shortLabel": "4", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-7 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-9*4,AIM-7*4", - "name": "AIM-9*4,AIM-7*4", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-118a with AGM-45B Shrike ARM (Imp)", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM45*2_AGM-65D*4_AIM7*2_ECM", - "name": "AGM45*2_AGM-65D*4_AIM7*2_ECM", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "LAU-118a with AGM-45B Shrike ARM (Imp)", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-45*2,AIM-7*2,Fuel*2,ECM", - "name": "AGM-45*2,AIM-7*2,Fuel*2,ECM", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "MER6 with 6 x Mk-82 - 500lb GP Bombs LD", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-82*18,AIM-7*2,ECM", - "name": "Mk-82*18,AIM-7*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-12*2,AIM-7*2,Fuel*2,ECM", - "name": "GBU-12*2,AIM-7*2,Fuel*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BRU-42 with 3 x Mk-20 Rockeye - 490lbs CBUs, 247 x HEAT Bomblets", - "quantity": 4 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk20*12,AIM-7*2,ECM", - "name": "Mk20*12,AIM-7*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-82*6,AIM-7*2,Fuel*2,ECM", - "name": "Mk-82*6,AIM-7*2,Fuel*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "GBU-10 - 2000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-10*2,AIM-7*2,Fuel*2,ECM", - "name": "GBU-10*2,AIM-7*2,Fuel*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "BRU-42 with 3 x Mk-20 Rockeye - 490lbs CBUs, 247 x HEAT Bomblets", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk20*6,AIM-7*2,Fuel*2,ECM", - "name": "Mk20*6,AIM-7*2,Fuel*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "LAU-118a with AGM-45B Shrike ARM (Imp)", - "quantity": 4 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-45*4,AIM-7*2,ECM", - "name": "AGM-45*4,AIM-7*2,ECM", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-65K*4,AIM-7*2,Fuel*2,ECM", - "name": "AGM-65K*4,AIM-7*2,Fuel*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "F-4 Fuel tank-C", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel*3", - "name": "Fuel*3", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "LAU-7 with 2 x AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-9*4,AIM-7*4,Fuel*2", - "name": "AIM-9*4,AIM-7*4,Fuel*2", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "ALQ-131 - ECM Pod", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "Mk-84*2,AIM-7*2,ECM", - "name": "Mk-84*2,AIM-7*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "F-4 Fuel tank-W", - "quantity": 2 - }, - { - "name": "LAU-88 with 2 x AGM-65K - Maverick K (CCD Imp ASM)", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 4 - }, - { - "name": "F-4 Fuel tank-C", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-65K*4,AIM-7M*4,Fuel*3", - "name": "AGM-65K*4,AIM-7M*4,Fuel*3", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "f-4.png", - "enabled": true, - "liveries": { - "haf aegean ghost": { - "name": "Hellenic Airforce - Aegean Ghost", - "countries": [ - "GRC" - ] - }, - "iriaf asia minor": { - "name": "IRIAF Asia Minor", - "countries": [ - "IRN" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "GER" - ] - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swept wing, 2 crew. Phantom", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-5E-3": { - "name": "F-5E-3", - "coalition": "blue", - "label": "F-5E Tiger", - "era": "Mid Cold War", - "shortLabel": "5", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82LD*4,AIM-9P*2,Fuel 275", - "name": "Mk-82LD*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9P*2, Fuel 275*3", - "name": "AIM-9P*2, Fuel 275*3", - "roles": [ - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P5 Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9P5*2, Fuel 275*3", - "name": "AIM-9P5*2, Fuel 275*3", - "roles": [ - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9P*2, Fuel 150*3", - "name": "AIM-9P*2, Fuel 150*3", - "roles": [ - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P5 Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9P5*2, Fuel 150*3", - "name": "AIM-9P5*2, Fuel 150*3", - "roles": [ - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 4 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82SE*4,AIM-9P*2,Fuel 275", - "name": "Mk-82SE*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "CBU-52B - 220 x HE/Frag bomblets", - "quantity": 4 - } - ], - "enabled": true, - "code": "CBU-52B*4,AIM-9P*2,Fuel 275", - "name": "CBU-52B*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 4 - } - ], - "enabled": true, - "code": "LAU-3 HE*4,AIM-9P*2,Fuel 275", - "name": "LAU-3 HE*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", - "quantity": 4 - } - ], - "enabled": true, - "code": "LAU-3 HEAT*4,AIM-9P*2,Fuel 275", - "name": "LAU-3 HEAT*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 4 - } - ], - "enabled": true, - "code": "LAU-68 HE*4,AIM-9P*2,Fuel 275", - "name": "LAU-68 HE*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", - "quantity": 4 - } - ], - "enabled": true, - "code": "LAU-68 HEAT*4,AIM-9P*2,Fuel 275", - "name": "LAU-68 HEAT*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "M117 - 750lb GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "M-117*4,AIM-9P*2,Fuel 275", - "name": "M-117*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-12*4,AIM-9P*2,Fuel 275", - "name": "GBU-12*4,AIM-9P*2,Fuel 275", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "CBU-52B - 220 x HE/Frag bomblets", - "quantity": 5 - } - ], - "enabled": true, - "code": "CBU-52B*5,AIM-9*2", - "name": "CBU-52B*5,AIM-9*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 5 - } - ], - "enabled": true, - "code": "Mk-82LD*5,AIM-9*2", - "name": "Mk-82LD*5,AIM-9*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 5 - } - ], - "enabled": true, - "code": "Mk-82SE*5,AIM-9*2", - "name": "Mk-82SE*5,AIM-9*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 2 - }, - { - "name": "5 x Mk-82 - 500lb GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82LD*7,AIM-9P*2, Fuel 275*2", - "name": "Mk-82LD*7,AIM-9P*2, Fuel 275*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 2 - }, - { - "name": "5 x Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 1 - } - ], - "enabled": true, - "code": "Mk-82SE*7,AIM-9P*2, Fuel 275*2", - "name": "Mk-82SE*7,AIM-9P*2, Fuel 275*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 1 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 2 - }, - { - "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - } - ], - "enabled": true, - "code": "LAU-3 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", - "name": "LAU-3 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 1 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 2 - }, - { - "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - } - ], - "enabled": true, - "code": "LAU-68 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", - "name": "LAU-68 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "M117 - 750lb GP Bomb LD", - "quantity": 5 - } - ], - "enabled": true, - "code": "M-117*5,AIM-9*2", - "name": "M-117*5,AIM-9*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9P*2, Fuel 275", - "name": "AIM-9P*2, Fuel 275", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9P*2, Fuel 150", - "name": "AIM-9P*2, Fuel 150", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P5 Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9P5*2, Fuel 275", - "name": "AIM-9P5*2, Fuel 275", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P5 Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9P5*2, Fuel 150", - "name": "AIM-9P5*2, Fuel 150", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9B Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9B*2, Fuel 275", - "name": "AIM-9B*2, Fuel 275", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9B Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9B*2, Fuel 150", - "name": "AIM-9B*2, Fuel 150", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9B Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 275Gal Fuel tank", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9B*2, Fuel 275*3", - "name": "AIM-9B*2, Fuel 275*3", - "roles": [ - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9B Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9B*2, Fuel 150*3", - "name": "AIM-9B*2, Fuel 150*3", - "roles": [ - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AN/ASQ-T50 TCTS Pod - ACMI Pod", - "quantity": 1 - }, - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 1 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AN/ASQ-T50, AIM-9P, Fuel 150", - "name": "AN/ASQ-T50, AIM-9P, Fuel 150", - "roles": [] - }, - { - "items": [ - { - "name": "AIM-9B Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9B*2", - "name": "AIM-9B*2", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9P*2", - "name": "AIM-9P*2", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P5 Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9P5*2", - "name": "AIM-9P5*2", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9P5 Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - }, - { - "name": "F-5 150Gal Fuel tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Antiship Mk82", - "name": "Antiship Mk82", - "roles": [ - "Antiship Strike" - ] - } - ], - "liveryID": [ - "ir iriaf 43rd tfs" - ], - "filename": "f-5.png", - "enabled": true, - "liveries": { - "us aggressor vfc-13 40": { - "name": "Aggressor VFC-13 40", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch swiss generic": { - "name": "Swiss Generic two-tone skin", - "countries": [ - "SUI" - ] - }, - "tw ngrc 5315": { - "name": "NGRC 5thFG 5315", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch j-3079": { - "name": "J-3079", - "countries": [ - "SUI" - ] - }, - "sa royal saudi air force": { - "name": "Royal Saudi Air Force", - "countries": [ - "SAU" - ] - }, - "no 336 sq": { - "name": "336 Skvadron", - "countries": [ - "NOR" - ] - }, - "tw rocaf 7thfg(m)": { - "name": "ROCAF 7thFG(LV)", - "countries": [ - "USA", - "AUSAF" - ] - }, - "us aggressor vfc-111 105 wwii b": { - "name": "Sundowners VFC-111 105 WWII B", - "countries": [ - "USA", - "AUSAF" - ] - }, - "br fab 4828": { - "name": "2/1 GAvCa - FAB 4828", - "countries": [ - "BRA" - ] - }, - "usaf 'southeast asia'": { - "name": "USAF 'Southeast Asia'", - "countries": [ - "USA", - "AUSAF" - ] - }, - "br fab 4846": { - "name": "FAB 4846", - "countries": [ - "BRA" - ] - }, - "aggressor vfc-13 21": { - "name": "Aggressor VFC-13 21", - "countries": [ - "USA", - "AUSAF" - ] - }, - "no 334 sqn 373": { - "name": "RNoAF 334 sqn 373", - "countries": [ - "NOR" - ] - }, - "rocaf 7th fighter group": { - "name": "ROCAF 7th Fighter Group", - "countries": [ - "AUSAF" - ] - }, - "ch j-3036 2017": { - "name": "J-3036 Sion 2017", - "countries": [ - "SUI" - ] - }, - "us aggressor vfc-111 116": { - "name": "Sundowners VFC-116", - "countries": [ - "USA", - "AUSAF" - ] - }, - "black 'mig-28'": { - "name": "black 'Mig-28'", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch j-3073 2017": { - "name": "J-3073_2017", - "countries": [ - "SUI" - ] - }, - "fi 11th fs lapland air command": { - "name": "FiAF 11th FS Lapland Air Command", - "countries": [ - "FIN" - ] - }, - "ir iriaf azarakhsh": { - "name": "HESA Azarakhsh", - "countries": [ - "IRN" - ] - }, - "ch j-3098": { - "name": "J-3098", - "countries": [ - "SUI" - ] - }, - "ir iriaf 43rd tfs": { - "name": "IRIAF - 43rd TFS", - "countries": [ - "IRN" - ] - }, - "no 338 sqn 215": { - "name": "RNoAF 338 sqn 215", - "countries": [ - "NOR" - ] - }, - "us usaf grape 31": { - "name": "USAF Grape 31", - "countries": [ - "USA", - "AUSAF" - ] - }, - "no 332 sqn ah-p": { - "name": "RNoAF 332 sqn AH-P", - "countries": [ - "NOR" - ] - }, - "ch j-3001 variante 1996": { - "name": "J-3001 GRD Emmen 1996", - "countries": [ - "SUI" - ] - }, - "us aggressor vfc-111 01": { - "name": "Sundowners VFC-111 01", - "countries": [ - "USA", - "AUSAF" - ] - }, - "3rd main jet base group command, turkey": { - "name": "133 squadron, 3rd Main Jet Base Group Command, Turkey", - "countries": [ - "TUR" - ] - }, - "kr rokaf 10th fighter wing": { - "name": "ROKAF 10th FW KF-5E 10-584", - "countries": [ - "KOR" - ] - }, - "sp spanish air force 21-51": { - "name": "Ejercito del Aire Camo 21-51", - "countries": [ - "SPN" - ] - }, - "aggressor vfc-13 11": { - "name": "Aggressor VFC-13 11", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch j-3001 variante 1986": { - "name": "J-3001 GRD Emmen 1986", - "countries": [ - "SUI" - ] - }, - "usa standard": { - "name": "Standard Gray", - "countries": [ - "BRA", - "MYS", - "AUS", - "ABH", - "RUS", - "SPN", - "ISR", - "USA", - "BHR", - "BLR", - "HRV", - "RSO", - "SVK", - "IRN", - "UKR", - "TUR", - "JPN", - "PRK", - "SRB", - "KAZ", - "BGR", - "BEL", - "INS", - "THA", - "AUSAF", - "PAK", - "JOR", - "FIN", - "MEX", - "NOR", - "IRQ", - "SYR", - "ITA", - "GRC", - "POL", - "NETH", - "GER", - "SUI", - "CHN", - "SAU", - "SWE", - "ROU", - "FRA", - "KOR", - "HUN", - "AUT", - "GRG", - "DEN", - "TUN", - "EGY", - "IND", - "CZE", - "CAN", - "SDN", - "UK" - ] - }, - "5th fs merzifon air base, turkey": { - "name": "5th fs Merzifon air base, Turkish air force", - "countries": [ - "TUR" - ] - }, - "ch j-3001 variante 2000": { - "name": "J-3001 FlSt 08 2000", - "countries": [ - "SUI" - ] - }, - "ir iriaf camo": { - "name": "IRIAF F-5E Standard", - "countries": [ - "IRN" - ] - }, - "it aereonautica militare italiana": { - "name": "Aereonautica Militare Italiana", - "countries": [ - "ITA" - ] - }, - "ch j-3038": { - "name": "J-3038", - "countries": [ - "SUI" - ] - }, - "ch j-3033_2017": { - "name": "J-3033_2017", - "countries": [ - "SUI" - ] - }, - "us aggressor vfc-13 28 fict splinter": { - "name": "Aggressor VFC-13 28 Fictional Splinter", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch j-3025": { - "name": "J-3025 FlSt 11/18 January 2006", - "countries": [ - "SUI" - ] - }, - "us aggressor vfc-13 01": { - "name": "Aggressor VFC-13 01", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch patrouille suisse j-3088": { - "name": "Patrouille Suisse J-3088", - "countries": [ - "SUI" - ] - }, - "us aggressor vfc-13 25": { - "name": "Aggressor VFC-13 25", - "countries": [ - "USA", - "AUSAF" - ] - }, - "no 334 sqn ri-h": { - "name": "RNoAF 334 sqn RI-H", - "countries": [ - "NOR" - ] - }, - "br fab 4841": { - "name": "FAB 4841 60th an", - "countries": [ - "BRA" - ] - }, - "aggressor marine scheme": { - "name": "Aggressor Marine Scheme", - "countries": [ - "USA", - "AUSAF" - ] - }, - "sp spanish air force 464-48": { - "name": "Ejercito del Aire 464-48", - "countries": [ - "SPN" - ] - }, - "gr haf f-5e grey": { - "name": "HAF F-5E Grey", - "countries": [ - "GRC" - ] - }, - "tr turkish stars": { - "name": "Turkish Stars", - "countries": [ - "TUR" - ] - }, - "gb no.29 squadron raf": { - "name": "No.29 Squadron RAF (Fictional)", - "countries": [ - "UK" - ] - }, - "br fab 4834": { - "name": "1/1 GAvCa - FAB 4834", - "countries": [ - "BRA" - ] - }, - "ch j-3026": { - "name": "J-3026 FlSt 11 approx. 1989", - "countries": [ - "SUI" - ] - }, - "aggressor snake scheme": { - "name": "Aggressor Snake Scheme", - "countries": [ - "USA", - "AUSAF" - ] - }, - "us aggressor vfc-111 115": { - "name": "Sundowners VFC-115", - "countries": [ - "USA", - "AUSAF" - ] - }, - "us aggressor vmft-401 02 2011": { - "name": "Aggressor VMFT-401 02 2011", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch j-3008": { - "name": "J-3008 FlSt 08/19 February 2005", - "countries": [ - "SUI" - ] - }, - "aggressor desert scheme": { - "name": "Aggressor Desert Scheme", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ch j-3074": { - "name": "J-3074", - "countries": [ - "SUI" - ] - }, - "ch j-3036": { - "name": "J-3036 FlSt 01 1985", - "countries": [ - "SUI" - ] - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swept wing, single crew. Tiger", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-86F Sabre": { - "name": "F-86F Sabre", - "coalition": "blue", - "label": "F-86F Sabre", - "era": "Early Cold War", - "shortLabel": "86", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 120 gallons", - "quantity": 2 - } - ], - "enabled": true, - "code": "120gal Fuel*2", - "name": "120gal Fuel*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 200 gallons", - "quantity": 2 - } - ], - "enabled": true, - "code": "200gal Fuel*2", - "name": "200gal Fuel*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 200 gallons", - "quantity": 2 - }, - { - "name": "Fuel Tank 120 gallons", - "quantity": 2 - } - ], - "enabled": true, - "code": "120gal Fuel*2, 200gal Fuel*2", - "name": "120gal Fuel*2, 200gal Fuel*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "LAU-7 with AIM-9B Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "GAR-8*2", - "name": "GAR-8*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 120 gallons", - "quantity": 2 - }, - { - "name": "LAU-7 with AIM-9B Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "120gal Fuel*2, GAR-8*2", - "name": "120gal Fuel*2, GAR-8*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "2 x HVAR, UnGd Rkts", - "quantity": 8 - } - ], - "enabled": true, - "code": "HVAR*16", - "name": "HVAR*16", - "roles": [ - "Strike", - "CAS", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 200 gallons", - "quantity": 2 - }, - { - "name": "2 x HVAR, UnGd Rkts", - "quantity": 4 - } - ], - "enabled": true, - "code": "200gal Fuel*2, HVARx2*4", - "name": "200gal Fuel*2, HVARx2*4", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "AN-M64 - 500lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AN-M64*2", - "name": "AN-M64*2", - "roles": [ - "CAS", - "Strike", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 200 gallons", - "quantity": 2 - }, - { - "name": "AN-M64 - 500lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "200gal Fuel*2, AN-M64*2", - "name": "200gal Fuel*2, AN-M64*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "M117 - 750lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "M117*2", - "name": "M117*2", - "roles": [ - "CAS", - "Strike", - "Antiship Strike" - ] - } - ], - "filename": "f-5.png", - "enabled": true, - "liveries": { - "us air force (skyblazers)": { - "name": "US Air Force Jet Team Skyblazer", - "countries": [ - "USA" - ] - }, - "canada air force": { - "name": "Canada Air Force", - "countries": [ - "CAN" - ] - }, - "us air force (squadron 39)": { - "name": "US Air Force (Squadron 39)", - "countries": [ - "USA" - ] - }, - "iiaf bare metall": { - "name": "IIAF Bare Metal Weathered", - "countries": [ - "IRN" - ] - }, - "us air force (green)": { - "name": "US Air Force (Green)", - "countries": [ - "USA" - ] - }, - "us air force (ex-usaf f-86a sabre)": { - "name": "US Air Force ex-USAF F-86A Sabre", - "countries": [ - "USA" - ] - }, - "default livery": { - "name": "default livery", - "countries": [ - "BRA", - "CUB", - "MYS", - "ARE", - "AUS", - "ABH", - "RUS", - "PHL", - "SPN", - "ISR", - "SUN", - "USA", - "BHR", - "MAR", - "BLR", - "HRV", - "DZA", - "OMN", - "RSO", - "SVK", - "HND", - "IRN", - "UKR", - "TUR", - "JPN", - "PRK", - "SRB", - "IDN", - "KAZ", - "BGR", - "BEL", - "INS", - "THA", - "LBY", - "AUSAF", - "VEN", - "PAK", - "JOR", - "RSA", - "FIN", - "MEX", - "KWT", - "NOR", - "IRQ", - "SYR", - "ITA", - "NZG", - "GRC", - "POL", - "NETH", - "GER", - "SUI", - "CHN", - "SAU", - "SWE", - "YEM", - "VNM", - "ROU", - "RSI", - "FRA", - "CHL", - "KOR", - "HUN", - "AUT", - "GRG", - "DEN", - "TUN", - "EGY", - "IND", - "CZE", - "ETH", - "CAN", - "SDN", - "QAT", - "UK", - "YUG" - ] - }, - "royal saudi air force": { - "name": "RSAF", - "countries": [ - "SAU" - ] - }, - "us air force": { - "name": "US Air Force", - "countries": [ - "USA" - ] - }, - "haf 342sqn": { - "name": "Hellenic Airforce 342sqn", - "countries": [ - "GRC" - ] - }, - "japan air force": { - "name": "Japan Air Force", - "countries": [ - "JPN" - ] - }, - "haf 341sqn": { - "name": "Hellenic Airforce 341sqn", - "countries": [ - "GRC" - ] - }, - "us air force (code fu-178)": { - "name": "US Air Force FU-178", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "Single engine, swept wing, 1 crew. Sabre", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "FA-18C_hornet": { - "name": "FA-18C_hornet", - "coalition": "blue", - "era": "Late Cold War", - "label": "F/A-18C", - "shortLabel": "18", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - }, - { - "name": "LAU-115 with 2 x LAU-127 AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9M*6, AIM-7M*2, FUEL*3", - "name": "AIM-9M*6, AIM-7M*2, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-115 with 2 x LAU-127 AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*6, AIM-7M*2, FUEL*2", - "name": "AIM-9M*6, AIM-7M*2, FUEL*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, MK-84*2, FUEL*2", - "name": "AIM-9M*2, MK-84*2, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, MK-83*4, FUEL*2", - "name": "AIM-9M*2, MK-83*4, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - } - ], - "enabled": true, - "code": "Carrier Landing", - "name": "Carrier Landing", - "roles": [] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-115C with AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9M*2, AIM-7M*4, FUEL*3", - "name": "AIM-9M*2, AIM-7M*4, FUEL*3", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x CBU-99 - 490lbs, 247 x HEAT Bomblets", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, CBU-99*4, FUEL*2", - "name": "AIM-9M*2, CBU-99*4, FUEL*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, MK-82SE*4, FUEL*2", - "name": "AIM-9M*2, MK-82SE*4, FUEL*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x Mk-20 Rockeye - 490lbs CBU, 247 x HEAT Bomblets", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, MK-20*4, FUEL*2", - "name": "AIM-9M*2, MK-20*4, FUEL*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, MK-82*4, FUEL*2", - "name": "AIM-9M*2, MK-82*4, FUEL*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, AIM-7M*2, FUEL*2", - "name": "AIM-9M*2, AIM-7M*2, FUEL*2", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, MK-83*2, FUEL*2", - "name": "AIM-9M*2, MK-83*2, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x LAU-10 pod - 4 x 127mm ZUNI, UnGd Rkts Mk71, HE/FRAG", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, ZUNI*4, FUEL*2", - "name": "AIM-9M*2, ZUNI*4, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x LAU-61 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, LAU-61*4, FUEL*2", - "name": "AIM-9M*2, LAU-61*4, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, LAU-68*4, FUEL*2", - "name": "AIM-9M*2, LAU-68*4, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - }, - { - "name": "AIM-7M Sparrow Semi-Active Radar", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M*2, AIM-7M*2, FUEL*1", - "name": "AIM-9M*2, AIM-7M*2, FUEL*1", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-31(V)4/B - JDAM, 2000lb GPS Guided Penetrator Bomb", - "quantity": 4 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9X*2, AIM-120C-5*1, GBU-31*4, ATFLIR, FUEL", - "name": "AIM-9X*2, AIM-120C-5*1, GBU-31*4, ATFLIR, FUEL", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "LAU-115 with 2 x LAU-127 AIM-120C AMRAAM - Active Radar AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 3 - } - ], - "enabled": true, - "code": "AIM-9X*2, AIM-120C-5*6, FUEL*3", - "name": "AIM-9X*2, AIM-120C-5*6, FUEL*3", - "roles": [ - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", - "quantity": 4 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9X*2, AIM-120C-5*1, AGM-65D*4, ATFLIR, FUEL", - "name": "AIM-9X*2, AIM-120C-5*1, AGM-65D*4, ATFLIR, FUEL", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 4 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9X*2, AIM-120C-5*2, AGM-88C*2, FUEL", - "name": "AIM-9X*2, AIM-120C-5*2, AGM-88C*2, FUEL", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BRU-55 with 2 x GBU-38 - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - }, - { - "name": "BRU-33 with 2 x GBU-12 - 500lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9X*2, AIM-120C-5*1, GBU-38*4, GBU-12*4, ATFLIR, FUEL", - "name": "AIM-9X*2, AIM-120C-5*1, GBU-38*4, GBU-12*4, ATFLIR, FUEL", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9X Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-84H SLAM-ER (Expanded Response)", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - }, - { - "name": "AWW-13 DATALINK POD", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9X*2, AIM-120C-5*1, AGM-84E*2, DATALINK, ATFLIR, FUEL*2", - "name": "AIM-9X*2, AIM-120C-5*1, AGM-84E*2, DATALINK, ATFLIR, FUEL*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-84D Harpoon AShM", - "quantity": 4 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M*2, AIM-120C-5*1, AGM-84D*4, ATFLIR, FUEL", - "name": "AIM-9M*2, AIM-120C-5*1, AGM-84D*4, ATFLIR, FUEL", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 1 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M*2, ATFLIR, FUEL", - "name": "AIM-9M*2, ATFLIR, FUEL", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "FPU-8A Fuel Tank 330 gallons", - "quantity": 2 - }, - { - "name": "AN/ASQ-228 ATFLIR - Targeting Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M*2, ATFLIR, FUEL*2", - "name": "AIM-9M*2, ATFLIR, FUEL*2", - "roles": [ - "Reconnaissance" - ] - } - ], - "filename": "fa-18c.png", - "enabled": true, - "liveries": { - "vfa-192": { - "name": "VFA-192", - "countries": [ - "USA" - ] - }, - "nsawc brown splinter": { - "name": "NSAWC brown splinter", - "countries": [ - "USA", - "AUSAF" - ] - }, - "vfa-34": { - "name": "VFA-34", - "countries": [ - "USA" - ] - }, - "vmfa-232": { - "name": "VMFA-232", - "countries": [ - "USA" - ] - }, - "vmfat-101": { - "name": "VMFAT-101", - "countries": [ - "USA" - ] - }, - "vmfa-232 high visibility": { - "name": "VMFA-232 high visibility", - "countries": [ - "USA" - ] - }, - "vmfat-101 high visibility": { - "name": "VMFAT-101 high visibility", - "countries": [ - "USA" - ] - }, - "vfa-37": { - "name": "VFA-37", - "countries": [ - "USA" - ] - }, - "fictional russia air force": { - "name": "Fictional Russia Air Force", - "countries": [ - "AUSAF", - "RUS" - ] - }, - "canada 150 demo jet": { - "name": "Canada 150 Demo Jet", - "countries": [ - "CAN" - ] - }, - "fictional uk air force": { - "name": "Fictional UK Air Force", - "countries": [ - "UK" - ] - }, - "vfa-131": { - "name": "VFA-131", - "countries": [ - "USA" - ] - }, - "vmfa-122 high visibility": { - "name": "VMFA-122 high visibility", - "countries": [ - "USA" - ] - }, - "spain 462th escuadron c.15-79": { - "name": "Spain 462th Escuadron C.15-79", - "countries": [ - "SPN" - ] - }, - "vmfat-101 high visibility 2005": { - "name": "VMFAT-101 high visibility 2005", - "countries": [ - "USA" - ] - }, - "vmfa-323": { - "name": "VMFA-323", - "countries": [ - "USA" - ] - }, - "vx-31 cona": { - "name": "VX-31 CoNA", - "countries": [ - "USA" - ] - }, - "fictional turkey 162nd sq": { - "name": "162nd Sqn Harpoon", - "countries": [ - "TUR" - ] - }, - "nawdc brown": { - "name": "NAWDC brown", - "countries": [ - "USA", - "AUSAF" - ] - }, - "spain 151th escuadron c.15-14": { - "name": "Spain 151_14 Escuadron C.15-14", - "countries": [ - "SPN" - ] - }, - "spain 151th escuadron c.15-24": { - "name": "Spain 151_24 Escuadron C.15-24", - "countries": [ - "SPN" - ] - }, - "vfa-106": { - "name": "VFA-106", - "countries": [ - "USA" - ] - }, - "spain 121th escuadron c.15-45": { - "name": "Spain 121 Escuadron C.15-45", - "countries": [ - "SPN" - ] - }, - "vfa-97": { - "name": "VFA-97", - "countries": [ - "USA" - ] - }, - "vx-9": { - "name": "VX-9", - "countries": [ - "USA" - ] - }, - "spain 111th escuadron c.15-73": { - "name": "Spain 111 Escuadron C.15-73", - "countries": [ - "SPN" - ] - }, - "switzerland": { - "name": "Switzerland", - "countries": [ - "SUI" - ] - }, - "vx-23": { - "name": "VX-23", - "countries": [ - "USA" - ] - }, - "vfa-83": { - "name": "VFA-83", - "countries": [ - "USA" - ] - }, - "australian 75th squadron": { - "name": "Australian sqn 75", - "countries": [ - "AUS" - ] - }, - "canada 425th squadron": { - "name": "Canada 425th Squadron", - "countries": [ - "CAN" - ] - }, - "spain 151th escuadron c.15-18": { - "name": "Spain 151_18 Escuadron C.15-18", - "countries": [ - "SPN" - ] - }, - "nsawc gray": { - "name": "NSAWC gray", - "countries": [ - "USA" - ] - }, - "vfa-87": { - "name": "VFA-87", - "countries": [ - "USA" - ] - }, - "nawdc blue": { - "name": "NAWDC blue", - "countries": [ - "USA", - "AUSAF" - ] - }, - "australian 77th squadron": { - "name": "Australian sqn 77", - "countries": [ - "AUS" - ] - }, - "vmfa-251 high visibility": { - "name": "VMFA-251 high visibility", - "countries": [ - "USA" - ] - }, - "vmfa-531": { - "name": "VMFA-531", - "countries": [ - "USA" - ] - }, - "viper": { - "name": "Viper", - "countries": [ - "USA" - ] - }, - "iceman": { - "name": "Iceman", - "countries": [ - "USA", - "AUSAF" - ] - }, - "spain 121th escuadron c.15-60": { - "name": "Spain 121 Escuadron C.15-60", - "countries": [ - "SPN" - ] - }, - "nsawc blue": { - "name": "NSAWC blue", - "countries": [ - "USA", - "AUSAF" - ] - }, - "blue angels jet team": { - "name": "Blue Angels Jet Team", - "countries": [ - "USA" - ] - }, - "fictional israel air force": { - "name": "Fictional Israel Air Force", - "countries": [ - "ISR" - ] - }, - "spain 462th escuadron c.15-90": { - "name": "Spain 462th Escuadron C.15-90", - "countries": [ - "SPN" - ] - }, - "vmfa-323 high visibility": { - "name": "VMFA-323_high visibility", - "countries": [ - "USA" - ] - }, - "maverick": { - "name": "Maverick", - "countries": [ - "USA" - ] - }, - "nawdc black": { - "name": "NAWDC black", - "countries": [ - "USA", - "AUSAF" - ] - }, - "kuwait 9th squadron": { - "name": "9th Squadron", - "countries": [ - "KWT" - ] - }, - "vmfa-251": { - "name": "VMFA-251", - "countries": [ - "USA" - ] - }, - "vmfa-314": { - "name": "VMFA-314", - "countries": [ - "USA" - ] - }, - "fictional ukraine air force": { - "name": "Fictional Ukraine Air Force", - "countries": [ - "UKR" - ] - }, - "canada 409th squadron": { - "name": "Canada 409th Squadron", - "countries": [ - "CAN" - ] - }, - "canada norad 60 demo jet": { - "name": "Canada NORAD 60 Demo Jet", - "countries": [ - "CAN" - ] - }, - "spain 111th escuadron c.15-88": { - "name": "Spain 111 Escuadron C.15-88", - "countries": [ - "SPN" - ] - }, - "spain 211th escuadron c.15-76": { - "name": "Spain 211th Escuadron C.15-76", - "countries": [ - "SPN" - ] - }, - "finland 31": { - "name": "Finland", - "countries": [ - "FIN" - ] - }, - "spain 151th escuadron c.15-23": { - "name": "Spain 151_23 Escuadron C.15-23", - "countries": [ - "SPN" - ] - }, - "vfa-122": { - "name": "VFA-122", - "countries": [ - "USA" - ] - }, - "spain 151th escuadron c.15-14 tiger meet": { - "name": "Spain 151th Escuadron C.15-14 Tiger Meet", - "countries": [ - "SPN" - ] - }, - "vfc-12": { - "name": "VFC-12", - "countries": [ - "USA", - "AUSAF" - ] - }, - "spain 211th escuadron c.15-77": { - "name": "Spain 211th Escuadron C.15-77", - "countries": [ - "SPN" - ] - }, - "spain 121th escuadron c.15-34 50th anniversary": { - "name": "Spain 121th Escuadron C.15-34 34th Anniversary", - "countries": [ - "SPN" - ] - }, - "default livery": { - "name": "default livery", - "countries": [ - "BRA", - "CUB", - "MYS", - "ARE", - "AUS", - "ABH", - "RUS", - "PHL", - "SPN", - "ISR", - "SUN", - "USA", - "BHR", - "MAR", - "BLR", - "HRV", - "DZA", - "OMN", - "RSO", - "SVK", - "HND", - "IRN", - "UKR", - "TUR", - "JPN", - "PRK", - "SRB", - "IDN", - "KAZ", - "BGR", - "BEL", - "INS", - "THA", - "LBY", - "AUSAF", - "VEN", - "PAK", - "JOR", - "RSA", - "FIN", - "MEX", - "KWT", - "NOR", - "IRQ", - "SYR", - "ITA", - "NZG", - "GRC", - "POL", - "NETH", - "GER", - "SUI", - "CHN", - "SAU", - "SWE", - "YEM", - "VNM", - "ROU", - "RSI", - "FRA", - "CHL", - "KOR", - "HUN", - "AUT", - "GRG", - "DEN", - "TUN", - "EGY", - "IND", - "CZE", - "ETH", - "CAN", - "SDN", - "QAT", - "UK", - "YUG" - ] - }, - "spain 121th escuadron c.15-50": { - "name": "Spain 121 Escuadron C.15-50", - "countries": [ - "SPN" - ] - }, - "vfa-113": { - "name": "VFA-113", - "countries": [ - "USA" - ] - }, - "vmfa-312": { - "name": "VMFA-312", - "countries": [ - "USA" - ] - }, - "kuwait 25th squadron": { - "name": "9th Squadron", - "countries": [ - "KWT" - ] - }, - "vmfa-312 high visibility": { - "name": "VMFA-312 high visibility", - "countries": [ - "USA" - ] - }, - "vmfa-122": { - "name": "VMFA-122", - "countries": [ - "USA" - ] - }, - "vfa-106 high visibility": { - "name": "VFA-106 high visibility", - "countries": [ - "USA" - ] - }, - "finland 21": { - "name": "Finland", - "countries": [ - "FIN" - ] - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swept wing, 1 crew, fighter and strike. Hornet", - "abilities": "Drogue AAR, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "FW-190A8": { - "name": "FW-190A8", - "coalition": "red", - "label": "FW-190A8 W\u00fcrger", - "era": "WW2", - "shortLabel": "190", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "", - "quantity": 1 - } - ], - "enabled": true, - "code": "Without pylon", - "name": "Without pylon", - "roles": [] - }, - { - "items": [ - { - "name": "4 x SC 50 - 50kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC 50 * 4", - "name": "SC 50 * 4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AB 250-2 - 17 x SD-10A, 250kg CBU with 10kg Frag/HE submunitions", - "quantity": 1 - } - ], - "enabled": true, - "code": "AB 250 (w/ SD 10A)", - "name": "AB 250 (w/ SD 10A)", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AB 250-2 - 144 x SD-2, 250kg CBU with HE submunitions", - "quantity": 1 - } - ], - "enabled": true, - "code": "AB 250 (w/ SD 2)", - "name": "AB 250 (w/ SD 2)", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AB 500-1 - 34 x SD-10A, 500kg CBU with 10kg Frag/HE submunitions", - "quantity": 1 - } - ], - "enabled": true, - "code": "AB 500 (w/ SD 10A)", - "name": "AB 500 (w/ SD 10A)", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "SC 250 Type 1 L2 - 250kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC 250 L2", - "name": "SC 250 L2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "SC 250 Type 3 J - 250kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC 250 J", - "name": "SC 250 J", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "SC 500 J - 500kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC 500 J", - "name": "SC 500 J", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "SC 500 L2 - 500kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC 500 L2", - "name": "SC 500 L2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "SD 250 Stg - 250kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SD 250 Stg", - "name": "SD 250 Stg", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "SD 500 A - 500kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SD 500 A", - "name": "SD 500 A", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "300 liter Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel Tank 300 liters", - "name": "Fuel Tank 300 liters", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Werfer-Granate 21 - 21 cm UnGd air-to-air rocket", - "quantity": 2 - } - ], - "enabled": true, - "code": "BR 21", - "name": "BR 21", - "roles": [] - } - ], - "filename": "fw190.png", - "enabled": true, - "liveries": { - "fw190_fuselage_d_jg301": { - "name": "JG 301", - "countries": [ - "GER", - "NZG" - ] - }, - "captured_ra": { - "name": "Captured_RA", - "countries": [ - "SUN" - ] - }, - "fictional ijn carrier akagi ai-103": { - "name": "Fictional IJN Carrier Akagi AI-103", - "countries": [ - "JPN" - ] - }, - "fictional ijn otu tsukuba tsu-102": { - "name": "Fictional IJN OTU Tsukuba Tsu-102", - "countries": [ - "JPN" - ] - }, - "fw-190a8 yellow 4": { - "name": "FW190A8 Yellow 4", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190a8 rhaf": { - "name": "Fw 190 A8 RHAF", - "countries": [ - "HUN" - ] - }, - "jg3 white nose wulf": { - "name": "Fw190A8 'White nose Wulf'", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190a8_2.jg 54": { - "name": "2.JG 54", - "countries": [ - "GER", - "NZG" - ] - }, - "fictional ijn carrier soryu bi-112": { - "name": "Fictional IJN Carrier Soryu BI-112", - "countries": [ - "JPN" - ] - }, - "black 13 schwarze katze from jg1": { - "name": "Fw190_JG1_Gen._'Schwarze Katze'_Win.", - "countries": [ - "GER", - "NZG" - ] - }, - "turkish air force, 5th fr (1942)": { - "name": "Turkish Air Force, 5th FR (1942)", - "countries": [ - "AUSAF", - "TUR" - ] - }, - "fw-190a8 jg26 priller": { - "name": "Fw 190 A8 JG26 Priller", - "countries": [ - "GER", - "HUN", - "NZG" - ] - }, - "inspired by jg2 skin of early fw 190a": { - "name": "Fw190A8 JG2 Generic", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190a8": { - "name": "FW190A8", - "countries": "All" - }, - "fw190_alfred_bindseil": { - "name": "6.JG 1_Alfred Bindseil", - "countries": [ - "GER", - "NZG" - ] - }, - "fictional ijn 256th kokutai rai-153": { - "name": "Fictional IJN 256th Kokutai Rai-153", - "countries": [ - "JPN" - ] - }, - "fictional ijn carrier akagi ai-151": { - "name": "Fictional IJN Carrier Akagi AI-151", - "countries": [ - "JPN" - ] - }, - "fw-190a8_raf": { - "name": "FW190A8/R-2 PE882, No. 1426 Flight RAF - Late", - "countries": [ - "UK" - ] - }, - "factory skin": { - "name": "FW190A8 Luftwaffe", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190a8_2.jg 54_hans dortenmann": { - "name": "2.JG 54_Hans Dortenmann", - "countries": [ - "GER", - "NZG" - ] - }, - "fw 190 a-8 czech avia s.90": { - "name": "Fw 190 A-8 Czech Avia S.90", - "countries": [ - "CZE" - ] - }, - "fw190_ewald_preisz": { - "name": "6.JG 300_Ewald Preisz", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190a8 jg3 maximowitz": { - "name": "Fw 190 A8 JG3 Maximowitz", - "countries": [ - "GER", - "HUN", - "NZG" - ] - }, - "roaf-grupul7": { - "name": "RoAF-Grupul7", - "countries": [ - "ROU" - ] - } - }, - "type": "Aircraft", - "description": "Single propellor, straight wing, 1 crew. W\u00fcrger ", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "FW-190D9": { - "name": "FW-190D9", - "coalition": "red", - "label": "FW-190D9 Dora", - "era": "WW2", - "shortLabel": "190", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "SC 500 J - 500kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "SC500", - "name": "SC500", - "roles": [ - "Runway Attack", - "CAS", - "Antiship Strike", - "Strike" - ] - }, - { - "items": [ - { - "name": "300 liter Fuel Tank Type E2", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel Tank", - "name": "Fuel Tank", - "roles": [ - "CAP", - "FAC-A", - "Escort" - ] - }, - { - "items": [ - { - "name": "13 R4M 3.2kg UnGd air-to-air rocket", - "quantity": 2 - } - ], - "enabled": true, - "code": "R4M", - "name": "R4M", - "roles": [ - "CAP", - "CAP", - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "Werfer-Granate 21 - 21 cm UnGd air-to-air rocket", - "quantity": 2 - } - ], - "enabled": true, - "code": "BR 21", - "name": "BR 21", - "roles": [ - "CAP", - "CAP", - "Strike", - "CAS" - ] - } - ], - "filename": "fw190.png", - "enabled": true, - "liveries": { - "fw-190d9_5jg301": { - "name": "FW-190_5JG301.1945", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190d9_iv.jg 26_hans dortenmann": { - "name": " Oblt. Hans Dortenmann, IV./JG 26, 1945", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190d9_red": { - "name": "FW_190D9_Red.1945", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190d9_13.jg 51_heinz marquardt": { - "name": " Heinz-Marquardt, 13./JG 51, 1945", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190d9_jg54": { - "name": "FW-190D9_JG54.1945", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190d9_black 4 of stab iijg 6": { - "name": "FW-190D9_Black <4 of Stab II/JG 6", - "countries": [ - "GER", - "NZG" - ] - }, - "fw-190d9_usa": { - "name": "FW-190_USA_Standard.1943", - "countries": [ - "USA" - ] - }, - "fw-190d9_gb": { - "name": "FW-190_GB_Standart.1943", - "countries": [ - "UK" - ] - }, - "fw-190d9_ussr": { - "name": "FW-190 WNr 210251 USSR (Captured. 1943)", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "Single propellor, straight wing, 1 crew. Dora", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "H-6J": { - "name": "H-6J", - "coalition": "red", - "label": "H-6 J Badger", - "era": "Mid Cold War", - "shortLabel": "H6", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "YJ-12", - "quantity": 2 - } - ], - "enabled": true, - "code": "YJ-12 x 2", - "name": "YJ-12 x 2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "YJ-12", - "quantity": 4 - } - ], - "enabled": true, - "code": "YJ-12 x 4", - "name": "YJ-12 x 4", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "YJ-83K", - "quantity": 6 - } - ], - "enabled": true, - "code": "YJ-83K x 6", - "name": "YJ-83K x 6", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "12 x 250-2 - 250kg GP Bombs HD", - "quantity": 1 - } - ], - "enabled": true, - "code": "250-2 HD Bomb x 12 in Bay", - "name": "250-2 HD Bomb x 12 in Bay", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "24 x 250-2 - 250kg GP Bombs HD", - "quantity": 1 - } - ], - "enabled": true, - "code": "250-2 HD Bomb x 24 in Bay", - "name": "250-2 HD Bomb x 24 in Bay", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MER6 - 6 x 250-3 - 250kg GP Bombs LD", - "quantity": 6 - } - ], - "enabled": true, - "code": "250-3 LD Bomb x 36", - "name": "250-3 LD Bomb x 36", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "KD-63", - "quantity": 4 - }, - { - "name": "DATA-LINK POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "KD-63 x 4", - "name": "KD-63 x 4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "KD-20", - "quantity": 6 - } - ], - "enabled": true, - "code": "KD-20 x 6", - "name": "KD-20 x 6", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "KD-20", - "quantity": 4 - } - ], - "enabled": true, - "code": "KD-20 x 4", - "name": "KD-20 x 4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "KD-63", - "quantity": 2 - }, - { - "name": "DATA-LINK POD", - "quantity": 1 - }, - { - "name": "KD-20", - "quantity": 4 - } - ], - "enabled": true, - "code": "KD-63 x 2, KD-20 x 4", - "name": "KD-63 x 2, KD-20 x 4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "KD-63", - "quantity": 2 - }, - { - "name": "DATA-LINK POD", - "quantity": 1 - }, - { - "name": "KD-20", - "quantity": 2 - } - ], - "enabled": true, - "code": "KD-63 x 2, KD-20 x 2", - "name": "KD-63 x 2, KD-20 x 2", - "roles": [ - "Strike" - ] - } - ], - "filename": "h-6.png", - "enabled": true, - "liveries": { - "planaf standard": { - "name": "PLANAF Standard", - "countries": [ - "CHN" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 4 crew bomber. Badger", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "I-16": { - "name": "I-16", - "coalition": "red", - "label": "I-16", - "era": "WW2", - "shortLabel": "I16", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "RS-82", - "quantity": 6 - } - ], - "enabled": true, - "code": "6xRS-82", - "name": "6xRS-82", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-100SV", - "quantity": 2 - } - ], - "enabled": true, - "code": "2xFAB-100", - "name": "2xFAB-100", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "RS-82", - "quantity": 6 - }, - { - "name": "FAB-100SV", - "quantity": 2 - } - ], - "enabled": true, - "code": "6xRS-82, 2xFAB-100", - "name": "6xRS-82, 2xFAB-100", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "RS-82", - "quantity": 6 - }, - { - "name": "I-16 External Fuel Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "6xRS-82, 2xDropTank-93L", - "name": "6xRS-82, 2xDropTank-93L", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "I-16 External Fuel Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "2xDropTank-93L", - "name": "2xDropTank-93L", - "roles": [ - "CAP", - "Reconnaissance", - "Escort" - ] - } - ], - "filename": "i-16.png", - "enabled": true, - "liveries": { - "silver-black demo": { - "name": "Silver-black paint scheme", - "countries": [ - "SUN", - "RUS" - ] - }, - "red army camo": { - "name": "Red Army Air Force Camouflage", - "countries": [ - "SUN", - "RUS" - ] - }, - "spain nationalists": { - "name": "Spain (Nationalists)", - "countries": [ - "SPN", - "NZG" - ] - }, - "japan": { - "name": "Japan (Captured), Manchuria 1939", - "countries": [ - "NZG", - "JPN" - ] - }, - "finnish af": { - "name": "Finland, AFB Rompotti 1943", - "countries": [ - "FIN", - "NZG" - ] - }, - "red army standard": { - "name": "1 Red Army Air Force Standard", - "countries": [ - "SUN", - "RUS" - ] - }, - "spain republicans": { - "name": "Spain (Republicans)", - "countries": [ - "SUN", - "SPN" - ] - }, - "red five demo": { - "name": "RED FIVE Aerobatic Team", - "countries": [ - "SUN", - "RUS" - ] - }, - "clear": { - "name": "Green unmarked", - "countries": "All" - }, - "silver demo": { - "name": "Silver paint scheme", - "countries": [ - "SUN", - "RUS" - ] - }, - "red army winter": { - "name": "Red Army Air Force winter", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "Single propellor, straight wing, 1 crew. Ishak", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "IL-76MD": { - "name": "IL-76MD", - "coalition": "red", - "label": "IL-76MD Candid", - "era": "Mid Cold War", - "shortLabel": "76", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Transport" - ] - } - ], - "filename": "il-76.png", - "enabled": true, - "liveries": { - "ukrainian af aeroflot": { - "name": "Ukrainian AF aeroflot", - "countries": [ - "UKR" - ] - }, - "algerian af il-76md": { - "name": "Algerian AF IL-76MD", - "countries": [ - "DZA" - ] - }, - "china air force old": { - "name": "China Air Force Old", - "countries": [ - "CHN" - ] - }, - "ukrainian af": { - "name": "Ukrainian AF", - "countries": [ - "UKR" - ] - }, - "rf air force": { - "name": "RF Air Force", - "countries": [ - "RUS" - ] - }, - "china air force new": { - "name": "China Air Force New", - "countries": [ - "CHN" - ] - }, - "mvd aeroflot": { - "name": "MVD aeroflot", - "countries": [ - "RUS" - ] - }, - "fsb aeroflot": { - "name": "FSB aeroflot", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 5 crew. Cargo and passenger aircraft. NATO reporting name: Candid", - "abilities": "AEW", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "IL-78M": { - "name": "IL-78M", - "coalition": "red", - "label": "IL-78M Midas", - "era": "Late Cold War", - "shortLabel": "78", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Tanker" - ] - } - ], - "filename": "il-76.png", - "enabled": true, - "liveries": { - "rf air force aeroflot": { - "name": "RF Air Force aeroflot", - "countries": [ - "SUN", - "RUS" - ] - }, - "rf air force new": { - "name": "RF Air Force new", - "countries": [ - "RUS" - ] - }, - "algerian af il-78m": { - "name": "Algerian AF IL-78M", - "countries": [ - "DZA" - ] - }, - "china air force": { - "name": "China Air Force", - "countries": [ - "CHN" - ] - }, - "rf air force": { - "name": "RF Air Force", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 6 crew. Tanker aircraft. NATO reporting name: Midas", - "abilities": "Tanker, Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "J-11A": { - "name": "J-11A", - "coalition": "red", - "label": "J-11A Flaming Dragon", - "era": "Modern", - "shortLabel": "J11", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", - "quantity": 6 - } - ], - "enabled": true, - "code": "FAB-100x36,R-73x2,ECM", - "name": "FAB-100x36,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x FAB-250", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250x8,R-73x2,ECM", - "name": "FAB-250x8,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x FAB-500", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500x8,R-73x2,ECM", - "name": "FAB-500x8,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x B-8M1 - 20 S-8KOM", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-8KOMx80,FAB-250x4,R-73x2,ECM", - "name": "S-8KOMx80,FAB-250x4,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x B-13L - 5 S-13 OF", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-13x20,FAB-250x4,R-73x2,ECM", - "name": "S-13x20,FAB-250x4,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x S-25", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-25x4,FAB-500x4,R-73x2,ECM", - "name": "S-25x4,FAB-500x4,R-73x2,ECM", - "roles": [ - "Strike", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-27ERx4,R-27ETx2,R-73x2,ECM", - "name": "R-27ERx4,R-27ETx2,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 6 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-77x6,R-73x2,ECM", - "name": "R-77x6,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-27ERx6,R-73x2,ECM", - "name": "R-27ERx6,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-77x4,R-27ETx2,R-73x2,ECM", - "name": "R-77x4,R-27ETx2,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-77x4,R-27ERx2,R-73x2,ECM", - "name": "R-77x4,R-27ERx2,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", - "quantity": 6 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500ShPx6,R-73x2,ECM", - "name": "BetAB-500ShPx6,R-73x2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73x4,ECM", - "name": "R-73x4,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-77x2,R-27ETx2,R-73x2,ECM", - "name": "R-77x2,R-27ETx2,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-77x6,R-73x4", - "name": "R-77x6,R-73x4", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-77x2,R-27ETx2,R-27ERx2,R-73x2,ECM", - "name": "R-77x2,R-27ETx2,R-27ERx2,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-27ETx2,R-27ERx4,R-73x2,ECM", - "name": "R-27ETx2,R-27ERx4,R-73x2,ECM", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x B-8M1 - 20 S-8TsM", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-8TsMx80,FAB-250x4,R-73x2,ECM", - "name": "S-8TsMx80,FAB-250x4,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x B-8M1 - 20 S-8OFP2", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-8OFP2x80,FAB-250x4,R-73x2,ECM", - "name": "S-8OFP2x80,FAB-250x4,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-250 - 250kg GP Bombs LD", - "quantity": 3 - } - ], - "enabled": true, - "code": "FAB-250x18,R-73x2,ECM", - "name": "FAB-250x18,R-73x2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x B-8M1 - 20 S-8KOM", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*S8-KOMx2, R-73x2, ECM", - "name": "2*S8-KOMx2, R-73x2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "RKL609 ECM Pod (Right)", - "quantity": 1 - }, - { - "name": "RKL609 ECM Pod (Left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x B-8M1 - 20 S-8OFP2", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*S8-OFP2x2, R-73x2, ECM", - "name": "2*S8-OFP2x2, R-73x2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "2 x FAB-500", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250x4, 2*FAB-500x2, R-73x2", - "name": "FAB-250x4, 2*FAB-500x2, R-73x2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "2 x FAB-250", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250x4, 2*FAB-250x2, R-73x2", - "name": "FAB-250x4, 2*FAB-250x2, R-73x2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - }, - { - "name": "RBK-250-275 - 150 x AO-1SCh, 250kg CBU HE/Frag", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-250 HEAT/APx2, RBK-250 HE/Fragx2, R-73x2", - "name": "RBK-250 HEAT/APx2, RBK-250 HE/Fragx2, R-73x2", - "roles": [ - "CAS" - ] - } - ], - "filename": "su-27.png", - "enabled": true, - "liveries": { - "plaaf 19th ad": { - "name": "PLAAF 19th AD", - "countries": [ - "CHN" - ] - }, - "plaaf 17th ab": { - "name": "PLAAF 17th AB", - "countries": [ - "CHN" - ] - }, - "plaaf 18th ad 'thunderclap wing' (fictional)": { - "name": "PLAAF 18th AD 'Thunderclap Wing' (Fictional)", - "countries": [ - "CHN" - ] - }, - "usn aggressor vfc-13 'ferris' (fictional)": { - "name": "Aggressor VFC-13 'Ferris' (Fictional)", - "countries": [ - "AUSAF" - ] - }, - "plaaf 19th ad (reworked)": { - "name": "PLAAF 19th AD (Reworked)", - "countries": [ - "CHN" - ] - }, - "plaaf 14th ad": { - "name": "PLAAF 14th AD", - "countries": [ - "CHN" - ] - }, - "plaaf 6th ad": { - "name": "PLAAF 6th AD", - "countries": [ - "CHN" - ] - }, - "plaaf 14th ad (reworked)": { - "name": "PLAAF 14th AD (Reworked)", - "countries": [ - "CHN" - ] - }, - "plaaf opfor 'desert' (fictional)": { - "name": "PLAAF OPFOR 'Desert' (Fictional)", - "countries": [ - "CHN" - ] - }, - "plaaf 7th ad (reworked)": { - "name": "PLAAF 7th AD (Reworked)", - "countries": [ - "CHN" - ] - }, - "usaf 65th aggressor sqn 'desert' (fictional)": { - "name": "65th Aggressor SQN 'Desert' (Fictional)", - "countries": [ - "AUSAF" - ] - }, - "sky hunter": { - "name": "Sky Hunter", - "countries": [ - "CHN" - ] - }, - "plaaf 2nd ad (parade)": { - "name": "PLAAF 2nd AD (Parade)", - "countries": [ - "CHN" - ] - }, - "plaaf opfor 'jungle' (fictional)": { - "name": "PLAAF OPFOR 'Jungle' (Fictional) ", - "countries": [ - "CHN" - ] - }, - "plaaf 33th ad (reworked)": { - "name": "PLAAF 33th AD (Reworked)", - "countries": [ - "CHN" - ] - }, - "plaaf 33th ad": { - "name": "PLAAF 33th AD", - "countries": [ - "CHN" - ] - }, - "usaf 65th aggressor sqn 'gray' (fictional)": { - "name": "65th Aggressor SQN 'Gray' (Fictional)", - "countries": [ - "AUSAF" - ] - }, - "plaaf 2nd ad": { - "name": "PLAAF 2nd AD", - "countries": [ - "CHN" - ] - }, - "plaaf 7th ad": { - "name": "PLAAF 7th AD", - "countries": [ - "CHN" - ] - }, - "plaaf ghost gray (fictional)": { - "name": "PLAAF Ghost Gray (Fictional)", - "countries": [ - "CHN" - ] - }, - "plaaf 2nd ad (reworked)": { - "name": "PLAAF 2nd AD (Reworked)", - "countries": [ - "CHN" - ] - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swept wing, 1 crew, fighter and strike. NATO reporting name: Flanker", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "JF-17": { - "name": "JF-17", - "coalition": "red", - "label": "JF-17 Thunder", - "era": "Modern", - "shortLabel": "J17", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "C802AK (DIS)", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C802AKx2, 800L Tank", - "name": "PL-5Ex2, C802AKx2, 800L Tank", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IRx2, 1100L Tank, 800L Tank", - "name": "PL-5Ex2, C-701 IRx2, 1100L Tank, 800L Tank", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, SD-10x2, 1100L Tankx2, WMD7", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "LD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, LD-10x2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, LD-10x2, 1100L Tankx2, WMD7", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 800L Tank, WMD7", - "name": "PL-5Ex2, 800L Tank, WMD7", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "GBU-10", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, GBU-10x2, WMD7", - "name": "PL-5Ex2, GBU-10x2, WMD7", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "GDJ-II19 - 2 x GBU-12", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*GBU-12x2, 800L Tank, WMD7", - "name": "PL-5Ex2, 2*GBU-12x2, 800L Tank, WMD7", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "GDJ-II19 - 2 x Mk-82 SnakeEye", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*Mk-82x2, Mk-83x2, 800L Tank", - "name": "PL-5Ex2, 2*Mk-82x2, Mk-83x2, 800L Tank", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 1100L Tankx2, 800L Tank", - "name": "PL-5Ex2, 1100L Tankx2, 800L Tank", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "CM802AKG (DIS)", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "DATA-LINK POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, WMD7, CM802AKGx2, 800L Tank, DL", - "name": "PL-5Ex2, WMD7, CM802AKGx2, 800L Tank, DL", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "C-701T", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 CCDx2, 1100L Tank, 800L Tank", - "name": "PL-5Ex2, C-701 CCDx2, 1100L Tank, 800L Tank", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "GBU-12", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, GBU-12x2, 1100L Tank, WMD7", - "name": "PL-5Ex2, GBU-12x2, 1100L Tank, WMD7", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "GBU-16", - "quantity": 2 - }, - { - "name": "GDJ-II19 - 2 x GBU-12", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*GBU-12x2, GBU-16x2, WMD7", - "name": "PL-5Ex2, 2*GBU-12x2, GBU-16x2, WMD7", - "roles": [ - "CAS", - "Strike", - "FAC-A" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, 1100L Tankx2, WMD7", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "LD-10 x 2", - "quantity": 1 - }, - { - "name": "KG-600", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, WMD7, 800L Tankx2, SPJ, 2*LD-10", - "name": "PL-5Ex2, WMD7, 800L Tankx2, SPJ, 2*LD-10", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "LS-6-500", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, LS-6x2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, LS-6x2, 1100L Tankx2, WMD7", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IRx2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, C-701 IRx2, 1100L Tankx2, WMD7", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "GBU-12", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, GBU-12x2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, GBU-12x2, 1100L Tankx2, WMD7", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "LD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LD-10x2, 1100L Tankx2, SPJ", - "name": "PL-5Ex2, 2*LD-10x2, 1100L Tankx2, SPJ", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "LD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, LD-10x2, 1100L Tankx2, SPJ", - "name": "PL-5Ex2, LD-10x2, 1100L Tankx2, SPJ", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "LS-6-500", - "quantity": 2 - }, - { - "name": "LD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LD-10x2, LS-6x2, SPJ", - "name": "PL-5Ex2, 2*LD-10x2, LS-6x2, SPJ", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "GB-6-HE", - "quantity": 2 - }, - { - "name": "LD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LD-10x2, GB-6-HEx2, SPJ", - "name": "PL-5Ex2, 2*LD-10x2, GB-6-HEx2, SPJ", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IRx2, 800L Tankx2, WMD7", - "name": "PL-5Ex2, C-701 IRx2, 800L Tankx2, WMD7", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "C-701T", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 CCDx2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, C-701 CCDx2, 1100L Tankx2, WMD7", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "C-701T", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 CCDx2, 800L Tankx2, WMD7", - "name": "PL-5Ex2, C-701 CCDx2, 800L Tankx2, WMD7", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "GDJ-II19 - 2 x GBU-12", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*GBU-12x2, 1100L Tank, WMD7", - "name": "PL-5Ex2, 2*GBU-12x2, 1100L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IRx2, 1100L Tank, WMD7", - "name": "PL-5Ex2, C-701 IRx2, 1100L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IRx2, 800L Tank, WMD7", - "name": "PL-5Ex2, C-701 IRx2, 800L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701T", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 CCDx2, 1100L Tank, WMD7", - "name": "PL-5Ex2, C-701 CCDx2, 1100L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701T", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 CCDx2, 800L Tank, WMD7", - "name": "PL-5Ex2, C-701 CCDx2, 800L Tank, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 1 - }, - { - "name": "C-701T", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "LS-6-500", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IRx2, LS-6x2, 800L Tank", - "name": "PL-5Ex2, C-701 IRx2, LS-6x2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 1 - }, - { - "name": "C-701T", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "GB-6-HE", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IR/CCD, GB-6-HEx2, 800L Tank", - "name": "PL-5Ex2, C-701 IR/CCD, GB-6-HEx2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701IR", - "quantity": 1 - }, - { - "name": "C-701T", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "GB-6-SFW", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 IR/CCD, GB-6-SFWx2, 800L Tank", - "name": "PL-5Ex2, C-701 IR/CCD, GB-6-SFWx2, 800L Tank", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "GB-6-SFW", - "quantity": 2 - }, - { - "name": "BRM-1_90MM", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, BRM1", - "name": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, BRM1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "GB-6-SFW", - "quantity": 2 - }, - { - "name": "GBU-12", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, GBU-12", - "name": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, GBU-12", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 3 - }, - { - "name": "GDJ-II19 - 2 x Mk-82 SnakeEye", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*Mk-82SEx2, Mk-83x3", - "name": "PL-5Ex2, 2*Mk-82SEx2, Mk-83x3", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 3 - } - ], - "enabled": true, - "code": "PL-5Ex2, Mk-84x3", - "name": "PL-5Ex2, Mk-84x3", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "GDJ-II19 - 2 x LAU68 MK5", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*Mk5x2, 800L Tank", - "name": "PL-5Ex2, 2*Mk5x2, 800L Tank", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "UG_90MM", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, Unguided 90mmx2, 800L Tank", - "name": "PL-5Ex2, Unguided 90mmx2, 800L Tank", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 3 - }, - { - "name": "GDJ-II19 - 2 x LAU68 MK5", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*Mk5x2, Mk-83x3", - "name": "PL-5Ex2, 2*Mk5x2, Mk-83x3", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "BRM-1_90MM", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, BRM1x2, 1100L Tank, WMD7", - "name": "PL-5Ex2, BRM1x2, 1100L Tank, WMD7", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2x1100L Tank", - "name": "PL-5Ex2, 2x1100L Tank", - "roles": [ - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2, 2x1100L Tank", - "name": "PL-5Ex2, SD-10x2, 2x1100L Tank", - "roles": [ - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*SD-10x2, 2x1100L Tank", - "name": "PL-5Ex2, 2*SD-10x2, 2x1100L Tank", - "roles": [ - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, 800L Tank", - "name": "PL-5Ex2, 800L Tank", - "roles": [ - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2, 800L Tank", - "name": "PL-5Ex2, SD-10x2, 800L Tank", - "roles": [ - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "SD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*SD-10x2, 800L Tank", - "name": "PL-5Ex2, 2*SD-10x2, 800L Tank", - "roles": [ - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2, SPJ", - "name": "PL-5Ex2, SD-10x2, SPJ", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, SPJ", - "name": "PL-5Ex2, SPJ", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "SD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*SD-10x2, SPJ", - "name": "PL-5Ex2, 2*SD-10x2, SPJ", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2", - "name": "PL-5Ex2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2", - "name": "PL-5Ex2, SD-10x2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*SD-10", - "name": "PL-5Ex2, 2*SD-10", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2, SPJ, 1100L Tankx2", - "name": "PL-5Ex2, SD-10x2, SPJ, 1100L Tankx2", - "roles": [ - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10 x 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*SD-10x2, 1100L Tankx2, 800L Tank", - "name": "PL-5Ex2, 2*SD-10x2, 1100L Tankx2, 800L Tank", - "roles": [ - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "SD-10", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, SD-10x2, 1100L Tankx2, 800L Tank", - "name": "PL-5Ex2, SD-10x2, 1100L Tankx2, 800L Tank", - "roles": [ - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "BRM-1_90MM", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "GBU-16", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, GBU-16x2, BRM1x2, WMD7", - "name": "PL-5Ex2, GBU-16x2, BRM1x2, WMD7", - "roles": [ - "FAC-A", - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "PL-5EII", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, WMD7", - "name": "PL-5Ex2, WMD7", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "LD-10 x 2", - "quantity": 1 - }, - { - "name": "SD-10 x 2", - "quantity": 1 - }, - { - "name": "GB-6", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LD-10, GB-6x2, 2*SD-10, SPJ", - "name": "PL-5Ex2, 2*LD-10, GB-6x2, 2*SD-10, SPJ", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "C-701T", - "quantity": 2 - }, - { - "name": "KG-600", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, C-701 CCDx2, SPJ", - "name": "PL-5Ex2, C-701 CCDx2, SPJ", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "LD-10 x 2", - "quantity": 1 - }, - { - "name": "SD-10 x 2", - "quantity": 1 - }, - { - "name": "CM802AKG (DIS)", - "quantity": 2 - }, - { - "name": "DATA-LINK POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LD-10, CM802AKGx2, 2*SD-10, DL", - "name": "PL-5Ex2, 2*LD-10, CM802AKGx2, 2*SD-10, DL", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 1 - }, - { - "name": "GDJ-II19 - 2 x Mk-82", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*MK-82x2, MK-83x2, MK-84", - "name": "PL-5Ex2, 2*MK-82x2, MK-83x2, MK-84", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "LS-6-500", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "GB-6", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, LS-6x2, GB-6x2, 800L Tank", - "name": "PL-5Ex2, LS-6x2, GB-6x2, 800L Tank", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "GDJ-II19 - 2 x GBU-12", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "LS-6-500", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*GBU-12x2, LS-6x2, WMD7", - "name": "PL-5Ex2, 2*GBU-12x2, LS-6x2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "GDJ-II19 - 2 x GBU-12", - "quantity": 2 - }, - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "GB-6", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*GBU-12x2, GB-6x2, WMD7", - "name": "PL-5Ex2, 2*GBU-12x2, GB-6x2, WMD7", - "roles": [] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "TYPE-200A Dual", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*Type-200Ax2", - "name": "PL-5Ex2, 2*Type-200Ax2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "TYPE-200A", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, Type-200Ax2", - "name": "PL-5Ex2, Type-200Ax2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "LS-6-250 Dual", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LS6-250x2, 800L Tankx2, WMD7", - "name": "PL-5Ex2, 2*LS6-250x2, 800L Tankx2, WMD7", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "800L Tank", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "LS-6-250 Dual", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LS6-250x2, 800L Tank, 1100L Tankx2", - "name": "PL-5Ex2, 2*LS6-250x2, 800L Tank, 1100L Tankx2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "1100L Tank", - "quantity": 2 - }, - { - "name": "LS-6-100 Dual", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LS6-100x2, 1100L Tankx2, WMD7", - "name": "PL-5Ex2, 2*LS6-100x2, 1100L Tankx2, WMD7", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "PL-5EII", - "quantity": 2 - }, - { - "name": "WMD7 POD", - "quantity": 1 - }, - { - "name": "800L Tank", - "quantity": 2 - }, - { - "name": "LS-6-100 Dual", - "quantity": 2 - } - ], - "enabled": true, - "code": "PL-5Ex2, 2*LS6-100x2, 800L Tankx2, WMD7", - "name": "PL-5Ex2, 2*LS6-100x2, 800L Tankx2, WMD7", - "roles": [ - "CAS" - ] - } - ], - "filename": "jf-17.png", - "enabled": true, - "liveries": { - "paf black panthers 07-101": { - "name": "Pakistan Air Force No.16 Sqn Black Panthers 07-101", - "countries": [ - "PAK" - ] - }, - "paf phoenixes": { - "name": "Pakistan Air Force No.28 Sqn Phoenixes", - "countries": [ - "PAK" - ] - }, - "paf black spiders 07-101 (fictional)": { - "name": "Pakistan Air Force No.26 Sqn Black Spiders 07-101 (Fictional)", - "countries": [ - "PAK" - ] - }, - "paf 07-101 (overhauled)": { - "name": "Pakistan Air Force 07-101 (Overhauled)", - "countries": [ - "PAK" - ] - }, - "paf black panthers (b2v2)": { - "name": "Pakistan Air Force No.16 Sqn Black Panthers (Block2 Camo2)", - "countries": [ - "PAK" - ] - }, - "plaaf 125th ab (fictional)": { - "name": "PLAAF 125th AB (Fictional)", - "countries": [ - "CHN" - ] - }, - "naf 722": { - "name": "Nigerian Air Force 722", - "countries": [ - "NGA" - ] - }, - "paf dark camo": { - "name": "Pakistan Air Force Dark Camo", - "countries": [ - "PAK" - ] - }, - "'splinter' camo for blue side (fictional)": { - "name": "\"Splinter\" Camo for Blue Side (Fictional)", - "countries": "All" - }, - "paf black spiders (web camo)": { - "name": "Pakistan Air Force No.26 Sqn Black Spiders (Web Camo)", - "countries": [ - "PAK" - ] - }, - "plaaf 111th ab (fictional)": { - "name": "PLAAF 111th AB (Fictional)", - "countries": [ - "CHN" - ] - }, - "paf black panthers": { - "name": "Pakistan Air Force No.16 Sqn Black Panthers", - "countries": [ - "PAK" - ] - }, - "paf black spiders (default)": { - "name": "Pakistan Air Force No.26 Sqn Black Spiders", - "countries": [ - "PAK" - ] - }, - "paf ccs fierce fragons": { - "name": "Pakistan Air Force CCS Sqn Fierce Dragons", - "countries": [ - "PAK" - ] - }, - "plaaf ghost gray camo (fictional)": { - "name": "PLAAF \"Ghost Gray\" Camo (Fictional)", - "countries": [ - "CHN" - ] - }, - "'chips' camo for blue side (fictional)": { - "name": "USAF \"Chips\" Camo (Fictional)", - "countries": [ - "USA" - ] - }, - "paf black panthers (reworked)": { - "name": "Pakistan Air Force No.16 Sqn Black Panthers (Reworked)", - "countries": [ - "PAK" - ] - }, - "maf blue sea camo": { - "name": "Myanmar Air Force Blue Sea Camo", - "countries": "All" - }, - "proto 06": { - "name": "FC-1 Prototype 06", - "countries": [ - "CHN" - ] - }, - "paf minhasians": { - "name": "Pakistan Air Force No.2 Sqn Minhasians", - "countries": [ - "PAK" - ] - }, - "paf sharp shooters": { - "name": "Pakistan Air Force No.18 Sqn Sharp Shooters", - "countries": [ - "PAK" - ] - }, - "paf tail choppers": { - "name": "Pakistan Air Force No.14 Sqn Tail Choppers", - "countries": [ - "PAK" - ] - }, - "paf black panthers (b2v1)": { - "name": "Pakistan Air Force No.16 Sqn Black Panthers (Block2 Camo1)", - "countries": [ - "PAK" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew, fighter and strike. Geoff", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "KC-135": { - "name": "KC-135", - "coalition": "blue", - "label": "KC-135 Stratotanker", - "era": "Early Cold War", - "shortLabel": "135", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Tanker" - ] - } - ], - "filename": "kc-135.png", - "enabled": true, - "liveries": { - "standard usaf": { - "name": "USAF Standard", - "countries": [ - "USA" - ] - }, - "turaf standard": { - "name": "Turkish Air Force", - "countries": [ - "TUR" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 3 crew. Tanker aircraft. Stratotanker", - "abilities": "Tanker, Boom AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "KC135MPRS": { - "name": "KC135MPRS", - "coalition": "blue", - "label": "KC-135 MPRS Stratotanker", - "era": "Early Cold War", - "shortLabel": "135M", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Tanker" - ] - } - ], - "filename": "kc-135.png", - "enabled": true, - "liveries": { - "100th arw": { - "name": "100th ARW", - "countries": [ - "USA" - ] - }, - "22nd arw": { - "name": "22nd ARW", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swept wing, 3 crew. Tanker aircraft. Stratotanker", - "abilities": "Tanker, Drogue AAR, MPRS", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "L-39ZA": { - "name": "L-39ZA", - "coalition": "red", - "label": "L-39ZA", - "era": "Mid Cold War", - "shortLabel": "L39", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-5KOx32", - "name": "S-5KOx32", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-5KOx64", - "name": "S-5KOx64", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - }, - { - "name": "Fuel Tank 150 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-5KOx32, PTB-150x2", - "name": "S-5KOx32, PTB-150x2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - }, - { - "name": "Fuel Tank 350 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-5KOx32, PTB-350x2", - "name": "S-5KOx32, PTB-350x2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - }, - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-5KOx32, FAB-100x2", - "name": "S-5KOx32, FAB-100x2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "2 x OFAB-100 Jupiter - 100kg GP Bombs HD", - "quantity": 2 - }, - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "OFAB-100 Jupiter x4, FAB-100x2", - "name": "OFAB-100 Jupiter x4, FAB-100x2", - "roles": [ - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100x2", - "name": "FAB-100x2", - "roles": [ - "Antiship Strike", - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "FAB-100x4", - "name": "FAB-100x4", - "roles": [ - "Antiship Strike", - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "2 x OFAB-100 Jupiter - 100kg GP Bombs HD", - "quantity": 4 - } - ], - "enabled": true, - "code": "OFAB-100 Jupiter x8", - "name": "OFAB-100 Jupiter x8", - "roles": [ - "CAS", - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel Tank 150 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100x2, PTB-150x2", - "name": "FAB-100x2, PTB-150x2", - "roles": [ - "Antiship Strike", - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel Tank 350 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100x2, PTB-350x2", - "name": "FAB-100x2, PTB-350x2", - "roles": [ - "Antiship Strike", - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "PK-3 - 7.62mm GPMG", - "quantity": 4 - } - ], - "enabled": true, - "code": "PK-3x4", - "name": "PK-3x4", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "PK-3 - 7.62mm GPMG", - "quantity": 2 - }, - { - "name": "Fuel Tank 150 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "PK-3x2, PTB-150x2", - "name": "PK-3x2, PTB-150x2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-60Mx2", - "name": "R-60Mx2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "SAB-100MN - 100 kg Illumination Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "SAB-100x4", - "name": "SAB-100x4", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "R-3S - AAM, IR guided", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-3Sx2", - "name": "R-3Sx2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-3S - AAM, IR guided", - "quantity": 2 - }, - { - "name": "PK-3 - 7.62mm GPMG", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-3Sx2, PK-3x2", - "name": "R-3Sx2, PK-3x2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "PK-3 - 7.62mm GPMG", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-60Mx2, PK-3x2", - "name": "R-60Mx2, PK-3x2", - "roles": [ - "CAP" - ] - } - ], - "filename": "l-39.png", - "enabled": true, - "liveries": { - "splinter camo woodland": { - "name": "Splinter camo woodland", - "countries": "All" - }, - "algerian af tiger nl-36": { - "name": "Algerian AF Tiger NL-36", - "countries": [ - "DZA" - ] - }, - "czech air force": { - "name": "Czech Air Force", - "countries": [ - "CZE" - ] - }, - "algerian af nl-44": { - "name": "Algerian AF NL-44", - "countries": [ - "DZA" - ] - }, - "splinter camo desert": { - "name": "Splinter camo desert", - "countries": "All" - }, - "slovak air force": { - "name": "2nd SQN AFB Sliac", - "countries": [ - "SVK" - ] - }, - "russian air force": { - "name": "1 Russian Air Force", - "countries": [ - "RUS" - ] - }, - "czechoslovakia air force": { - "name": "Czechoslovakia_Air Force", - "countries": [ - "CZE" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "M-2000C": { - "name": "M-2000C", - "coalition": "blue", - "label": "M-2000C Mirage", - "era": "Late Cold War", - "shortLabel": "2k", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fox", - "name": "Fox", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fox / Magic (QRA)", - "name": "Fox / Magic (QRA)", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Super 530D", - "quantity": 2 - } - ], - "enabled": true, - "code": "Alpha / S530D", - "name": "Alpha / S530D", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "Matra Super 530D", - "quantity": 2 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fox / S530D / Magic", - "name": "Fox / S530D / Magic", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "Matra Super 530D", - "quantity": 2 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - }, - { - "name": "Eclair 16 flares 16 chaffs", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fox / S530D / Magic / Eclair", - "name": "Fox / S530D / Magic / Eclair", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - } - ], - "enabled": true, - "code": "Bravo", - "name": "Bravo", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - } - ], - "enabled": true, - "code": "Bravo / Magic", - "name": "Bravo / Magic", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kilo", - "name": "Kilo", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kilo / Magic", - "name": "Kilo / Magic", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "Bravo / 4xMk-82 / Magic", - "name": "Bravo / 4xMk-82 / Magic", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - } - ], - "enabled": true, - "code": "Bravo / GBU-12 / Magic", - "name": "Bravo / GBU-12 / Magic", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "AUF2 GBU-12 x 2", - "quantity": 1 - } - ], - "enabled": true, - "code": "Bravo / 2xGBU-12 / Magic", - "name": "Bravo / 2xGBU-12 / Magic", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "GBU-16 - 1000lb Laser Guided Bomb", - "quantity": 1 - } - ], - "enabled": true, - "code": "Bravo / GBU-16 / Magic", - "name": "Bravo / GBU-16 / Magic", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "GBU-24 Paveway III - 2000lb Laser Guided Bomb", - "quantity": 1 - } - ], - "enabled": true, - "code": "Bravo / GBU-24 / Magic", - "name": "Bravo / GBU-24 / Magic", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "BAP-100 x 18", - "quantity": 1 - } - ], - "enabled": true, - "code": "Bravo / BAP-100 / Magic", - "name": "Bravo / BAP-100 / Magic", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 4 - } - ], - "enabled": true, - "code": "Bravo / 4xSnakeEye / Magic", - "name": "Bravo / 4xSnakeEye / Magic", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fox / 4xMk-82 / Magic", - "name": "Fox / 4xMk-82 / Magic", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Matra Magic II", - "quantity": 2 - }, - { - "name": "RPL 541 2000 liters Fuel Tank ", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - }, - { - "name": "RPL 522 1300 liters Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kilo / 4xMk-82 / Magic", - "name": "Kilo / 4xMk-82 / Magic", - "roles": [ - "Strike" - ] - } - ], - "filename": "m2000.png", - "enabled": true, - "liveries": { - "ada alsace lf-2": { - "name": "Ada Alsace LF-2", - "countries": [ - "FRA" - ] - }, - "peru052": { - "name": "Fuerza Aerea Peruana 052", - "countries": [ - "FRA", - "PER" - ] - }, - "mission accomplie": { - "name": "2022 MISSION ACCOMPLIE by MALBAK", - "countries": "All" - }, - "cambresis": { - "name": "AdA Cambresis", - "countries": [ - "FRA" - ] - }, - "greek air force": { - "name": "Polemikh Aeroporia (Greek Air Force)", - "countries": [ - "FRA", - "GRC" - ] - }, - "brasilian air force": { - "name": "Forca Aerea Brasileira (Brazilian Air Force)", - "countries": [ - "BRA", - "FRA" - ] - }, - "2003 tigermeet": { - "name": "NATO Tigermeet 2003", - "countries": [ - "FRA" - ] - }, - "peru064": { - "name": "Fuerza Aerea Peruana 064", - "countries": [ - "FRA", - "PER" - ] - }, - "2010 tigermeet": { - "name": "NATO Tigermeet 2010", - "countries": [ - "FRA" - ] - }, - "uae air force": { - "name": "UAE Air Defense Air Force", - "countries": [ - "FRA", - "ARE" - ] - }, - "2004 tigermeet": { - "name": "NATO Tigermeet 2004", - "countries": [ - "FRA" - ] - }, - "ada chasse 2-5": { - "name": "AdA Chasse 2/5", - "countries": [ - "FRA" - ] - }, - "iaf silver 59": { - "name": "Israeli Air Force 101 Sqn 1967 scheme", - "countries": [ - "ABH", - "RUS", - "SPN", - "ISR", - "USA", - "RSO", - "UKR", - "TUR", - "BEL", - "NOR", - "ITA", - "POL", - "NETH", - "GER", - "FRA", - "GRG", - "DEN", - "CZE", - "CAN", - "UK" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew, fighter and strike.", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MB-339A": { - "name": "MB-339A", - "coalition": "blue", - "label": "MB-339A", - "era": "Mid Cold War", - "shortLabel": "339", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "Mk-83 - 1000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Mk-81 - 250lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - } - ], - "enabled": true, - "code": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.83 + 2*Mk.81 ", - "name": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.83 + 2*Mk.81 ", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "", - "quantity": 6 - } - ], - "enabled": true, - "code": "A - 2*320L TipTanks [Clean]", - "name": "A - 2*320L TipTanks [Clean]", - "roles": [ - "Transport" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "AN/M3 Gunpod Right", - "quantity": 1 - }, - { - "name": "Photo-Recon Pod (4*70mm Vinten Cameras)", - "quantity": 1 - }, - { - "name": "Fuel Tank 330lt", - "quantity": 2 - }, - { - "name": "", - "quantity": 2 - } - ], - "enabled": true, - "code": "Recon", - "name": "Recon", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "Cylindrical Tip Tank 500lt", - "quantity": 2 - }, - { - "name": "BRD-4-250 - 4 x Mk 76 - 25lb Practice Bomb LD", - "quantity": 1 - }, - { - "name": "", - "quantity": 2 - }, - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - } - ], - "enabled": true, - "code": "Training", - "name": "Training", - "roles": [] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "LAU-10 pod - 4 x 127mm ZUNI, UnGd Rkts Mk71, HE/FRAG", - "quantity": 2 - }, - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - } - ], - "enabled": true, - "code": "AA - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*LAU-10(Zuni Rockets) [ARMADA]", - "name": "AA - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*LAU-10(Zuni Rockets) [ARMADA]", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", - "quantity": 2 - }, - { - "name": "Fuel Tank 330lt", - "quantity": 2 - }, - { - "name": "AN/M3 Gunpod Right", - "quantity": 1 - }, - { - "name": "AN/M3 Gunpod Left", - "quantity": 1 - } - ], - "enabled": true, - "code": "AM - 2*320L TipTanks + 2*AN/M3 GunPods + 2*330L Tanks + 2*LAU-3 (Hydra rockets)", - "name": "AM - 2*320L TipTanks + 2*AN/M3 GunPods + 2*330L Tanks + 2*LAU-3 (Hydra rockets)", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 330lt", - "quantity": 2 - }, - { - "name": "", - "quantity": 3 - }, - { - "name": "Cylindrical Tip Tank 500lt", - "quantity": 2 - }, - { - "name": "Luggage Container", - "quantity": 1 - } - ], - "enabled": true, - "code": "A - 2*500L TipTanks + 2*330L Tanks + Luggage Container [Ferry Long Range]", - "name": "A - 2*500L TipTanks + 2*330L Tanks + Luggage Container [Ferry Long Range]", - "roles": [ - "No task", - "Transport" - ] - }, - { - "items": [ - { - "name": "Cylindrical Tip Tank 500lt", - "quantity": 2 - }, - { - "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 API", - "quantity": 2 - }, - { - "name": "Mk-82 Snakeye - 500lb GP Bomb HD", - "quantity": 4 - } - ], - "enabled": true, - "code": "A - 2*500L TipTanks + 4*Mk.82HD + 2*LR-25 (API Rockets)", - "name": "A - 2*500L TipTanks + 4*Mk.82HD + 2*LR-25 (API Rockets)", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "Fuel Tank 330lt", - "quantity": 2 - }, - { - "name": "", - "quantity": 3 - } - ], - "enabled": true, - "code": "A - 2*320L TipTanks + 2*330L Tanks [Ferry Medium Range]", - "name": "A - 2*320L TipTanks + 2*330L Tanks [Ferry Medium Range]", - "roles": [ - "Transport" - ] - }, - { - "items": [ - { - "name": "Cylindrical Tip Tank 500lt", - "quantity": 2 - }, - { - "name": "Matra Type 155 Rocket Pod", - "quantity": 2 - }, - { - "name": "BLG-66-AC Belouga", - "quantity": 2 - }, - { - "name": "AN/M3 Gunpod Right", - "quantity": 1 - }, - { - "name": "AN/M3 Gunpod Left", - "quantity": 1 - } - ], - "enabled": true, - "code": "A - 2*500L TipTanks + 2*AN/M3 GunPods + 2*Matra 155 + 2* Belouga", - "name": "A - 2*500L TipTanks + 2*AN/M3 GunPods + 2*Matra 155 + 2* Belouga", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "BLU-107/B Durandal - 219kg Concrete Piercing Chute Retarded Bomb w/Booster", - "quantity": 4 - }, - { - "name": "Matra Type 155 Rocket Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "Runway Interdiction", - "name": "Runway Interdiction", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - }, - { - "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 API", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Cylindrical Tip Tank 500lt", - "quantity": 2 - } - ], - "enabled": true, - "code": "A - 2*500L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (API Rockets)", - "name": "A - 2*500L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (API Rockets)", - "roles": [] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 API", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - } - ], - "enabled": true, - "code": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD Bombs + 2*LR-25(API Rockets)", - "name": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD Bombs + 2*LR-25(API Rockets)", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 HEI Heavy", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - } - ], - "enabled": true, - "code": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (HEI Rockets)", - "name": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (HEI Rockets)", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 6 - } - ], - "enabled": true, - "code": "A - 2*320L TipTanks + 6*Mk.82LD", - "name": "A - 2*320L TipTanks + 6*Mk.82LD", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "14-3-M2 - 6 x BAP-100 - 32kg Concrete Piercing Chute Retarded Bomb w/Booster", - "quantity": 6 - } - ], - "enabled": true, - "code": "Runway Interdiction (36*BAP-100)", - "name": "Runway Interdiction (36*BAP-100)", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "14-3-M2 - 6 x BAT-120 ABL - 34kg HE/Frag Chute Retarded Bomb HD", - "quantity": 6 - } - ], - "enabled": true, - "code": "Anti - Light Armoured Vehicle (36*BAT-120 ABL)", - "name": "Anti - Light Armoured Vehicle (36*BAT-120 ABL)", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Elliptic Tip Tank 320lt", - "quantity": 2 - }, - { - "name": "Matra Type 155 Rocket Pod", - "quantity": 2 - }, - { - "name": "Fuel Tank 330lt", - "quantity": 2 - }, - { - "name": "DEFA553 Gunpod Right", - "quantity": 1 - }, - { - "name": "DEFA553 Gunpod Left", - "quantity": 1 - } - ], - "enabled": true, - "code": "AP - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*330L Tanks + 2*Matra 155 (SNEB rockets)", - "name": "AP - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*330L Tanks + 2*Matra 155 (SNEB rockets)", - "roles": [ - "CAS" - ] - } - ], - "filename": "c-101.png", - "enabled": true, - "liveries": { - "mb339an 'nigeria'": { - "name": "Nigerian Air Force | Camo (Low-Vis)", - "countries": [ - "NGA" - ] - }, - "mb339a italian camo - late": { - "name": "Italian Camo - Late", - "countries": [ - "ITA" - ] - }, - "mb339a italian factory": { - "name": "Italian Orange/White", - "countries": [ - "ITA" - ] - }, - "mb339am 'malaysia'": { - "name": "Royal Malaysian Air Force | Camo (Low-Vis)", - "countries": [ - "MYS" - ] - }, - "mb339aa 'armada' - yellow band": { - "name": "ARMADA Argentina | Camo (Yellow Band)", - "countries": [ - "ARG" - ] - }, - "mb339ag 'ghana'": { - "name": "Ghana Air Force | Camo (Low-Vis)", - "countries": [ - "GHA" - ] - }, - "mb339a italian gray": { - "name": "Italian Gray", - "countries": [ - "ITA" - ] - }, - "mb339a italian camo - early": { - "name": "Italian Camo - Early", - "countries": [ - "ITA" - ] - }, - "mb339 'factory'": { - "name": "Aermacchi Factory Scheme | S-001 I-NEUF", - "countries": "All" - }, - "mb339ad 'uae'": { - "name": "UAE Air Force", - "countries": [ - "ARE" - ] - }, - "mb339aa 'armada' - crippa": { - "name": "ARMADA Argentina | Camo (Lt. Crippa's killmark)", - "countries": [ - "ARG" - ] - }, - "mb339ap 'peru'": { - "name": "Peruvian Air Force | Camo (Late)", - "countries": [ - "PER" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MQ-9 Reaper": { - "name": "MQ-9 Reaper", - "coalition": "blue", - "label": "MQ-9 Reaper", - "era": "Modern", - "shortLabel": "MQ9", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-12*4", - "name": "GBU-12*4", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "GBU-38*4", - "name": "GBU-38*4", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "M299 - 4 x AGM-114K Hellfire", - "quantity": 2 - }, - { - "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-114K*8,GBU-38*2", - "name": "AGM-114K*8,GBU-38*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "M299 - 4 x AGM-114K Hellfire", - "quantity": 2 - }, - { - "name": "AGM-114K * 2", - "quantity": 2 - } - ], - "enabled": true, - "code": "AGM-114K*12", - "name": "AGM-114K*12", - "roles": [ - "CAS", - "Strike" - ] - } - ], - "filename": "i-16.png", - "enabled": true, - "liveries": { - "standard": { - "name": "standard", - "countries": [ - "USA" - ] - }, - "standard uk": { - "name": "standard UK", - "countries": [ - "UK" - ] - }, - "standard italy": { - "name": "standard Italy", - "countries": [ - "ITA" - ] - }, - "standard france": { - "name": "standard France", - "countries": [ - "FRA" - ] - }, - "'camo' scheme": { - "name": "'camo' scheme", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "Single turboprop, straight wing, attack aircraft. Reaper", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-15bis": { - "name": "MiG-15bis", - "coalition": "red", - "label": "MiG-15 Fagot", - "era": "Early Cold War", - "shortLabel": "M15", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "FAB-50 - 50kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*FAB-50", - "name": "2*FAB-50", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-100M - 100kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*FAB-100M", - "name": "2*FAB-100M", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 300 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*300L", - "name": "2*300L", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 400 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*400L", - "name": "2*400L", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 600 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "2*600L", - "name": "2*600L", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 300 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "Fuel tank 300", - "name": "Fuel tank 300", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 400 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "Fuel tank 400", - "name": "Fuel tank 400", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - } - ], - "filename": "mig-15.png", - "enabled": true, - "liveries": { - "china_air force": { - "name": "People's Liberation Army Air Force", - "countries": [ - "CHN" - ] - }, - "china volunteer air force": { - "name": "People's Volunteer Army Air Force", - "countries": [ - "CHN" - ] - }, - "ussr_red": { - "name": "USSR Red", - "countries": [ - "SUN", - "RUS" - ] - }, - "algerian af 1962": { - "name": "Algerian AF 1962", - "countries": [ - "DZA" - ] - }, - "north_korea_air force_major_ arkady_ boitsow": { - "name": "North Korea - Major Arkady Boitsow", - "countries": [ - "RUS", - "PRK" - ] - }, - "gdr_air force": { - "name": "Air Forces of the National People's Army", - "countries": [ - "GER" - ] - }, - "default livery": { - "name": "default livery", - "countries": [ - "BRA", - "CUB", - "MYS", - "ARE", - "AUS", - "ABH", - "RUS", - "PHL", - "SPN", - "ISR", - "SUN", - "USA", - "BHR", - "MAR", - "BLR", - "HRV", - "DZA", - "OMN", - "RSO", - "SVK", - "HND", - "IRN", - "UKR", - "TUR", - "JPN", - "PRK", - "SRB", - "IDN", - "KAZ", - "BGR", - "BEL", - "INS", - "THA", - "LBY", - "AUSAF", - "VEN", - "PAK", - "JOR", - "RSA", - "FIN", - "MEX", - "KWT", - "NOR", - "IRQ", - "SYR", - "ITA", - "NZG", - "GRC", - "POL", - "NETH", - "GER", - "SUI", - "CHN", - "SAU", - "SWE", - "YEM", - "VNM", - "ROU", - "RSI", - "FRA", - "CHL", - "KOR", - "HUN", - "AUT", - "GRG", - "DEN", - "TUN", - "EGY", - "IND", - "CZE", - "ETH", - "CAN", - "SDN", - "QAT", - "UK", - "YUG" - ] - }, - "haf fictional": { - "name": "Hellenic Airforce - Fictional", - "countries": [ - "GRC" - ] - }, - "ussr_air forces": { - "name": "Air Forces of Soviet Union", - "countries": [ - "SUN", - "RUS" - ] - }, - "north_korea_air force": { - "name": "Korean People's Air Force", - "countries": [ - "PRK" - ] - }, - "polish_air force": { - "name": "Polish Air Force", - "countries": [ - "POL" - ] - }, - "ussr_air forces old": { - "name": "USSR Old", - "countries": [ - "SUN", - "RUS" - ] - }, - "czechoslovakia_air force": { - "name": "Czechoslovak Air Force", - "countries": [ - "CZE" - ] - }, - "ussr_pepelyaev": { - "name": "USSR Pepelyaev", - "countries": [ - "SUN", - "RUS", - "PRK" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew. Fagot", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-19P": { - "name": "MiG-19P", - "coalition": "red", - "label": "MiG-19 Farmer", - "era": "Early Cold War", - "shortLabel": "M19", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 760 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "PTB-760 x 2", - "name": "PTB-760 x 2", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "K-13A", - "quantity": 2 - }, - { - "name": "Fuel Tank 760 liters", - "quantity": 2 - } - ], - "enabled": true, - "code": "K-13A x 2, PTB-760 x 2", - "name": "K-13A x 2, PTB-760 x 2", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "K-13A", - "quantity": 2 - } - ], - "enabled": true, - "code": "K-13A x 2", - "name": "K-13A x 2", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "K-13A", - "quantity": 2 - }, - { - "name": "Fuel Tank 760 liters", - "quantity": 2 - }, - { - "name": "ORO-57K - S-5M x 8", - "quantity": 2 - } - ], - "enabled": true, - "code": "K-13A x 2, ORO-57K x 2, PTB-760 x 2", - "name": "K-13A x 2, ORO-57K x 2, PTB-760 x 2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 760 liters", - "quantity": 2 - }, - { - "name": "ORO-57K - S-5M x 8", - "quantity": 2 - } - ], - "enabled": true, - "code": "ORO-57K x 2, PTB-760 x 2", - "name": "ORO-57K x 2, PTB-760 x 2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "ORO-57K - S-5M x 8", - "quantity": 4 - } - ], - "enabled": true, - "code": "ORO-57K x 4", - "name": "ORO-57K x 4", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "ORO-57K - S-5M x 8", - "quantity": 2 - } - ], - "enabled": true, - "code": "ORO-57K x 2", - "name": "ORO-57K x 2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-100M - 100kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "ORO-57K - S-5M x 8", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100M x 2, ORO-57K x 2", - "name": "FAB-100M x 2, ORO-57K x 2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "ORO-57K - S-5M x 8", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250 x 2, ORO-57K x 2", - "name": "FAB-250 x 2, ORO-57K x 2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-100M - 100kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100M x 2", - "name": "FAB-100M x 2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250 x 2", - "name": "FAB-250 x 2", - "roles": [ - "CAS", - "Strike" - ] - } - ], - "filename": "mig-19.png", - "enabled": true, - "liveries": { - "ussr_2": { - "name": "764th Fighter Aviation Regiment", - "countries": [ - "SUN", - "RUS" - ] - }, - "plaaf camo": { - "name": "PLAAF Snow Camo", - "countries": [ - "CHN" - ] - }, - "cuba": { - "name": " 211 Escuadron de Caza", - "countries": [ - "CUB" - ] - }, - "iap": { - "name": "234 Fighter Regiment (234 IAP)", - "countries": "All" - }, - "ddr - fictional": { - "name": "Germany DDR camouflage (Fictional)", - "countries": "All" - }, - "snow - fictional": { - "name": "Snow Camouflage Fictional", - "countries": "All" - }, - "plaaf": { - "name": "112th Air Regiment", - "countries": [ - "CHN" - ] - }, - "romania - 66th fighter division": { - "name": "91st Fighter Regiment", - "countries": [ - "ROU" - ] - }, - "poland 39 plm": { - "name": "39 PLM Squadron", - "countries": [ - "POL" - ] - }, - "poland 62 plm": { - "name": "62 PLM Squadron", - "countries": [ - "POL" - ] - }, - "default": { - "name": "default", - "countries": "All" - }, - "czechoslovakia": { - "name": "2nd Fighter-Bomber Regiment", - "countries": [ - "CZE" - ] - }, - "bulgaria": { - "name": "1st Squadron, 18th Fighter Regiment", - "countries": [ - "BGR" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew. Farmer", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-21Bis": { - "name": "MiG-21Bis", - "coalition": "red", - "label": "MiG-21 Fishbed", - "era": "Mid Cold War", - "shortLabel": "M21", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 2 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 2 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Patrol, long range", - "name": "Patrol, long range", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 2 - }, - { - "name": "R-60 x 2", - "quantity": 2 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Patrol, medium range", - "name": "Patrol, medium range", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 490 L Central (21)", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 2 - }, - { - "name": "R-60 x 2", - "quantity": 2 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Patrol, short range", - "name": "Patrol, short range", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "Hard targets, BOMBS", - "name": "Hard targets, BOMBS", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "UB-32M - 32 S-5M", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "Unknown or mixed targets, BOMBS + ROCKETS", - "name": "Unknown or mixed targets, BOMBS + ROCKETS", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "UB-32M - 32 S-5M", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - } - ], - "enabled": true, - "code": "Soft targets, CLUSTERS + ROCKETS", - "name": "Soft targets, CLUSTERS + ROCKETS", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "BL-755 CBU - 450kg, 147 Frag/Pen bomblets", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - } - ], - "enabled": true, - "code": "Soft targets, CLUSTERS", - "name": "Soft targets, CLUSTERS", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "UPK-23-250 - gun pod", - "quantity": 2 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "Soft targets, scattered", - "name": "Soft targets, scattered", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "Kh-66 Grom (21) - AGM, radar guided APU-68", - "quantity": 2 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Few big targets, GROM + BOMBS", - "name": "Few big targets, GROM + BOMBS", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 2 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "Very hard target, PENETRATION", - "name": "Very hard target, PENETRATION", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 4 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Aerial attack, hard targets, CLUSTERS", - "name": "Aerial attack, hard targets, CLUSTERS", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "S-24A (21) - 180 kg, cumulative unguided rocket", - "quantity": 4 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Hard targets, ROCKETS, PENETRATION", - "name": "Hard targets, ROCKETS, PENETRATION", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "S-24B (21) - 180 kg, fragmented unguided rocket", - "quantity": 4 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Soft targets, ROCKETS, BLAST-FRAGMENTS", - "name": "Soft targets, ROCKETS, BLAST-FRAGMENTS", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 490 L Central (21)", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 1 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 1 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - } - ], - "enabled": true, - "code": "Long range, MIX", - "name": "Long range, MIX", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 490 L Central (21)", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 2 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - } - ], - "enabled": true, - "code": "Long range, RADAR GUIDED MISSILES", - "name": "Long range, RADAR GUIDED MISSILES", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 490 L Central (21)", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 2 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - } - ], - "enabled": true, - "code": "Long range, INFRA RED MISSILES", - "name": "Long range, INFRA RED MISSILES", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 2 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 2 - } - ], - "enabled": true, - "code": "Escort", - "name": "Escort", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "SPS-141-100 (21) - jamming and countermeasures pod", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 1 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 1 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - } - ], - "enabled": true, - "code": "Escort, JAMMER", - "name": "Escort, JAMMER", - "roles": [ - "Escort" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "SAB-100MN - 100 kg Illumination Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "Night, ILLUMINATOR", - "name": "Night, ILLUMINATOR", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "SPS-141-100 (21) - jamming and countermeasures pod", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 1 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 1 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - } - ], - "enabled": true, - "code": "Long range, JAMMER", - "name": "Long range, JAMMER", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "UPK-23-250 - gun pod", - "quantity": 2 - }, - { - "name": "UB-16UM - 16 S-5M", - "quantity": 2 - } - ], - "enabled": true, - "code": "Soft targets, UPK + ROCKETS", - "name": "Soft targets, UPK + ROCKETS", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - }, - { - "name": "UPK-23-250 - gun pod", - "quantity": 2 - }, - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Soft targets, UPK + CLUSTERS", - "name": "Soft targets, UPK + CLUSTERS", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-3R - AAM, radar guided", - "quantity": 1 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 1 - }, - { - "name": "SPS-141-100 (21) - jamming and countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - } - ], - "enabled": true, - "code": "Patrol, JAMMER", - "name": "Patrol, JAMMER", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "RN-24 - 470kg, nuclear bomb, free fall", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 1 - } - ], - "enabled": true, - "code": "NUCLEAR A", - "name": "NUCLEAR A", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "RN-28 - 260 kg, nuclear bomb, free fall", - "quantity": 1 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - }, - { - "name": "Fuel Tank 490 L (21)", - "quantity": 2 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 1 - } - ], - "enabled": true, - "code": "NUCLEAR B", - "name": "NUCLEAR B", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel Tank 800 L (21)", - "quantity": 1 - }, - { - "name": "R-3R - AAM, radar guided", - "quantity": 2 - }, - { - "name": "R-3S - AAM, IR guided", - "quantity": 2 - }, - { - "name": "ASO-2 - countermeasures pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Short range", - "name": "Short range", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Smoke - white - 21", - "quantity": 1 - } - ], - "enabled": true, - "code": "AEROBATIC", - "name": "AEROBATIC", - "roles": [] - } - ], - "filename": "mig-21.png", - "enabled": true, - "liveries": { - "afghanistan (1)": { - "name": "Afghanistan (1)", - "countries": "All" - }, - "bulgaria - 1-3 iae (3)": { - "name": "Bulgaria - 1/3 IAE (3)", - "countries": "All" - }, - "germany east - jg-8": { - "name": "East Germany - JG-8", - "countries": "All" - }, - "plaaf - white": { - "name": "PLAAF - White", - "countries": "All" - }, - "croatia - 21st fs": { - "name": "Croatia - 21st Fighter Squadron (Zagreb AB)", - "countries": "All" - }, - "plaaf - sky blue": { - "name": "PLAAF - Sky Blue", - "countries": "All" - }, - "iraq - 17th sqn (2)": { - "name": "Iraq - 17th Sqn (2)", - "countries": "All" - }, - "vvs - amt-11 grey": { - "name": "VVS - AMT-11 Grey", - "countries": "All" - }, - "vvs - 234 gviap": { - "name": "VVS - 234 GvIAP", - "countries": "All" - }, - "bare metal": { - "name": "Bare Metal", - "countries": "All" - }, - "bulgaria - 1-3 iae (2)": { - "name": "Bulgaria - 1/3 IAE (2)", - "countries": "All" - }, - "plaaf - splinter": { - "name": "PLAAF - Splinter", - "countries": "All" - }, - "argentina (2)": { - "name": "Argentina (2)", - "countries": "All" - }, - "vvs - demonstrator": { - "name": "VVS Demonstrator", - "countries": "All" - }, - "vvs - 115 gviap": { - "name": "VVS - 115 GvIAP (Kokaydy AB)", - "countries": "All" - }, - "romania - lancer a": { - "name": "Romania - Lancer A", - "countries": "All" - }, - "sweden - 16th air wing": { - "name": "Sweden - 16th Air Wing", - "countries": "All" - }, - "syria (1)": { - "name": "Syria (1)", - "countries": "All" - }, - "egypt - grey 1982": { - "name": "Egypt - Grey 1982", - "countries": "All" - }, - "finland - h\u00e4vllv 31": { - "name": "Finland - HavLLv 31", - "countries": "All" - }, - "huaf 47th ab - 6115 (griff sqn)": { - "name": "HunAF Griff Sqn. (47th AB) 6115", - "countries": "All" - }, - "libya - 2017": { - "name": "Lybia - 2017", - "countries": "All" - }, - "huaf 47th ab (griff sqn)": { - "name": "HunAF Griff Sqn. (47th AB)", - "countries": "All" - }, - "cuba - 1990s": { - "name": "Cuba - 1990s", - "countries": "All" - }, - "serbia - 101st lae": { - "name": "Serbia - 101st LAE", - "countries": "All" - }, - "slovakia - 1998": { - "name": "Slovakia - 1998", - "countries": "All" - }, - "iran - 51st sqn": { - "name": "Iran - 51st Sqn (Umidiyeh AB)", - "countries": "All" - }, - "vvs - 116 cbp": { - "name": "VVS - 116 CBP", - "countries": "All" - }, - "georgia (2)": { - "name": "Georgia (2)", - "countries": "All" - }, - "huaf metal": { - "name": "HuAF Metal", - "countries": "All" - }, - "bulgaria - 1-3 iae": { - "name": "Bulgaria - 1/3 IAE", - "countries": "All" - }, - "india - 101st sqn (1)": { - "name": "India - 101st Sqn Falcons", - "countries": "All" - }, - "ukraine (2)": { - "name": "Ukraine 02", - "countries": "All" - }, - "vpaf - 927th fighter regiment metal": { - "name": "VPAF - 927th Fighter Regiment Metal", - "countries": "All" - }, - "iran - standard": { - "name": "Iran - Standard", - "countries": "All" - }, - "romania - lancer c": { - "name": "Romania - Lancer C", - "countries": "All" - }, - "angola - c41": { - "name": "Angola - C41", - "countries": "All" - }, - "poland - 1 dlmw": { - "name": "Poland - 1 DLMW", - "countries": "All" - }, - "yugoslavia - gray": { - "name": "Yugoslavia - Grey", - "countries": "All" - }, - "angola - c314": { - "name": "Angola - C314", - "countries": "All" - }, - "argentina (1)": { - "name": "Argentina (1)", - "countries": "All" - }, - "romania - gray": { - "name": "Romania - Gray", - "countries": "All" - }, - "dprk - 2016 - 42": { - "name": "DPRK - 2016 Nr.42", - "countries": "All" - }, - "libya - early": { - "name": "Lybia - Early", - "countries": "All" - }, - "poland - metal": { - "name": "Poland - Lacquer Metal", - "countries": "All" - }, - "syria (2)": { - "name": "Syria (2)", - "countries": "All" - }, - "india - 15th sqn": { - "name": "India - 15 Sqn War Games", - "countries": "All" - }, - "cuba - um 5010 is": { - "name": "Cuba - UM 5010 IS", - "countries": "All" - }, - "afghanistan (2)": { - "name": "Afghanistan (2)", - "countries": "All" - }, - "iraq - 9th sqn": { - "name": "Iraq - 9th Sqn", - "countries": "All" - }, - "vpaf - 927th lam son - 6122": { - "name": "VPAF - 927th Lam Son", - "countries": "All" - }, - "yugoslavia - camo": { - "name": "Yugoslavia - Camo", - "countries": "All" - }, - "egypt - tan 1982": { - "name": "Egypt - Tan 1982", - "countries": "All" - }, - "croatia - 1st fs 1992": { - "name": "Croatia - 1st FS 1992", - "countries": "All" - }, - "southeria": { - "name": "Southeria", - "countries": "All" - }, - "ukraine (1)": { - "name": "Ukraine 01", - "countries": "All" - }, - "georgia (1)": { - "name": "Georgia (1)", - "countries": "All" - }, - "northeria - 32nd fs": { - "name": "Northeria - 32nd FG", - "countries": "All" - }, - "cuba - metal": { - "name": "Cuba - Metal", - "countries": "All" - }, - "huaf 47th ab - early": { - "name": "HunAF Griff Sqn. (47th AB) - Early ", - "countries": "All" - }, - "jasdf": { - "name": "JASDF", - "countries": "All" - }, - "raf - 111th sqn": { - "name": "RAF - 111th Sqn", - "countries": "All" - }, - "sweden - m90": { - "name": "Sweden - M90", - "countries": "All" - }, - "algeria": { - "name": "Algeria FD-43", - "countries": "All" - }, - "india - 101st sqn (2)": { - "name": "India - 101st Sqn Falcons (2)", - "countries": "All" - }, - "draken international": { - "name": "Draken International", - "countries": "All" - }, - "raf - 11th sqn": { - "name": "RAF - 11th Sqn", - "countries": "All" - }, - "vpaf - 921st sao do - 5040": { - "name": "VPAF - 921st Sao Do", - "countries": "All" - }, - "vvs - metal": { - "name": "VVS Metal", - "countries": "All" - }, - "iraq - 17th sqn (1)": { - "name": "Iraq - 17th Sqn (1)", - "countries": "All" - }, - "vvs - 185th gviap": { - "name": "VVS 185th GvIAP", - "countries": "All" - }, - "poland - 10 elt": { - "name": "Poland - 10 ELT", - "countries": "All" - }, - "dprk - 2014 - 34": { - "name": "DPRK - 2014 Nr.34", - "countries": "All" - }, - "huaf grey": { - "name": "HuAF Grey", - "countries": "All" - }, - "huaf 31st ab (turul sqn)": { - "name": "HunAF 1904 Capeti (51th AB)", - "countries": "All" - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew. Fishbed", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-23MLD": { - "name": "MiG-23MLD", - "coalition": "red", - "label": "MiG-23 Flogger", - "era": "Mid Cold War", - "shortLabel": "23", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-60M*4", - "name": "R-60M*4", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "B-8*2,R-60M*2,Fuel-800", - "name": "B-8*2,R-60M*2,Fuel-800", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "UB-32*2,R-60M*2,Fuel-800", - "name": "UB-32*2,R-60M*2,Fuel-800", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-24R*2,R-60M*4,Fuel-800", - "name": "R-24R*2,R-60M*4,Fuel-800", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-24T (AA-7 Apex IR) - Infra Red", - "quantity": 1 - }, - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - }, - { - "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-24R,R-24T,R-60M*4,Fuel-800", - "name": "R-24R,R-24T,R-60M*4,Fuel-800", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-60M*4,Fuel-800", - "name": "R-60M*4,Fuel-800", - "roles": [ - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*2,R-60M*2,Fuel-800", - "name": "FAB-500*2,R-60M*2,Fuel-800", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-24R*2,R-60M*4", - "name": "R-24R*2,R-60M*4", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*2,R-60M*2,Fuel-800", - "name": "FAB-250*2,R-60M*2,Fuel-800", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-250*2,R-60M*2,Fuel-800", - "name": "RBK-250*2,R-60M*2,Fuel-800", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-500*2,R-60M*2,Fuel-800", - "name": "RBK-500*2,R-60M*2,Fuel-800", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-24T (AA-7 Apex IR) - Infra Red", - "quantity": 1 - }, - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-24R,R-24T,R-60M*4", - "name": "R-24R,R-24T,R-60M*4", - "roles": [ - "CAP" - ] - } - ], - "filename": "mig-23.png", - "enabled": true, - "liveries": { - "af standard-2": { - "name": "af standard-2", - "countries": [ - "SUN", - "RUS" - ] - }, - "af standard-3 (worn-out)": { - "name": "af standard-3 (worn-out)", - "countries": [ - "SUN", - "RUS" - ] - }, - "algerian air force": { - "name": "Algerian Air Force", - "countries": [ - "DZA" - ] - }, - "af standard-1": { - "name": "af standard-1", - "countries": [ - "SUN", - "RUS" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swing wing, 1 crew. Flogger", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-25PD": { - "name": "MiG-25PD", - "coalition": "red", - "label": "MiG-25PD Foxbat", - "era": "Mid Cold War", - "shortLabel": "25P", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-40TD (AA-6 Acrid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-40R*2,R-40T*2", - "name": "R-40R*2,R-40T*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-40R*4", - "name": "R-40R*4", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-40R*2,R-60M*2", - "name": "R-40R*2,R-60M*2", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - } - ], - "filename": "mig-25.png", - "enabled": true, - "liveries": { - "algerian air force": { - "name": "Algeria Air Force standard", - "countries": [ - "DZA" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Foxbat", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-25RBT": { - "name": "MiG-25RBT", - "coalition": "red", - "label": "MiG-25RBT Foxbat", - "era": "Mid Cold War", - "shortLabel": "25R", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-500x2_60x2", - "name": "FAB-500x2_60x2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-60M*2", - "name": "R-60M*2", - "roles": [ - "Reconnaissance" - ] - } - ], - "filename": "mig-25.png", - "enabled": true, - "liveries": { - "algerian air force": { - "name": "Algeria Air Force standard", - "countries": [ - "DZA" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Foxbat", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-27K": { - "name": "MiG-27K", - "coalition": "red", - "label": "MiG-27K Flogger-D", - "era": "Mid Cold War", - "shortLabel": "M27", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*6,R-60M*2,Fuel", - "name": "FAB-250*6,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "BetAB-500ShP*2,FAB-250*2,R-60*2", - "name": "BetAB-500ShP*2,FAB-250*2,R-60*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Kh-25MR (AS-10 Karen) - 300kg, ASM, 10km, RC Guided", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-25MR*2,R-60M*2,Fuel", - "name": "Kh-25MR*2,R-60M*2,Fuel", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*2,R-60M*2,Fuel", - "name": "Kh-29L*2,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - } - ], - "enabled": true, - "code": "B-8*4", - "name": "B-8*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "BetAB-500*2,FAB-500*2,R-60*2", - "name": "BetAB-500*2,FAB-500*2,R-60*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-25MPU*2,R-60M*2,Fuel", - "name": "Kh-25MPU*2,R-60M*2,Fuel", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29T*2,R-60M*2,Fuel", - "name": "Kh-29T*2,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*2,FAB-250*2,R-60M*2,Fuel", - "name": "FAB-500*2,FAB-250*2,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-25ML*2,R-60M*2,Fuel", - "name": "Kh-25ML*2,R-60M*2,Fuel", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "KAB-500LG - 500kg Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "KAB-500*2,R-60M*2,Fuel", - "name": "KAB-500*2,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-500AO*2,RBK-250*2,R-60M*2", - "name": "RBK-500AO*2,RBK-250*2,R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - } - ], - "enabled": true, - "code": "UB-32*4", - "name": "UB-32*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*2,R-60*2,Fuel", - "name": "Kh-29L*2,R-60*2,Fuel", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "mig-23.png", - "enabled": true, - "liveries": { - "algerian air force": { - "name": "Algerian Air Force", - "countries": [ - "DZA" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swing wing, 1 crew. Flogger", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-29A": { - "name": "MiG-29A", - "coalition": "red", - "label": "MiG-29A Fulcrum", - "era": "Late Cold War", - "shortLabel": "M29", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel tank 1150L MiG-29", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel-1150*2,Fuel-1500", - "name": "Fuel-1150*2,Fuel-1500", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-500AO*4,R-73*2,Fuel", - "name": "RBK-500AO*4,R-73*2,Fuel", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*4,R-73*2,Fuel", - "name": "FAB-250*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "B-8*4,R-73*2,Fuel", - "name": "B-8*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-60M*4,R-27R*2", - "name": "R-60M*4,R-27R*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*4,R-27R*2,Fuel-1500", - "name": "R-73*4,R-27R*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 6 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*6,Fuel-1500", - "name": "R-73*6,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 6 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-60M*6,Fuel-1500", - "name": "R-60M*6,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-24*4,R-73*2,Fuel", - "name": "S-24*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*4,R-73*2,Fuel", - "name": "FAB-500*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-60M*6", - "name": "R-60M*6", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500*4,R-73*2,Fuel", - "name": "BetAB-500*4,R-73*2,Fuel", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*6", - "name": "R-73*6", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", - "name": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-60M*4,R-27R*2,Fuel-1500", - "name": "R-60M*4,R-27R*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-250*4,R-73*2,Fuel", - "name": "RBK-250*4,R-73*2,Fuel", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-73*4,R-27R*2", - "name": "R-73*4,R-27R*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-73*2,R-60M*2,R-27R*2", - "name": "R-73*2,R-60M*2,R-27R*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-24*2,FAB-500*2,R-73*2,Fuel", - "name": "S-24*2,FAB-500*2,R-73*2,Fuel", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "mig-29.png", - "enabled": true, - "liveries": { - "air force ukraine standard": { - "name": "Air Force (Standard)", - "countries": [ - "UKR" - ] - }, - "air force standard": { - "name": "Air Force (Standard)", - "countries": [ - "SUN", - "RUS" - ] - }, - "strizhi": { - "name": "Strizhi 1992", - "countries": [ - "RUS" - ] - }, - "domna 120th ar": { - "name": "Domna - 120th Aviation Regiment", - "countries": [ - "RUS" - ] - }, - "mary-1 agressors": { - "name": "Soviet Air Forces, a/b 1521 (Mary-1)", - "countries": [ - "RUS" - ] - }, - "polish 41st sqn standard1": { - "name": "41st Sqn Standard 1", - "countries": [ - "POL" - ] - }, - "iriaf sand-blue": { - "name": "IRIAF sand-blue", - "countries": [ - "IRN" - ] - }, - "strizhi (w)": { - "name": "Strizhi 1992(W)", - "countries": [ - "RUS" - ] - }, - "polish 41st sqn standard2": { - "name": "41st Sqn Standard 2", - "countries": [ - "POL" - ] - }, - "vasylkiv 40th brta": { - "name": "Vasylkiv - 40th Brigade of Tactical Aviation", - "countries": [ - "UKR" - ] - }, - "kazakhstan air defense forces": { - "name": "KazAADF 600th Airbase 2015", - "countries": [ - "KAZ" - ] - }, - "kazakhstan kazaadf 2008": { - "name": "KazAADF 600th Airbase 2008", - "countries": [ - "KAZ" - ] - }, - "iriaf blue-grey": { - "name": "IRIAF blue-grey", - "countries": [ - "IRN" - ] - }, - "syaaf": { - "name": "Syrian Arab Air Force", - "countries": [ - "SYR" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Flanker", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-29S": { - "name": "MiG-29S", - "coalition": "red", - "label": "MiG-29S Fulcrum", - "era": "Late Cold War", - "shortLabel": "M29", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-73*2,R-60M*2,R-27R*2", - "name": "R-73*2,R-60M*2,R-27R*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*4,R-27R*2,Fuel-1500", - "name": "R-73*4,R-27R*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 6 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*6,Fuel-1500", - "name": "R-73*6,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 6 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-60M*6,Fuel-1500", - "name": "R-60M*6,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-24*4,R-73*2,Fuel", - "name": "S-24*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*4,R-73*2,Fuel", - "name": "FAB-500*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500*4,R-73*2,Fuel", - "name": "BetAB-500*4,R-73*2,Fuel", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-500AO*4,R-73*2,Fuel", - "name": "RBK-500AO*4,R-73*2,Fuel", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", - "name": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1150L MiG-29", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-77*2,R-73*2,Fuel-1500,Fuel-1150*2", - "name": "R-77*2,R-73*2,Fuel-1500,Fuel-1150*2", - "roles": [ - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "B-8*4,R-73*2,Fuel", - "name": "B-8*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-250*4,R-73*2,Fuel", - "name": "RBK-250*4,R-73*2,Fuel", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*6", - "name": "R-73*6", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Fuel tank 1150L MiG-29", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel-1150*2,Fuel-1500", - "name": "Fuel-1150*2,Fuel-1500", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-60M*6", - "name": "R-60M*6", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-60M*4,R-27R*2", - "name": "R-60M*4,R-27R*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-73*4,R-27R*2", - "name": "R-73*4,R-27R*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-77*4,R-73*2", - "name": "R-77*4,R-73*2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*4,R-73*2,Fuel", - "name": "FAB-250*4,R-73*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-60M*4,R-27R*2,Fuel-1500", - "name": "R-60M*4,R-27R*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 4 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-77*4,R-73*2,Fuel-1500", - "name": "R-77*4,R-73*2,Fuel-1500", - "roles": [ - "CAP", - "CAP", - "Escort" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "Fuel tank 1400L", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-24*2,FAB-500*2,R-73*2,Fuel", - "name": "S-24*2,FAB-500*2,R-73*2,Fuel", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "mig-29.png", - "enabled": true, - "liveries": { - "algerian af fc-16": { - "name": "Algerian AF FC-16", - "countries": [ - "DZA" - ] - }, - "air force ukraine standard": { - "name": "Air Force (Standard)", - "countries": [ - "UKR" - ] - }, - "air force standard": { - "name": "Air Force (Standard)", - "countries": [ - "RUS" - ] - }, - "kazaadf new faded (fictional)": { - "name": "KazAADF new faded (fictional)", - "countries": [ - "KAZ" - ] - }, - "strizhi": { - "name": "Strizhi 2003", - "countries": [ - "RUS" - ] - }, - "115 gviap_termez": { - "name": "Termez AFB, 115th Guards Aviation Regiment", - "countries": [ - "RUS" - ] - }, - "1521th air base_mary-1": { - "name": "Mary-1 AFB, 1521st Air Force Base", - "countries": [ - "RUS" - ] - }, - "kazaadf old (fictional)": { - "name": "KazAADF old (fictional)", - "countries": [ - "KAZ" - ] - }, - "swifts": { - "name": "Swifts (Aerobatic team)", - "countries": [ - "RUS" - ] - }, - "773 iap_damgarten": { - "name": "Damgarten AFB, 773rd Aviation Regiment", - "countries": [ - "RUS" - ] - }, - "426th air group_erebuni": { - "name": "Erebuni AFB, 426th Air Group", - "countries": [ - "RUS" - ] - }, - "31 gviap_zernograd": { - "name": "Zernograd AFB, 31st Guards Aviation Regiment", - "countries": [ - "RUS" - ] - }, - "28 gviap_andreapol": { - "name": "Andreapol AFB, 28th Guards Aviation Regiment", - "countries": [ - "RUS" - ] - }, - "belarusian air force": { - "name": "Belarusian Air Force 61 FAB Baranavichy (2017)", - "countries": [ - "BLR" - ] - }, - "kazaadf new (fictional)": { - "name": "KazAADF new (fictional)", - "countries": [ - "KAZ" - ] - }, - "falcons of russia": { - "name": "Lipetsk, aerobatic group Falcons of Russia", - "countries": [ - "RUS" - ] - }, - "kazaadf new (fictional digital)": { - "name": "KazAADF new digital (fictional digital)", - "countries": [ - "KAZ" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Flanker", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MiG-31": { - "name": "MiG-31", - "coalition": "red", - "label": "MiG-31 Foxhound", - "era": "Late Cold War", - "shortLabel": "M31", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-40TD (AA-6 Acrid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-40T*2,R-33*4", - "name": "R-40T*2,R-33*4", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", - "quantity": 1 - }, - { - "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", - "quantity": 4 - }, - { - "name": "R-40TD (AA-6 Acrid) - Infra Red", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-40T,R-33*4,R-40R", - "name": "R-40T,R-33*4,R-40R", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-40R*2,R-33*4", - "name": "R-40R*2,R-33*4", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-60M*4,R-33*4", - "name": "R-60M*4,R-33*4", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - } - ], - "filename": "mig-23.png", - "enabled": true, - "liveries": { - "174 gviap_boris safonov": { - "name": "174 GvIAP Boris Safonov", - "countries": [ - "RUS" - ] - }, - "903_white": { - "name": "Demo 903 White", - "countries": [ - "RUS" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 2 crew. Foxhound", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Mirage-F1EE": { - "name": "Mirage-F1EE", - "coalition": "blue", - "label": "Mirage-F1EE", - "era": "Mid Cold War", - "shortLabel": "MF1", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "R530F IR", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", - "name": "2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "R530F EM", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM9-JULI, 2*R530EM, 1*Fuel Tank", - "name": "2*AIM9-JULI, 2*R530EM, 1*Fuel Tank", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "R530F IR", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", - "name": "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "R530F EM", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM9-JULI, 1*R530EM", - "name": "2*AIM9-JULI, 1*R530EM", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "R530F IR", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 1*R530IR", - "name": "2*R550 Magic I, 1*R530IR", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 2 - }, - { - "name": "R530F IR", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", - "name": "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 2 - }, - { - "name": "R530F IR", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", - "name": "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9J Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "MATRA F4 - 18 x UnGd Rkts, 68 mm SNEB Type 251 F1B HE", - "quantity": 2 - }, - { - "name": "R530F IR", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", - "name": "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9J Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 2 - }, - { - "name": "CLB 4 - 4 x SAMP-400 - 400 kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", - "name": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9J Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 2 - }, - { - "name": "CLB 4 - 4 x SAMP-400 - 400 kg GP Chute Retarded Bomb HD", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", - "name": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "MATRA F1 - 36 x UnGd Rkts, 68 mm SNEB Type 253 F1B HEAT", - "quantity": 4 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", - "name": "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "MATRA F4 - 18 x UnGd Rkts, 68 mm SNEB Type 253 F1B HEAT", - "quantity": 4 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", - "name": "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "MATRA F1 - 36 x UnGd Rkts, 68 mm SNEB Type 256 F1B HE/Frag", - "quantity": 4 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", - "name": "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "MATRA F4 - 18 x UnGd Rkts, 68 mm SNEB Type 256 F1B HE/Frag", - "quantity": 4 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", - "name": "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "SAMP-250 - 250 kg GP Chute Retarded Bomb HD", - "quantity": 2 - }, - { - "name": "MATRA F1 - 36 x UnGd Rkts, 68 mm SNEB Type 256 F1B HE/Frag", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", - "name": "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "SAMP-250 - 250 kg GP Chute Retarded Bomb HD", - "quantity": 4 - }, - { - "name": "CLB 4 - 4 x SAMP-250 - 250 kg GP Chute Retarded Bomb HD", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9JULI, 8*SAMP 250 HD", - "name": "2*AIM-9JULI, 8*SAMP 250 HD", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "SAMP-400 - 400 kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "CLB 4 - 4 x SAMP-400 - 400 kg GP Bomb LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9JULI, 8*SAMP 400 LD", - "name": "2*AIM-9JULI, 8*SAMP 400 LD", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BLU-107/B Durandal - 219kg Concrete Piercing Chute Retarded Bomb w/Booster", - "quantity": 4 - }, - { - "name": "CLB 4 - 4 x BLU-107/B Durandal - 219kg Concrete Piercing Chute Retarded Bomb w/Booster", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM-9JULI, 8*BLU107 Durandal", - "name": "2*AIM-9JULI, 8*BLU107 Durandal", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-9JULI Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "S530F", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*AIM9-JULI, 2*S530F, 1*Fuel Tank", - "name": "2*AIM9-JULI, 2*S530F, 1*Fuel Tank", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "S530F", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 2*S530F, 1*Fuel Tank", - "name": "2*R550 Magic I, 2*S530F, 1*Fuel Tank", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "R550 Magic 1 IR AAM", - "quantity": 2 - }, - { - "name": "S530F", - "quantity": 2 - }, - { - "name": "RP35 Pylon Fuel Tank (1137 l usable)", - "quantity": 1 - }, - { - "name": "BARAX - ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "2*R550 Magic I, 2*S530F, 1*Fuel Tank, 1*BARAX ECM Pod", - "name": "2*R550 Magic I, 2*S530F, 1*Fuel Tank, 1*BARAX ECM Pod", - "roles": [ - "CAP", - "CAP", - "Escort", - "CAP" - ] - } - ], - "filename": "f-5.png", - "enabled": true, - "liveries": { - "ec 330 lorraine": { - "name": "EC 330 Lorraine", - "countries": [ - "FRA" - ] - }, - "ec 5 330 cote d'argent (fictional ct)": { - "name": "EC 5/330 Cote d'Argent (FICTIONAL CT)", - "countries": [ - "FRA" - ] - }, - "er 2 33 savoie 100 ans de reco (fictional cr)": { - "name": "ER 233 Savoie 100 ans de reco (FICTIONAL CR)", - "countries": [ - "FRA" - ] - }, - "iriaf 3-6210 _ 2017 blue (eq variant)": { - "name": "IRIAF 3-6210 _ 2017 Blue (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "iriaf 3-6209 _ 2010s blue_gray (eq variant)": { - "name": "IRIAF 3-6209 _ 2010s Blue_Gray (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "er 233 savoie ba 118 mont de marsan (fictional cr)": { - "name": "ER 2/33 Savoie BA 118 Mont de Marsan (FICTIONAL CR)", - "countries": [ - "FRA" - ] - }, - "ala 14 blue skin (ee) albacete": { - "name": "ALA 14 Blue Skin (EE) Albacete", - "countries": [ - "SPN" - ] - }, - "usa company skin (m-ee)": { - "name": "USA Company Skin EE", - "countries": [ - "USA", - "AUSAF" - ] - }, - "ala 14 nato skin 1 (ee)": { - "name": "ALA 14 NATO Skin 1 (EE)", - "countries": [ - "SPN" - ] - }, - "iriaf 3-6210 _ 2013 gray (eq variant)": { - "name": "IRIAF 3-6210 _ 2013 Gray (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "usa company skin 2 (m-ee)": { - "name": "USA Company Skin 2 EE", - "countries": [ - "USA", - "AUSAF" - ] - }, - "iriaf 3-6214 _ 2021 blue (eq variant)": { - "name": "IRIAF 3-6214 _ 2021 Blue (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "aerges nato grey": { - "name": "AERGES NATO GREY", - "countries": [ - "CUB", - "AUS", - "PRT", - "SUN", - "USA", - "BLR", - "HRV", - "LBN", - "SVK", - "TUR", - "ARG", - "BEL", - "FIN", - "SAU", - "RSI", - "CHL", - "AUT", - "EGY", - "ECU", - "CAN", - "QAT", - "YUG", - "ISR", - "PER", - "BHR", - "NGA", - "IDN", - "KAZ", - "INS", - "AUSAF", - "PAK", - "SVN", - "ROU", - "DEN", - "TUN", - "IND", - "CZE", - "MYS", - "GHA", - "OMN", - "RSO", - "IRN", - "UKR", - "JPN", - "THA", - "JOR", - "RSA", - "MEX", - "NOR", - "ITA", - "NETH", - "SUI", - "VNM", - "KOR", - "GRG", - "SDN", - "UK", - "BRA", - "ARE", - "ABH", - "BOL", - "RUS", - "PHL", - "SPN", - "MAR", - "DZA", - "GDR", - "HND", - "PRK", - "SRB", - "BGR", - "LBY", - "VEN", - "IRQ", - "SYR", - "NZG", - "GRC", - "POL", - "SWE", - "GER", - "CHN", - "YEM", - "FRA", - "HUN", - "ETH", - "KWT" - ] - }, - "ec 3 33 lorraine ba 112 reims - champagne ardennes": { - "name": "EC 333 Lorraine BA 112 Reims - Champagne Ardennes", - "countries": [ - "FRA" - ] - }, - "ec 1 12 cambresis": { - "name": "EC 112 BA 103 Cambrai-\u00c9pinoy", - "countries": [ - "FRA" - ] - }, - "ala 46 blue skin (ee) gando": { - "name": "ALA 46 Blue Skin (EE) Gando", - "countries": [ - "SPN" - ] - }, - "aerges blue": { - "name": "AERGES BLUE", - "countries": [ - "CUB", - "AUS", - "PRT", - "SUN", - "USA", - "BLR", - "HRV", - "LBN", - "SVK", - "TUR", - "ARG", - "BEL", - "FIN", - "SAU", - "RSI", - "CHL", - "AUT", - "EGY", - "ECU", - "CAN", - "QAT", - "YUG", - "ISR", - "PER", - "BHR", - "NGA", - "IDN", - "KAZ", - "INS", - "AUSAF", - "PAK", - "SVN", - "ROU", - "DEN", - "TUN", - "IND", - "CZE", - "MYS", - "GHA", - "OMN", - "RSO", - "IRN", - "UKR", - "JPN", - "THA", - "JOR", - "RSA", - "MEX", - "NOR", - "ITA", - "NETH", - "SUI", - "VNM", - "KOR", - "GRG", - "SDN", - "UK", - "BRA", - "ARE", - "ABH", - "BOL", - "RUS", - "PHL", - "SPN", - "MAR", - "DZA", - "GDR", - "HND", - "PRK", - "SRB", - "BGR", - "LBY", - "VEN", - "IRQ", - "SYR", - "NZG", - "GRC", - "POL", - "SWE", - "GER", - "CHN", - "YEM", - "FRA", - "HUN", - "ETH", - "KWT" - ] - }, - "ec 212 picardie": { - "name": "EC 212 Picardie", - "countries": [ - "FRA" - ] - }, - "iriaf 3-6212 _ col. naghdibake (eq variant)": { - "name": "IRIAF 3-6212 _ Col. Naghdibake (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "iriaf 3-6211 _ 2010s blue_gray (eq variant)": { - "name": "IRIAF 3-6211 _ 2010s Blue_Gray (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "ec 1 5 vendee ba orange-cariat": { - "name": "EC 1/5 Vendee BA 115 Orange-Cariat", - "countries": [ - "FRA" - ] - }, - "er 233 savoie ba 118 mont de marsan dessert camu (fictional cr)": { - "name": "ER 233 Savoie BA 118 Mont de Marsan Dessert Camu (FICTIONAL CR)", - "countries": [ - "FRA" - ] - }, - "iriaf 3-6215 _ 2021 blue (eq variant)": { - "name": "IRIAF 3-6215 _ 2021 Blue (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "iriaf 3-6210 _ 2021 blue (eq variant)": { - "name": "IRIAF 3-6210 _ 2021 Blue (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "ala 46 sq 462 blue skin (ee) gando": { - "name": "ALA 46 SQ 462 Blue Skin (EE) Gando", - "countries": [ - "SPN" - ] - }, - "ec 2 30 normandie niemen (fictional ct)": { - "name": "EC 2/30 Normandie Niemen (FICTIONAL CT)", - "countries": [ - "FRA" - ] - }, - "iriaf 3-6215 _ 1990-2010s desert (eq variant)": { - "name": "IRIAF 3-6215 _ 1990-2010s Desert (EQ Variant)", - "countries": [ - "IRN", - "INS" - ] - }, - "aerges camo": { - "name": "AERGES CAMO", - "countries": [ - "CUB", - "AUS", - "PRT", - "SUN", - "USA", - "BLR", - "HRV", - "LBN", - "SVK", - "TUR", - "ARG", - "BEL", - "FIN", - "SAU", - "RSI", - "CHL", - "AUT", - "EGY", - "ECU", - "CAN", - "QAT", - "YUG", - "ISR", - "PER", - "BHR", - "NGA", - "IDN", - "KAZ", - "INS", - "AUSAF", - "PAK", - "SVN", - "ROU", - "DEN", - "TUN", - "IND", - "CZE", - "MYS", - "GHA", - "OMN", - "RSO", - "IRN", - "UKR", - "JPN", - "THA", - "JOR", - "RSA", - "MEX", - "NOR", - "ITA", - "NETH", - "SUI", - "VNM", - "KOR", - "GRG", - "SDN", - "UK", - "BRA", - "ARE", - "ABH", - "BOL", - "RUS", - "PHL", - "SPN", - "MAR", - "DZA", - "GDR", - "HND", - "PRK", - "SRB", - "BGR", - "LBY", - "VEN", - "IRQ", - "SYR", - "NZG", - "GRC", - "POL", - "SWE", - "GER", - "CHN", - "YEM", - "FRA", - "HUN", - "ETH", - "KWT" - ] - }, - "usa company grey (m-ee)": { - "name": "USA Company Grey EE", - "countries": [ - "USA", - "AUSAF" - ] - } - }, - "type": "Aircraft", - "description": "Single Jet engine, swept wing, 1 crew.", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "MosquitoFBMkVI": { - "name": "MosquitoFBMkVI", - "coalition": "blue", - "label": "Mosquito FB MkVI", - "era": "WW2", - "shortLabel": "Mos", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "500 lb S.A.P.", - "quantity": 2 - }, - { - "name": "250 lb S.A.P.", - "quantity": 2 - } - ], - "enabled": true, - "code": "250 lb S.A.P*2; 500 lb S.A.P.*2", - "name": "250 lb S.A.P*2; 500 lb S.A.P.*2", - "roles": [ - "CAP", - "Strike" - ] - }, - { - "items": [ - { - "name": "500 lb GP Mk.V", - "quantity": 2 - }, - { - "name": "500 lb MC Short tail", - "quantity": 2 - } - ], - "enabled": true, - "code": "500 lb GP Mk.V*2, 500 lb GP Short tail*2", - "name": "500 lb GP Mk.V*2, 500 lb GP Short tail*2", - "roles": [ - "CAP", - "Strike", - "CAS", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "100 gal. Drop Tank", - "quantity": 2 - }, - { - "name": "500 lb MC Short tail", - "quantity": 2 - } - ], - "enabled": true, - "code": "100 gal Drop tank*2, 500 lb MC Short tail*2", - "name": "100 gal Drop tank*2, 500 lb MC Short tail*2", - "roles": [ - "CAP", - "Strike" - ] - }, - { - "items": [ - { - "name": "", - "quantity": 2 - }, - { - "name": "250 lb S.A.P.", - "quantity": 2 - }, - { - "name": "4 x RP-3 60lb SAP No2 Mk.I", - "quantity": 2 - } - ], - "enabled": true, - "code": "RP-3 60lb SAP No2 Mk.I*8, 250 lb A.A.P.*2", - "name": "RP-3 60lb SAP No2 Mk.I*8, 250 lb A.A.P.*2", - "roles": [ - "CAP", - "Antiship Strike", - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "2 x RP-3 60lb F No1 Mk.I", - "quantity": 2 - }, - { - "name": "100 gal. Drop Tank", - "quantity": 2 - }, - { - "name": "250 lb MC Mk.II", - "quantity": 2 - } - ], - "enabled": true, - "code": "100 gal. Drop tank*2, 250 lb MC Mk.II, RP-3 60lb F No1 Mk.I*4", - "name": "100 gal. Drop tank*2, 250 lb MC Mk.II, RP-3 60lb F No1 Mk.I*4", - "roles": [ - "CAP", - "Antiship Strike", - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "500 lb GP Short tail", - "quantity": 4 - } - ], - "enabled": true, - "code": "500 lb GP Short tail*4", - "name": "500 lb GP Short tail*4", - "roles": [ - "CAP", - "Strike", - "CAS", - "Runway Attack" - ] - } - ], - "filename": "mosquito.png", - "enabled": true, - "liveries": { - "25th bombardment group p": { - "name": "USAAF 25th Bombardment Group \"P\" (Invasion Stripes)", - "countries": [ - "USA" - ] - }, - "l-3 pz474 1945": { - "name": "L-3 PZ474 1945", - "countries": [] - }, - "raf": { - "name": "RAF 1944", - "countries": "All" - }, - "605 sqn up-j wag's war wagon": { - "name": "605 Sqn UP-J \"Wag's War Wagon\"", - "countries": "All" - }, - "605 sqn up-o": { - "name": "605 Sqn UP-O", - "countries": "All" - }, - "605 sqn": { - "name": "605 Sqn", - "countries": "All" - }, - "iaf - 1956 - 110th squadron": { - "name": "IAF - 1956 - 110th Squadron", - "countries": "All" - }, - "ussr air force": { - "name": "USSR Air Force", - "countries": [] - }, - "no. 235 squadron raf 1944": { - "name": "No. 235 Squadron RAF 1944", - "countries": [] - }, - "no. 613 squadron raf june 1944": { - "name": "No. 613 Squadron RAF, June 1944", - "countries": [ - "UK" - ] - }, - "arm\u00e9e de l'air blue": { - "name": "Arm\u00e9e de L'air Blue Camo", - "countries": [ - "FRA" - ] - }, - "raf, ml897d, no.1409 met flight, wyton, late 1943": { - "name": "RAF, ML897/D, No.1409 Met Flight, Wyton, late 1943", - "countries": [ - "UK" - ] - }, - "no. 27 squadron raf popeye camo letters on": { - "name": "No. 27 Squadron RAF Popeye Camo Letters on", - "countries": [] - }, - "25th bombardment group f": { - "name": "USAAF 25th Bombardment Group \"F\"", - "countries": [ - "USA" - ] - }, - "305sqn july": { - "name": "305Sqn July 1944", - "countries": [] - }, - "305sqn june": { - "name": "305Sqn June 1944", - "countries": [] - }, - "25th bombardment group z": { - "name": "USAAF 25th Bombardment Group \"Z\" (Invasion Stripes)", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "2 propeller, straight wing, 2 crew. Mosquito.", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "P-47D-40": { - "name": "P-47D-40", - "coalition": "blue", - "label": "P-47D Thunderbolt", - "era": "WW2", - "shortLabel": "P47", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "AN-M65 - 1000lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "AN-M65*2", - "name": "AN-M65*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "150 US gal. Fuel Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "Fuel150*2", - "name": "Fuel150*2", - "roles": [ - "Escort", - "CAP" - ] - }, - { - "items": [ - { - "name": "AN-M57 - 250lb GP Bomb LD", - "quantity": 3 - } - ], - "enabled": true, - "code": "AN-M57*3", - "name": "AN-M57*3", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "AN-M64 - 500lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "110 US gal. Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "AN-M64*2, Fuel110", - "name": "AN-M64*2, Fuel110", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "3 x 4.5 inch M8 UnGd Rocket", - "quantity": 2 - }, - { - "name": "AN-M57 - 250lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "110 US gal. Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "M8*6, AN-M57*2, Fuel110", - "name": "M8*6, AN-M57*2, Fuel110", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "5 x HVAR, UnGd Rkt", - "quantity": 2 - }, - { - "name": "110 US gal. Fuel Tank", - "quantity": 1 - } - ], - "enabled": true, - "code": "HVAR*10, Fuel110", - "name": "HVAR*10, Fuel110", - "roles": [ - "Strike", - "CAS" - ] - } - ], - "filename": "p-47.png", - "enabled": true, - "liveries": { - "79thfg 86thfs the trojan warhorse": { - "name": "79thFG 86thFS The Trojan Warhorse", - "countries": [ - "USA" - ] - }, - "61st_fs_d_day": { - "name": "61st FS, D-day", - "countries": [ - "USA" - ] - }, - "lt_col_gabreski_d_day": { - "name": "Lt.Col. Gabby Gabreski, 61st FS, D-day", - "countries": [ - "USA" - ] - }, - "lt_col_benjamin_mayo": { - "name": "Lt.Col. Benjamin Mayo", - "countries": [ - "USA" - ] - }, - "eagle dynamics commemorative": { - "name": "Eagle Dynamics Commemorative", - "countries": [ - "USA" - ] - }, - "tony 5th emergency rescue squadron": { - "name": "TONY 5th Emergency Rescue Squadron", - "countries": [ - "USA" - ] - }, - "usaf standard": { - "name": "USAF standard", - "countries": [ - "USA" - ] - }, - "maj_howard_park_1945": { - "name": "Maj. Howard Park, 513th FS, France 1945", - "countries": [ - "USA" - ] - }, - "61st_fs_8th_af_hvz": { - "name": "61st FS 8th Air Force HV-Z (Capt. Witold Lanowski)", - "countries": [ - "USA", - "POL" - ] - }, - "53rd_fs_9th_air_force": { - "name": "53rd Fighter Squadron", - "countries": [ - "USA" - ] - }, - "1st brazilian ftr sq-jambock a1-menezes": { - "name": "1st Brazilian Ftr Sq-Jambock A1-Menezes", - "countries": [] - }, - "61st_fs_1944": { - "name": "61st FS, July 1944", - "countries": [ - "USA" - ] - }, - "lt_col_gabreski_1944": { - "name": "Lt.Col. Gabby Gabreski, 61st FS, July 1944", - "countries": [ - "USA" - ] - }, - "lend-lease": { - "name": "Lend-Lease", - "countries": [ - "SUN", - "RUS" - ] - }, - "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d28": { - "name": "509th FS 405th FG \"Chief Ski-U-Mah\" for D-30 (Early) ", - "countries": "All" - }, - "ussr-blue-scheme": { - "name": "USSR - blue", - "countries": [ - "SUN", - "RUS" - ] - }, - "raf thunderbolt": { - "name": "RAF Thunderbolt", - "countries": [] - }, - "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d40": { - "name": "509th FS 405th FG \"Chief Ski-U-Mah\"", - "countries": "All" - }, - "warchief": { - "name": "WarChief", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "Single propellor, straight wing, 1 crew. Thunderbolt", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "P-51D-30-NA": { - "name": "P-51D-30-NA", - "coalition": "blue", - "label": "P-51D Mustang", - "era": "WW2", - "shortLabel": "P51", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "75 US gal. Fuel Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "Fuel75*2", - "name": "Fuel75*2", - "roles": [ - "CAP", - "CAP", - "FAC-A" - ] - }, - { - "items": [ - { - "name": "HVAR, UnGd Rkt", - "quantity": 6 - }, - { - "name": "75 US gal. Fuel Tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "HVAR*6,Fuel75*2", - "name": "HVAR*6,Fuel75*2", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "HVAR, UnGd Rkt", - "quantity": 6 - }, - { - "name": "AN-M64 - 500lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "HVAR*6,M64*2", - "name": "HVAR*6,M64*2", - "roles": [ - "CAS", - "Strike", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "HVAR, UnGd Rkt", - "quantity": 6 - } - ], - "enabled": true, - "code": "HVAR*6", - "name": "HVAR*6", - "roles": [ - "CAS", - "Strike", - "Antiship Strike", - "FAC-A" - ] - }, - { - "items": [ - { - "name": "AN-M64 - 500lb GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "M64*2", - "name": "M64*2", - "roles": [ - "Strike", - "Antiship Strike", - "CAS", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "HVAR, UnGd Rkt", - "quantity": 10 - } - ], - "enabled": true, - "code": "HVAR*10", - "name": "HVAR*10", - "roles": [ - "CAS", - "Strike", - "Runway Attack", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "HVAR Smoke Generator", - "quantity": 2 - } - ], - "enabled": true, - "code": "Smokes", - "name": "Smokes", - "roles": [] - } - ], - "filename": "p-51.png", - "enabled": true, - "liveries": { - "79thfg 86thfs the trojan warhorse": { - "name": "79thFG 86thFS The Trojan Warhorse", - "countries": [ - "USA" - ] - }, - "61st_fs_d_day": { - "name": "61st FS, D-day", - "countries": [ - "USA" - ] - }, - "lt_col_gabreski_d_day": { - "name": "Lt.Col. Gabby Gabreski, 61st FS, D-day", - "countries": [ - "USA" - ] - }, - "lt_col_benjamin_mayo": { - "name": "Lt.Col. Benjamin Mayo", - "countries": [ - "USA" - ] - }, - "eagle dynamics commemorative": { - "name": "Eagle Dynamics Commemorative", - "countries": [ - "USA" - ] - }, - "tony 5th emergency rescue squadron": { - "name": "TONY 5th Emergency Rescue Squadron", - "countries": [ - "USA" - ] - }, - "usaf standard": { - "name": "USAF standard", - "countries": [ - "USA" - ] - }, - "maj_howard_park_1945": { - "name": "Maj. Howard Park, 513th FS, France 1945", - "countries": [ - "USA" - ] - }, - "61st_fs_8th_af_hvz": { - "name": "61st FS 8th Air Force HV-Z (Capt. Witold Lanowski)", - "countries": [ - "USA", - "POL" - ] - }, - "53rd_fs_9th_air_force": { - "name": "53rd Fighter Squadron", - "countries": [ - "USA" - ] - }, - "1st brazilian ftr sq-jambock a1-menezes": { - "name": "1st Brazilian Ftr Sq-Jambock A1-Menezes", - "countries": [] - }, - "61st_fs_1944": { - "name": "61st FS, July 1944", - "countries": [ - "USA" - ] - }, - "lt_col_gabreski_1944": { - "name": "Lt.Col. Gabby Gabreski, 61st FS, July 1944", - "countries": [ - "USA" - ] - }, - "lend-lease": { - "name": "Lend-Lease", - "countries": [ - "SUN", - "RUS" - ] - }, - "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d28": { - "name": "509th FS 405th FG \"Chief Ski-U-Mah\" for D-30 (Early) ", - "countries": "All" - }, - "ussr-blue-scheme": { - "name": "USSR - blue", - "countries": [ - "SUN", - "RUS" - ] - }, - "raf thunderbolt": { - "name": "RAF Thunderbolt", - "countries": [] - }, - "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d40": { - "name": "509th FS 405th FG \"Chief Ski-U-Mah\"", - "countries": "All" - }, - "warchief": { - "name": "WarChief", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "Single propellor, straight wing, 1 crew. Mustang", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "S-3B Tanker": { - "name": "S-3B Tanker", - "coalition": "blue", - "label": "S-3B Tanker", - "era": "Early Cold War", - "shortLabel": "S3B", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Tanker" - ] - } - ], - "filename": "s-3.png", - "enabled": true, - "liveries": { - "usaf standard": { - "name": "NAVY Standard", - "countries": [ - "USA" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, straight wing, 4 crew. Viking", - "abilities": "Tanker, Drogue AAR, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": false, - "canRearm": false - }, - "Su-17M4": { - "name": "Su-17M4", - "coalition": "red", - "label": "Su-17M4 Fitter", - "era": "Mid Cold War", - "shortLabel": "S17", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "UB-32*4,R-60M*2,FAB-250*4", - "name": "UB-32*4,R-60M*2,FAB-250*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", - "quantity": 6 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100*24,R-60M*2", - "name": "FAB-100*24,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "UB-32*4,R-60M*2,Fuel*2", - "name": "UB-32*4,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "B-8*4,R-60M*2,FAB-250*4", - "name": "B-8*4,R-60M*2,FAB-250*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,R-60M*2,Fuel*2", - "name": "Kh-29L*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "B-8*4,R-60M*2,Fuel*2", - "name": "B-8*4,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29T*2,R-60M*2,Fuel*2", - "name": "Kh-29T*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 6 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "BetAB-500*6,R-60M*2", - "name": "BetAB-500*6,R-60M*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Kh-25MR (AS-10 Karen) - 300kg, ASM, 10km, RC Guided", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-25MR*4,R-60M*2,Fuel*2", - "name": "Kh-25MR*4,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-24*4,R-60M*2,Fuel*2", - "name": "S-24*4,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh25MPU*2_Kh25ML*2_,R60M*2_Fuel*2", - "name": "Kh25MPU*2_Kh25ML*2_,R60M*2_Fuel*2", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh58*2_Kh25MPU*2_R60M*2_Fuel*2", - "name": "Kh58*2_Kh25MPU*2_R60M*2_Fuel*2", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 4 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*16,R-60M*2", - "name": "FAB-250*16,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-25ML*4,R-60M*2,Fuel*2", - "name": "Kh-25ML*4,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-500AO*4,SPPU-22*2,R-60M*2", - "name": "RBK-500AO*4,SPPU-22*2,R-60M*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 4 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-24*4,R-60M*2,FAB-250*4", - "name": "S-24*4,R-60M*2,FAB-250*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel tank 1150L", - "quantity": 4 - } - ], - "enabled": true, - "code": "Fuel*4", - "name": "Fuel*4", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-500*6,R-60M*2", - "name": "FAB-500*6,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-25ML*2,Kh-29L*2,R-60*2", - "name": "Kh-25ML*2,Kh-29L*2,R-60*2", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "su-17.png", - "enabled": true, - "liveries": { - "af standard (worn-out)": { - "name": "af standard (worn-out)", - "countries": [ - "UKR" - ] - }, - "shap limanskoye ab": { - "name": "shap limanskoye ab", - "countries": [ - "UKR" - ] - }, - "af standard (rus)": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - }, - "af standard (worn-out) (rus)": { - "name": "af standard (worn-out)", - "countries": [ - "RUS" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "UKR" - ] - } - }, - "type": "Aircraft", - "description": "Single jet engine, swept wing, 1 crew. Fitter", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Su-24M": { - "name": "Su-24M", - "coalition": "red", - "label": "Su-24M Fencer", - "era": "Mid Cold War", - "shortLabel": "S24", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 4 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "UB-13*4,FAB-500*2", - "name": "UB-13*4,FAB-500*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-31A*2,R-60M*2,Fuel", - "name": "Kh-31A*2,R-60M*2,Fuel", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 4 - } - ], - "enabled": true, - "code": "UB-13*4", - "name": "UB-13*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "KAB-500LG - 500kg Laser Guided Bomb", - "quantity": 4 - } - ], - "enabled": true, - "code": "KAB-500*4,R-60M*2", - "name": "KAB-500*4,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "Fuel tank 3000L", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-25*2,Fuel*3", - "name": "S-25*2,Fuel*3", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "L-081 Fantasmagoria ELINT pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh31P*2_Kh25ML*2_L-081", - "name": "Kh31P*2_Kh25ML*2_L-081", - "roles": [ - "SEAD", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "Fuel tank 3000L", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "B-8*2,Fuel*3", - "name": "B-8*2,Fuel*3", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-1500 M-54 - 1500kg GP Bomb LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-1500*2,R-60M*2", - "name": "FAB-1500*2,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-24*4", - "name": "S-24*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "BetAB-500*4,R-60M*2", - "name": "BetAB-500*4,R-60M*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - } - ], - "enabled": true, - "code": "Kh-25ML*4", - "name": "Kh-25ML*4", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Kh-25MR (AS-10 Karen) - 300kg, ASM, 10km, RC Guided", - "quantity": 4 - } - ], - "enabled": true, - "code": "Kh-25MR*4", - "name": "Kh-25MR*4", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "FAB-100*24", - "name": "FAB-100*24", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-31A*2,R-60M*2", - "name": "Kh-31A*2,R-60M*2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "Fuel tank 3000L", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "UB-13*2,Fuel*3", - "name": "UB-13*2,Fuel*3", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "Fuel tank 3000L", - "quantity": 2 - } - ], - "enabled": true, - "code": "B-8*2,Fuel*2", - "name": "B-8*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "L-081 Fantasmagoria ELINT pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh58*2_Kh25ML*2_L-081", - "name": "Kh58*2_Kh25ML*2_L-081", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 8 - } - ], - "enabled": true, - "code": "RBK-250*8", - "name": "RBK-250*8", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - } - ], - "enabled": true, - "code": "UB-32*4", - "name": "UB-32*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,R-60M*2", - "name": "Kh-29L*2,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", - "quantity": 2 - }, - { - "name": "Fuel tank 3000L", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-24*2,Fuel*3", - "name": "S-24*2,Fuel*3", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "L-081 Fantasmagoria ELINT pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh25MPU*2_Kh25ML*2_L-081", - "name": "Kh25MPU*2_Kh25ML*2_L-081", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "FAB-500*4,R-60M*2", - "name": "FAB-500*4,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 8 - } - ], - "enabled": true, - "code": "FAB-250*8", - "name": "FAB-250*8", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel tank 3000L", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Fuel*3", - "name": "Fuel*3", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "RBK-500AO*4,R-60M*2", - "name": "RBK-500AO*4,R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "KAB-1500L - 1500kg Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "KAB-1500*2,R-60M*2,Fuel", - "name": "KAB-1500*2,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "UB-32*4,FAB-250*4", - "name": "UB-32*4,FAB-250*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29T*2,R-60M*2", - "name": "Kh-29T*2,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - }, - { - "name": "Fuel tank 3000L", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "UB-32*2,Fuel*3", - "name": "UB-32*2,Fuel*3", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-59M (AS-18 Kazoo) - 930kg, ASM, IN", - "quantity": 2 - }, - { - "name": "Fuel tank 2000L", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-59M*2,R-60M*2,Fuel", - "name": "Kh-59M*2,R-60M*2,Fuel", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-25*4", - "name": "S-25*4", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - } - ], - "enabled": true, - "code": "B-8*6", - "name": "B-8*6", - "roles": [ - "Strike" - ] - } - ], - "filename": "su-24.png", - "enabled": true, - "liveries": { - "syrian air force": { - "name": "Syrian Air Force", - "countries": [ - "SYR" - ] - }, - "iran air force": { - "name": "Iran Air Force", - "countries": [ - "IRN" - ] - }, - "algerian af kx-12": { - "name": "Algerian AF KX-12", - "countries": [ - "DZA" - ] - }, - "ukrainian air force standard": { - "name": "Ukrainian Air Force", - "countries": [ - "UKR" - ] - }, - "kazakhstan air force": { - "name": "600th Airbase Kazakhstan", - "countries": [ - "KAZ" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "SUN", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swing wing, 2 crew. Fencer", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Su-25": { - "name": "Su-25", - "coalition": "red", - "label": "Su-25T Frogfoot", - "era": "Late Cold War", - "shortLabel": "S25", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-250*2,S-8KOM*80,R-60M*2,Fuel*2", - "name": "RBK-250*2,S-8KOM*80,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", - "name": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", - "quantity": 6 - } - ], - "enabled": true, - "code": "S-25L*6,UB-13*2,R-60M*2", - "name": "S-25L*6,UB-13*2,R-60M*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 6 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-25*6,SPPU-22*2,R-60M*2", - "name": "S-25*6,SPPU-22*2,R-60M*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", - "quantity": 2 - } - ], - "enabled": true, - "code": "2-25L*2, KH-25ML*2, RBK-500*2, B-8MI*2, R-60M*2", - "name": "2-25L*2, KH-25ML*2, RBK-500*2, B-8MI*2, R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-8KOM*120,R-60M*2,Fuel*2", - "name": "S-8KOM*120,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", - "name": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-500AO*4,S-8KOM*40,R-60M*2,Fuel*2", - "name": "RBK-500AO*4,S-8KOM*40,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "SAB-100MN - 100 kg Illumination Bomb", - "quantity": 4 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*2,SPPU-22*2,SAB-100*4,R-60M*2", - "name": "FAB-250*2,SPPU-22*2,SAB-100*4,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-500AO*6,R-60M*2,Fuel*2", - "name": "RBK-500AO*6,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 8 - } - ], - "enabled": true, - "code": "RBK-250*8,R-60M*2", - "name": "RBK-250*8,R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,Kh-25ML*4,R-60M*2", - "name": "Kh-29L*2,Kh-25ML*4,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "RBK-250*4,S-8KOM*80,R-60M*2", - "name": "RBK-250*4,S-8KOM*80,R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", - "name": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8TsM SM Orange", - "quantity": 8 - } - ], - "enabled": true, - "code": "S-8TsM*160,R-60*2", - "name": "S-8TsM*160,R-60*2", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-25ML*4,R-60M*2,Fuel*2", - "name": "Kh-25ML*4,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", - "quantity": 8 - } - ], - "enabled": true, - "code": "BetAB-500ShP*8,R-60M*2", - "name": "BetAB-500ShP*8,R-60M*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "SAB-100MN - 100 kg Illumination Bomb", - "quantity": 8 - } - ], - "enabled": true, - "code": "SAB-100*8,R-60*2", - "name": "SAB-100*8,R-60*2", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,Kh-25ML*4,S-25L*2,R-60M*2", - "name": "Kh-29L*2,Kh-25ML*4,S-25L*2,R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-500*6,R-60M*2,Fuel*2", - "name": "FAB-500*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,Kh-25ML*2,R-60M*2,Fuel*2", - "name": "Kh-29L*2,Kh-25ML*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,R-60M*2,Fuel*2", - "name": "Kh-29L*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", - "quantity": 8 - } - ], - "enabled": true, - "code": "FAB-100*32,R-60M*2", - "name": "FAB-100*32,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100*16,R-60M*2,Fuel*2", - "name": "FAB-100*16,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*6,R-60M*2,Fuel*2", - "name": "FAB-250*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "BetAB-500*6,R-60M*2,Fuel*2", - "name": "BetAB-500*6,R-60M*2,Fuel*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-25*6,R-60M*2,Fuel*2", - "name": "S-25*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "UB-13*6,R-60M*2,Fuel*2", - "name": "UB-13*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-25*4,Kh-29T*2,R-60*2", - "name": "Kh-25*4,Kh-29T*2,R-60*2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-25L*6,R-60*2,Fuel*2", - "name": "S-25L*6,R-60*2,Fuel*2", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "su-25.png", - "enabled": false, - "liveries": { - "broken camo scheme #2 (native). 452th shap": { - "name": "broken camo scheme #2 (native). 452th shap.", - "countries": [ - "UKR" - ] - }, - "broken camo scheme #1 (native). 299th oshap": { - "name": "broken camo scheme #1 (native). 299th oshap.", - "countries": [ - "UKR" - ] - }, - "field camo scheme #1 (native)": { - "name": "field camo scheme #1 (native)", - "countries": [ - "SUN", - "RUS" - ] - }, - "field camo scheme #1 (native)01": { - "name": "field camo scheme #1 (native)", - "countries": [ - "GRG" - ] - }, - "haf camo": { - "name": "Hellenic Airforce - Camo (Fictional)", - "countries": [ - "GRC" - ] - }, - "`scorpion` demo scheme (native)": { - "name": "`scorpion` demo scheme (native)", - "countries": [ - "GRG" - ] - }, - "abkhazian air force": { - "name": "Abkhazian Air Force", - "countries": [ - "ABH" - ] - }, - "field camo scheme #3 (worn-out). 960th shap": { - "name": "field camo scheme #3 (worn-out). 960th shap.", - "countries": [ - "RUS" - ] - }, - "petal camo scheme #1 (native). 299th brigade": { - "name": "petal camo scheme #1 (native). 299th brigade.", - "countries": [ - "UKR" - ] - }, - "petal camo scheme #2 (native). 299th brigade": { - "name": "petal camo scheme #2 (native). 299th brigade.", - "countries": [ - "UKR" - ] - }, - "algerian af desert fictional": { - "name": "Algerian AF Desert Fictional", - "countries": [ - "DZA" - ] - }, - "forest camo scheme #1 (native)": { - "name": "forest camo scheme #1 (native)", - "countries": [ - "RUS" - ] - }, - "irgc 54": { - "name": "IRGC 54", - "countries": [ - "IRN" - ] - }, - "field camo scheme #2 (native). 960th shap": { - "name": "field camo scheme #2 (native). 960th shap.", - "countries": [ - "RUS" - ] - }, - "haf aegean ghost": { - "name": "Hellenic Airforce - Aegean Ghost (Fictional)", - "countries": [ - "GRC" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Frogfoot", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Su-25T": { - "name": "Su-25", - "coalition": "red", - "label": "Su-25T Frogfoot", - "era": "Late Cold War", - "shortLabel": "S25", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "SAB-100MN - 100 kg Illumination Bomb", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,SPPU-22*2,SAB-100*2,R-60M*2", - "name": "FAB-250*4,SPPU-22*2,SAB-100*2,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Mercury LLTV Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*2,Kh-25ML*4,R-73*2,Mercury LLTV Pod,MPS-410", - "name": "Kh-29L*2,Kh-25ML*4,R-73*2,Mercury LLTV Pod,MPS-410", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "KAB-500Kr - 500kg TV Guided Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "KAB-500Kr*2,Kh-25ML*2,R-73*2,MPS-410,Fuel*2", - "name": "KAB-500Kr*2,Kh-25ML*2,R-73*2,MPS-410,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-500AO*4,UB-32*2,R-60M*2,Fuel*2", - "name": "RBK-500AO*4,UB-32*2,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", - "quantity": 8 - } - ], - "enabled": true, - "code": "BetAB-500ShP*8,R-60M*2", - "name": "BetAB-500ShP*8,R-60M*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "UB-13*6,R-60M*2,Fuel*2", - "name": "UB-13*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29T*2,R-73*2,Fuel*2,MPS-410", - "name": "Kh-29T*2,R-73*2,Fuel*2,MPS-410", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "L-081 Fantasmagoria ELINT pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh58*2_Kh25ML*4_R73*2_L-081_MPS-410", - "name": "Kh58*2_Kh25ML*4_R73*2_L-081_MPS-410", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", - "name": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "APU-8 - 8 x 9M127-1 Vikhr-M ATGM, LOSBR, Tandem HEAT/Frag", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 2 - } - ], - "enabled": true, - "code": "KH-29T*2, VIKHR*2, ECM", - "name": "KH-29T*2, VIKHR*2, ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29T*2,Kh-25ML*4,R-73*2,MPS-410", - "name": "Kh-29T*2,Kh-25ML*4,R-73*2,MPS-410", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", - "name": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-500*6,R-60M*2,Fuel*2", - "name": "FAB-500*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel tank 800L Wing", - "quantity": 4 - } - ], - "enabled": true, - "code": "Fuel*4", - "name": "Fuel*4", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "APU-8 - 8 x 9M127-1 Vikhr-M ATGM, LOSBR, Tandem HEAT/Frag", - "quantity": 2 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - }, - { - "name": "Mercury LLTV Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "APU-8 Vikhr-M*2,Kh-25ML,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", - "name": "APU-8 Vikhr-M*2,Kh-25ML,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-8KOM*120,R-60M*2,Fuel*2", - "name": "S-8KOM*120,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "KMGU-2 - 96 x PTAB-2.5KO Dispenser (CBU) HEAT/AP", - "quantity": 8 - } - ], - "enabled": true, - "code": "KMGU-2 (PTAB-2.5KO)*8,R-60M*2", - "name": "KMGU-2 (PTAB-2.5KO)*8,R-60M*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*6,R-60M*2,Fuel*2", - "name": "FAB-250*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Mercury LLTV Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*2,R-73*2,Fuel*2,Mercury LLTV Pod,MPS-410", - "name": "Kh-29L*2,R-73*2,Fuel*2,Mercury LLTV Pod,MPS-410", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", - "quantity": 8 - } - ], - "enabled": true, - "code": "FAB-100*32,R-60M*2", - "name": "FAB-100*32,R-60M*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 8 - } - ], - "enabled": true, - "code": "RBK-250*8,R-60M*2", - "name": "RBK-250*8,R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", - "quantity": 6 - } - ], - "enabled": true, - "code": "S-25L*6,UB-13*2,R-60M*2", - "name": "S-25L*6,UB-13*2,R-60M*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", - "name": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-25*2,SPPU-22*4,R-60M*2,R-73*2", - "name": "S-25*2,SPPU-22*4,R-60M*2,R-73*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "KMGU-2 - 96 x AO-2.5RT Dispenser (CBU) HE/Frag", - "quantity": 8 - } - ], - "enabled": true, - "code": "KMGU-2 (AO-2.5RT)*8,R-60M*2", - "name": "KMGU-2 (AO-2.5RT)*8,R-60M*2", - "roles": [ - "CAS", - "Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", - "quantity": 2 - }, - { - "name": "APU-8 - 8 x 9M127-1 Vikhr-M ATGM, LOSBR, Tandem HEAT/Frag", - "quantity": 2 - }, - { - "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", - "quantity": 2 - }, - { - "name": "Mercury LLTV Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "APU-8 Vikhr-M*2,S-25L*2,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", - "name": "APU-8 Vikhr-M*2,S-25L*2,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "S-25*6,R-60M*2,Fuel*2", - "name": "S-25*6,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-500AO*6,R-60M*2,Fuel*2", - "name": "RBK-500AO*6,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "L-081 Fantasmagoria ELINT pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh58*2_Kh25MPU*2_Kh25ML*2_R73*2_L-081_MPS-410", - "name": "Kh58*2_Kh25MPU*2_Kh25ML*2_R73*2_L-081_MPS-410", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "RBK-250*4,UB-32*4,R-60M*2", - "name": "RBK-250*4,UB-32*4,R-60M*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - }, - { - "name": "L-081 Fantasmagoria ELINT pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh25MPU*4_R73*2_Fuel*2_L-081_MPS-410", - "name": "Kh25MPU*4_R73*2_Fuel*2_L-081_MPS-410", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 6 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "BetAB-500*6,R-60M*2,Fuel*2", - "name": "BetAB-500*6,R-60M*2,Fuel*2", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", - "quantity": 4 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 2 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "RBK-250*2,UB-32*4,R-60M*2,Fuel*2", - "name": "RBK-250*2,UB-32*4,R-60M*2,Fuel*2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-60M (AA-8 Aphid) - Infra Red", - "quantity": 2 - }, - { - "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - }, - { - "name": "Fuel tank 800L Wing", - "quantity": 2 - } - ], - "enabled": true, - "code": "FAB-100*16,R-60M*2,Fuel*2", - "name": "FAB-100*16,R-60M*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "MPS-410", - "quantity": 2 - }, - { - "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 2 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-29L*2,Kh-25ML*4,R-73*2,ECM", - "name": "Kh-29L*2,Kh-25ML*4,R-73*2,ECM", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "su-25.png", - "enabled": true, - "liveries": { - "af standard 2": { - "name": "af standard 2", - "countries": [ - "SUN", - "RUS" - ] - }, - "algerian af grey ku-02": { - "name": "Algerian AF Grey KU-02", - "countries": [ - "DZA" - ] - }, - "su-25t test scheme": { - "name": "su-25t test scheme", - "countries": [ - "RUS" - ] - }, - "haf - fictional": { - "name": "Hellenic Airforce (Fictional)", - "countries": [ - "GRC" - ] - }, - "algerian af trainer ku-04": { - "name": "Algerian AF Trainer KU-04", - "countries": [ - "DZA" - ] - }, - "algerian af grey ku-01": { - "name": "Algerian AF Grey KU-01", - "countries": [ - "DZA" - ] - }, - "af standard 101": { - "name": "af standard 1", - "countries": [ - "GRG" - ] - }, - "algerian af desert ku-03": { - "name": "Algerian AF Desert KU-03", - "countries": [ - "DZA" - ] - }, - "af standard 1": { - "name": "af standard 1", - "countries": [ - "SUN", - "RUS" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "GRG" - ] - } - }, - "type": "Attack", - "description": "2 jet engine, swept wing, 1 crew. Frogfoot", - "abilities": "Fox 2 and gun, Dumb bombs, rockets, SEAD and ATGMs, Subsonic" - }, - "Su-27": { - "name": "Su-27", - "coalition": "red", - "label": "Su-27 Flanker", - "era": "Late Cold War", - "shortLabel": "S27", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-73*4,R-27ER*4,R-27ET*2", - "name": "R-73*4,R-27ER*4,R-27ET*2", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "KMGU-2 - 96 x AO-2.5RT Dispenser (CBU) HE/Frag", - "quantity": 5 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "KMGU-2 (AO-2.5RT)*5,R-73*2,ECM", - "name": "KMGU-2 (AO-2.5RT)*5,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500ShP*6,R-73*2,ECM", - "name": "BetAB-500ShP*6,R-73*2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "KMGU-2 - 96 x PTAB-2.5KO Dispenser (CBU) HEAT/AP", - "quantity": 5 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "KMGU-2 (PTAB-2.5KO)*5,R-73*2,ECM", - "name": "KMGU-2 (PTAB-2.5KO)*5,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27ER*6,ECM", - "name": "R-73*2,R-27ER*6,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*6", - "name": "R-73*6", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-13*10,RBK-500AO*2,FAB-500*2,R-73*2,ECM", - "name": "S-13*10,RBK-500AO*2,FAB-500*2,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*4,R-27ER*6", - "name": "R-73*4,R-27ER*6", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27ER*4,R-27ET*2,ECM", - "name": "R-73*2,R-27ER*4,R-27ET*2,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*4,ECM", - "name": "R-73*4,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "ECM", - "name": "ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*6,R-73*2,ECM", - "name": "FAB-500*6,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-25*2,FAB-500*4,R-73*4", - "name": "S-25*2,FAB-500*4,R-73*4", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-25*4, FAB-500*4, R-73*2, ECM", - "name": "S-25*4, FAB-500*4, R-73*2, ECM", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500 - 268 x PTAB-1M, 500kg CBU Light HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + RBK-500 PTAB1", - "name": "CAS S-8KOM Rockets + RBK-500 PTAB1", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8OFP Rockets + FAB-500 Bombs", - "name": "CAS S-8OFP Rockets + FAB-500 Bombs", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": "CAS S-8OFP Rockets", - "name": "CAS S-8OFP Rockets", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8OFP Rockets + FAB-100 Bombs", - "name": "CAS S-8OFP Rockets + FAB-100 Bombs", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + FAB-100 Bombs", - "name": "CAS S-8KOM Rockets + FAB-100 Bombs", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-13L pods - 10 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": "CAS S-13 Rockets", - "name": "CAS S-13 Rockets", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 5 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-250 - 250kg GP Bombs LD", - "quantity": 1 - }, - { - "name": "MBD3-U6-68 with 3 x FAB-250 - 250kg GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + FAB-250 Bombs", - "name": "CAS S-8KOM Rockets + FAB-250 Bombs", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + RBK-250 PTAB2.5", - "name": "CAS S-8KOM Rockets + RBK-250 PTAB2.5", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets", - "name": "CAS S-8KOM Rockets", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + FAB-500 Bombs", - "name": "CAS S-8KOM Rockets + FAB-500 Bombs", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + RBK-500 PTAB10", - "name": "CAS S-8KOM Rockets + RBK-500 PTAB10", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "KMGU-2 - 96 x PTAB-2.5KO Dispenser (CBU) HEAT/AP", - "quantity": 3 - } - ], - "enabled": true, - "code": "CAS S-8KOM Rockets + KMGU PTAB", - "name": "CAS S-8KOM Rockets + KMGU PTAB", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": " CAS S-25 Rockets", - "name": " CAS S-25 Rockets", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-25 Rockets + FAB-500 Bombs", - "name": "CAS S-25 Rockets + FAB-500 Bombs", - "roles": [ - "CAS" - ] - } - ], - "filename": "su-27.png", - "enabled": true, - "liveries": { - "kubinka afb (russian knights old)": { - "name": "Kubinka AFB (Russian Knights Old)", - "countries": [ - "RUS" - ] - }, - "mirgorod afb (831th brigade)": { - "name": "Mirgorod AFB (831th brigade)", - "countries": [ - "UKR" - ] - }, - "lypetsk afb (falcons of russia)": { - "name": "Lypetsk AFB (Falcons of Russia)", - "countries": [ - "RUS" - ] - }, - "hotilovo afb": { - "name": "Hotilovo AFB", - "countries": [ - "RUS" - ] - }, - "plaaf k2s new parade": { - "name": "PLAAF K2S new parade", - "countries": [ - "CHN" - ] - }, - "plaaf standard": { - "name": "PLAAF Standard", - "countries": [ - "CHN" - ] - }, - "algerian af grey 04": { - "name": "Algerian AF GREY 04", - "countries": [ - "DZA" - ] - }, - "air force standard early": { - "name": "Air Force Standard Early", - "countries": [ - "SUN", - "RUS" - ] - }, - "air force ukraine standard": { - "name": "Air Force Ukraine Standard", - "countries": [ - "UKR" - ] - }, - "planaf hh8s": { - "name": "PLANAF HH8S", - "countries": [ - "CHN" - ] - }, - "ozerne afb (9th brigade)": { - "name": "Ozerne AFB (9th brigade)", - "countries": [ - "UKR" - ] - }, - "air force ukraine standard early": { - "name": "Air Force Ukraine Standard Early", - "countries": [ - "UKR" - ] - }, - "algerian af blue 02": { - "name": "Algerian AF Blue 02", - "countries": [ - "DZA" - ] - }, - "plaaf k1s old": { - "name": "PLAAF K1S old", - "countries": [ - "CHN" - ] - }, - "m gromov fri": { - "name": "M Gromov FRI", - "countries": [ - "RUS" - ] - }, - "plaaf k33s": { - "name": "PLAAF K33S", - "countries": [ - "CHN" - ] - }, - "air force standard": { - "name": "Air Force Standard", - "countries": [ - "SUN", - "RUS" - ] - }, - "plaaf k2s old": { - "name": "PLAAF K2S old", - "countries": [ - "CHN" - ] - }, - "chkalovsk afb (689 gviap)": { - "name": "Chkalovsk AFB (689 GvIAP)", - "countries": [ - "RUS" - ] - }, - "kazakhstan air defense forces": { - "name": "Kazakhstan Air Defense Forces", - "countries": [ - "KAZ" - ] - }, - "haf aegean ghost": { - "name": "Hellenic Airforce - Aegean Ghost (Fictional)", - "countries": [ - "GRC" - ] - }, - "besovets afb": { - "name": "Besovets AFB", - "countries": [ - "RUS" - ] - }, - "kilpyavr afb (maresyev)": { - "name": "Kilpyavr AFB (Maresyev)", - "countries": [ - "RUS" - ] - }, - "mirgorod afb (digital camo)": { - "name": "Mirgorod AFB (Digital camo)", - "countries": [ - "UKR" - ] - }, - "plaaf k2s new": { - "name": "PLAAF K2S new", - "countries": [ - "CHN" - ] - }, - "air force standard old": { - "name": "Air Force Standard old", - "countries": [ - "SUN", - "RUS" - ] - }, - "lodeynoye pole afb (177 iap)": { - "name": "Lodeynoye pole AFB (177 IAP)", - "countries": [ - "RUS" - ] - }, - "kubinka afb (russian knights)": { - "name": "Kubinka AFB (Russian Knights)", - "countries": [ - "RUS" - ] - }, - "lypetsk afb (shark)": { - "name": "Lypetsk AFB (Shark)", - "countries": [ - "RUS" - ] - }, - "besovets afb 2 squadron": { - "name": "Besovets AFB 2 squadron", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Flanker", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Su-30": { - "name": "Su-30", - "coalition": "red", - "label": "Su-30 Super Flanker", - "era": "Late Cold War", - "shortLabel": "S30", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-77*6,ECM", - "name": "R-73*2,R-77*6,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27T (AA-10 Alamo B) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27T*2,R-27R*4", - "name": "R-73*2,R-27T*2,R-27R*4", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-500AO*6,R-73*2,ECM", - "name": "RBK-500AO*6,R-73*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-31P*2,Kh-31A*2,R-73*2,R-77*2,ECM", - "name": "Kh-31P*2,Kh-31A*2,R-73*2,R-77*2,ECM", - "roles": [ - "Antiship Strike", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27T (AA-10 Alamo B) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-73*4,R-27T*2,R-27R*4", - "name": "R-73*4,R-27T*2,R-27R*4", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "Kh-35 (AS-20 Kayak) - 520kg, AShM, IN & Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-77*2,Kh-35*2,ECM", - "name": "R-73*2,R-77*2,Kh-35*2,ECM", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "Kh-35 (AS-20 Kayak) - 520kg, AShM, IN & Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-35*2,Kh-31P*2,R-73*2,R-77*2,ECM", - "name": "Kh-35*2,Kh-31P*2,R-73*2,R-77*2,ECM", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*4,B-8*2,R-73*2,ECM", - "name": "FAB-250*4,B-8*2,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "ECM", - "name": "ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "KAB-1500L - 1500kg Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "KAB-1500*2,R-73*2,R-77*2,ECM", - "name": "KAB-1500*2,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-250*6,R-73*2,ECM", - "name": "RBK-250*6,R-73*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*4,R-77*6", - "name": "R-73*4,R-77*6", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*4,S-25*2,R-73*2,ECM", - "name": "FAB-250*4,S-25*2,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27R*2,R-27ER*4,ECM", - "name": "R-73*2,R-27R*2,R-27ER*4,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27T (AA-10 Alamo B) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27T*2,R-27ER*2,R-77*2,ECM", - "name": "R-73*2,R-27T*2,R-27ER*2,R-77*2,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-1500 M-54 - 1500kg GP Bomb LD", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-1500*2,R-73*2,R-77*2,ECM", - "name": "FAB-1500*2,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27T (AA-10 Alamo B) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-73*4,R-27T*2,R-27ER*2,R-77*2", - "name": "R-73*4,R-27T*2,R-27ER*2,R-77*2", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-59M (AS-18 Kazoo) - 930kg, ASM, IN", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-59M*2,R-73*2,R-77*2,ECM", - "name": "Kh-59M*2,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*6,R-73*2,ECM", - "name": "FAB-500*6,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-73*4,R-27R*2,R-27ER*4", - "name": "R-73*4,R-27R*2,R-27ER*4", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*4,R-73*2,R-77*2,ECM", - "name": "Kh-29L*4,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500*6,R-73*2,ECM", - "name": "BetAB-500*6,R-73*2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-73*4", - "name": "R-73*4", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*4,UB-13*2,R-73*2,ECM", - "name": "FAB-250*4,UB-13*2,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 4 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-77*4,R-27ER*2,ECM", - "name": "R-73*2,R-77*4,R-27ER*2,ECM", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "KAB-500LG - 500kg Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "KAB-500*4,R-73*2,R-77*2,ECM", - "name": "KAB-500*4,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*6,R-73*2,ECM", - "name": "FAB-250*6,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 4 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 2 - } - ], - "enabled": true, - "code": "R-73*4,R-77*4,R-27ER*2", - "name": "R-73*4,R-77*4,R-27ER*2", - "roles": [ - "Escort", - "CAP", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29T*4,R-73*2,R-77*2,ECM", - "name": "Kh-29T*4,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", - "quantity": 4 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-31P*4,R-73*2,R-77*2,ECM", - "name": "Kh-31P*4,R-73*2,R-77*2,ECM", - "roles": [ - "SEAD" - ] - } - ], - "filename": "su-34.png", - "enabled": true, - "liveries": { - "af standard last": { - "name": "af standard last", - "countries": [ - "RUS" - ] - }, - "`russian knights` team #25": { - "name": "`russian knights` team #25", - "countries": [ - "RUS" - ] - }, - "adf 148th ctc savasleyka ab": { - "name": "adf 148th ctc savasleyka ab", - "countries": [ - "RUS" - ] - }, - "`desert` test paint scheme": { - "name": "`desert` test paint scheme", - "countries": [ - "RUS" - ] - }, - "`test-pilots` team #597": { - "name": "`test-pilots` team #597", - "countries": [ - "RUS" - ] - }, - "`snow` test paint scheme": { - "name": "`snow` test paint scheme", - "countries": [ - "RUS" - ] - }, - "af standard early": { - "name": "af standard early", - "countries": [ - "SUN", - "RUS" - ] - }, - "af standard last (worn-out)": { - "name": "af standard last (worn-out)", - "countries": [ - "RUS" - ] - }, - "af standard early (worn-out)": { - "name": "af standard early (worn-out)", - "countries": [ - "RUS" - ] - }, - "af standard": { - "name": "af standard", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Flanker", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Su-33": { - "name": "Su-33", - "coalition": "red", - "label": "Su-33 Navy Flanker", - "era": "Late Cold War", - "shortLabel": "S33", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-250*6,R-73*2,R-27R*2,ECM", - "name": "RBK-250*6,R-73*2,R-27R*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - } - ], - "enabled": true, - "code": "R-73*4", - "name": "R-73*4", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*4,R-27R*2,R-27ER*6", - "name": "R-73*4,R-27R*2,R-27ER*6", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27ET*2,R-27ER*6,ECM", - "name": "R-73*2,R-27ET*2,R-27ER*6,ECM", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - } - ], - "enabled": true, - "code": "R-73*4,R-27ET*2,R-27ER*6", - "name": "R-73*4,R-27ET*2,R-27ER*6", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*6,R-73*2,R-27R*2,ECM", - "name": "FAB-250*6,R-73*2,R-27R*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "R-73*2,R-27R*2,R-27ER*6,ECM", - "name": "R-73*2,R-27R*2,R-27ER*6,ECM", - "roles": [ - "CAP", - "Escort", - "CAP", - "CAP" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "ECM", - "name": "ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500*6,R-73*2,R-27R*2,ECM", - "name": "BetAB-500*6,R-73*2,R-27R*2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-500AO*6,R-73*2,R-27R*2,ECM", - "name": "RBK-500AO*6,R-73*2,R-27R*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 4 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "UB-13*4,FAB-250*4,R-73*2,ECM", - "name": "UB-13*4,FAB-250*4,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 4 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "S-25*4,FAB-250*4,R-73*2,ECM", - "name": "S-25*4,FAB-250*4,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 6 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*6,R-73*2,R-27R*2,ECM", - "name": "FAB-500*6,R-73*2,R-27R*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "B-8*4,FAB-250*4,R-73*2,ECM", - "name": "B-8*4,FAB-250*4,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", - "quantity": 4 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "S-25*4,FAB-500*4,R-73*4", - "name": "S-25*4,FAB-500*4,R-73*4", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM rockets + FAB500", - "name": "CAS S-8KOM rockets + FAB500", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8OFP rockets + FAB500", - "name": "CAS S-8OFP rockets + FAB500", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-13L pods - 10 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-13 Rockets + FAB500", - "name": "CAS S-13 Rockets + FAB500", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-13L pods - 10 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-13 Rockets + FAB100", - "name": "CAS S-13 Rockets + FAB100", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 4 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-250 - 250kg GP Bombs LD", - "quantity": 2 - } - ], - "enabled": true, - "code": "CAS S-8KOM rockets + FAB250", - "name": "CAS S-8KOM rockets + FAB250", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-25 Rockets + FAB500", - "name": "CAS S-25 Rockets + FAB500", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM rockets + RBK500 PTAB10", - "name": "CAS S-8KOM rockets + RBK500 PTAB10", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 4 - }, - { - "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 2 - }, - { - "name": "RBK-500 - 268 x PTAB-1M, 500kg CBU Light HEAT/AP", - "quantity": 4 - } - ], - "enabled": true, - "code": "CAS S-8KOM rockets + RBK500 PTAB1", - "name": "CAS S-8KOM rockets + RBK500 PTAB1", - "roles": [ - "CAS" - ] - } - ], - "filename": "su-34.png", - "enabled": true, - "liveries": { - "t-10k-9 test paint scheme": { - "name": "t-10k-9 test paint scheme", - "countries": [ - "RUS" - ] - }, - "279th kiap 1st squad navy": { - "name": "Navy, 279th kiap, 1st squad", - "countries": [ - "RUS" - ] - }, - "aaf blue 68": { - "name": "Algerian AF BLUE No 68", - "countries": [ - "DZA" - ] - }, - "haf - aegean ghost": { - "name": "Hellenic Airforce - Aegean Ghost (Fictional)", - "countries": [ - "GRC" - ] - }, - "279th kiap 2nd squad syria 2017": { - "name": "Syria 2017, 279th kiap, 2nd squad", - "countries": [ - "RUS" - ] - }, - "aaf grey 12": { - "name": "Algerian AF GREY No 12", - "countries": [ - "DZA" - ] - }, - "t-10k-5 test paint scheme": { - "name": "t-10k-5 test paint scheme", - "countries": [ - "RUS" - ] - }, - "279th kiap 1st squad syria 2017": { - "name": "Syria 2017, 279th kiap, 1st squad", - "countries": [ - "RUS" - ] - }, - "279th kiap 2nd squad navy": { - "name": "Navy, 279th kiap, 2nd squad", - "countries": [ - "RUS" - ] - }, - "t-10k-1 test paint scheme": { - "name": "t-10k-1 test paint scheme", - "countries": [ - "SUN", - "RUS" - ] - }, - "plan carrier air wings j-15": { - "name": "PLAN Carrier Air Wings J-15", - "countries": "All" - } - }, - "type": "Aircraft", - "description": "2 jet engine, swept wing, 1 crew. Flanker", - "abilities": "Drogue AAR, Carrier", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Su-34": { - "name": "Su-34", - "coalition": "red", - "label": "Su-34 Hellduck", - "era": "Modern", - "shortLabel": "S34", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", - "quantity": 4 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "UB-13*4,FAB-250*4,R-73*2,ECM", - "name": "UB-13*4,FAB-250*4,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-100 - 100kg GP Bomb LD", - "quantity": 4 - }, - { - "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-100*28,R-73*2,ECM", - "name": "FAB-100*28,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", - "quantity": 8 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "BetAB-500*8,R-73*2,ECM", - "name": "BetAB-500*8,R-73*2,ECM", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*4,R-73*2,R-77*2,ECM", - "name": "Kh-29L*4,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "KAB-500LG - 500kg Laser Guided Bomb", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "KAB-500*4,R-73*2,R-77*2,ECM", - "name": "KAB-500*4,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", - "quantity": 8 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-250 PTAB-2.5M*8,R-73*2,ECM", - "name": "RBK-250 PTAB-2.5M*8,R-73*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-250 - 250kg GP Bomb LD", - "quantity": 8 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*8,R-73*2,ECM", - "name": "FAB-250*8,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "ECM", - "name": "ECM", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 4 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29T*4,R-73*2,R-77*2,ECM", - "name": "Kh-29T*4,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 8 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "RBK-500 PTAB-10-5*8,R-73*2,ECM", - "name": "RBK-500 PTAB-10-5*8,R-73*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "FAB-1500 M-54 - 1500kg GP Bomb LD", - "quantity": 3 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-1500*3,R-73*2,R-77*2,ECM", - "name": "FAB-1500*3,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "Kh-59M (AS-18 Kazoo) - 930kg, ASM, IN", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-59M*2,R-73*2,R-77*2,ECM", - "name": "Kh-59M*2,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", - "quantity": 4 - }, - { - "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "B-8*6,R-73*2,R-27R*2,ECM", - "name": "B-8*6,R-73*2,R-27R*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "FAB-500 M-62 - 500kg GP Bomb LD", - "quantity": 8 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*8,R-73*2,ECM", - "name": "FAB-500*8,R-73*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "R-77 (AA-12 Adder) - Active Rdr", - "quantity": 2 - }, - { - "name": "KAB-1500L - 1500kg Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "KAB-1500*2,R-73*2,R-77*2,ECM", - "name": "KAB-1500*2,R-73*2,R-77*2,ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29T*4,R-73*2,R-27R*2,ECM", - "name": "Kh-29T*4,R-73*2,R-27R*2,ECM", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", - "quantity": 4 - }, - { - "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", - "quantity": 2 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-31A*4,Kh-31P*2,R-73*2,R-27R*2,ECM", - "name": "Kh-31A*4,Kh-31P*2,R-73*2,R-27R*2,ECM", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", - "quantity": 6 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-31A*6,R-73*2,R-27R*2,ECM", - "name": "Kh-31A*6,R-73*2,R-27R*2,ECM", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-31P*4,R-73*2,R-27R*2,ECM", - "name": "Kh-31P*4,R-73*2,R-27R*2,ECM", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "L005 Sorbtsiya ECM pod (left)", - "quantity": 1 - }, - { - "name": "R-73 (AA-11 Archer) - Infra Red", - "quantity": 2 - }, - { - "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", - "quantity": 4 - }, - { - "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", - "quantity": 2 - }, - { - "name": "L005 Sorbtsiya ECM pod (right)", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-29L*4,R-73*2,R-27R*2,ECM", - "name": "Kh-29L*4,R-73*2,R-27R*2,ECM", - "roles": [ - "CAS" - ] - } - ], - "filename": "su-34.png", - "enabled": true, - "liveries": { - "russian air force": { - "name": "1 Russian Air Force", - "countries": [ - "RUS" - ] - }, - "russian air force old": { - "name": "Russian Air Force Old", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 Jet engine, swept wing, 2 crew, all weather fighter and strike. Fullback", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Tornado GR4": { - "name": "Tornado GR4", - "coalition": "blue", - "label": "Tornado GR4", - "era": "Late Cold War", - "shortLabel": "GR4", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 1 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Sky-Shadow ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M*2, Fuel*2, ECM", - "name": "AIM-9M*2, Fuel*2, ECM", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "ALARM", - "quantity": 4 - }, - { - "name": "", - "quantity": 4 - } - ], - "enabled": true, - "code": "ALARM*4, Fuel*2, ECM", - "name": "ALARM*4, Fuel*2, ECM", - "roles": [ - "SEAD" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 1 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-16 - 1000lb Laser Guided Bomb", - "quantity": 2 - }, - { - "name": "Sky-Shadow ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "GBU-16*2, AIM-9M*2, Fuel*2, ECM", - "name": "GBU-16*2, AIM-9M*2, Fuel*2, ECM", - "roles": [ - "Strike", - "FAC-A", - "Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 1 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BL-755 CBU - 450kg, 147 Frag/Pen bomblets", - "quantity": 4 - }, - { - "name": "Sky-Shadow ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "BL755*4, AIM-9M*2, Fuel*2, ECM", - "name": "BL755*4, AIM-9M*2, Fuel*2, ECM", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 1 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Sea Eagle - ASM", - "quantity": 2 - }, - { - "name": "Sky-Shadow ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "Sea Eagle*2, AIM-9M*2, Fuel*2, ECM", - "name": "Sea Eagle*2, AIM-9M*2, Fuel*2, ECM", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "tornado.png", - "enabled": true, - "liveries": { - "no. 14 squadron raf lossiemouth ab (morayshire)": { - "name": "no. 14 squadron raf lossiemouth ab (morayshire)", - "countries": [ - "UK" - ] - }, - "o of ii (ac) squadron raf marham": { - "name": "o of ii (ac) squadron raf marham", - "countries": [ - "UK" - ] - }, - "bb of 14 squadron raf lossiemouth": { - "name": "bb of 14 squadron raf lossiemouth", - "countries": [ - "UK" - ] - }, - "no. 9 squadron raf marham ab (norfolk)": { - "name": "no. 9 squadron raf marham ab (norfolk)", - "countries": [ - "UK" - ] - }, - "no. 12 squadron raf lossiemouth ab (morayshire)": { - "name": "no. 12 squadron raf lossiemouth ab (morayshire)", - "countries": [ - "UK" - ] - }, - "no. 617 squadron raf lossiemouth ab (morayshire)": { - "name": "no. 617 squadron raf lossiemouth ab (morayshire)", - "countries": [ - "UK" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swing wing, 2 crew, all weather strike.", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Tornado IDS": { - "name": "Tornado IDS", - "coalition": "blue", - "label": "Tornado IDS", - "era": "Late Cold War", - "shortLabel": "IDS", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Kormoran - ASM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kormoran*2,AIM-9*2,Fuel*2", - "name": "Kormoran*2,AIM-9*2,Fuel*2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-16 - 1000lb Laser Guided Bomb", - "quantity": 2 - } - ], - "enabled": true, - "code": "GBU-16*2,AIM-9*2,Fuel*2", - "name": "GBU-16*2,AIM-9*2,Fuel*2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - } - ], - "enabled": true, - "code": "Fuel*2", - "name": "Fuel*2", - "roles": [ - "FAC-A" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 1 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 4 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Sky-Shadow ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-88*4,AIM-9*2,ECM", - "name": "AGM-88*4,AIM-9*2,ECM", - "roles": [ - "SEAD", - "CAS" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 1 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 2 - }, - { - "name": "Sky-Shadow ECM Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AGM-88*2,AIM-9*2,Fuel*2,ECM", - "name": "AGM-88*2,AIM-9*2,Fuel*2,ECM", - "roles": [ - "SEAD", - "CAS" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "Kormoran - ASM", - "quantity": 4 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kormoran*4,AIM-9*2", - "name": "Kormoran*4,AIM-9*2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Kormoran - ASM", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kormoran*2,AIM-9*2,AGM-88*2", - "name": "Kormoran*2,AIM-9*2,AGM-88*2", - "roles": [ - "Antiship Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "BOZ-107 - Countermeasure Dispenser", - "quantity": 2 - }, - { - "name": "TORNADO Fuel tank", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 - 500lb GP Bomb LD", - "quantity": 4 - } - ], - "enabled": true, - "code": "Mk-82*4,AIM-9*2,Fuel*2", - "name": "Mk-82*4,AIM-9*2,Fuel*2", - "roles": [ - "Strike" - ] - } - ], - "filename": "tornado.png", - "enabled": true, - "liveries": { - "ita tornado black": { - "name": "Tornado Black", - "countries": [ - "ITA" - ] - }, - "marinefliegergeschwader 2 eggebek ab marineflieger": { - "name": "marinefliegergeschwader 2 eggebek ab marineflieger", - "countries": [ - "GER" - ] - }, - "jagdbombergeschwader 31 `boelcke` norvenich ab luftwaffe": { - "name": "jagdbombergeschwader 31 `boelcke` norvenich ab luftwaffe", - "countries": [ - "GER" - ] - }, - "ita tornado mm7042": { - "name": "Tornado MM7042", - "countries": [ - "ITA" - ] - }, - "ita tornado mm55004": { - "name": "Tornado MM55004", - "countries": [ - "ITA" - ] - }, - "aufklarungsgeschwader 51 `immelmann` jagel ab luftwaffe": { - "name": "aufklarungsgeschwader 51 `immelmann` jagel ab luftwaffe", - "countries": [ - "GER" - ] - }, - "jagdbombergeschwader 33 buchel ab no. 43+19 experimental scheme": { - "name": "jagdbombergeschwader 33 buchel ab no. 43+19 experimental scheme", - "countries": [ - "GER" - ] - }, - "jagdbombergeschwader 32 lechfeld ab luftwaffe": { - "name": "jagdbombergeschwader 32 lechfeld ab luftwaffe", - "countries": [ - "GER" - ] - }, - "ita tornado (sesto stormo diavoli rossi)": { - "name": "Tornado (Sesto Stormo Diavoli Rossi)", - "countries": [ - "ITA" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swing wing, 2 crew, all weather strike.", - "abilities": "Drogue AAR", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Tu-142": { - "name": "Tu-142", - "coalition": "red", - "label": "Tu-142 Bear", - "era": "Mid Cold War", - "shortLabel": "142", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "6 x Kh-35 (AS-20 Kayak) - 520kg, AShM, IN & Act Rdr", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-35*6", - "name": "Kh-35*6", - "roles": [ - "Antiship Strike" - ] - } - ], - "filename": "tu-95.png", - "enabled": true, - "liveries": { - "af standard": { - "name": "af standard", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "4 turboprop, swept wing, 11 crew, bomber. Bear", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Tu-160": { - "name": "Tu-160", - "coalition": "red", - "label": "Tu-160 Blackjack", - "era": "Late Cold War", - "shortLabel": "160", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "6 x Kh-65 (AS-15B Kent) - 1250kg, ASM, IN & MCC", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-65*12", - "name": "Kh-65*12", - "roles": [ - "Strike" - ] - } - ], - "filename": "tu-160.png", - "enabled": true, - "liveries": { - "af standard": { - "name": "af standard", - "countries": [ - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "4 jet engine, swing wing, 4 crew bomber. Blackjack", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Tu-22M3": { - "name": "Tu-22M3", - "coalition": "red", - "label": "Tu-22M3 Backfire", - "era": "Late Cold War", - "shortLabel": "T22", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Kh-22 (AS-4 Kitchen) - 1000kg, AShM, IN & Act/Pas Rdr", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-22N", - "name": "Kh-22N", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "Kh-22 (AS-4 Kitchen) - 1000kg, AShM, IN & Act/Pas Rdr", - "quantity": 2 - } - ], - "enabled": true, - "code": "Kh-22N*2", - "name": "Kh-22N*2", - "roles": [ - "Antiship Strike" - ] - }, - { - "items": [ - { - "name": "MBD3-U9M with 9 x FAB-250 - 250kg GP Bombs LD", - "quantity": 4 - }, - { - "name": "33 x FAB-250 - 250kg GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*69", - "name": "FAB-250*69", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "33 x FAB-500 M-62 - 500kg GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*33", - "name": "FAB-500*33", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "MBD3-U9M with 9 x FAB-250 - 250kg GP Bombs LD", - "quantity": 4 - }, - { - "name": "33 x FAB-500 M-62 - 500kg GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-500*33, FAB-250*36", - "name": "FAB-500*33, FAB-250*36", - "roles": [ - "Strike", - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "33 x FAB-250 - 250kg GP Bombs LD", - "quantity": 1 - } - ], - "enabled": true, - "code": "FAB-250*33", - "name": "FAB-250*33", - "roles": [ - "Strike", - "Runway Attack" - ] - } - ], - "filename": "tu-22.png", - "enabled": true, - "liveries": { - "af standard": { - "name": "af standard", - "countries": [ - "UKR", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "2 jet engine, swing wing, 4 crew bomber. Backfire", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "Tu-95MS": { - "name": "Tu-95MS", - "coalition": "red", - "label": "Tu-95MS Bear", - "era": "Mid Cold War", - "shortLabel": "T95", - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "6 x Kh-65 (AS-15B Kent) - 1250kg, ASM, IN & MCC", - "quantity": 1 - } - ], - "enabled": true, - "code": "Kh-65*6", - "name": "Kh-65*6", - "roles": [ - "Strike" - ] - } - ], - "filename": "tu-95.png", - "enabled": true, - "liveries": { - "af standard": { - "name": "af standard", - "countries": [ - "UKR", - "RUS" - ] - } - }, - "type": "Aircraft", - "description": "4 turboprop, swept wing, 6 crew, bomber. Bear", - "abilities": "", - "acquisitionRange": "", - "engagementRange": "", - "canTargetPoint": true, - "canRearm": false - }, - "F-15ESE": { - "name": "F-15ESE", - "coalition": "", - "label": "F-15E Strike Eagle", - "shortLabel": "15E", - "era": "", - "enabled": true, - "loadouts": [ - { - "items": [], - "enabled": true, - "code": "", - "name": "Empty loadout", - "roles": [ - "No task", - "Strike" - ] - }, - { - "items": [ - { - "name": "Fuel tank 610 gal", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "BLU-107 * 6", - "quantity": 2 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C x 2, AIM-9M x 2, BLU-107 x 12, TGP, NVP, Fuel Tank", - "name": "AIM-120C x 2, AIM-9M x 2, BLU-107 x 12, TGP, NVP, Fuel Tank", - "roles": [ - "Runway Attack" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C x 4, AIM-9M x4, TGP, NVP, FUel Tank x 2", - "name": "AIM-120C x 4, AIM-9M x4, TGP, NVP, FUel Tank x 2", - "roles": [ - "Reconnaissance" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "CBU-87 * 3", - "quantity": 2 - }, - { - "name": "", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M x 4, CBU-87 x 6, TGP, Fuel Tank x 2", - "name": "AIM-9M x 4, CBU-87 x 6, TGP, Fuel Tank x 2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - } - ], - "enabled": true, - "code": "AIM-120Cx4, AIM-9Mx4, Fuel Tanks x 2", - "name": "AIM-120Cx4, AIM-9Mx4, Fuel Tanks x 2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": "", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M x 4, TGP, NVP, Fuel Tanks x 2", - "name": "AIM-9M x 4, TGP, NVP, Fuel Tanks x 2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 2 - }, - { - "name": "Mk-82 * 6", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": "", - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": "CBU-97 * 3", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M x 4, Mk-84 x 2, Mk-82 x 6, CBU-87 x 3, TGP, NVP", - "name": "AIM-9M x 4, Mk-84 x 2, Mk-82 x 6, CBU-87 x 3, TGP, NVP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "Captive AIM-9M for ACM", - "quantity": 3 - }, - { - "name": "", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "CATM-9M x 3, AIM-120B", - "name": "CATM-9M x 3, AIM-120B", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 4 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": "", - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M x 4, AIM-120B x 4, TGP, NVP, Fuel Tanks x 2", - "name": "AIM-9M x 4, AIM-120B x 4, TGP, NVP, Fuel Tanks x 2", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Captive AIM-9M for ACM", - "quantity": 1 - }, - { - "name": "", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": "CATM-9M, CAIM-120", - "name": "CATM-9M, CAIM-120", - "roles": [ - "CAP" - ] - }, - { - "items": [ - { - "name": "Captive AIM-9M for ACM", - "quantity": 1 - }, - { - "name": "BDU-50LGB * 2", - "quantity": 2 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": "", - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 1 - } - ], - "enabled": true, - "code": " AIM-120C x 2, CATM-9M, GBU-12 x 4, TGP, NVP", - "name": " AIM-120C x 2, CATM-9M, GBU-12 x 4, TGP, NVP", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-12 * 4", - "quantity": 2 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": "GBU-12 - 500lb Laser Guided Bomb", - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 9, TGP, NVP, FUel Tank x 2", - "name": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 9, TGP, NVP, FUel Tank x 2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "Mk-82 * 6", - "quantity": 2 - }, - { - "name": "", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - } - ], - "enabled": true, - "code": " AIM-9M x 4, MK-82 x 12, TGP, Fuel Tank x 2", - "name": " AIM-9M x 4, MK-82 x 12, TGP, Fuel Tank x 2", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "CBU-87 * 6", - "quantity": 1 - }, - { - "name": "", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-9M x 4, AIM-120C x 2, CBU-87 x 6, TGP", - "name": "AIM-9M x 4, AIM-120C x 2, CBU-87 x 6, TGP", - "roles": [ - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "GBU-12 * 4", - "quantity": 1 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": "", - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - }, - { - "name": "GBU-10 * 2", - "quantity": 1 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - } - ], - "enabled": true, - "code": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 4, GBU-10 x 2, TGP, NVP, FUel Tank x 2", - "name": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 4, GBU-10 x 2, TGP, NVP, FUel Tank x 2", - "roles": [ - "Strike" - ] - }, - { - "items": [ - { - "name": "", - "quantity": 3 - } - ], - "enabled": true, - "code": "Clean", - "name": "Clean", - "roles": [] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "Mk-20 Rockeye * 6", - "quantity": 2 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M x 4, Mk-20 x 12, NVP, Fuel Tanks x 2", - "name": "AIM-9M x 4, Mk-20 x 12, NVP, Fuel Tanks x 2", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 4 - }, - { - "name": "Fuel tank 610 gal", - "quantity": 2 - }, - { - "name": "AIM-7MH Sparrow Semi-Active Radar", - "quantity": 2 - }, - { - "name": "Mk-20 Rockeye * 6", - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-9M x 4, AIM-7M x 2, Mk-20 x 2, NVP, Fuel Tanks x 2", - "name": "AIM-9M x 4, AIM-7M x 2, Mk-20 x 2, NVP, Fuel Tanks x 2", - "roles": [ - "Strike", - "CAS" - ] - }, - { - "items": [ - { - "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", - "quantity": 2 - }, - { - "name": "Mk-84 - 2000lb GP Bomb LD", - "quantity": 3 - }, - { - "name": "AIM-9M Sidewinder IR AAM", - "quantity": 2 - }, - { - "name": "Mk-82 AIR * 6", - "quantity": 2 - }, - { - "name": "AN/AAQ-14 LANTIRN TGT Pod", - "quantity": 1 - }, - { - "name": "AN/AAQ-13 LANTIRN NAV POD", - "quantity": 1 - } - ], - "enabled": true, - "code": "AIM-120C x2, AIM-9M x 2, Mk-84 x 3, Mk-82AIR x 12", - "name": "AIM-120C x2, AIM-9M x 2, Mk-84 x 3, Mk-82AIR x 12", - "roles": [ - "Strike", - "CAS" - ] - } - ], - "filename": "f-15.png", - "liveries": { - "usaf 334th eagles fs af89 aim high": { - "name": "USAF 334th Eagles AF89-475 'Aim High'", - "countries": [ - "USA" - ] - }, - "usaf 335th chiefs fs af89 low vis combat": { - "name": "USAF 335th Chiefs AF89 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af91 low vis combat": { - "name": "USAF 492nd Madhatters AF91 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 335th chiefs fs af89 high vis clean": { - "name": "USAF 335th Chiefs AF89 High Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 335th chiefs fs af89-0487 lucky": { - "name": "USAF 335th Chiefs AF89-0487 'Lucky'", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af88-1690 darkness falls": { - "name": "USAF 336th Rocketeers AF88-1690 'Darkness Falls'", - "countries": [ - "USA" - ] - }, - "usaf 391st bold tigers fs af92-366 billy the kid": { - "name": "USAF 391st Bold Tigers AF92-366 'Billy the Kid'", - "countries": [ - "USA" - ] - }, - "idf ra'am, 69 hammer sqn": { - "name": "IDF 69th Hammers Scheme B", - "countries": [ - "ISR" - ] - }, - "usaf 336th rocketeers fs af89 high vis clean": { - "name": "USAF 336th Rocketeers AF89 High Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af89-496 shadow": { - "name": "USAF 336th Rocketeers AF89-496 'Shadow'", - "countries": [ - "USA" - ] - }, - "usaf 389th thunderbolts fs af90 low vis combat": { - "name": "USAF 389th Thunderbolts AF90 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd mad hatters fs 97-219 75th d-day anniversary": { - "name": "USAF 492nd Madhatters AF97-219 '75th Anniversary D-Day'", - "countries": [ - "USA" - ] - }, - "usaf 334th eagles fs af89 high vis clean": { - "name": "USAF 334th Eagles AF89 High Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 391st bold tigers fs af91-300 leo": { - "name": "USAF 391st Bold Tigers AF91-300 'Leo'", - "countries": [ - "USA" - ] - }, - "usaf 494th panthers fs af01 low vis clean": { - "name": "USAF 494th Panthers AF01 Low Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af97-220 thanos": { - "name": "USAF 492nd Madhatters AF97-220 'Thanos'", - "countries": [ - "USA" - ] - }, - "usaf 48th fw 70th anniversary af92-364 heritage": { - "name": "USAF 48th FW 70th Aniversary AF92-364 Heritage", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af88 low vis combat": { - "name": "USAF 336th Rocketeers AF88 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af97-221 low vis combat": { - "name": "USAF 492nd Madhatters AF97-221 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af91-315 vader": { - "name": "USAF 492nd Madhatters AF91-315 'Vader'", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af91-327 green goblin": { - "name": "USAF 492nd Madhatters AF91-327 'Green Goblin'", - "countries": [ - "USA" - ] - }, - "usaf 391st bold tigers fs af90-247 kraken": { - "name": "USAF 391st Bold Tigers AF90-247 'kraken'", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af88-1700 dragon betty": { - "name": "USAF 336th Rocketeers AF88-1700 'Dragon Betty'", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af89-501": { - "name": "USAF 336th Rocketeers AF89-501", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af88 high vis clean": { - "name": "USAF 336th Rocketeers AF88 High Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 333rd rocketeers fs af87-199 333 fgs": { - "name": "USAF 333rd Lancers AF87-0199 333 FGS", - "countries": [ - "USA" - ] - }, - "usaf 391st bold tigers fs af90-241 high vis combat": { - "name": "USAF 391st Bold Tigers AF90-241 High Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af96 low vis clean": { - "name": "USAF 492nd Madhatters AF96 Low Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 494th panthers fs af00 low vis combat": { - "name": "USAF 494th Panthers AF00 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af91 low vis clean": { - "name": "USAF 492nd Madhatters AF91 Low Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 494th panthers fs af01 low vis combat": { - "name": "USAF 494th Panthers AF01 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af98 low vis clean": { - "name": "USAF 492nd Madhatters AF98 Low Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 17th ws af90 low vis clean": { - "name": "USAF 17th Weapons Squadron AF90 Low Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af88-1673 336 fgs": { - "name": "USAF 336th Rocketeers AF88-1673 336 FGS", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af89 low vis combat": { - "name": "USAF 336th Rocketeers AF89 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af91-308 low vis clean": { - "name": "USAF 492nd Madhatters AF91-308 Low Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af98 low vis combat": { - "name": "USAF 492nd Madhatters AF98 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 391st bold tigers af90-250 tmota": { - "name": "USAF 391ST Bold Tigers 2005 Tiger Meet of the Americas", - "countries": [ - "USA" - ] - }, - "usaf af86-183 number1": { - "name": "USAF Test AF86-183 'Number 1'", - "countries": [ - "USA" - ] - }, - "usaf 17th wps af90-257": { - "name": "USAF 17th Weapons Squadron AF90-257 High Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 17th ws af90 high vis clean": { - "name": "USAF 17th Weapons Squadron AF90 High Vis Clean", - "countries": [ - "USA" - ] - }, - "usaf 492nd madhatters fs af96 low vis combat": { - "name": "USAF 492nd Madhatters AF96 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 391st bold tigers fs af90 low vis combat": { - "name": "USAF 391st Bold Tigers AF90 Low Vis Combat", - "countries": [ - "USA" - ] - }, - "usaf 494th panthers fs 91-603 75th d-day anniversary": { - "name": "USAF 494th Panthers AF91-603 '75th Anniversary D-Day'", - "countries": [ - "USA" - ] - }, - "usaf 336th fw mountain home 75 years af87-173": { - "name": "USAF 366th FW 'Mountain Home 75 Years' AF87-0173", - "countries": [ - "USA" - ] - }, - "usaf 336th rocketeers fs af88-1687 mad duck iv": { - "name": "USAF 336th Rocketeers AF88-1687 'Mad Duck IV'", - "countries": [ - "USA" - ] - } - } - } + "A-10C_2": { + "name": "A-10C_2", + "coalition": "blue", + "era": "Late Cold War", + "label": "A-10C Warthog", + "shortLabel": "A10", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", + "quantity": 6 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "LAU-68 42 rkt M156 WP, AIM-9*2, ECM", + "name": "LAU-68 42 rkt M156 WP, AIM-9*2, ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65D*4, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", + "name": "AGM-65D*4, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x LAU-131 pods - 21 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "LAU-131 98 rkt M156 WP, AIM-9*2,ECM", + "name": "LAU-131 98 rkt M156 WP, AIM-9*2,ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", + "quantity": 9 + } + ], + "enabled": true, + "code": "SUU-25*9,AIM-9*2,ECM", + "name": "SUU-25*9,AIM-9*2,ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "AGM-65D*4, CBU-97*4,TGP, ECM, AIM-9*2", + "name": "AGM-65D*4, CBU-97*4,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 8 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82AIR*8,AIM-9*2,ECM", + "name": "Mk-82AIR*8,AIM-9*2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M257, Para Illum", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "MK-84*2,LAU-68*2,AGM-65K*2", + "name": "MK-84*2,LAU-68*2,AGM-65K*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", + "quantity": 2 + }, + { + "name": "BDU-50LGB - 500lb Laser Guided Inert Practice Bomb LD", + "quantity": 2 + }, + { + "name": "LAU-117 with TGM-65D - Trg Round for Mav D (IIR)", + "quantity": 1 + }, + { + "name": "LAU-117 with TGM-65H - Trg Round for Mav H (CCD)", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-33*6, TGM-65H, TGM-65D, TGP, BDU-50LGB*2, CAP-9*1", + "name": "BDU-33*6, TGM-65H, TGM-65D, TGP, BDU-50LGB*2, CAP-9*1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 6 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82*6,Mk-84*2,AIM-9*2,ECM", + "name": "Mk-82*6,Mk-84*2,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 4 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-84*4,AIM-9*2,ECM", + "name": "Mk-84*4,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 8 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82*8,AIM-9*2,ECM", + "name": "Mk-82*8,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-33*12, TGP, CAP-9*1", + "name": "BDU-33*12, TGP, CAP-9*1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*4,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", + "name": "AGM-65D*4,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 1 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*4,GBU-12*2,GBU-38,Mk-82,AIM-9,TGP,ECM", + "name": "AGM-65D*4,GBU-12*2,GBU-38,Mk-82,AIM-9,TGP,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*2, AGM-65H*2, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", + "name": "AGM-65D*2, AGM-65H*2, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "BDU-50HD - 500lb Inert Practice Bomb HD", + "quantity": 6 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk1, Practice", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-50HD*6,Mk1*7,TGP, CAP-9*1", + "name": "BDU-50HD*6,Mk1*7,TGP, CAP-9*1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65H*4, CBU-97*4,TGP, ECM, AIM-9*2", + "name": "AGM-65H*4, CBU-97*4,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", + "name": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65K*2,GBU-38*4,AIM-9*2,TGP,ECM", + "name": "AGM-65K*2,GBU-38*4,AIM-9*2,TGP,ECM", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-33*6, TGP, CAP-9*1", + "name": "BDU-33*6, TGP, CAP-9*1", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*2,AGM-65H*2,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK151*7", + "name": "AGM-65D*2,AGM-65H*2,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK151*7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP", + "name": "TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "BRU-42 with 3 x BDU-33 - 25lb Practice Bombs LD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "BDU-50LD - 500lb Inert Practice Bomb LD", + "quantity": 2 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-33*6, TGP, CAP-9*1, BDU-50LD*2", + "name": "BDU-33*6, TGP, CAP-9*1, BDU-50LD*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "BRU-42 with 3 x GBU-12 - 500lb Laser Guided Bombs", + "quantity": 2 + }, + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-12*6,GBU-10*2,TGP, AIM-9*2", + "name": "GBU-12*6,GBU-10*2,TGP, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 3 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP, CBU-87*3, M151*28, AIM-9*2, ECM", + "name": "TGP, CBU-87*3, M151*28, AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*4,Mk-82*6,CBU-87*2,TGP,AIM-9*2,Mk151*7", + "name": "AGM-65D*4,Mk-82*6,CBU-87*2,TGP,AIM-9*2,Mk151*7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM- GBU-10*2,GBU-12*4,AIM-9*2,TGP,ECM", + "name": "PGM- GBU-10*2,GBU-12*4,AIM-9*2,TGP,ECM", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*4,TGP, ECM, AIM-9*2", + "name": "AGM-65D*4,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-117 with CATM-65K - Captive Trg Round for Mav K (CCD)", + "quantity": 1 + }, + { + "name": "LAU-117 with TGM-65G - Trg Round for Mav G (IIR)", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP, CAP-9*1, CATM-65K*1, TGM-65G*1", + "name": "TGP, CAP-9*1, CATM-65K*1, TGM-65G*1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", + "quantity": 2 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65G*2,GBU-31*2,AIM-9*2,TGP,ECM", + "name": "AGM-65G*2,GBU-31*2,AIM-9*2,TGP,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP, M151*14, Mk-82*2, Mk-82AIR*2, AIM-9*2, ECM", + "name": "TGP, M151*14, Mk-82*2, Mk-82AIR*2, AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM- GBU-10*4, AGM-65K*2,AIM-9*2,TGP,ECM", + "name": "PGM- GBU-10*4, AGM-65K*2,AIM-9*2,TGP,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", + "quantity": 2 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*2,AGM-65H*2,Mk-82AIR*6,CBU-87*2,Mk151*7,AIM-9*2,TGP,ECM", + "name": "AGM-65D*2,AGM-65H*2,Mk-82AIR*6,CBU-87*2,Mk151*7,AIM-9*2,TGP,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-31*2,GBU-38*2, AGM-65H*2, AIM-9*2,TGP, ECM", + "name": "GBU-31*2,GBU-38*2, AGM-65H*2, AIM-9*2,TGP, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "CBU-103 - 202 x CEM, CBU with WCMD", + "quantity": 4 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "CBU-103*4, M151*14, AIM-9*2, ECM", + "name": "CBU-103*4, M151*14, AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 4 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "CBU-87*4, M151*42, AIM-9*2, ECM", + "name": "CBU-87*4, M151*42, AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 3 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65D*6, CBU-97*4,TGP, ECM, AIM-9*2", + "name": "AGM-65D*6, CBU-97*4,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", + "quantity": 2 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "CBU-87*2, M151*14, MK-82AIR*6, AIM-9*2,ECM", + "name": "CBU-87*2, M151*14, MK-82AIR*6, AIM-9*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-105 - 10 x SFW, CBU with WCMD", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65D*4, CBU-105*4,TGP, ECM, AIM-9*2", + "name": "AGM-65D*4, CBU-105*4,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "BDU-50HD - 500lb Inert Practice Bomb HD", + "quantity": 2 + }, + { + "name": "BDU-50LGB - 500lb Laser Guided Inert Practice Bomb LD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk61, Practice", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-50HD*2,BDU-50LGB*2,TGP, CAP-9*1", + "name": "BDU-50HD*2,BDU-50LGB*2,TGP, CAP-9*1", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 4 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 4 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "CBU-87*4, M151*28, AIM-9*2,ECM", + "name": "CBU-87*4, M151*28, AIM-9*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 4 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "M151*98, Mk-82*2,AIM-9*2,ECM", + "name": "M151*98, Mk-82*2,AIM-9*2,ECM", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*2,AGM-65H*2,GBU-12,GBU-38,MK82*3,MK82AIR*3,MK5*7,TGP,AM-9*2", + "name": "AGM-65D*2,AGM-65H*2,GBU-12,GBU-38,MK82*3,MK82AIR*3,MK5*7,TGP,AM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP, M151*42, Mk-82*6, Mk-82AIR*6, AIM-9*2, ECM", + "name": "TGP, M151*42, Mk-82*6, Mk-82AIR*6, AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 4 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP, M151*84, Mk-82*2,AIM-9*2, ECM", + "name": "TGP, M151*84, Mk-82*2,AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "BDU-50HD - 500lb Inert Practice Bomb HD", + "quantity": 2 + }, + { + "name": "BDU-50LD - 500lb Inert Practice Bomb LD", + "quantity": 2 + }, + { + "name": "LAU-117 with CATM-65K - Captive Trg Round for Mav K (CCD)", + "quantity": 1 + }, + { + "name": "LAU-117 with TGM-65G - Trg Round for Mav G (IIR)", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts WTU-1/B, Practice", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + } + ], + "enabled": true, + "code": "BDU-50LD*2, BDU-50HD*2,CATM-65K, TGM-65G, TGP, CAP-9*1", + "name": "BDU-50LD*2, BDU-50HD*2,CATM-65K, TGM-65G, TGP, CAP-9*1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x LAU-68 pods - 21 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "TGP, M151*49, Mk-82*2, CBU-87*2, AIM-9*2, ECM", + "name": "TGP, M151*49, Mk-82*2, CBU-87*2, AIM-9*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 1 x Captive AIM-9M for ACM", + "quantity": 1 + }, + { + "name": "BDU-50LGB - 500lb Laser Guided Inert Practice Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "TGP, CAP-9*1, BDU-50LGB*4", + "name": "TGP, CAP-9*1, BDU-50LGB*4", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "BRU-42 with 3 x GBU-12 - 500lb Laser Guided Bombs", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-12*14,TGP, AIM-9*2", + "name": "GBU-12*14,TGP, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 3 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "LAU-88 with 3 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*3, AGM-65H*3, CBU-97*4,TGP, ECM, AIM-9*2", + "name": "AGM-65D*3, AGM-65H*3, CBU-97*4,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,TGP,ECM", + "name": "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,TGP,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 2 + }, + { + "name": "CBU-105 - 10 x SFW, CBU with WCMD", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65D*4, CBU-105*2,CBU-97*2, TGP, ECM, AIM-9*2", + "name": "AGM-65D*4, CBU-105*2,CBU-97*2, TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 6 + }, + { + "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*2,Mk-82*6,AIM-9*2,ECM", + "name": "AGM-65D*2,Mk-82*6,AIM-9*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*2,AGM-65H*2,TGP, ECM, AIM-9*2", + "name": "AGM-65D*2,AGM-65H*2,TGP, ECM, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 4 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-38*4,GBU-31*2,TGP, AIM-9*2", + "name": "GBU-38*4,GBU-31*2,TGP, AIM-9*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", + "quantity": 1 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*4,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK5*7", + "name": "AGM-65D*4,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK5*7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", + "quantity": 1 + }, + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65G,AGM-65K,GBU-10*2,AIM-9*2,TGP,ECM", + "name": "AGM-65G,AGM-65K,GBU-10*2,AIM-9*2,TGP,ECM", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 7 + }, + { + "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65G,AGM-65D,Mk-82*7,AIM-9*2,ECM", + "name": "AGM-65G,AGM-65D,Mk-82*7,AIM-9*2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 4 + }, + { + "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-31*2,GBU-38*4,AIM-9*2,TGP,ECM, AIM-9*2", + "name": "GBU-31*2,GBU-38*4,AIM-9*2,TGP,ECM, AIM-9*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x GBU-12 - 500lb Laser Guided Bombs", + "quantity": 2 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65K*2,GBU-12*8,AIM-9M*2.ECM,TGP", + "name": "AGM-65K*2,GBU-12*8,AIM-9M*2.ECM,TGP", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-88 with 3 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65D*6,GBU-12*4,AIM-9M*2,ECM,TGP", + "name": "AGM-65D*6,GBU-12*4,AIM-9M*2,ECM,TGP", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 2 + }, + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65L*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,ECM,TGP", + "name": "AGM-65L*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,ECM,TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 4 + }, + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65L*2,CBU-97*4,AIM-9M*2,ECM,TGP", + "name": "AGM-65L*2,CBU-97*4,AIM-9M*2,ECM,TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 4 + }, + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65L*2,CBU-97*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", + "name": "AGM-65L*2,CBU-97*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "CBU-105 - 10 x SFW, CBU with WCMD", + "quantity": 4 + }, + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65L*2,CBU-105*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", + "name": "AGM-65L*2,CBU-105*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 4 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82*4,Mk-8AIR*4,AIM-9*2,ECM", + "name": "Mk-82*4,Mk-8AIR*4,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", + "quantity": 5 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "BRU-42 with 3 x Mk-82 AIR Ballute - 500lb GP Bombs HD", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82*20,AIM-9*2,ECM", + "name": "Mk-82*20,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 7 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82*6,AIM-9*2,TGP,ECM", + "name": "Mk-82*6,AIM-9*2,TGP,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 6 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-84*6,AIM-9*2,TGP,ECM", + "name": "Mk-84*6,AIM-9*2,TGP,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 5 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82AIR*6,Mk-8AIR*4,M151*1,TGP,AIM-9*2,ECM", + "name": "Mk-82AIR*6,Mk-8AIR*4,M151*1,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", + "quantity": 1 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 4 + }, + { + "name": "LAU-117 with AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-38*4,M151 APKWS*7,AGM-65D*1,AGM-65H*1,TGP,AIM-9*2,ECM", + "name": "GBU-38*4,M151 APKWS*7,AGM-65D*1,AGM-65H*1,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-38*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "name": "GBU-38*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-12*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "name": "GBU-12*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-12*2,GBU-38*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "name": "GBU-12*2,GBU-38*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-10*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "name": "GBU-10*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "GBU-31(V)3/B - JDAM, 2000lb GPS Guided Penetrator Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-31*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "name": "GBU-31*2,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "GBU-54(V)1/B - LJDAM, 500lb Laser & GPS Guided Bomb LD", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-54*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "name": "GBU-54*4,M151 APKWS*7,AGM-65L*2,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "GBU-54(V)1/B - LJDAM, 500lb Laser & GPS Guided Bomb LD", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "LAU-105 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-54*4,M151 APKWS*7,AGM-65D*4,TGP,AIM-9*2,ECM", + "name": "GBU-54*4,M151 APKWS*7,AGM-65D*4,TGP,AIM-9*2,ECM", + "roles": [ + "Strike" + ] + } + ], + "filename": "a-10.png", + "enabled": true, + "liveries": { + "81st fs spangdahlem ab, germany (sp) 1": { + "name": "81st FS Spangdahlem AB, Germany (SP) 1", + "countries": [ + "USA" + ] + }, + "fictional spanish tritonal": { + "name": "Fictional Spanish Tritonal", + "countries": [ + "SPN" + ] + }, + "47th fs barksdale afb, louisiana (bd)": { + "name": "47th FS Barksdale AFB, Louisiana (BD)", + "countries": [ + "USA" + ] + }, + "fictional georgian olive": { + "name": "Fictional Georgian Olive", + "countries": [ + "GRG" + ] + }, + "algerian af fictional grey": { + "name": "Algerian AF Fictional Grey", + "countries": [ + "DZA" + ] + }, + "fictional russian air force 1": { + "name": "Fictional Russian Air Force 1", + "countries": [ + "RUS" + ] + }, + "fictional israel 115 sqn flying dragon": { + "name": "Fictional Israel 115 Sqn Flying Dragon", + "countries": [ + "ISR" + ] + }, + "172nd fs battle creek angb, michigan (bc)": { + "name": "172nd FS Battle Creek ANGB, Michigan (BC)", + "countries": [ + "USA" + ] + }, + "190th fs boise angb, idaho (id)": { + "name": "190th FS Boise ANGB, Idaho (ID)", + "countries": [ + "USA" + ] + }, + "81st fs spangdahlem ab, germany (sp) 2": { + "name": "81st FS Spangdahlem AB, Germany (SP) 2", + "countries": [ + "USA" + ] + }, + "fictional german 3322": { + "name": "Fictional German 3322", + "countries": [ + "GER" + ] + }, + "66th ws nellis afb, nevada (wa)": { + "name": "66th WS Nellis AFB, Nevada (WA)", + "countries": [ + "USA" + ] + }, + "algerian af fictional desert": { + "name": "Algerian AF Fictional Desert", + "countries": [ + "DZA" + ] + }, + "fictional italian am (23gruppo)": { + "name": "AM (23Gruppo)", + "countries": [ + "ITA" + ] + }, + "haf fictional": { + "name": "Hellenic Airforce (Fictional)", + "countries": [ + "GRC" + ] + }, + "184th fs arkansas ang, fort smith (fs)": { + "name": "184th FS Arkansas ANG, Fort Smith (FS)", + "countries": [ + "USA" + ] + }, + "354th fs davis monthan afb, arizona (dm)": { + "name": "354th FS Davis Monthan AFB, Arizona (DM)", + "countries": [ + "USA" + ] + }, + "fictional royal norwegian air force": { + "name": "Fictional Royal Norwegian Air Force", + "countries": [ + "NOR" + ] + }, + "422nd tes nellis afb, nevada (ot)": { + "name": "422nd TES Nellis AFB, Nevada (OT)", + "countries": [ + "USA" + ] + }, + "118th fs bradley angb, connecticut (ct)": { + "name": "118th FS Bradley ANGB, Connecticut (CT)", + "countries": [ + "USA" + ] + }, + "fictional spanish aga": { + "name": "Fictional Spanish AGA", + "countries": [ + "SPN" + ] + }, + "74th fs moody afb, georgia (ft)": { + "name": "74th FS Moody AFB, Georgia (FT)", + "countries": [ + "USA" + ] + }, + "fictional russian air force 2": { + "name": "Fictional Russian Air Force 2", + "countries": [ + "RUS" + ] + }, + "118th fs bradley angb, connecticut (ct) n621": { + "name": "118th FS Bradley ANGB, Connecticut (CT) N621", + "countries": [ + "USA" + ] + }, + "357th fs davis monthan afb, arizona (dm)": { + "name": "357th FS Davis Monthan AFB, Arizona (DM)", + "countries": [ + "USA" + ] + }, + "canada rcaf 409 squadron": { + "name": "Fictional RCAF 409 Squadron", + "countries": [ + "CAN" + ] + }, + "355th fs eielson afb, alaska (ak)": { + "name": "355th FS Eielson AFB, Alaska (AK)", + "countries": [ + "USA" + ] + }, + "25th fs osan ab, korea (os)": { + "name": "25th FS Osan AB, Korea (OS)", + "countries": [ + "USA" + ] + }, + "358th fs davis monthan afb, arizona (dm)": { + "name": "358th FS Davis Monthan AFB, Arizona (DM)", + "countries": [ + "USA" + ] + }, + "australia notional raaf": { + "name": "Australia Notional RAAF", + "countries": [ + "AUS" + ] + }, + "fictional canadian air force pixel camo": { + "name": "Fictional Canadian Air Force Pixel Camo", + "countries": [ + "CAN" + ] + }, + "fictional france escadron de chasse 03.003 ardennes": { + "name": "Fictional France Escadron de Chasse 03.003 ARDENNES", + "countries": [ + "FRA" + ] + }, + "canada rcaf 442 snow scheme": { + "name": "Fictional RCAF 442 Snow Scheme", + "countries": [ + "CAN" + ] + }, + "23rd tfw england afb (el)": { + "name": "23rd TFW England AFB (EL)", + "countries": [ + "USA" + ] + }, + "fictional georgian grey": { + "name": "Fictional Georgian Grey", + "countries": [ + "GRG" + ] + }, + "fictional ukraine air force 1": { + "name": "Fictional Ukraine Air Force 1", + "countries": [ + "UKR" + ] + }, + "104th fs maryland ang, baltimore (md)": { + "name": "104th FS Maryland ANG, Baltimore (MD)", + "countries": [ + "USA" + ] + }, + "fictional spanish 12nd wing": { + "name": "Fictional Spanish 12nd Wing", + "countries": [ + "SPN" + ] + }, + "a-10 grey": { + "name": "A-10 Grey", + "countries": [ + "DEN", + "TUR", + "NETH", + "BEL", + "UK" + ] + }, + "fictional german 3323": { + "name": "Fictional German 3323", + "countries": [ + "GER" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, straight wing, 1 crew, attack aircraft. Warthog", + "abilities": "Boom AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "A-20G": { + "name": "A-20G", + "coalition": "blue", + "label": "A-20G Havoc", + "era": "WW2", + "shortLabel": "A20", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "4 x AN-M64 - 500lb GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "500 lb GP bomb LD*4", + "name": "500 lb GP bomb LD*4", + "roles": [ + "CAS", + "Strike", + "Runway Attack", + "Antiship Strike" + ] + } + ], + "filename": "a-20.png", + "enabled": true, + "liveries": { + "ussr 1st gmtap": { + "name": "1st GMTAP", + "countries": [ + "SUN", + "RUS" + ] + }, + "usaf 645th bs": { + "name": "645th BS, 410th BG, 9th AF", + "countries": [ + "USA" + ] + }, + "107 sqn": { + "name": "107 SQN", + "countries": [ + "UK" + ] + }, + "ussr 27 ape dd": { + "name": "27th API DD", + "countries": [ + "SUN", + "RUS" + ] + }, + "usaf 668th bs": { + "name": "668th BS, 416th BG", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "2 propeller, straight wing, 3 crew, medium attack bomber. Havoc", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "A-50": { + "name": "A-50", + "coalition": "red", + "label": "A-50 Mainstay", + "era": "Late Cold War", + "shortLabel": "A50", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "AWACS" + ] + } + ], + "filename": "a-50.png", + "enabled": true, + "liveries": { + "rf air force": { + "name": "RF Air Force", + "countries": [ + "RUS" + ] + }, + "rf air force new": { + "name": "RF Air Force new", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 15 crew. NATO reporting name: Mainstay", + "abilities": "AEW", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "AJS37": { + "name": "AJS37", + "coalition": "blue", + "label": "AJS37 Viggen", + "era": "Mid Cold War", + "shortLabel": "AJS", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-75A (AGM-65A Maverick) (TV ASM)", + "quantity": 4 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "Battlefield Air Interdiction: RB-75*4, RB-24J*2, XT", + "name": "Battlefield Air Interdiction: RB-75*4, RB-24J*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-04E Anti-ship Missile", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Anti-ship: RB-04E*2, RB-74*2, XT", + "name": "Anti-ship: RB-04E*2, RB-74*2, XT", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Rb-75T (AGM-65A Maverick) (TV ASM Lg HE Whd)", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "Anti-ship (Heavy Mav): RB-75T*4, XT", + "name": "Anti-ship (Heavy Mav): RB-75T*4, XT", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Rb-05A MCLOS ASM/AShM/AAM", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "U/22 Jammer pod", + "quantity": 1 + }, + { + "name": "KB Flare/Chaff dispenser pod", + "quantity": 1 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Hard Target (Countermeasures): RB-05, XT, KB, U22", + "name": "Hard Target (Countermeasures): RB-05, XT, KB, U22", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-75T (AGM-65A Maverick) (TV ASM Lg HE Whd)", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Hard Target (MAV): RB-75T*2, RB-74*2, XT", + "name": "Hard Target (MAV): RB-75T*2, RB-74*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "Ferry Flight: XT", + "name": "Ferry Flight: XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-75A (AGM-65A Maverick) (TV ASM)", + "quantity": 2 + }, + { + "name": "AKAN M/55 Gunpod, 150 rnds MINGR55-HE", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAS (75 GUN): RB-75*2, AKAN", + "name": "CAS (75 GUN): RB-75*2, AKAN", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "CAP: RB-74*4, XT", + "name": "CAP: RB-74*4, XT", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "U22/A Jammer", + "quantity": 1 + }, + { + "name": "KB Flare/Chaff dispenser pod", + "quantity": 1 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Countermeasures Escort: U/22A, KB", + "name": "Countermeasures Escort: U/22A, KB", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BK-90 MJ1 (72 x MJ1 HE-FRAG Bomblets)", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Strike: BK90 (MJ1)*2, RB-74*2, XT", + "name": "Strike: BK90 (MJ1)*2, RB-74*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-05A MCLOS ASM/AShM/AAM", + "quantity": 2 + }, + { + "name": "AKAN M/55 Gunpod, 150 rnds MINGR55-HE", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAS: AKAN, RB-05A", + "name": "CAS: AKAN, RB-05A", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAP (6 AAM): RB-74*4, RB-24J*2, XT", + "name": "CAP (6 AAM): RB-74*4, RB-24J*2, XT", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "ARAK M/70B HE 6x 135mm UnGd Rkts, Shu70 HE/FRAG", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Rocket Half Load HE: ARAK HE*2, RB-74*2, XT", + "name": "Rocket Half Load HE: ARAK HE*2, RB-74*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-05A MCLOS ASM/AShM/AAM", + "quantity": 2 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "CAP / Intecept: RB-05A*2, RB-74*2, XT", + "name": "CAP / Intecept: RB-05A*2, RB-74*2, XT", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "4x SB M/71 120kg GP Bomb Low-drag", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Bombs Low-drag: SB71LD*16, RB-24J*2, XT", + "name": "Bombs Low-drag: SB71LD*16, RB-24J*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-75T (AGM-65A Maverick) (TV ASM Lg HE Whd)", + "quantity": 2 + }, + { + "name": "KB Flare/Chaff dispenser pod", + "quantity": 1 + }, + { + "name": "U/22 Jammer pod", + "quantity": 1 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "SEAD: RB-75T*2, U22/A, KB, XT", + "name": "SEAD: RB-75T*2, U22/A, KB, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-15F Programmable Anti-ship Missile", + "quantity": 2 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "Anti-Ship (Modern): RB-15F*2, RB-74*2, XT", + "name": "Anti-Ship (Modern): RB-15F*2, RB-74*2, XT", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [], + "enabled": true, + "code": "New Payload", + "name": "New Payload", + "roles": [] + }, + { + "items": [ + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "CAP (AJ37): RB-24J*2", + "name": "CAP (AJ37): RB-24J*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "KB Flare/Chaff dispenser pod", + "quantity": 1 + }, + { + "name": "Rb-04E Anti-ship Missile", + "quantity": 1 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "ECM Escort Anti-ship: RB-04E, KB, RB-74*2, XT", + "name": "ECM Escort Anti-ship: RB-04E, KB, RB-74*2, XT", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "4x SB M/71 120kg GP Bomb High-drag", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Bombs High-drag: SB71HD*16, XT, RB-24J", + "name": "Bombs High-drag: SB71HD*16, XT, RB-24J", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Rb-75A (AGM-65A Maverick) (TV ASM)", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "Anti-ship (Light Mav): RB-75*4, XT", + "name": "Anti-ship (Light Mav): RB-75*4, XT", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "ARAK M/70B HE 6x 135mm UnGd Rkts, Shu70 HE/FRAG", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Rocket Full Load HE: ARAK HE*4, RB-24J, XT", + "name": "Rocket Full Load HE: ARAK HE*4, RB-24J, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "2x 80kg LYSB-71 Illumination Bomb", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "Illumination: LYSB*8, XT", + "name": "Illumination: LYSB*8, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-05A MCLOS ASM/AShM/AAM", + "quantity": 2 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Anti-ship (RB05): RB-05A*2, RB-74*2, XT", + "name": "Anti-ship (RB05): RB-05A*2, RB-74*2, XT", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AKAN M/55 Gunpod, 150 rnds MINGR55-HE", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "CAP (Gun): AKAN*2, RB-74*2, XT", + "name": "CAP (Gun): AKAN*2, RB-74*2, XT", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Rb-05A MCLOS ASM/AShM/AAM", + "quantity": 2 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-74 (AIM-9L) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Hard Target: RB-05A*2, RB-74*2, XT", + "name": "Hard Target: RB-05A*2, RB-74*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "Rb-05A MCLOS ASM/AShM/AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "RB-05*2, XT", + "name": "RB-05*2, XT", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ARAK M/70B HE 6x 135mm UnGd Rkts, Shu70 HE/FRAG", + "quantity": 4 + }, + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + } + ], + "enabled": true, + "code": "CAS: ARAK M70 HE*4, XT", + "name": "CAS: ARAK M70 HE*4, XT", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AJS External-tank 1013kg fuel", + "quantity": 1 + }, + { + "name": "4x SB M/71 120kg GP Bomb High-drag", + "quantity": 4 + }, + { + "name": "Rb-24J (AIM-9P) Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Runway Strike: SB71HD*16, RB-24J, XT", + "name": "Runway Strike: SB71HD*16, RB-24J, XT", + "roles": [ + "Runway Attack" + ] + } + ], + "filename": "viggen.png", + "enabled": true, + "liveries": { + "37": { + "name": "#1 Splinter F21 Norrbottens Flygflottilj", + "countries": "All" + }, + "37402": { + "name": "#3 JA-37 F21 Akktu Stakki", + "countries": "All" + }, + "se-dxnv4": { + "name": "SE-DXN by Mach3DS", + "countries": "All" + }, + "f7 skaraborg": { + "name": "#4 Splinter F7 Skaraborgs Flygflottilj 76", + "countries": "All" + }, + "sf-37 akktu stakki - f21": { + "name": "SF-37 Akktu Stakki - F21", + "countries": "All" + }, + "the show must go on": { + "name": "SHOW MUST GO ON! by Bender & Mach3DS", + "countries": "All" + }, + "baremetal": { + "name": "#2 Bare Metal F7 Skaraborgs Flygflottilj", + "countries": "All" + } + }, + "type": "Aircraft", + "description": "Single jet engine, delta wing, 1 crew, attack aircraft. Viggen", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "AV8BNA": { + "name": "AV8BNA", + "coalition": "blue", + "label": "AV8BNA Harrier", + "era": "Late Cold War", + "shortLabel": "AV8", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 6 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "H-L-H: Mk-82SEx6, GAU-12", + "name": "H-L-H: Mk-82SEx6, GAU-12", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", + "quantity": 2 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 (7 WP Tkts)x2, TPOD", + "name": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 (7 WP Tkts)x2, TPOD", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "GBU-16 - 1000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AS: AGM-122, AIM-9M, GBU-12, GBU-16x2, TPOD, Jammer Pod, GAU-12", + "name": "AS: AGM-122, AIM-9M, GBU-12, GBU-16x2, TPOD, Jammer Pod, GAU-12", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "2 GBU-38 */*", + "quantity": 1 + }, + { + "name": "AERO 1D 300 Gallons Fuel Tank ", + "quantity": 2 + }, + { + "name": "2 GBU-38 *\\*", + "quantity": 1 + }, + { + "name": "AGM-122 Sidearm", + "quantity": 1 + } + ], + "enabled": true, + "code": "H-M-H: AIM-9M, AGM-122, GBU-38x4, Fuel Tankx2", + "name": "H-M-H: AIM-9M, AGM-122, GBU-38x4, Fuel Tankx2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "2 Mk-83 *\\*", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "2 Mk-83 */*", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx6, Jammer Pod, GAU-12", + "name": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx6, Jammer Pod, GAU-12", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AERO 1D 300 Gallons Fuel Tank ", + "quantity": 2 + }, + { + "name": "2 Mk-83 *\\*", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "2 Mk-83 */*", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx4, Jammer Pod, GAU-12, Fuel Tankx2", + "name": "Interdiction (H-H-H-H): AIM-9Mx2, Mk-83LDx4, Jammer Pod, GAU-12, Fuel Tankx2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", + "quantity": 2 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AFAC: AIM-9m, AGM-122, SUU-25x2, LAU-68 (7 WP Tkts)x2, Jammer Pod", + "name": "AFAC: AIM-9m, AGM-122, SUU-25x2, LAU-68 (7 WP Tkts)x2, Jammer Pod", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "2 Mk-82 Snakeye */*", + "quantity": 2 + }, + { + "name": "2 Mk-82 Snakeye *\\*", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Interdiction (H-L-L-H): AIM-9Mx2, Mk-82SEx8, Jammer Pod, GAU-12", + "name": "Interdiction (H-L-L-H): AIM-9Mx2, Mk-82SEx8, Jammer Pod, GAU-12", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 6 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "H-M-H: Mk-82LDx6, GAU-12", + "name": "H-M-H: Mk-82LDx6, GAU-12", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "2 GBU-12 *-*", + "quantity": 2 + }, + { + "name": "AERO 1D 300 Gallons Fuel Tank ", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM (H-H-H-H): GBU-12x4, TPOD, Fuel Tankx2", + "name": "PGM (H-H-H-H): GBU-12x4, TPOD, Fuel Tankx2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "2 Mk-82 Snakeye *\\*", + "quantity": 2 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "2 Mk-82 Snakeye */*", + "quantity": 2 + } + ], + "enabled": true, + "code": "L-L-L: Mk-82SEx10, Jammer Pod, GAU-12", + "name": "L-L-L: Mk-82SEx10, Jammer Pod, GAU-12", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "SUU-25 x 8 LUU-2 - Target Marker Flares", + "quantity": 2 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M156, Wht Phos", + "quantity": 2 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 LAU-68 (7 WP Tkts)x2, GAU-12", + "name": "AFAC: AIM-9Mx2, SUU-25x2, LAU-68 LAU-68 (7 WP Tkts)x2, GAU-12", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "3 Mk-82", + "quantity": 2 + }, + { + "name": "2 Mk-82 *\\*", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "2 Mk-82 */*", + "quantity": 1 + } + ], + "enabled": true, + "code": "H-M-H: Mk-82LDx10, GAU-12", + "name": "H-M-H: Mk-82LDx10, GAU-12", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-20 Rockeye - 490lbs CBU, 247 x HEAT Bomblets", + "quantity": 2 + }, + { + "name": "2 Mk-20 Rockeye *\\*", + "quantity": 2 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "2 Mk-20 Rockeye */*", + "quantity": 2 + } + ], + "enabled": true, + "code": "Area Suppression: Mk-20x10, GAU-12", + "name": "Area Suppression: Mk-20x10, GAU-12", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-10 pod - 4 x 127mm ZUNI, UnGd Rkts Mk71, HE/FRAG", + "quantity": 2 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", + "quantity": 2 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Rockets: LAU-10 (4 HE Rkts)x2, LAU-68 (7 HE Rkts)x2", + "name": "Rockets: LAU-10 (4 HE Rkts)x2, LAU-68 (7 HE Rkts)x2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AS: AIM-9M, AGM-122, AGM-65Fx2, GBU-12, TPOD, Jammer Pod, GAU-12", + "name": "AS: AIM-9M, AGM-122, AGM-65Fx2, GBU-12, TPOD, Jammer Pod, GAU-12", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-7 with AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12", + "name": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "2 GBU-12 *-*", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM (H-H-H-H): GBU-12x5, TPOD, Jammer POd, GAU-12", + "name": "PGM (H-H-H-H): GBU-12x5, TPOD, Jammer POd, GAU-12", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-7 with AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AERO 1D 300 Gallons Fuel Tank ", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12, Fuel Tankx2", + "name": "Helo Escort: AIM-9Mx4, Jammer Pod, GAU-12, Fuel Tankx2", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-16 - 1000lb Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM (H-H-H-H): AIM-9Mx2, GBU-16x4, TPOD, GAU-12", + "name": "PGM (H-H-H-H): AIM-9Mx2, GBU-16x4, TPOD, GAU-12", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", + "quantity": 4 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Anti Armor: AIM-9Mx2, AGM-65Fx4, GAU-12", + "name": "Anti Armor: AIM-9Mx2, AGM-65Fx4, GAU-12", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "2 Mk-83 *\\*", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "2 Mk-83 */*", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "RA (H-M-M-H): AIM-9M, AGM-122, Mk-83LDx6, Jammer Pod, GAU-12", + "name": "RA (H-M-M-H): AIM-9M, AGM-122, Mk-83LDx6, Jammer Pod, GAU-12", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", + "quantity": 4 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Stand Off: AIM-9M, AGM-122, AGM-65Fx4, Jammer Pod, GAU-12", + "name": "Stand Off: AIM-9M, AGM-122, AGM-65Fx4, Jammer Pod, GAU-12", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 3 + }, + { + "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Stand Off: AIM-9M, AGM-122x3, AGM-65Fx2, Jammer Pod, GAU-12", + "name": "Stand Off: AIM-9M, AGM-122x3, AGM-65Fx2, Jammer Pod, GAU-12", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-122 Sidearm", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + } + ], + "enabled": true, + "code": "Stand Off: AIM-9Mx2, AGM-122x2, AGM-65Fx2, Jammer Pod, GAU-12", + "name": "Stand Off: AIM-9Mx2, AGM-122x2, AGM-65Fx2, Jammer Pod, GAU-12", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 3 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Iron Hand: AIM-9Mx1, AGM-122x3, LAU-68 (7 HE Rkts)x2, Jammer Pod, GAU-12", + "name": "Iron Hand: AIM-9Mx1, AGM-122x3, LAU-68 (7 HE Rkts)x2, Jammer Pod, GAU-12", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 3 + }, + { + "name": "2 Mk-20 Rockeye *\\*", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "2 Mk-20 Rockeye */*", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "Iron Hand: AIM-9M, AGM-122x3, Mk-20x4, Jammer Pod, GAU-12", + "name": "Iron Hand: AIM-9M, AGM-122x3, Mk-20x4, Jammer Pod, GAU-12", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 2 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + }, + { + "name": "AN/ALQ-164 DECM Pod", + "quantity": 1 + }, + { + "name": "GAU 12 Gunpod w/SAPHEI-T", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AS: AIM-9M, AGM-122, AGM-65E2x2, GBU-12, TPOD, Jammer Pod, GAU-12", + "name": "AS: AIM-9M, AGM-122, AGM-65E2x2, GBU-12, TPOD, Jammer Pod, GAU-12", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65L - Maverick E2/L (CCD Laser ASM)", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM: AIM-9M, AGM-122, AGM-65E2x4, TPOD", + "name": "PGM: AIM-9M, AGM-122, AGM-65E2x4, TPOD", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "AGM-122 Sidearm", + "quantity": 1 + }, + { + "name": "LAU-131 pod - 7 x 2.75\" Hydra, Laser Guided Rkts M151, HE APKWS", + "quantity": 4 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "PGM: AIM-9M, AGM-122, APKWSIIx4, TPOD", + "name": "PGM: AIM-9M, AGM-122, APKWSIIx4, TPOD", + "roles": [ + "Strike" + ] + } + ], + "filename": "av8bna.png", + "enabled": true, + "liveries": { + "vmat-203": { + "name": "VMAT-203", + "countries": "All" + }, + "vma-542": { + "name": "VMA-542", + "countries": "All" + }, + "vma-311d": { + "name": "VMA-311D", + "countries": "All" + }, + "vma-223d": { + "name": "VMA-223D", + "countries": "All" + }, + "vma-513": { + "name": "VMA-513", + "countries": "All" + }, + "vma-214d": { + "name": "VMA-214D", + "countries": "All" + }, + "vma-211": { + "name": "VMA-211", + "countries": "All" + }, + "vma-231-2": { + "name": "VMA-231-2", + "countries": "All" + }, + "vmat-203s": { + "name": "VMAT-203 Special", + "countries": "All" + }, + "vma-214": { + "name": "VMA-214", + "countries": "All" + }, + "vma-513d": { + "name": "VMA-513D", + "countries": "All" + }, + "vma-231d": { + "name": "VMA-231D", + "countries": "All" + }, + "vma-311": { + "name": "VMA-311", + "countries": "All" + }, + "default": { + "name": "default", + "countries": "All" + }, + "vma-231-1": { + "name": "VMA-231-1", + "countries": "All" + }, + "vma-211d": { + "name": "VMA-211D", + "countries": "All" + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew, all weather, VTOL attack aircraft. Harrier", + "abilities": "Drogue AAR, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "An-26B": { + "name": "An-26B", + "coalition": "red", + "label": "An-26B Curl", + "era": "Mid Cold War", + "shortLabel": "A26", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Transport" + ] + } + ], + "filename": "an-26.png", + "enabled": true, + "liveries": { + "china plaaf": { + "name": "China PLAAF", + "countries": [ + "CHN" + ] + }, + "rf navy": { + "name": "RF Navy", + "countries": [ + "RUS" + ] + }, + "abkhazian af": { + "name": "Abkhazian AF", + "countries": [ + "ABH" + ] + }, + "aeroflot": { + "name": "Aeroflot", + "countries": [ + "SUN", + "RUS" + ] + }, + "georgian af": { + "name": "Georgian AF", + "countries": [ + "GRG" + ] + }, + "rf air force": { + "name": "RF Air Force", + "countries": [ + "RUS" + ] + }, + "ukraine af": { + "name": "Ukraine AF", + "countries": [ + "UKR" + ] + } + }, + "type": "Aircraft", + "description": "2 turboprop, straight wing, 5 crew, cargo and passenger aircraft. NATO reporting name: Curl", + "abilities": "Transport", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "An-30M": { + "name": "An-30M", + "coalition": "red", + "label": "An-30M Clank", + "era": "Mid Cold War", + "shortLabel": "A30", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Transport" + ] + } + ], + "filename": "a-50.png", + "enabled": true, + "liveries": { + "15th transport ab": { + "name": "15th Transport AB", + "countries": [ + "UKR" + ] + }, + "china caac": { + "name": "China CAAC", + "countries": [ + "CHN" + ] + }, + "rf air force": { + "name": "RF Air Force", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 turboprop, straight wing, 7 crew, weather reseach aircraft. NATO reporting name: Clank", + "abilities": "Transport", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "B-1B": { + "name": "B-1B", + "coalition": "blue", + "label": "B-1B Lancer", + "era": "Late Cold War", + "shortLabel": "B1", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "28 x Mk-82 - 500lb GP Bombs LD", + "quantity": 3 + } + ], + "enabled": true, + "code": "Mk-82*84", + "name": "Mk-82*84", + "roles": [ + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "4 x AGM-154C - JSOW Unitary BROACH", + "quantity": 3 + } + ], + "enabled": true, + "code": "AGM-154*12", + "name": "AGM-154*12", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "16 x GBU-38 - JDAM, 500lb GPS Guided Bombs", + "quantity": 3 + } + ], + "enabled": true, + "code": "GBU-38*48", + "name": "GBU-38*48", + "roles": [ + "CAS", + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "10 x CBU-87 - 202 x CEM Cluster Bombs", + "quantity": 3 + } + ], + "enabled": true, + "code": "CBU-87*30", + "name": "CBU-87*30", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "10 x CBU-97 - 10 x SFW Cluster Bombs", + "quantity": 3 + } + ], + "enabled": true, + "code": "CBU-97*30", + "name": "CBU-97*30", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "10 x CBU-97 - 10 x SFW Cluster Bombs", + "quantity": 2 + }, + { + "name": "16 x GBU-38 - JDAM, 500lb GPS Guided Bombs", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-38*16, CBU-97*20", + "name": "GBU-38*16, CBU-97*20", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "8 x Mk-84 - 2000lb GP Bombs LD", + "quantity": 3 + } + ], + "enabled": true, + "code": "Mk-84*24", + "name": "Mk-84*24", + "roles": [ + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "8 x GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bombs", + "quantity": 3 + } + ], + "enabled": true, + "code": "GBU-31*24", + "name": "GBU-31*24", + "roles": [ + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "8 x GBU-31(V)3/B - JDAM, 2000lb GPS Guided Penetrator Bombs", + "quantity": 3 + } + ], + "enabled": true, + "code": "GBU-31(V)3/B*24", + "name": "GBU-31(V)3/B*24", + "roles": [ + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "16 x GBU-38 - JDAM, 500lb GPS Guided Bombs", + "quantity": 2 + }, + { + "name": "8 x GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bombs", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-31*8, GBU-38*32", + "name": "GBU-31*8, GBU-38*32", + "roles": [ + "Strike", + "Strike" + ] + } + ], + "filename": "b-1.png", + "enabled": true, + "liveries": { + "usaf standard": { + "name": "usaf standard", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swing wing, 2 crew bomber. Lancer", + "abilities": "Boom AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "B-52H": { + "name": "B-52H", + "coalition": "blue", + "label": "B-52H Stratofortress", + "era": "Early Cold War", + "shortLabel": "B52", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "HSAB with 9 x Mk-83 - 1000lb GP Bombs LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-84*18", + "name": "Mk-84*18", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "MER12 with 12 x Mk-82 - 500lb GP Bombs LD", + "quantity": 2 + }, + { + "name": "27 x Mk-82 - 500lb GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk 82*51", + "name": "Mk 82*51", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "HSAB with 9 x Mk-20 Rockeye - 490lbs CBUs, 247 x HEAT Bomblets", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk20*18", + "name": "Mk20*18", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "6 x AGM-86D on MER", + "quantity": 2 + }, + { + "name": "8 x AGM-86D", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-86C*20", + "name": "AGM-86C*20", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "8 x AGM-84A Harpoon ASM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-84A*8", + "name": "AGM-84A*8", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "b-52.png", + "enabled": true, + "liveries": { + "usaf standard": { + "name": "usaf standard", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "8 jet engine, swept wing, 6 crew bomber. Stratofortress", + "abilities": "Boom AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Bf-109K-4": { + "name": "Bf-109K-4", + "coalition": "red", + "label": "Bf-109K-4 Fritz", + "era": "WW2", + "shortLabel": "109", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "300 liter Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel Tank", + "name": "Fuel Tank", + "roles": [ + "CAP", + "FAC-A", + "Escort" + ] + }, + { + "items": [ + { + "name": "SC 250 Type 3 J - 250kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC250", + "name": "SC250", + "roles": [ + "Runway Attack", + "CAS", + "Antiship Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "SC 500 J - 500kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC500", + "name": "SC500", + "roles": [ + "Runway Attack", + "CAS", + "Antiship Strike", + "Strike" + ] + } + ], + "filename": "bf109.png", + "enabled": true, + "liveries": { + "germany_standard": { + "name": "Jagdgeschwader 27", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 white 6, jg 4": { + "name": "White 6, JG 4", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 dogfight red": { + "name": "RED", + "countries": "All" + }, + "bf-109 k4 dogfight blue": { + "name": "BLUE", + "countries": "All" + }, + "bf-109 k4 red7 eads": { + "name": "BF109G4 -red7- EADS -fondation messerschmitt V2", + "countries": [ + "GER" + ] + }, + "bf-109 k4 iijg52": { + "name": "II./JG52", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 us captured": { + "name": "US Captured", + "countries": [ + "USA" + ] + }, + "bf-109 k4 stab jg52": { + "name": "Stab JG52", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 334xxx batch": { + "name": "334xxx batch", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 ussr green": { + "name": "Green-trophy RKKA", + "countries": [ + "SUN", + "RUS" + ] + }, + "bf-109 k4 330xxx batch": { + "name": "330xxx batch", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 irmgard": { + "name": "Bf-109K-4 Irmgard Captured", + "countries": [ + "USA" + ] + }, + "bf-109 k4 swiss e-3a j-374 1940": { + "name": "Swiss E-3a J-374 1940 l'Seducteur", + "countries": [ + "SUI" + ] + }, + "green": { + "name": "Green", + "countries": "All" + }, + "bf-109 k4 9.jg77": { + "name": "9./JG77", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 croatia": { + "name": "Croatia Air Force - 'Black 4'", + "countries": [ + "HRV", + "NZG", + "GER" + ] + }, + "bf-109 k4 9.jg27 (w10+i)": { + "name": "9./JG27 (W10+I)", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 legion condor spain 1939": { + "name": "6-123 ESPAÑA", + "countries": [ + "SPN" + ] + }, + "bf-109 k4 jagdgeschwader 53": { + "name": " Jagdgeschwader 53", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 1.njg 11": { + "name": "NJG 11", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 g10 of tibor tobak rhaf": { + "name": "BF109G10 RHAF Tibor Tobak by Reflected", + "countries": [ + "GER", + "HUN", + "NZG" + ] + }, + "bf-109 k4 jagdgeschwader 77": { + "name": "Jagdgeschwader 77", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 iaf s-199": { + "name": "S-199 IDF by Ovenmit", + "countries": [ + "ISR" + ] + }, + "bf-109 k4 iiijg27": { + "name": "III/JG27", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 1.njg 11 (white 5)": { + "name": "1./NJG 11 (W5)", + "countries": [ + "GER", + "NZG" + ] + }, + "bf-109 k4 raf vd 358 e-2": { + "name": "RAF VD 358 E-2 - UK Captured", + "countries": [ + "UK" + ] + }, + "bf-109 k4 335xxx batch": { + "name": "335xxx batch", + "countries": [ + "GER", + "NZG" + ] + } + }, + "type": "Aircraft", + "description": "Single propeller, straight wing, 1 crew. 109", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "C-101CC": { + "name": "C-101CC", + "coalition": "blue", + "label": "C-101CC", + "era": "Late Cold War", + "shortLabel": "101", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9P, DEFA 553 CANNON (I)", + "name": "2*AIM-9P, DEFA 553 CANNON (I)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9M, DEFA 553 CANNON (I)", + "name": "2*AIM-9M, DEFA 553 CANNON (I)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9P, DEFA 533 CANNON (II)", + "name": "2*AIM-9P, DEFA 533 CANNON (II)", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9P, AN-M3 CANNON (IV)", + "name": "2*AIM-9P, AN-M3 CANNON (IV)", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R.550 MAGIC, DEFA 553 CANNON", + "name": "2*R.550 MAGIC, DEFA 553 CANNON", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9M, AN-M3 CANNON (III)", + "name": "2*AIM-9M, AN-M3 CANNON (III)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9P, DEFA 553 CANNON", + "name": "2*AIM-9P, DEFA 553 CANNON", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R.550 MAGIC, DEFA 553 CANNON (III)", + "name": "2*R.550 MAGIC, DEFA 553 CANNON (III)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + }, + { + "name": "Belouga", + "quantity": 2 + }, + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*AIM-9P, 2*BELOUGA, DEFA 553 CANNON", + "name": "2*AIM-9P, 2*BELOUGA, DEFA 553 CANNON", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + }, + { + "name": "Sea Eagle - ASM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*AIM9-P, 2*SEA EAGLE, DEFA-553 CANNON", + "name": "2*AIM9-P, 2*SEA EAGLE, DEFA-553 CANNON", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Sea Eagle - ASM", + "quantity": 2 + }, + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9M 2*SEA EAGLE, AN-M3 CANNON", + "name": "2*AIM-9M 2*SEA EAGLE, AN-M3 CANNON", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9M, AN-M3 CANNON", + "name": "2*AIM-9M, AN-M3 CANNON", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Belouga", + "quantity": 2 + }, + { + "name": "4*BDU-33 - AF/B37K Rack with 4*25lb Practice Bomb LD", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*BELOUGA,2*BDU-33, DEFA-553 CANNON", + "name": "2*BELOUGA,2*BDU-33, DEFA-553 CANNON", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Sea Eagle - ASM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2* SEA EAGLE, DEFA-553 CANNON", + "name": "2* SEA EAGLE, DEFA-553 CANNON", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "BR-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + }, + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*AIM-9P, 2*BR-250,2*MK-82, DEFA 553 CANNON", + "name": "2*AIM-9P, 2*BR-250,2*MK-82, DEFA 553 CANNON", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + }, + { + "name": "Sea Eagle - ASM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R.550 MAGIC, 2*SEA EAGLE , DEFA-553 CANNON", + "name": "2*R.550 MAGIC, 2*SEA EAGLE , DEFA-553 CANNON", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + }, + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*R.550 MAGIC, DEFA 553 CANNON (IV)", + "name": "2*R.550 MAGIC, DEFA 553 CANNON (IV)", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "Belouga", + "quantity": 2 + }, + { + "name": "BR-500 - 500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*BELOUGA, 2*BR-500, DEFA 553 CANNON", + "name": "2*BELOUGA, 2*BR-500, DEFA 553 CANNON", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9M, DEFA 553 CANNON (IV)", + "name": "2*AIM-9M, DEFA 553 CANNON (IV)", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + }, + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R.550 MAGIC, AN-M3 CANNON (II)", + "name": "2*R.550 MAGIC, AN-M3 CANNON (II)", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic, DEFA 553 CANNON (I)", + "name": "2*R550 Magic, DEFA 553 CANNON (I)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + }, + { + "name": "BIN-200 - 200kg Napalm Incendiary Bomb", + "quantity": 2 + }, + { + "name": "Belouga", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*AIM-9M ,2*BELOUGA,2*BIN-200, AN-M3 CANNON", + "name": "2*AIM-9M ,2*BELOUGA,2*BIN-200, AN-M3 CANNON", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*AIM-9M, 2*LAU 68, 2*MK-82, DEFA 553 CANNON", + "name": "2*AIM-9M, 2*LAU 68, 2*MK-82, DEFA 553 CANNON", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AN-M3 - 2*Browning Machine Guns 12.7mm", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9P, AN-M3 CANNON (III)", + "name": "2*AIM-9P, AN-M3 CANNON (III)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9M, DEFA 533 CANNON (II)", + "name": "2*AIM-9M, DEFA 533 CANNON (II)", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "DEFA-553 - 30mm Revolver Cannon", + "quantity": 1 + }, + { + "name": "4*BDU-33 - AF/B37K Rack with 4*25lb Practice Bomb LD", + "quantity": 2 + }, + { + "name": "BR-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "R550 Magic 2 IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*R.550 MAGIC, 2*BR-250, 2*BDU-33, DEFA 553 CANNON", + "name": "2*R.550 MAGIC, 2*BR-250, 2*BDU-33, DEFA 553 CANNON", + "roles": [ + "CAS" + ] + } + ], + "filename": "c-101.png", + "enabled": true, + "liveries": { + "i brigada aerea - chile early green n.1 a-36 halcon": { + "name": "I Brigada Aerea - Chile Early Green", + "countries": [ + "CHL" + ] + }, + "aviodev skin": { + "name": "Aviodev Skin", + "countries": [ + "CUB", + "AUS", + "PRT", + "SUN", + "USA", + "BLR", + "HRV", + "LBN", + "SVK", + "TUR", + "ARG", + "BEL", + "FIN", + "SAU", + "UN", + "RSI", + "CHL", + "AUT", + "EGY", + "CAN", + "QAT", + "YUG", + "ISR", + "PER", + "BHR", + "NGA", + "IDN", + "KAZ", + "INS", + "AUSAF", + "PAK", + "SVN", + "RED", + "ROU", + "DEN", + "TUN", + "IND", + "CZE", + "MYS", + "GHA", + "OMN", + "CYP", + "RSO", + "IRN", + "UKR", + "JPN", + "THA", + "JOR", + "RSA", + "MEX", + "NOR", + "ITA", + "NETH", + "SUI", + "VNM", + "KOR", + "GRG", + "SDN", + "UK", + "BRA", + "ARE", + "ABH", + "BOL", + "RUS", + "PHL", + "SPN", + "MAR", + "DZA", + "GDR", + "HND", + "PRK", + "SRB", + "BGR", + "LBY", + "VEN", + "IRQ", + "SYR", + "NZG", + "GRC", + "POL", + "SWE", + "GER", + "CHN", + "YEM", + "FRA", + "HUN", + "ETH", + "BLUE", + "KWT" + ] + }, + "georgia combat fictional green": { + "name": "Georgia Combat Fictional Green", + "countries": [ + "GRG" + ] + }, + "i brigada aerea - chile early grey n.1 a-36 halcon": { + "name": "I Brigada Aerea - Chile Early Grey", + "countries": [ + "CHL" + ] + }, + "royal jordanian air force": { + "name": "Royal jordanian Air Force ", + "countries": [ + "JOR" + ] + }, + "georgia combat fictional spots": { + "name": "Georgia Combat Fictional Spots", + "countries": [ + "GRG" + ] + }, + "i brigada aerea - grupo de aviacion n.1 a-36 halcon desert skin": { + "name": "I Brigada Aerea - Grupo de Aviacion N.1 A-36 HALCON Desert Skin", + "countries": [ + "CHL" + ] + }, + "i brigada aerea - chile early agressor nº410 n.1 a-36 halcon": { + "name": "I Brigada Aerea - Chile Early Agressor Nº410 ", + "countries": [ + "CHL" + ] + }, + "usaf agressor fictional": { + "name": "USAF Agressor Fictional", + "countries": [ + "USA", + "AUSAF", + "BLUE" + ] + }, + "i brigada aerea - grupo de aviacion n.1 a-36 halcon": { + "name": "I Brigada Aerea - Grupo de Aviacion N.1 A-36 HALCON", + "countries": [ + "CHL" + ] + }, + "i brigada aerea - chile early agressor nº411 n.1 a-36 halcon": { + "name": "I Brigada Aerea - Chile Early Agressor Nº411", + "countries": [ + "CHL" + ] + }, + "claex green camu skin - centro logistico de armamento y experimentacion": { + "name": "CLAEX Green Camu Skin - Centro Logistico de Armamento y Experimentacion", + "countries": [ + "RED", + "SPN", + "BLUE" + ] + }, + "russia combat fictional": { + "name": "Russia Combat Fictional", + "countries": [ + "RED", + "RUS" + ] + }, + "georgia combat fictional wolf": { + "name": "Georgia Combat Fictional Wolf", + "countries": [ + "GRG" + ] + }, + "honduras - air force comayagua coronel jose enrique soto cano air base skin 1": { + "name": "Honduras - Air Force Comayagua Coronel Jose Enrique Soto Cano Air Base Skin 1", + "countries": [ + "HND" + ] + }, + "i brigada aerea - grupo de aviacion n.3 a-36 halcon": { + "name": "I Brigada Aerea - Grupo de Aviacion N.3 A-36 HALCON", + "countries": [ + "CHL" + ] + }, + "honduras - air force comayagua coronel jose enrique soto cano air base skin 2": { + "name": "Honduras - Air Force Comayagua Coronel Jose Enrique Soto Cano Air Base Skin 2", + "countries": [ + "HND" + ] + }, + "claex desert camu skin - centro logistico de armamento y experimentacion": { + "name": "CLAEX Desert Camu Skin - Centro Logistico de Armamento y Experimentacion", + "countries": [ + "RED", + "SPN", + "BLUE" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "C-130": { + "name": "C-130", + "coalition": "blue", + "label": "C-130 Hercules", + "era": "Early Cold War", + "shortLabel": "130", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Transport" + ] + } + ], + "filename": "c-130.png", + "enabled": true, + "liveries": { + "belgian air force": { + "name": "Belgian Air Force", + "countries": [ + "BEL" + ] + }, + "iriaf 5-8518": { + "name": "IRIAF 5-8518", + "countries": [ + "IRN" + ] + }, + "israel defence force": { + "name": "Israel Defence Force", + "countries": [ + "ISR" + ] + }, + "haf gray": { + "name": "Hellenic Airforce - Gray", + "countries": [ + "GRC" + ] + }, + "turkish air force": { + "name": "Turkish Air Force", + "countries": [ + "TUR" + ] + }, + "royal danish air force": { + "name": "Royal Danish Air Force", + "countries": [ + "DEN" + ] + }, + "algerian af green": { + "name": "Algerian AF Green", + "countries": [ + "DZA" + ] + }, + "royal netherlands air force": { + "name": "Royal Netherlands Air Force", + "countries": [ + "NETH" + ] + }, + "canada's air force": { + "name": "Canada's Air Force", + "countries": [ + "CAN" + ] + }, + "royal norwegian air force": { + "name": "Royal Norwegian Air Force", + "countries": [ + "NOR" + ] + }, + "iriaf 5-8503": { + "name": "IRIAF 5-8503", + "countries": [ + "IRN" + ] + }, + "us air force": { + "name": "US Air Force", + "countries": [ + "USA" + ] + }, + "royal air force": { + "name": "Royal Air Force", + "countries": [ + "UK" + ] + }, + "air algerie l-382 white": { + "name": "Air Algerie L-382 White", + "countries": [ + "DZA" + ] + }, + "french air force": { + "name": "French Air Force", + "countries": [ + "FRA" + ] + }, + "spanish air force": { + "name": "Spanish Air Force", + "countries": [ + "SPN" + ] + }, + "algerian af h30 white": { + "name": "Algerian AF H30 White", + "countries": [ + "DZA" + ] + } + }, + "type": "Aircraft", + "description": "4 turboprop, stright wing, 3 crew. Hercules", + "abilities": "Transport", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "C-17A": { + "name": "C-17A", + "coalition": "blue", + "label": "C-17A Globemaster", + "era": "Modern", + "shortLabel": "C17", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Transport" + ] + } + ], + "filename": "c-17.png", + "enabled": true, + "liveries": { + "usaf standard": { + "name": "usaf standard", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 3 crew. Globemaster", + "abilities": "Transport", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "E-2C": { + "name": "E-2C", + "coalition": "blue", + "label": "E-2D Hawkeye", + "era": "Mid Cold War", + "shortLabel": "E2", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "AWACS" + ] + } + ], + "filename": "e-2.png", + "enabled": true, + "liveries": { + "vaw-125 tigertails": { + "name": "VAW-125 Tigertails", + "countries": [ + "USA" + ] + }, + "e-2d demo": { + "name": "E-2D Demo", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "2 turboprop, straight wing, 5 crew. Hawkeye", + "abilities": "AEW, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "E-3A": { + "name": "E-3A", + "coalition": "blue", + "label": "E-3A Sentry", + "era": "Mid Cold War", + "shortLabel": "E3", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "AWACS" + ] + } + ], + "filename": "e-3.png", + "enabled": true, + "liveries": { + "nato": { + "name": "nato", + "countries": [ + "USA", + "FRA", + "UK" + ] + }, + "usaf standard": { + "name": "usaf standard", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 17 crew. Sentry", + "abilities": "AEW", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "F-117A": { + "name": "F-117A", + "coalition": "blue", + "label": "F-117A Nighthawk", + "era": "Late Cold War", + "shortLabel": "117", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-12*2", + "name": "GBU-12*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-10*2", + "name": "GBU-10*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-27 - 2000lb Laser Guided Penetrator Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-27*2", + "name": "GBU-27*2", + "roles": [ + "Strike" + ] + } + ], + "filename": "f-117.png", + "enabled": true, + "liveries": { + "usaf standard": { + "name": "usaf standard", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, delta wing, 1 crew. Nighthawk", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-14A-135-GR": { + "name": "F-14A-135-GR", + "coalition": "blue", + "label": "F-14A-135-GR Tomcat", + "era": "Late Cold War", + "shortLabel": "14A", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "XT*2", + "name": "XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 6 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*6, AIM-9L*2, XT*2", + "name": "AIM-54A-MK47*6, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-7F", + "quantity": 6 + }, + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-7F*6, AIM-9L*2, XT*2", + "name": "AIM-7F*6, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-7F", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2, XT*2", + "name": "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 2 + }, + { + "name": "AIM-7F", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4, XT*2", + "name": "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-9L*4, XT*2", + "name": "AIM-54A-MK47*4, AIM-9L*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-9M*4, XT*2", + "name": "AIM-54A-MK47*4, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*4, AIM-9M*4, XT*2", + "name": "AIM-54A-MK60*4, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-7F", + "quantity": 4 + }, + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-7F*4, AIM-9L*4, XT*2", + "name": "AIM-7F*4, AIM-9L*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "MAK79 4 BDU-33", + "quantity": 2 + }, + { + "name": "MAK79 3 BDU-33", + "quantity": 2 + } + ], + "enabled": true, + "code": "BDU-33*14", + "name": "BDU-33*14", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "3 BDU-33", + "quantity": 4 + } + ], + "enabled": true, + "code": "BDU-33*12", + "name": "BDU-33*12", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "GBU-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-10*2", + "name": "GBU-10*2", + "roles": [ + "Strike", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "GBU-12", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-12*4", + "name": "GBU-12*4", + "roles": [ + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-16", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-16*4", + "name": "GBU-16*4", + "roles": [ + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-24", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-24*2", + "name": "GBU-24*2", + "roles": [ + "Strike", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Mk-84", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-84*4", + "name": "Mk-84*4", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Mk-83", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-83*4", + "name": "Mk-83*4", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Mk-82", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-82*4", + "name": "Mk-82*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MAK79 4 Mk-82", + "quantity": 2 + }, + { + "name": "MAK79 3 Mk-82", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-82*14", + "name": "Mk-82*14", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "MAK79 4 Mk-81", + "quantity": 2 + }, + { + "name": "MAK79 3 Mk-81", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-81*14", + "name": "Mk-81*14", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-20", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-20*4", + "name": "Mk-20*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Mk-82AIR", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-82AIR*4", + "name": "Mk-82AIR*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "2 LAU-10 - 4 ZUNI MK 71", + "quantity": 1 + }, + { + "name": "LAU-10 - 4 ZUNI MK 71", + "quantity": 1 + } + ], + "enabled": true, + "code": "Zuni*12", + "name": "Zuni*12", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "2 LAU-10 - 4 ZUNI MK 71", + "quantity": 3 + }, + { + "name": "LAU-10 - 4 ZUNI MK 71", + "quantity": 1 + } + ], + "enabled": true, + "code": "Zuni*28", + "name": "Zuni*28", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "2 SUU-25 * 8 LUU-2", + "quantity": 1 + }, + { + "name": "SUU-25 * 8 LUU-2", + "quantity": 1 + } + ], + "enabled": true, + "code": "LUU-2*24", + "name": "LUU-2*24", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-82", + "quantity": 2 + }, + { + "name": "AIM-7F", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*2", + "name": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*2", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-82", + "quantity": 1 + }, + { + "name": "AIM-7F", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*1", + "name": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*1", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-20", + "quantity": 2 + }, + { + "name": "AIM-7F", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-20*2", + "name": "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-20*2", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "GBU-12", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", + "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "GBU-24", + "quantity": 1 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", + "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-82", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-20", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + } + ], + "filename": "f-14.png", + "enabled": true, + "liveries": { + "rogue nation(top gun - maverick)": { + "name": "Top Gun: Maverick - Rogue Nation", + "countries": "All" + }, + "vf-21 freelancers 200": { + "name": "VF-21 Freelancers 200", + "countries": "All" + }, + "vf-11 ae106 1988": { + "name": "VF-11 AE106 1988", + "countries": "All" + }, + "vf-301 nd113": { + "name": "VF-301 ND113 by Mach3DS", + "countries": "All" + }, + "vf-301 nd111": { + "name": "VF-301 ND111 by Mach3DS", + "countries": "All" + }, + "vf-154 black knights 101": { + "name": "00 - VF-154 Black Knights 101", + "countries": "All" + }, + "vf-14 tophatters aj206 (1999 allied force)": { + "name": "VF-14 Tophatters AJ206 (1999 Allied Force)", + "countries": "All" + }, + "vf-31 ae204 1988": { + "name": "VF-31 AE204 1988", + "countries": "All" + }, + "vf-1 wolfpack nk102 (1974)": { + "name": "VF-1 Wolfpack NK102 (1974)", + "countries": "All" + }, + "vf-33 starfighters ab201 (1988)": { + "name": "VF-33 Starfighters AB201(Dale Snodgrass)", + "countries": "All" + }, + "vf-31 1991 ae200": { + "name": "VF-31 1991 AE200 by Mach3DS", + "countries": "All" + }, + "vf-41 black aces aj100 (1999 allied force)": { + "name": "VF-41 Black Aces AJ100 (1999 Allied Force)", + "countries": "All" + }, + "vf-41 black aces aj101 (1999 allied force)": { + "name": "VF-41 Black Aces AJ101 (1999 Allied Force)", + "countries": "All" + }, + "vf-31 1991 ae205": { + "name": "VF-31 1991 AE205 by Mach3DS", + "countries": "All" + }, + "vf-41 black aces aj102 (1999 allied force)": { + "name": "VF-41 Black Aces AJ102 (1999 Allied Force)", + "countries": "All" + }, + "vf-1 wolfpack nk101 (1974)": { + "name": "VF-1 Wolfpack NK101 (1974)", + "countries": "All" + }, + "vf-31 ae200 1988": { + "name": "VF-31 AE200 1988", + "countries": "All" + }, + "vf-11 red rippers 106": { + "name": "VF-11 Red Rippers 106", + "countries": "All" + }, + "vf-1 wolfpack nk103 (1974)": { + "name": "VF-1 Wolfpack NK103 (1974)", + "countries": "All" + }, + "vf-14 tophatters ab103 (1976)": { + "name": "VF-14 Tophatters AB103(1976)", + "countries": "All" + }, + "vf-111 sundowners 200": { + "name": "VF-111 Sundowners 200", + "countries": "All" + }, + "top gun 114": { + "name": "Top Gun 114 Maverick and Goose", + "countries": "All" + }, + "vf-11 ae103 1988": { + "name": "VF-11 AE103 1988", + "countries": "All" + }, + "vx-4 vandy one sad bunny (1992)": { + "name": "VX-4 Vandy One Sad Bunny (1992)", + "countries": "All" + }, + "vf-211 fighting checkmates 100 (2001)": { + "name": "VF-211 Fighting Checkmates 100 (2001)", + "countries": [ + "USA" + ] + }, + "vf-301 nd104": { + "name": "VF-301 ND104 by Mach3DS", + "countries": "All" + }, + "vf-32 swordsmen ab200 (1976)": { + "name": "VF-32 Swordsmen AB200 (1976)", + "countries": "All" + }, + "vf-211 fighting checkmates 105": { + "name": "VF-211 Fighting Checkmates 105", + "countries": "All" + }, + "vf-14 tophatters ab100 (1976)": { + "name": "VF-14 Tophatters AB100(1976)", + "countries": "All" + }, + "vf-11 ae101 1988": { + "name": "VF-11 AE101 1988", + "countries": "All" + }, + "vf-14 tophatters aj202 (1999 allied force)": { + "name": "VF-14 Tophatters AJ202 (1999 Allied Force)", + "countries": "All" + }, + "vf-1 wolfpack nk100 (1974)": { + "name": "VF-1 Wolfpack NK100 (1974)", + "countries": "All" + }, + "vf-301 nd101 hivis": { + "name": "VF-301 ND101 HiVis by Mach3DS", + "countries": "All" + }, + "vf-14 tophatters aj201 (1999 allied force)": { + "name": "VF-14 Tophatters AJ201 (1999 Allied Force)", + "countries": "All" + }, + "vf-14 tophatters aj200 (1999) 80th aniversary": { + "name": "VF-14 Tophatters AJ200 (1999) 80th Anniversary", + "countries": "All" + }, + "vf-41 black aces aj104 (1999 allied force)": { + "name": "VF-41 Black Aces AJ104 (1999 Allied Force)", + "countries": "All" + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swing wing, 2 crew. Tomcat", + "abilities": "Drogue AAR, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-14B": { + "name": "F-14B", + "coalition": "blue", + "label": "F-14B Tomcat", + "era": "Late Cold War", + "shortLabel": "14B", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "XT*2", + "name": "XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 6 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*6, AIM-9M*2, XT*2", + "name": "AIM-54A-MK47*6, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 6 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*6, AIM-9L*2, XT*2", + "name": "AIM-54A-MK47*6, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 6 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*6, AIM-9M*2, XT*2", + "name": "AIM-54A-MK60*6, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-54C-Mk47", + "quantity": 6 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54C-MK47*6, AIM-9M*2, XT*2", + "name": "AIM-54C-MK47*6, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-7M", + "quantity": 6 + }, + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-7M*6, AIM-9M*2, XT*2", + "name": "AIM-7M*6, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-7M", + "quantity": 6 + }, + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-7M*6, AIM-9L*2, XT*2", + "name": "AIM-7M*6, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", + "name": "AIM-54A-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-7M*2, AIM-9L*2, XT*2", + "name": "AIM-54A-MK47*4, AIM-7M*2, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*4, AIM-7M*2, AIM-9M*2, XT*2", + "name": "AIM-54A-MK60*4, AIM-7M*2, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54C-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54C-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", + "name": "AIM-54C-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*2, AIM-9L*2, XT*2", + "name": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*2, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", + "name": "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*2, AIM-7M*1, AIM-9M*4, XT*2", + "name": "AIM-54A-MK60*2, AIM-7M*1, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54C-Mk47", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54C-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", + "name": "AIM-54C-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-9M*2, AIM-9L*2, XT*2", + "name": "AIM-54A-MK47*4, AIM-9M*2, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*4, AIM-9M*4, XT*2", + "name": "AIM-54A-MK47*4, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*4, AIM-9M*4, XT*2", + "name": "AIM-54A-MK60*4, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54C-Mk47", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-54C-MK47*4, AIM-9M*4, XT*2", + "name": "AIM-54C-MK47*4, AIM-9M*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9M", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-7M*4, AIM-9M*2, AIM-9L*2, XT*2", + "name": "AIM-7M*4, AIM-9M*2, AIM-9L*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-7M", + "quantity": 4 + }, + { + "name": "LAU-138 AIM-9L", + "quantity": 2 + }, + { + "name": "LAU-7 AIM-9L", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-7M*4, AIM-9L*4, XT*2", + "name": "AIM-7M*4, AIM-9L*4, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 3 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk47", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54A-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", + "name": "AIM-54A-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 3 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*2, AIM-7M*3, AIM-9M*2, XT*2", + "name": "AIM-54A-MK60*2, AIM-7M*3, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 3 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "AIM-54C-Mk47", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-54C-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", + "name": "AIM-54C-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "MAK79 4 BDU-33", + "quantity": 2 + }, + { + "name": "MAK79 3 BDU-33", + "quantity": 2 + } + ], + "enabled": true, + "code": "BDU-33*14", + "name": "BDU-33*14", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "3 BDU-33", + "quantity": 4 + } + ], + "enabled": true, + "code": "BDU-33*12", + "name": "BDU-33*12", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "GBU-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-10*2", + "name": "GBU-10*2", + "roles": [ + "Strike", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "GBU-12", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-12*4", + "name": "GBU-12*4", + "roles": [ + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-16", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-16*4", + "name": "GBU-16*4", + "roles": [ + "Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-24", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-24*2", + "name": "GBU-24*2", + "roles": [ + "Strike", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Mk-84", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-84*4", + "name": "Mk-84*4", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Mk-83", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-83*4", + "name": "Mk-83*4", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Mk-82", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-82*4", + "name": "Mk-82*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MAK79 4 Mk-82", + "quantity": 2 + }, + { + "name": "MAK79 3 Mk-82", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-82*14", + "name": "Mk-82*14", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "MAK79 4 Mk-81", + "quantity": 2 + }, + { + "name": "MAK79 3 Mk-81", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-81*14", + "name": "Mk-81*14", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "Mk-20", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-20*4", + "name": "Mk-20*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Mk-82AIR", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-82AIR*4", + "name": "Mk-82AIR*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "2 LAU-10 - 4 ZUNI MK 71", + "quantity": 1 + }, + { + "name": "LAU-10 - 4 ZUNI MK 71", + "quantity": 1 + } + ], + "enabled": true, + "code": "Zuni*12", + "name": "Zuni*12", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "2 LAU-10 - 4 ZUNI MK 71", + "quantity": 3 + }, + { + "name": "LAU-10 - 4 ZUNI MK 71", + "quantity": 1 + } + ], + "enabled": true, + "code": "Zuni*28", + "name": "Zuni*28", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "2 SUU-25 * 8 LUU-2", + "quantity": 1 + }, + { + "name": "SUU-25 * 8 LUU-2", + "quantity": 1 + } + ], + "enabled": true, + "code": "LUU-2*24", + "name": "LUU-2*24", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-82", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-82", + "quantity": 1 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*1", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*1", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-20", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "GBU-12", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", + "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "GBU-24", + "quantity": 1 + }, + { + "name": "AIM-7M", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", + "name": "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-82", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + }, + { + "items": [ + { + "name": "LAU-138 AIM-9M", + "quantity": 2 + }, + { + "name": "LANTIRN Targeting Pod", + "quantity": 1 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 2 + }, + { + "name": "Mk-20", + "quantity": 2 + }, + { + "name": "AIM-7M", + "quantity": 1 + }, + { + "name": "AIM-54A-Mk60", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", + "name": "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN", + "roles": [ + "Strike", + "CAS", + "Runway Attack", + "Strike" + ] + } + ], + "filename": "f-14.png", + "enabled": true, + "liveries": { + "vf-103 sluggers 206 (1995)": { + "name": "VF-103 Sluggers 206 (1995)", + "countries": "All" + }, + "vf-143 pukin dogs low vis": { + "name": "VF-143 Pukin Dogs Low Vis (1998)", + "countries": "All" + }, + "rogue nation(top gun - maverick)": { + "name": "Top Gun: Maverick - Rogue Nation", + "countries": "All" + }, + "vf-31 tomcatters nk101 (2004)": { + "name": "VF-31 Tomcatters NK101 (2004)", + "countries": "All" + }, + "vf-32 fighting swordsmen 103": { + "name": "VF-32 Fighting Swordsmen 103 (1998)", + "countries": "All" + }, + "vf-103 jolly rogers hi viz": { + "name": "VF-103 Jolly Rogers Hi Viz", + "countries": "All" + }, + "vf-101 dark": { + "name": "VF-101 Dark", + "countries": "All" + }, + "vf-102 diamondbacks": { + "name": "01 - VF-102 Diamondbacks 1996", + "countries": "All" + }, + "vf-143 pukin dogs low vis (1995)": { + "name": "VF-143 Pukin Dogs Low Vis (1995)", + "countries": "All" + }, + "vx-4 xf-51 1988": { + "name": "VX-4 XF-51 1988", + "countries": "All" + }, + "top gun 114 hb weather": { + "name": "Top Gun 114 Maverick and Goose", + "countries": "All" + }, + "vf-24 renegades": { + "name": "VF-24 Renegades Low-Viz", + "countries": "All" + }, + "vf-11 red rippers (1997)": { + "name": "VF-11 Red Rippers (1997)", + "countries": "All" + }, + "vf-32 fighting swordsmen 100 (2000)": { + "name": "VF-32 Fighting Swordsmen 100 (2000)", + "countries": [ + "USA" + ] + }, + "vf-74 bedevilers 1991": { + "name": "VF-74 Be-Devilers 1991", + "countries": "All" + }, + "santa": { + "name": "Fictional Christmas Livery", + "countries": "All" + }, + "vf-103 sluggers 207 (1991)": { + "name": "VF-103 Sluggers 207 (1991)", + "countries": "All" + }, + "vf-32 fighting swordsmen 101": { + "name": "VF-32 Fighting Swordsmen 101 (1998)", + "countries": "All" + }, + "vf-103 last ride": { + "name": "VF-103 Last Ride", + "countries": "All" + }, + "vf-143 pukin dogs cag": { + "name": "VF-143 Pukin' Dogs CAG", + "countries": "All" + }, + "vx-9 vampires xf240 white whale": { + "name": "VX-9 Vampires XF240 White Whale", + "countries": "All" + }, + "vf-74 adversary": { + "name": "VF-74 Adversary", + "countries": "All" + }, + "vx-9 vandy 41 (1995)": { + "name": "VX-9 Vandy 41 (1995)", + "countries": "All" + }, + "vf-142 ghostriders": { + "name": "VF-142 Ghostriders", + "countries": "All" + }, + "vf-211 fighting checkmates": { + "name": "VF-211 Fighting Checkmates", + "countries": "All" + }, + "vf-101 grim reapers low vis": { + "name": "VF-101 Grim Reapers Low Vis", + "countries": "All" + }, + "chromecat": { + "name": "Fictional Chrome Cat ", + "countries": "All" + }, + "vf-32 fighting swordsmen 102": { + "name": "VF-32 Fighting Swordsmen 102 (1998)", + "countries": "All" + }, + "vf-102 diamondbacks 102": { + "name": "VF-102 Diamondbacks 102 (2000)", + "countries": "All" + }, + "vf-101 red": { + "name": "VF-101 Red", + "countries": "All" + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swing wing, 2 crew. Tomcat", + "abilities": "Drogue AAR, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-15C": { + "name": "F-15C", + "coalition": "blue", + "label": "F-15C Eagle", + "era": "Late Cold War", + "shortLabel": "15C", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel tank 610 gal", + "quantity": 3 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-120B*4, AIM-7M*2, AIM-9M*2, Fuel*3", + "name": "AIM-120B*4, AIM-7M*2, AIM-9M*2, Fuel*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9*2,AIM-120*6,Fuel", + "name": "AIM-9*2,AIM-120*6,Fuel", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 3 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-9*4,AIM-120*4,Fuel*3", + "name": "AIM-9*4,AIM-120*4,Fuel*3", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9*4,AIM-120*4,Fuel", + "name": "AIM-9*4,AIM-120*4,Fuel", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 3 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel*3", + "name": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel*3", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 3 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-9*2,AIM-120*6,Fuel*3", + "name": "AIM-9*2,AIM-120*6,Fuel*3", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9*4,AIM-7*4,Fuel", + "name": "AIM-9*4,AIM-7*4,Fuel", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120*8,Fuel", + "name": "AIM-120*8,Fuel", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 3 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-9*4,AIM-7*4,Fuel*3", + "name": "AIM-9*4,AIM-7*4,Fuel*3", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 3 + }, + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-120*8,Fuel*3", + "name": "AIM-120*8,Fuel*3", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel", + "name": "AIM-9*2,AIM-120*2,AIM-7*4,Fuel", + "roles": [ + "CAP" + ] + } + ], + "filename": "f-15.png", + "enabled": true, + "liveries": { + "106th sqn (8th airbase)": { + "name": "106th SQN (8th Airbase)", + "countries": [ + "ISR" + ] + }, + "433rd weapons sqn (wa)": { + "name": "433rd Weapons SQN (WA)", + "countries": [ + "USA" + ] + }, + "493rd fighter sqn (ln)": { + "name": "493rd Fighter SQN (LN)", + "countries": [ + "USA" + ] + }, + "12th fighter sqn (ak)": { + "name": "12th Fighter SQN (AK)", + "countries": [ + "USA" + ] + }, + "390th fighter sqn": { + "name": "390th Fighter SQN", + "countries": [ + "USA" + ] + }, + "65th aggressor sqn (wa) flanker": { + "name": "65th Aggressor SQN (WA) Flanker", + "countries": [ + "USA", + "AUSAF" + ] + }, + "65th aggressor sqn (wa) super_flanker": { + "name": "65th Aggressor SQN (WA) SUPER_Flanker", + "countries": [ + "USA", + "AUSAF" + ] + }, + "65th aggressor sqn (wa) mig": { + "name": "65th Aggressor SQN (WA) MiG", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ferris scheme": { + "name": "Ferris Scheme", + "countries": [ + "USA" + ] + }, + "58th fighter sqn (eg)": { + "name": "58th Fighter SQN (EG)", + "countries": [ + "USA" + ] + }, + "haf aegean ghost": { + "name": "Hellenic Airforece - Aegean Ghost (Fictional)", + "countries": [ + "GRC" + ] + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swept wing, 2 crew, all weather fighter. Eagle.", + "abilities": "Boom AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-16C_50": { + "name": "F-16C_50", + "coalition": "blue", + "label": "F-16C Viper", + "era": "Late Cold War", + "shortLabel": "16", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120B*2, AIM-9M*4, FUEL*3", + "name": "AIM-120B*2, AIM-9M*4, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120B*4, AIM-9M*2, FUEL*3", + "name": "AIM-120B*4, AIM-9M*2, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120B AMRAAM - Active Rdr AAM", + "quantity": 6 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120B*6, FUEL*3", + "name": "AIM-120B*6, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*4, FUEL*2", + "name": "AIM-120C*2, AIM-9X*4, FUEL*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AIM-9X*2, FUEL*3", + "name": "AIM-120C*4, AIM-9X*2, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AIM-9X*2, FUEL*3, TGP", + "name": "AIM-120C*4, AIM-9X*2, FUEL*3, TGP", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AIM-9X*2, FUEL*2", + "name": "AIM-120C*4, AIM-9X*2, FUEL*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 6 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*6, FUEL*3", + "name": "AIM-120C*6, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM", + "name": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*4, AIM-9X*2, FUEL*2, ECM, TGP", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 6 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*6, FUEL*2, ECM", + "name": "AIM-120C*6, FUEL*2, ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 6 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*6, FUEL*2, ECM, TGP", + "name": "AIM-120C*6, FUEL*2, ECM, TGP", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 6 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*6, FUEL*2", + "name": "AIM-120C*6, FUEL*2", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 6 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*6, FUEL*3, TGP", + "name": "AIM-120C*6, FUEL*3, TGP", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65D*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65D*2, FUEL*2, ECM, TGP", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65H*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65H*2, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65H - Maverick H (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65H*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65H*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65D*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65D*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x CBU-97 - 10 x SFW Cluster Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, CBU-97*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, CBU-97*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-82*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-82*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x CBU-87 - 202 x CEM Cluster Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, CBU-87*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, CBU-87*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-82HD*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-82HD*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BRU-57 with 2 x CBU-103 - 202 x CEM, CBU with WCMD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, CBU-103*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, CBU-103*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BRU-57 with 2 x CBU-105 - 10 x SFW, CBU with WCMD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, CBU-105*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, CBU-105*4, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 3 x Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-82*6, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-82*6, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 3 x Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-82HD*6, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-82HD*6, FUEL*2, ECM, TGP", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120*2, AIM-9X*2, MK-82SE*4, FUEL*2, ECM, TGP", + "name": "AIM-120*2, AIM-9X*2, MK-82SE*4, FUEL*2, ECM, TGP", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 3 x Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120*2, AIM-9X*2, MK-82SE*6, FUEL*2, ECM, TGP", + "name": "AIM-120*2, AIM-9X*2, MK-82SE*6, FUEL*2, ECM, TGP", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-84*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-84*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x Mk-82 AIR Ballute - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-82P*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-82P*4, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-12*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-12*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "TER-9A with 2 x GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-12*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-12*4, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-10*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-10*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-24 Paveway III - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-24*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-24*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-31(V)1/B - JDAM, 2000lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-31-1B*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-31-1B*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-31(V)3/B - JDAM, 2000lb GPS Guided Penetrator Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-31-3B*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-31-3B*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-38*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-38*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BRU-57 with 2 x GBU-38 - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, GBU-38*4, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, GBU-38*4, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65K*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65K*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65G*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65G*2, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 1 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "LAU-117 with AGM-65G - Maverick G (IIR ASM - Lg Whd)", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-65G, AGM-65K, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, AGM-65G, AGM-65K, FUEL*2, ECM, TGP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + }, + { + "name": "AN/ASQ-213 HTS - HARM Targeting System", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*3, TGP, HTS", + "name": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*3, TGP, HTS", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/ASQ-213 HTS - HARM Targeting System", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*2, ECM, TGP, HTS", + "name": "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*2, ECM, TGP, HTS", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 4 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/ASQ-213 HTS - HARM Targeting System", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, AGM-88C*4, ECM, TGP, HTS", + "name": "AIM-120C*2, AIM-9X*2, AGM-88C*4, ECM, TGP, HTS", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "Fuel tank 300 gal", + "quantity": 1 + }, + { + "name": "AN/ASQ-213 HTS - HARM Targeting System", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AGM-88C*2, FUEL*3, TGP, HTS", + "name": "AIM-120C*4, AGM-88C*2, FUEL*3, TGP, HTS", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/ASQ-213 HTS - HARM Targeting System", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AGM-88C*2, FUEL*2, ECM, TGP, HTS", + "name": "AIM-120C*4, AGM-88C*2, FUEL*2, ECM, TGP, HTS", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 4 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/ASQ-213 HTS - HARM Targeting System", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*4, AGM-88C*4, ECM, TGP, HTS", + "name": "AIM-120C*4, AGM-88C*4, ECM, TGP, HTS", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts Mk61, Practice", + "quantity": 2 + }, + { + "name": "Fuel tank 370 gal", + "quantity": 2 + }, + { + "name": "ALQ-184 Long - ECM Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-28 LITENING - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C*2, AIM-9X*2, MK-61*2, FUEL*2, ECM, TGP", + "name": "AIM-120C*2, AIM-9X*2, MK-61*2, FUEL*2, ECM, TGP", + "roles": [ + "FAC-A" + ] + } + ], + "filename": "f-16c.png", + "enabled": true, + "liveries": { + "haf_347_perseus": { + "name": "HAF 347S Perseus Squadron", + "countries": [ + "GRC" + ] + }, + "ami, 5 stormo 23 gruppo": { + "name": "Italian Air Force, 5° Stormo, 23 Gruppo", + "countries": [ + "ITA" + ] + }, + "haf_337_ghost": { + "name": "HAF 337 Ghost Squadron", + "countries": [ + "GRC" + ] + }, + "haf_ 330_thunder": { + "name": "HAF 330 Thunder Squadron", + "countries": [ + "GRC" + ] + }, + "haf_336_olympus": { + "name": "HAF 336 Olympus Squadron", + "countries": [ + "GRC" + ] + }, + "iaf_117th_squadron": { + "name": "IAF 117th squadron", + "countries": [ + "ISR" + ] + }, + "jasdf 8th tfs": { + "name": "JASDF 8th TFS", + "countries": [ + "JPN" + ] + }, + "haf_340_fox": { + "name": "HAF 340 Fox Squadron", + "countries": [ + "GRC" + ] + }, + "haf_346_jason": { + "name": "HAF 346 Jason Squadron", + "countries": [ + "GRC" + ] + }, + "paf_no.9_griffins_1": { + "name": "PAF No.9 Griffins (TRIBUTE TO WC NAUMAN)", + "countries": [ + "PAK" + ] + }, + "522nd_fighter_squadron": { + "name": "522nd Fighter Squadron 'Fireballs'", + "countries": [ + "USA" + ] + }, + "default": { + "name": "default livery", + "countries": [ + "USA" + ] + }, + "18th agrs arctic splinter": { + "name": "18th AGRS ArÑtic Splinter", + "countries": [ + "USA", + "AUSAF" + ] + }, + "iaf_115th_aggressors_squadron": { + "name": "IAF 115th aggressors squadron", + "countries": [ + "ISR" + ] + }, + "chile air force 732": { + "name": "Chile Air Force 732", + "countries": [ + "CHL" + ] + }, + "iaf_110th_squadron": { + "name": "IAF 110th squadron", + "countries": [ + "ISR" + ] + }, + "paf_no.29_aggressors": { + "name": "PAF No.29 Aggressor", + "countries": [ + "PAK" + ] + }, + "79th_fighter_squadron": { + "name": "79th Fighter Squadron 'Tigers'", + "countries": [ + "USA" + ] + }, + "paf_no.5_falcons": { + "name": "PAF No.5 Falcons", + "countries": [ + "PAK" + ] + }, + "18th agrs splinter": { + "name": "18th AGRS Blue Splinter", + "countries": [ + "USA", + "AUSAF" + ] + }, + "dark_viper": { + "name": "F-16C Dark Viper", + "countries": [ + "USA" + ] + }, + "jasdf 6th tfs": { + "name": "JASDF 6th TFS", + "countries": [ + "JPN" + ] + }, + "23rd_fighter_squadron": { + "name": "23rd Fighter Squadron 'Fighting Hawks'", + "countries": [ + "USA" + ] + }, + "polish af standard": { + "name": "Polish AF standard", + "countries": [ + "POL" + ] + }, + "480th_fighter_squadron": { + "name": "480th Fighter Squadron 'Warhawks'", + "countries": [ + "USA" + ] + }, + "18th agrs bdu splinter": { + "name": "18th AGRS BDU Splinter", + "countries": [ + "USA", + "AUSAF" + ] + }, + "174th_fighter_squadron": { + "name": "174th Fighter Squadron ANG,Iowa AFB", + "countries": [ + "USA" + ] + }, + "thk_191_filo": { + "name": "Türk Hava Kuvvetleri, 191 Filo", + "countries": [ + "TUR" + ] + }, + "chile air force 746": { + "name": "Chile Air Force 746", + "countries": [ + "CHL" + ] + }, + "haf_335_tiger": { + "name": "HAF 335 Tiger Squadron", + "countries": [ + "GRC" + ] + }, + "77th_fighter_squadron": { + "name": "77th Fighter Squadron 'Gamblers' ", + "countries": [ + "USA" + ] + }, + "132nd_wing _iowa_ang": { + "name": "132nd Wing Iowa ANG, Des Moines AFB", + "countries": [ + "USA" + ] + }, + "usaf 64th aggressor sqn-splinter": { + "name": "USAF 64th Aggressor SQN-Splinter", + "countries": [ + "USA", + "AUSAF" + ] + }, + "14th_fighter_squadron": { + "name": "14th Fighter Squadron 'Samurais'", + "countries": [ + "USA" + ] + }, + "152nd_fighter_squadron": { + "name": "152nd Fighter Squadron 'Las Vaqueros'", + "countries": [ + "USA" + ] + }, + "179th_fighter_squadron": { + "name": "179th Fighter Squadron 'Bulldogs'", + "countries": [ + "USA" + ] + }, + "paf_no.19_sherdils": { + "name": "PAF No.19 Sherdils", + "countries": [ + "PAK" + ] + }, + "64th_aggressor_squadron_ghost": { + "name": "64th Aggressor Squadron “Ghost", + "countries": [ + "USA", + "AUSAF" + ] + }, + "paf_no.9 griffins_2": { + "name": "PAF No.9 Griffins", + "countries": [ + "PAK" + ] + }, + "paf_no.11_arrows": { + "name": "PAF No.11 Arrows", + "countries": [ + "PAK" + ] + }, + "haf_343_star": { + "name": "HAF 343 Star Squadron", + "countries": [ + "GRC" + ] + }, + "80th_fighter_squadron": { + "name": "80th Fighter Squadron, Kunsan AFB", + "countries": [ + "USA" + ] + }, + "36th_fighter_squadron": { + "name": "36th Fighter Squadron Osan Air Base", + "countries": [ + "USA" + ] + }, + "22nd_fighter_squadron": { + "name": "22nd Fighter Squadron 'Stingers'", + "countries": [ + "USA" + ] + }, + "55th_fighter_squadron": { + "name": "55th Fighter Squadron 'Fifty Fifth'", + "countries": [ + "USA" + ] + }, + "iaf_101st_squadron": { + "name": "IAF 101st squadron", + "countries": [ + "ISR" + ] + }, + "polish_af_31blt6th_tactical_sqn": { + "name": "Polish AF 31.Blt 6th Tactical Sqn (PoznaÅ„-Krzesiny AB) - Tiger Meet", + "countries": [ + "POL" + ] + }, + "13th_fighter_squadron": { + "name": "13th Fighter Squadron 'Panthers'", + "countries": [ + "USA" + ] + }, + "haf_341_arrow": { + "name": "HAF 341 Arrow Squadron", + "countries": [ + "GRC" + ] + }, + "usaf 64th aggressor sqn - shark": { + "name": "USAF 64th Aggressor SQN - Shark", + "countries": [ + "USA", + "AUSAF" + ] + }, + "chile air force 851": { + "name": "Chile Air Force 851", + "countries": [ + "CHL" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew, all weather fighter and strike. Viper.", + "abilities": "Boom AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-4E": { + "name": "F-4E", + "coalition": "blue", + "label": "F-4E Phantom II", + "era": "Mid Cold War", + "shortLabel": "4", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-7 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-9*4,AIM-7*4", + "name": "AIM-9*4,AIM-7*4", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-118a with AGM-45B Shrike ARM (Imp)", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65D - Maverick D (IIR ASM)", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM45*2_AGM-65D*4_AIM7*2_ECM", + "name": "AGM45*2_AGM-65D*4_AIM7*2_ECM", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "LAU-118a with AGM-45B Shrike ARM (Imp)", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-45*2,AIM-7*2,Fuel*2,ECM", + "name": "AGM-45*2,AIM-7*2,Fuel*2,ECM", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "MER6 with 6 x Mk-82 - 500lb GP Bombs LD", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-82*18,AIM-7*2,ECM", + "name": "Mk-82*18,AIM-7*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-12*2,AIM-7*2,Fuel*2,ECM", + "name": "GBU-12*2,AIM-7*2,Fuel*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BRU-42 with 3 x Mk-20 Rockeye - 490lbs CBUs, 247 x HEAT Bomblets", + "quantity": 4 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk20*12,AIM-7*2,ECM", + "name": "Mk20*12,AIM-7*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-82 - 500lb GP Bombs LD", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-82*6,AIM-7*2,Fuel*2,ECM", + "name": "Mk-82*6,AIM-7*2,Fuel*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "GBU-10 - 2000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-10*2,AIM-7*2,Fuel*2,ECM", + "name": "GBU-10*2,AIM-7*2,Fuel*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "BRU-42 with 3 x Mk-20 Rockeye - 490lbs CBUs, 247 x HEAT Bomblets", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk20*6,AIM-7*2,Fuel*2,ECM", + "name": "Mk20*6,AIM-7*2,Fuel*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "LAU-118a with AGM-45B Shrike ARM (Imp)", + "quantity": 4 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-45*4,AIM-7*2,ECM", + "name": "AGM-45*4,AIM-7*2,ECM", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-65K*4,AIM-7*2,Fuel*2,ECM", + "name": "AGM-65K*4,AIM-7*2,Fuel*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "F-4 Fuel tank-C", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel*3", + "name": "Fuel*3", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "LAU-7 with 2 x AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-9*4,AIM-7*4,Fuel*2", + "name": "AIM-9*4,AIM-7*4,Fuel*2", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "ALQ-131 - ECM Pod", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "Mk-84*2,AIM-7*2,ECM", + "name": "Mk-84*2,AIM-7*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "F-4 Fuel tank-W", + "quantity": 2 + }, + { + "name": "LAU-88 with 2 x AGM-65K - Maverick K (CCD Imp ASM)", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 4 + }, + { + "name": "F-4 Fuel tank-C", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-65K*4,AIM-7M*4,Fuel*3", + "name": "AGM-65K*4,AIM-7M*4,Fuel*3", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "f-4.png", + "enabled": true, + "liveries": { + "haf aegean ghost": { + "name": "Hellenic Airforce - Aegean Ghost", + "countries": [ + "GRC" + ] + }, + "iriaf asia minor": { + "name": "IRIAF Asia Minor", + "countries": [ + "IRN" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "GER" + ] + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swept wing, 2 crew. Phantom", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-5E-3": { + "name": "F-5E-3", + "coalition": "blue", + "label": "F-5E Tiger", + "era": "Mid Cold War", + "shortLabel": "5", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82LD*4,AIM-9P*2,Fuel 275", + "name": "Mk-82LD*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9P*2, Fuel 275*3", + "name": "AIM-9P*2, Fuel 275*3", + "roles": [ + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P5 Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9P5*2, Fuel 275*3", + "name": "AIM-9P5*2, Fuel 275*3", + "roles": [ + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9P*2, Fuel 150*3", + "name": "AIM-9P*2, Fuel 150*3", + "roles": [ + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P5 Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9P5*2, Fuel 150*3", + "name": "AIM-9P5*2, Fuel 150*3", + "roles": [ + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 4 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82SE*4,AIM-9P*2,Fuel 275", + "name": "Mk-82SE*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "CBU-52B - 220 x HE/Frag bomblets", + "quantity": 4 + } + ], + "enabled": true, + "code": "CBU-52B*4,AIM-9P*2,Fuel 275", + "name": "CBU-52B*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 4 + } + ], + "enabled": true, + "code": "LAU-3 HE*4,AIM-9P*2,Fuel 275", + "name": "LAU-3 HE*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", + "quantity": 4 + } + ], + "enabled": true, + "code": "LAU-3 HEAT*4,AIM-9P*2,Fuel 275", + "name": "LAU-3 HEAT*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 4 + } + ], + "enabled": true, + "code": "LAU-68 HE*4,AIM-9P*2,Fuel 275", + "name": "LAU-68 HE*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", + "quantity": 4 + } + ], + "enabled": true, + "code": "LAU-68 HEAT*4,AIM-9P*2,Fuel 275", + "name": "LAU-68 HEAT*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "M117 - 750lb GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "M-117*4,AIM-9P*2,Fuel 275", + "name": "M-117*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-12*4,AIM-9P*2,Fuel 275", + "name": "GBU-12*4,AIM-9P*2,Fuel 275", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "CBU-52B - 220 x HE/Frag bomblets", + "quantity": 5 + } + ], + "enabled": true, + "code": "CBU-52B*5,AIM-9*2", + "name": "CBU-52B*5,AIM-9*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 5 + } + ], + "enabled": true, + "code": "Mk-82LD*5,AIM-9*2", + "name": "Mk-82LD*5,AIM-9*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 5 + } + ], + "enabled": true, + "code": "Mk-82SE*5,AIM-9*2", + "name": "Mk-82SE*5,AIM-9*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 2 + }, + { + "name": "5 x Mk-82 - 500lb GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82LD*7,AIM-9P*2, Fuel 275*2", + "name": "Mk-82LD*7,AIM-9P*2, Fuel 275*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 2 + }, + { + "name": "5 x Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 1 + } + ], + "enabled": true, + "code": "Mk-82SE*7,AIM-9P*2, Fuel 275*2", + "name": "Mk-82SE*7,AIM-9P*2, Fuel 275*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 1 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 2 + }, + { + "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + } + ], + "enabled": true, + "code": "LAU-3 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", + "name": "LAU-3 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 1 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 2 + }, + { + "name": "LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + } + ], + "enabled": true, + "code": "LAU-68 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", + "name": "LAU-68 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "M117 - 750lb GP Bomb LD", + "quantity": 5 + } + ], + "enabled": true, + "code": "M-117*5,AIM-9*2", + "name": "M-117*5,AIM-9*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9P*2, Fuel 275", + "name": "AIM-9P*2, Fuel 275", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9P*2, Fuel 150", + "name": "AIM-9P*2, Fuel 150", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P5 Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9P5*2, Fuel 275", + "name": "AIM-9P5*2, Fuel 275", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P5 Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9P5*2, Fuel 150", + "name": "AIM-9P5*2, Fuel 150", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9B Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9B*2, Fuel 275", + "name": "AIM-9B*2, Fuel 275", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9B Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9B*2, Fuel 150", + "name": "AIM-9B*2, Fuel 150", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9B Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 275Gal Fuel tank", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9B*2, Fuel 275*3", + "name": "AIM-9B*2, Fuel 275*3", + "roles": [ + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9B Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9B*2, Fuel 150*3", + "name": "AIM-9B*2, Fuel 150*3", + "roles": [ + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AN/ASQ-T50 TCTS Pod - ACMI Pod", + "quantity": 1 + }, + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 1 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AN/ASQ-T50, AIM-9P, Fuel 150", + "name": "AN/ASQ-T50, AIM-9P, Fuel 150", + "roles": [] + }, + { + "items": [ + { + "name": "AIM-9B Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9B*2", + "name": "AIM-9B*2", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9P*2", + "name": "AIM-9P*2", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P5 Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9P5*2", + "name": "AIM-9P5*2", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9P5 Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + }, + { + "name": "F-5 150Gal Fuel tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Antiship Mk82", + "name": "Antiship Mk82", + "roles": [ + "Antiship Strike" + ] + } + ], + "liveryID": [ + "ir iriaf 43rd tfs" + ], + "filename": "f-5.png", + "enabled": true, + "liveries": { + "us aggressor vfc-13 40": { + "name": "Aggressor VFC-13 40", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch swiss generic": { + "name": "Swiss Generic two-tone skin", + "countries": [ + "SUI" + ] + }, + "tw ngrc 5315": { + "name": "NGRC 5thFG 5315", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch j-3079": { + "name": "J-3079", + "countries": [ + "SUI" + ] + }, + "sa royal saudi air force": { + "name": "Royal Saudi Air Force", + "countries": [ + "SAU" + ] + }, + "no 336 sq": { + "name": "336 Skvadron", + "countries": [ + "NOR" + ] + }, + "tw rocaf 7thfg(m)": { + "name": "ROCAF 7thFG(LV)", + "countries": [ + "USA", + "AUSAF" + ] + }, + "us aggressor vfc-111 105 wwii b": { + "name": "Sundowners VFC-111 105 WWII B", + "countries": [ + "USA", + "AUSAF" + ] + }, + "br fab 4828": { + "name": "2/1 GAvCa - FAB 4828", + "countries": [ + "BRA" + ] + }, + "usaf 'southeast asia'": { + "name": "USAF 'Southeast Asia'", + "countries": [ + "USA", + "AUSAF" + ] + }, + "br fab 4846": { + "name": "FAB 4846", + "countries": [ + "BRA" + ] + }, + "aggressor vfc-13 21": { + "name": "Aggressor VFC-13 21", + "countries": [ + "USA", + "AUSAF" + ] + }, + "no 334 sqn 373": { + "name": "RNoAF 334 sqn 373", + "countries": [ + "NOR" + ] + }, + "rocaf 7th fighter group": { + "name": "ROCAF 7th Fighter Group", + "countries": [ + "AUSAF" + ] + }, + "ch j-3036 2017": { + "name": "J-3036 Sion 2017", + "countries": [ + "SUI" + ] + }, + "us aggressor vfc-111 116": { + "name": "Sundowners VFC-116", + "countries": [ + "USA", + "AUSAF" + ] + }, + "black 'mig-28'": { + "name": "black 'Mig-28'", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch j-3073 2017": { + "name": "J-3073_2017", + "countries": [ + "SUI" + ] + }, + "fi 11th fs lapland air command": { + "name": "FiAF 11th FS Lapland Air Command", + "countries": [ + "FIN" + ] + }, + "ir iriaf azarakhsh": { + "name": "HESA Azarakhsh", + "countries": [ + "IRN" + ] + }, + "ch j-3098": { + "name": "J-3098", + "countries": [ + "SUI" + ] + }, + "ir iriaf 43rd tfs": { + "name": "IRIAF - 43rd TFS", + "countries": [ + "IRN" + ] + }, + "no 338 sqn 215": { + "name": "RNoAF 338 sqn 215", + "countries": [ + "NOR" + ] + }, + "us usaf grape 31": { + "name": "USAF Grape 31", + "countries": [ + "USA", + "AUSAF" + ] + }, + "no 332 sqn ah-p": { + "name": "RNoAF 332 sqn AH-P", + "countries": [ + "NOR" + ] + }, + "ch j-3001 variante 1996": { + "name": "J-3001 GRD Emmen 1996", + "countries": [ + "SUI" + ] + }, + "us aggressor vfc-111 01": { + "name": "Sundowners VFC-111 01", + "countries": [ + "USA", + "AUSAF" + ] + }, + "3rd main jet base group command, turkey": { + "name": "133 squadron, 3rd Main Jet Base Group Command, Turkey", + "countries": [ + "TUR" + ] + }, + "kr rokaf 10th fighter wing": { + "name": "ROKAF 10th FW KF-5E 10-584", + "countries": [ + "KOR" + ] + }, + "sp spanish air force 21-51": { + "name": "Ejercito del Aire Camo 21-51", + "countries": [ + "SPN" + ] + }, + "aggressor vfc-13 11": { + "name": "Aggressor VFC-13 11", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch j-3001 variante 1986": { + "name": "J-3001 GRD Emmen 1986", + "countries": [ + "SUI" + ] + }, + "usa standard": { + "name": "Standard Gray", + "countries": [ + "BRA", + "MYS", + "AUS", + "ABH", + "RUS", + "SPN", + "ISR", + "USA", + "BHR", + "BLR", + "HRV", + "RSO", + "SVK", + "IRN", + "UKR", + "TUR", + "JPN", + "PRK", + "SRB", + "KAZ", + "BGR", + "BEL", + "INS", + "THA", + "AUSAF", + "PAK", + "JOR", + "FIN", + "MEX", + "NOR", + "IRQ", + "SYR", + "ITA", + "GRC", + "POL", + "NETH", + "GER", + "SUI", + "CHN", + "SAU", + "SWE", + "ROU", + "FRA", + "KOR", + "HUN", + "AUT", + "GRG", + "DEN", + "TUN", + "EGY", + "IND", + "CZE", + "CAN", + "SDN", + "UK" + ] + }, + "5th fs merzifon air base, turkey": { + "name": "5th fs Merzifon air base, Turkish air force", + "countries": [ + "TUR" + ] + }, + "ch j-3001 variante 2000": { + "name": "J-3001 FlSt 08 2000", + "countries": [ + "SUI" + ] + }, + "ir iriaf camo": { + "name": "IRIAF F-5E Standard", + "countries": [ + "IRN" + ] + }, + "it aereonautica militare italiana": { + "name": "Aereonautica Militare Italiana", + "countries": [ + "ITA" + ] + }, + "ch j-3038": { + "name": "J-3038", + "countries": [ + "SUI" + ] + }, + "ch j-3033_2017": { + "name": "J-3033_2017", + "countries": [ + "SUI" + ] + }, + "us aggressor vfc-13 28 fict splinter": { + "name": "Aggressor VFC-13 28 Fictional Splinter", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch j-3025": { + "name": "J-3025 FlSt 11/18 January 2006", + "countries": [ + "SUI" + ] + }, + "us aggressor vfc-13 01": { + "name": "Aggressor VFC-13 01", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch patrouille suisse j-3088": { + "name": "Patrouille Suisse J-3088", + "countries": [ + "SUI" + ] + }, + "us aggressor vfc-13 25": { + "name": "Aggressor VFC-13 25", + "countries": [ + "USA", + "AUSAF" + ] + }, + "no 334 sqn ri-h": { + "name": "RNoAF 334 sqn RI-H", + "countries": [ + "NOR" + ] + }, + "br fab 4841": { + "name": "FAB 4841 60th an", + "countries": [ + "BRA" + ] + }, + "aggressor marine scheme": { + "name": "Aggressor Marine Scheme", + "countries": [ + "USA", + "AUSAF" + ] + }, + "sp spanish air force 464-48": { + "name": "Ejercito del Aire 464-48", + "countries": [ + "SPN" + ] + }, + "gr haf f-5e grey": { + "name": "HAF F-5E Grey", + "countries": [ + "GRC" + ] + }, + "tr turkish stars": { + "name": "Turkish Stars", + "countries": [ + "TUR" + ] + }, + "gb no.29 squadron raf": { + "name": "No.29 Squadron RAF (Fictional)", + "countries": [ + "UK" + ] + }, + "br fab 4834": { + "name": "1/1 GAvCa - FAB 4834", + "countries": [ + "BRA" + ] + }, + "ch j-3026": { + "name": "J-3026 FlSt 11 approx. 1989", + "countries": [ + "SUI" + ] + }, + "aggressor snake scheme": { + "name": "Aggressor Snake Scheme", + "countries": [ + "USA", + "AUSAF" + ] + }, + "us aggressor vfc-111 115": { + "name": "Sundowners VFC-115", + "countries": [ + "USA", + "AUSAF" + ] + }, + "us aggressor vmft-401 02 2011": { + "name": "Aggressor VMFT-401 02 2011", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch j-3008": { + "name": "J-3008 FlSt 08/19 February 2005", + "countries": [ + "SUI" + ] + }, + "aggressor desert scheme": { + "name": "Aggressor Desert Scheme", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ch j-3074": { + "name": "J-3074", + "countries": [ + "SUI" + ] + }, + "ch j-3036": { + "name": "J-3036 FlSt 01 1985", + "countries": [ + "SUI" + ] + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swept wing, single crew. Tiger", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-86F Sabre": { + "name": "F-86F Sabre", + "coalition": "blue", + "label": "F-86F Sabre", + "era": "Early Cold War", + "shortLabel": "86", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 120 gallons", + "quantity": 2 + } + ], + "enabled": true, + "code": "120gal Fuel*2", + "name": "120gal Fuel*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 200 gallons", + "quantity": 2 + } + ], + "enabled": true, + "code": "200gal Fuel*2", + "name": "200gal Fuel*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 200 gallons", + "quantity": 2 + }, + { + "name": "Fuel Tank 120 gallons", + "quantity": 2 + } + ], + "enabled": true, + "code": "120gal Fuel*2, 200gal Fuel*2", + "name": "120gal Fuel*2, 200gal Fuel*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "LAU-7 with AIM-9B Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "GAR-8*2", + "name": "GAR-8*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 120 gallons", + "quantity": 2 + }, + { + "name": "LAU-7 with AIM-9B Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "120gal Fuel*2, GAR-8*2", + "name": "120gal Fuel*2, GAR-8*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "2 x HVAR, UnGd Rkts", + "quantity": 8 + } + ], + "enabled": true, + "code": "HVAR*16", + "name": "HVAR*16", + "roles": [ + "Strike", + "CAS", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 200 gallons", + "quantity": 2 + }, + { + "name": "2 x HVAR, UnGd Rkts", + "quantity": 4 + } + ], + "enabled": true, + "code": "200gal Fuel*2, HVARx2*4", + "name": "200gal Fuel*2, HVARx2*4", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "AN-M64 - 500lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AN-M64*2", + "name": "AN-M64*2", + "roles": [ + "CAS", + "Strike", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 200 gallons", + "quantity": 2 + }, + { + "name": "AN-M64 - 500lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "200gal Fuel*2, AN-M64*2", + "name": "200gal Fuel*2, AN-M64*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "M117 - 750lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "M117*2", + "name": "M117*2", + "roles": [ + "CAS", + "Strike", + "Antiship Strike" + ] + } + ], + "filename": "f-5.png", + "enabled": true, + "liveries": { + "us air force (skyblazers)": { + "name": "US Air Force Jet Team Skyblazer", + "countries": [ + "USA" + ] + }, + "canada air force": { + "name": "Canada Air Force", + "countries": [ + "CAN" + ] + }, + "us air force (squadron 39)": { + "name": "US Air Force (Squadron 39)", + "countries": [ + "USA" + ] + }, + "iiaf bare metall": { + "name": "IIAF Bare Metal Weathered", + "countries": [ + "IRN" + ] + }, + "us air force (green)": { + "name": "US Air Force (Green)", + "countries": [ + "USA" + ] + }, + "us air force (ex-usaf f-86a sabre)": { + "name": "US Air Force ex-USAF F-86A Sabre", + "countries": [ + "USA" + ] + }, + "default livery": { + "name": "default livery", + "countries": [ + "BRA", + "CUB", + "MYS", + "ARE", + "AUS", + "ABH", + "RUS", + "PHL", + "SPN", + "ISR", + "SUN", + "USA", + "BHR", + "MAR", + "BLR", + "HRV", + "DZA", + "OMN", + "RSO", + "SVK", + "HND", + "IRN", + "UKR", + "TUR", + "JPN", + "PRK", + "SRB", + "IDN", + "KAZ", + "BGR", + "BEL", + "INS", + "THA", + "LBY", + "AUSAF", + "VEN", + "PAK", + "JOR", + "RSA", + "FIN", + "MEX", + "KWT", + "NOR", + "IRQ", + "SYR", + "ITA", + "NZG", + "GRC", + "POL", + "NETH", + "GER", + "SUI", + "CHN", + "SAU", + "SWE", + "YEM", + "VNM", + "ROU", + "RSI", + "FRA", + "CHL", + "KOR", + "HUN", + "AUT", + "GRG", + "DEN", + "TUN", + "EGY", + "IND", + "CZE", + "ETH", + "CAN", + "SDN", + "QAT", + "UK", + "YUG" + ] + }, + "royal saudi air force": { + "name": "RSAF", + "countries": [ + "SAU" + ] + }, + "us air force": { + "name": "US Air Force", + "countries": [ + "USA" + ] + }, + "haf 342sqn": { + "name": "Hellenic Airforce 342sqn", + "countries": [ + "GRC" + ] + }, + "japan air force": { + "name": "Japan Air Force", + "countries": [ + "JPN" + ] + }, + "haf 341sqn": { + "name": "Hellenic Airforce 341sqn", + "countries": [ + "GRC" + ] + }, + "us air force (code fu-178)": { + "name": "US Air Force FU-178", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "Single engine, swept wing, 1 crew. Sabre", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "FA-18C_hornet": { + "name": "FA-18C_hornet", + "coalition": "blue", + "era": "Late Cold War", + "label": "F/A-18C", + "shortLabel": "18", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + }, + { + "name": "LAU-115 with 2 x LAU-127 AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9M*6, AIM-7M*2, FUEL*3", + "name": "AIM-9M*6, AIM-7M*2, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-115 with 2 x LAU-127 AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*6, AIM-7M*2, FUEL*2", + "name": "AIM-9M*6, AIM-7M*2, FUEL*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, MK-84*2, FUEL*2", + "name": "AIM-9M*2, MK-84*2, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, MK-83*4, FUEL*2", + "name": "AIM-9M*2, MK-83*4, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + } + ], + "enabled": true, + "code": "Carrier Landing", + "name": "Carrier Landing", + "roles": [] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-115C with AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9M*2, AIM-7M*4, FUEL*3", + "name": "AIM-9M*2, AIM-7M*4, FUEL*3", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x CBU-99 - 490lbs, 247 x HEAT Bomblets", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, CBU-99*4, FUEL*2", + "name": "AIM-9M*2, CBU-99*4, FUEL*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, MK-82SE*4, FUEL*2", + "name": "AIM-9M*2, MK-82SE*4, FUEL*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x Mk-20 Rockeye - 490lbs CBU, 247 x HEAT Bomblets", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, MK-20*4, FUEL*2", + "name": "AIM-9M*2, MK-20*4, FUEL*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, MK-82*4, FUEL*2", + "name": "AIM-9M*2, MK-82*4, FUEL*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, AIM-7M*2, FUEL*2", + "name": "AIM-9M*2, AIM-7M*2, FUEL*2", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, MK-83*2, FUEL*2", + "name": "AIM-9M*2, MK-83*2, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x LAU-10 pod - 4 x 127mm ZUNI, UnGd Rkts Mk71, HE/FRAG", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, ZUNI*4, FUEL*2", + "name": "AIM-9M*2, ZUNI*4, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x LAU-61 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, LAU-61*4, FUEL*2", + "name": "AIM-9M*2, LAU-61*4, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x LAU-68 pod - 7 x 2.75\" Hydra, UnGd Rkts Mk5, HEAT", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, LAU-68*4, FUEL*2", + "name": "AIM-9M*2, LAU-68*4, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + }, + { + "name": "AIM-7M Sparrow Semi-Active Radar", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M*2, AIM-7M*2, FUEL*1", + "name": "AIM-9M*2, AIM-7M*2, FUEL*1", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-31(V)4/B - JDAM, 2000lb GPS Guided Penetrator Bomb", + "quantity": 4 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9X*2, AIM-120C-5*1, GBU-31*4, ATFLIR, FUEL", + "name": "AIM-9X*2, AIM-120C-5*1, GBU-31*4, ATFLIR, FUEL", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "LAU-115 with 2 x LAU-127 AIM-120C AMRAAM - Active Radar AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 3 + } + ], + "enabled": true, + "code": "AIM-9X*2, AIM-120C-5*6, FUEL*3", + "name": "AIM-9X*2, AIM-120C-5*6, FUEL*3", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "LAU-117 with AGM-65F - Maverick F (IIR ASM)", + "quantity": 4 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9X*2, AIM-120C-5*1, AGM-65D*4, ATFLIR, FUEL", + "name": "AIM-9X*2, AIM-120C-5*1, AGM-65D*4, ATFLIR, FUEL", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 4 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9X*2, AIM-120C-5*2, AGM-88C*2, FUEL", + "name": "AIM-9X*2, AIM-120C-5*2, AGM-88C*2, FUEL", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BRU-55 with 2 x GBU-38 - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + }, + { + "name": "BRU-33 with 2 x GBU-12 - 500lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9X*2, AIM-120C-5*1, GBU-38*4, GBU-12*4, ATFLIR, FUEL", + "name": "AIM-9X*2, AIM-120C-5*1, GBU-38*4, GBU-12*4, ATFLIR, FUEL", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9X Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-84H SLAM-ER (Expanded Response)", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + }, + { + "name": "AWW-13 DATALINK POD", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9X*2, AIM-120C-5*1, AGM-84E*2, DATALINK, ATFLIR, FUEL*2", + "name": "AIM-9X*2, AIM-120C-5*1, AGM-84E*2, DATALINK, ATFLIR, FUEL*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-84D Harpoon AShM", + "quantity": 4 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M*2, AIM-120C-5*1, AGM-84D*4, ATFLIR, FUEL", + "name": "AIM-9M*2, AIM-120C-5*1, AGM-84D*4, ATFLIR, FUEL", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 1 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M*2, ATFLIR, FUEL", + "name": "AIM-9M*2, ATFLIR, FUEL", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "FPU-8A Fuel Tank 330 gallons", + "quantity": 2 + }, + { + "name": "AN/ASQ-228 ATFLIR - Targeting Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M*2, ATFLIR, FUEL*2", + "name": "AIM-9M*2, ATFLIR, FUEL*2", + "roles": [ + "Reconnaissance" + ] + } + ], + "filename": "fa-18c.png", + "enabled": true, + "liveries": { + "vfa-192": { + "name": "VFA-192", + "countries": [ + "USA" + ] + }, + "nsawc brown splinter": { + "name": "NSAWC brown splinter", + "countries": [ + "USA", + "AUSAF" + ] + }, + "vfa-34": { + "name": "VFA-34", + "countries": [ + "USA" + ] + }, + "vmfa-232": { + "name": "VMFA-232", + "countries": [ + "USA" + ] + }, + "vmfat-101": { + "name": "VMFAT-101", + "countries": [ + "USA" + ] + }, + "vmfa-232 high visibility": { + "name": "VMFA-232 high visibility", + "countries": [ + "USA" + ] + }, + "vmfat-101 high visibility": { + "name": "VMFAT-101 high visibility", + "countries": [ + "USA" + ] + }, + "vfa-37": { + "name": "VFA-37", + "countries": [ + "USA" + ] + }, + "fictional russia air force": { + "name": "Fictional Russia Air Force", + "countries": [ + "AUSAF", + "RUS" + ] + }, + "canada 150 demo jet": { + "name": "Canada 150 Demo Jet", + "countries": [ + "CAN" + ] + }, + "fictional uk air force": { + "name": "Fictional UK Air Force", + "countries": [ + "UK" + ] + }, + "vfa-131": { + "name": "VFA-131", + "countries": [ + "USA" + ] + }, + "vmfa-122 high visibility": { + "name": "VMFA-122 high visibility", + "countries": [ + "USA" + ] + }, + "spain 462th escuadron c.15-79": { + "name": "Spain 462th Escuadron C.15-79", + "countries": [ + "SPN" + ] + }, + "vmfat-101 high visibility 2005": { + "name": "VMFAT-101 high visibility 2005", + "countries": [ + "USA" + ] + }, + "vmfa-323": { + "name": "VMFA-323", + "countries": [ + "USA" + ] + }, + "vx-31 cona": { + "name": "VX-31 CoNA", + "countries": [ + "USA" + ] + }, + "fictional turkey 162nd sq": { + "name": "162nd Sqn Harpoon", + "countries": [ + "TUR" + ] + }, + "nawdc brown": { + "name": "NAWDC brown", + "countries": [ + "USA", + "AUSAF" + ] + }, + "spain 151th escuadron c.15-14": { + "name": "Spain 151_14 Escuadron C.15-14", + "countries": [ + "SPN" + ] + }, + "spain 151th escuadron c.15-24": { + "name": "Spain 151_24 Escuadron C.15-24", + "countries": [ + "SPN" + ] + }, + "vfa-106": { + "name": "VFA-106", + "countries": [ + "USA" + ] + }, + "spain 121th escuadron c.15-45": { + "name": "Spain 121 Escuadron C.15-45", + "countries": [ + "SPN" + ] + }, + "vfa-97": { + "name": "VFA-97", + "countries": [ + "USA" + ] + }, + "vx-9": { + "name": "VX-9", + "countries": [ + "USA" + ] + }, + "spain 111th escuadron c.15-73": { + "name": "Spain 111 Escuadron C.15-73", + "countries": [ + "SPN" + ] + }, + "switzerland": { + "name": "Switzerland", + "countries": [ + "SUI" + ] + }, + "vx-23": { + "name": "VX-23", + "countries": [ + "USA" + ] + }, + "vfa-83": { + "name": "VFA-83", + "countries": [ + "USA" + ] + }, + "australian 75th squadron": { + "name": "Australian sqn 75", + "countries": [ + "AUS" + ] + }, + "canada 425th squadron": { + "name": "Canada 425th Squadron", + "countries": [ + "CAN" + ] + }, + "spain 151th escuadron c.15-18": { + "name": "Spain 151_18 Escuadron C.15-18", + "countries": [ + "SPN" + ] + }, + "nsawc gray": { + "name": "NSAWC gray", + "countries": [ + "USA" + ] + }, + "vfa-87": { + "name": "VFA-87", + "countries": [ + "USA" + ] + }, + "nawdc blue": { + "name": "NAWDC blue", + "countries": [ + "USA", + "AUSAF" + ] + }, + "australian 77th squadron": { + "name": "Australian sqn 77", + "countries": [ + "AUS" + ] + }, + "vmfa-251 high visibility": { + "name": "VMFA-251 high visibility", + "countries": [ + "USA" + ] + }, + "vmfa-531": { + "name": "VMFA-531", + "countries": [ + "USA" + ] + }, + "viper": { + "name": "Viper", + "countries": [ + "USA" + ] + }, + "iceman": { + "name": "Iceman", + "countries": [ + "USA", + "AUSAF" + ] + }, + "spain 121th escuadron c.15-60": { + "name": "Spain 121 Escuadron C.15-60", + "countries": [ + "SPN" + ] + }, + "nsawc blue": { + "name": "NSAWC blue", + "countries": [ + "USA", + "AUSAF" + ] + }, + "blue angels jet team": { + "name": "Blue Angels Jet Team", + "countries": [ + "USA" + ] + }, + "fictional israel air force": { + "name": "Fictional Israel Air Force", + "countries": [ + "ISR" + ] + }, + "spain 462th escuadron c.15-90": { + "name": "Spain 462th Escuadron C.15-90", + "countries": [ + "SPN" + ] + }, + "vmfa-323 high visibility": { + "name": "VMFA-323_high visibility", + "countries": [ + "USA" + ] + }, + "maverick": { + "name": "Maverick", + "countries": [ + "USA" + ] + }, + "nawdc black": { + "name": "NAWDC black", + "countries": [ + "USA", + "AUSAF" + ] + }, + "kuwait 9th squadron": { + "name": "9th Squadron", + "countries": [ + "KWT" + ] + }, + "vmfa-251": { + "name": "VMFA-251", + "countries": [ + "USA" + ] + }, + "vmfa-314": { + "name": "VMFA-314", + "countries": [ + "USA" + ] + }, + "fictional ukraine air force": { + "name": "Fictional Ukraine Air Force", + "countries": [ + "UKR" + ] + }, + "canada 409th squadron": { + "name": "Canada 409th Squadron", + "countries": [ + "CAN" + ] + }, + "canada norad 60 demo jet": { + "name": "Canada NORAD 60 Demo Jet", + "countries": [ + "CAN" + ] + }, + "spain 111th escuadron c.15-88": { + "name": "Spain 111 Escuadron C.15-88", + "countries": [ + "SPN" + ] + }, + "spain 211th escuadron c.15-76": { + "name": "Spain 211th Escuadron C.15-76", + "countries": [ + "SPN" + ] + }, + "finland 31": { + "name": "Finland", + "countries": [ + "FIN" + ] + }, + "spain 151th escuadron c.15-23": { + "name": "Spain 151_23 Escuadron C.15-23", + "countries": [ + "SPN" + ] + }, + "vfa-122": { + "name": "VFA-122", + "countries": [ + "USA" + ] + }, + "spain 151th escuadron c.15-14 tiger meet": { + "name": "Spain 151th Escuadron C.15-14 Tiger Meet", + "countries": [ + "SPN" + ] + }, + "vfc-12": { + "name": "VFC-12", + "countries": [ + "USA", + "AUSAF" + ] + }, + "spain 211th escuadron c.15-77": { + "name": "Spain 211th Escuadron C.15-77", + "countries": [ + "SPN" + ] + }, + "spain 121th escuadron c.15-34 50th anniversary": { + "name": "Spain 121th Escuadron C.15-34 34th Anniversary", + "countries": [ + "SPN" + ] + }, + "default livery": { + "name": "default livery", + "countries": [ + "BRA", + "CUB", + "MYS", + "ARE", + "AUS", + "ABH", + "RUS", + "PHL", + "SPN", + "ISR", + "SUN", + "USA", + "BHR", + "MAR", + "BLR", + "HRV", + "DZA", + "OMN", + "RSO", + "SVK", + "HND", + "IRN", + "UKR", + "TUR", + "JPN", + "PRK", + "SRB", + "IDN", + "KAZ", + "BGR", + "BEL", + "INS", + "THA", + "LBY", + "AUSAF", + "VEN", + "PAK", + "JOR", + "RSA", + "FIN", + "MEX", + "KWT", + "NOR", + "IRQ", + "SYR", + "ITA", + "NZG", + "GRC", + "POL", + "NETH", + "GER", + "SUI", + "CHN", + "SAU", + "SWE", + "YEM", + "VNM", + "ROU", + "RSI", + "FRA", + "CHL", + "KOR", + "HUN", + "AUT", + "GRG", + "DEN", + "TUN", + "EGY", + "IND", + "CZE", + "ETH", + "CAN", + "SDN", + "QAT", + "UK", + "YUG" + ] + }, + "spain 121th escuadron c.15-50": { + "name": "Spain 121 Escuadron C.15-50", + "countries": [ + "SPN" + ] + }, + "vfa-113": { + "name": "VFA-113", + "countries": [ + "USA" + ] + }, + "vmfa-312": { + "name": "VMFA-312", + "countries": [ + "USA" + ] + }, + "kuwait 25th squadron": { + "name": "9th Squadron", + "countries": [ + "KWT" + ] + }, + "vmfa-312 high visibility": { + "name": "VMFA-312 high visibility", + "countries": [ + "USA" + ] + }, + "vmfa-122": { + "name": "VMFA-122", + "countries": [ + "USA" + ] + }, + "vfa-106 high visibility": { + "name": "VFA-106 high visibility", + "countries": [ + "USA" + ] + }, + "finland 21": { + "name": "Finland", + "countries": [ + "FIN" + ] + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swept wing, 1 crew, fighter and strike. Hornet", + "abilities": "Drogue AAR, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "FW-190A8": { + "name": "FW-190A8", + "coalition": "red", + "label": "FW-190A8 Würger", + "era": "WW2", + "shortLabel": "190", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "", + "quantity": 1 + } + ], + "enabled": true, + "code": "Without pylon", + "name": "Without pylon", + "roles": [] + }, + { + "items": [ + { + "name": "4 x SC 50 - 50kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC 50 * 4", + "name": "SC 50 * 4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AB 250-2 - 17 x SD-10A, 250kg CBU with 10kg Frag/HE submunitions", + "quantity": 1 + } + ], + "enabled": true, + "code": "AB 250 (w/ SD 10A)", + "name": "AB 250 (w/ SD 10A)", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AB 250-2 - 144 x SD-2, 250kg CBU with HE submunitions", + "quantity": 1 + } + ], + "enabled": true, + "code": "AB 250 (w/ SD 2)", + "name": "AB 250 (w/ SD 2)", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AB 500-1 - 34 x SD-10A, 500kg CBU with 10kg Frag/HE submunitions", + "quantity": 1 + } + ], + "enabled": true, + "code": "AB 500 (w/ SD 10A)", + "name": "AB 500 (w/ SD 10A)", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "SC 250 Type 1 L2 - 250kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC 250 L2", + "name": "SC 250 L2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "SC 250 Type 3 J - 250kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC 250 J", + "name": "SC 250 J", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "SC 500 J - 500kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC 500 J", + "name": "SC 500 J", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "SC 500 L2 - 500kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC 500 L2", + "name": "SC 500 L2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "SD 250 Stg - 250kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SD 250 Stg", + "name": "SD 250 Stg", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "SD 500 A - 500kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SD 500 A", + "name": "SD 500 A", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "300 liter Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel Tank 300 liters", + "name": "Fuel Tank 300 liters", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Werfer-Granate 21 - 21 cm UnGd air-to-air rocket", + "quantity": 2 + } + ], + "enabled": true, + "code": "BR 21", + "name": "BR 21", + "roles": [] + } + ], + "filename": "fw190.png", + "enabled": true, + "liveries": { + "fw190_fuselage_d_jg301": { + "name": "JG 301", + "countries": [ + "GER", + "NZG" + ] + }, + "captured_ra": { + "name": "Captured_RA", + "countries": [ + "SUN" + ] + }, + "fictional ijn carrier akagi ai-103": { + "name": "Fictional IJN Carrier Akagi AI-103", + "countries": [ + "JPN" + ] + }, + "fictional ijn otu tsukuba tsu-102": { + "name": "Fictional IJN OTU Tsukuba Tsu-102", + "countries": [ + "JPN" + ] + }, + "fw-190a8 yellow 4": { + "name": "FW190A8 Yellow 4", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190a8 rhaf": { + "name": "Fw 190 A8 RHAF", + "countries": [ + "HUN" + ] + }, + "jg3 white nose wulf": { + "name": "Fw190A8 'White nose Wulf'", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190a8_2.jg 54": { + "name": "2.JG 54", + "countries": [ + "GER", + "NZG" + ] + }, + "fictional ijn carrier soryu bi-112": { + "name": "Fictional IJN Carrier Soryu BI-112", + "countries": [ + "JPN" + ] + }, + "black 13 schwarze katze from jg1": { + "name": "Fw190_JG1_Gen._'Schwarze Katze'_Win.", + "countries": [ + "GER", + "NZG" + ] + }, + "turkish air force, 5th fr (1942)": { + "name": "Turkish Air Force, 5th FR (1942)", + "countries": [ + "AUSAF", + "TUR" + ] + }, + "fw-190a8 jg26 priller": { + "name": "Fw 190 A8 JG26 Priller", + "countries": [ + "GER", + "HUN", + "NZG" + ] + }, + "inspired by jg2 skin of early fw 190a": { + "name": "Fw190A8 JG2 Generic", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190a8": { + "name": "FW190A8", + "countries": "All" + }, + "fw190_alfred_bindseil": { + "name": "6.JG 1_Alfred Bindseil", + "countries": [ + "GER", + "NZG" + ] + }, + "fictional ijn 256th kokutai rai-153": { + "name": "Fictional IJN 256th Kokutai Rai-153", + "countries": [ + "JPN" + ] + }, + "fictional ijn carrier akagi ai-151": { + "name": "Fictional IJN Carrier Akagi AI-151", + "countries": [ + "JPN" + ] + }, + "fw-190a8_raf": { + "name": "FW190A8/R-2 PE882, No. 1426 Flight RAF - Late", + "countries": [ + "UK" + ] + }, + "factory skin": { + "name": "FW190A8 Luftwaffe", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190a8_2.jg 54_hans dortenmann": { + "name": "2.JG 54_Hans Dortenmann", + "countries": [ + "GER", + "NZG" + ] + }, + "fw 190 a-8 czech avia s.90": { + "name": "Fw 190 A-8 Czech Avia S.90", + "countries": [ + "CZE" + ] + }, + "fw190_ewald_preisz": { + "name": "6.JG 300_Ewald Preisz", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190a8 jg3 maximowitz": { + "name": "Fw 190 A8 JG3 Maximowitz", + "countries": [ + "GER", + "HUN", + "NZG" + ] + }, + "roaf-grupul7": { + "name": "RoAF-Grupul7", + "countries": [ + "ROU" + ] + } + }, + "type": "Aircraft", + "description": "Single propellor, straight wing, 1 crew. Würger ", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "FW-190D9": { + "name": "FW-190D9", + "coalition": "red", + "label": "FW-190D9 Dora", + "era": "WW2", + "shortLabel": "190", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "SC 500 J - 500kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "SC500", + "name": "SC500", + "roles": [ + "Runway Attack", + "CAS", + "Antiship Strike", + "Strike" + ] + }, + { + "items": [ + { + "name": "300 liter Fuel Tank Type E2", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel Tank", + "name": "Fuel Tank", + "roles": [ + "CAP", + "FAC-A", + "Escort" + ] + }, + { + "items": [ + { + "name": "13 R4M 3.2kg UnGd air-to-air rocket", + "quantity": 2 + } + ], + "enabled": true, + "code": "R4M", + "name": "R4M", + "roles": [ + "CAP", + "CAP", + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "Werfer-Granate 21 - 21 cm UnGd air-to-air rocket", + "quantity": 2 + } + ], + "enabled": true, + "code": "BR 21", + "name": "BR 21", + "roles": [ + "CAP", + "CAP", + "Strike", + "CAS" + ] + } + ], + "filename": "fw190.png", + "enabled": true, + "liveries": { + "fw-190d9_5jg301": { + "name": "FW-190_5JG301.1945", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190d9_iv.jg 26_hans dortenmann": { + "name": " Oblt. Hans Dortenmann, IV./JG 26, 1945", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190d9_red": { + "name": "FW_190D9_Red.1945", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190d9_13.jg 51_heinz marquardt": { + "name": " Heinz-Marquardt, 13./JG 51, 1945", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190d9_jg54": { + "name": "FW-190D9_JG54.1945", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190d9_black 4 of stab iijg 6": { + "name": "FW-190D9_Black <4 of Stab II/JG 6", + "countries": [ + "GER", + "NZG" + ] + }, + "fw-190d9_usa": { + "name": "FW-190_USA_Standard.1943", + "countries": [ + "USA" + ] + }, + "fw-190d9_gb": { + "name": "FW-190_GB_Standart.1943", + "countries": [ + "UK" + ] + }, + "fw-190d9_ussr": { + "name": "FW-190 WNr 210251 USSR (Captured. 1943)", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "Single propellor, straight wing, 1 crew. Dora", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "H-6J": { + "name": "H-6J", + "coalition": "red", + "label": "H-6 J Badger", + "era": "Mid Cold War", + "shortLabel": "H6", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "YJ-12", + "quantity": 2 + } + ], + "enabled": true, + "code": "YJ-12 x 2", + "name": "YJ-12 x 2", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "YJ-12", + "quantity": 4 + } + ], + "enabled": true, + "code": "YJ-12 x 4", + "name": "YJ-12 x 4", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "YJ-83K", + "quantity": 6 + } + ], + "enabled": true, + "code": "YJ-83K x 6", + "name": "YJ-83K x 6", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "12 x 250-2 - 250kg GP Bombs HD", + "quantity": 1 + } + ], + "enabled": true, + "code": "250-2 HD Bomb x 12 in Bay", + "name": "250-2 HD Bomb x 12 in Bay", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "24 x 250-2 - 250kg GP Bombs HD", + "quantity": 1 + } + ], + "enabled": true, + "code": "250-2 HD Bomb x 24 in Bay", + "name": "250-2 HD Bomb x 24 in Bay", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MER6 - 6 x 250-3 - 250kg GP Bombs LD", + "quantity": 6 + } + ], + "enabled": true, + "code": "250-3 LD Bomb x 36", + "name": "250-3 LD Bomb x 36", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "KD-63", + "quantity": 4 + }, + { + "name": "DATA-LINK POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "KD-63 x 4", + "name": "KD-63 x 4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "KD-20", + "quantity": 6 + } + ], + "enabled": true, + "code": "KD-20 x 6", + "name": "KD-20 x 6", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "KD-20", + "quantity": 4 + } + ], + "enabled": true, + "code": "KD-20 x 4", + "name": "KD-20 x 4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "KD-63", + "quantity": 2 + }, + { + "name": "DATA-LINK POD", + "quantity": 1 + }, + { + "name": "KD-20", + "quantity": 4 + } + ], + "enabled": true, + "code": "KD-63 x 2, KD-20 x 4", + "name": "KD-63 x 2, KD-20 x 4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "KD-63", + "quantity": 2 + }, + { + "name": "DATA-LINK POD", + "quantity": 1 + }, + { + "name": "KD-20", + "quantity": 2 + } + ], + "enabled": true, + "code": "KD-63 x 2, KD-20 x 2", + "name": "KD-63 x 2, KD-20 x 2", + "roles": [ + "Strike" + ] + } + ], + "filename": "h-6.png", + "enabled": true, + "liveries": { + "planaf standard": { + "name": "PLANAF Standard", + "countries": [ + "CHN" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 4 crew bomber. Badger", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "I-16": { + "name": "I-16", + "coalition": "red", + "label": "I-16", + "era": "WW2", + "shortLabel": "I16", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "RS-82", + "quantity": 6 + } + ], + "enabled": true, + "code": "6xRS-82", + "name": "6xRS-82", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-100SV", + "quantity": 2 + } + ], + "enabled": true, + "code": "2xFAB-100", + "name": "2xFAB-100", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "RS-82", + "quantity": 6 + }, + { + "name": "FAB-100SV", + "quantity": 2 + } + ], + "enabled": true, + "code": "6xRS-82, 2xFAB-100", + "name": "6xRS-82, 2xFAB-100", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "RS-82", + "quantity": 6 + }, + { + "name": "I-16 External Fuel Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "6xRS-82, 2xDropTank-93L", + "name": "6xRS-82, 2xDropTank-93L", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "I-16 External Fuel Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "2xDropTank-93L", + "name": "2xDropTank-93L", + "roles": [ + "CAP", + "Reconnaissance", + "Escort" + ] + } + ], + "filename": "i-16.png", + "enabled": true, + "liveries": { + "silver-black demo": { + "name": "Silver-black paint scheme", + "countries": [ + "SUN", + "RUS" + ] + }, + "red army camo": { + "name": "Red Army Air Force Camouflage", + "countries": [ + "SUN", + "RUS" + ] + }, + "spain nationalists": { + "name": "Spain (Nationalists)", + "countries": [ + "SPN", + "NZG" + ] + }, + "japan": { + "name": "Japan (Captured), Manchuria 1939", + "countries": [ + "NZG", + "JPN" + ] + }, + "finnish af": { + "name": "Finland, AFB Rompotti 1943", + "countries": [ + "FIN", + "NZG" + ] + }, + "red army standard": { + "name": "1 Red Army Air Force Standard", + "countries": [ + "SUN", + "RUS" + ] + }, + "spain republicans": { + "name": "Spain (Republicans)", + "countries": [ + "SUN", + "SPN" + ] + }, + "red five demo": { + "name": "RED FIVE Aerobatic Team", + "countries": [ + "SUN", + "RUS" + ] + }, + "clear": { + "name": "Green unmarked", + "countries": "All" + }, + "silver demo": { + "name": "Silver paint scheme", + "countries": [ + "SUN", + "RUS" + ] + }, + "red army winter": { + "name": "Red Army Air Force winter", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "Single propellor, straight wing, 1 crew. Ishak", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "IL-76MD": { + "name": "IL-76MD", + "coalition": "red", + "label": "IL-76MD Candid", + "era": "Mid Cold War", + "shortLabel": "76", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Transport" + ] + } + ], + "filename": "il-76.png", + "enabled": true, + "liveries": { + "ukrainian af aeroflot": { + "name": "Ukrainian AF aeroflot", + "countries": [ + "UKR" + ] + }, + "algerian af il-76md": { + "name": "Algerian AF IL-76MD", + "countries": [ + "DZA" + ] + }, + "china air force old": { + "name": "China Air Force Old", + "countries": [ + "CHN" + ] + }, + "ukrainian af": { + "name": "Ukrainian AF", + "countries": [ + "UKR" + ] + }, + "rf air force": { + "name": "RF Air Force", + "countries": [ + "RUS" + ] + }, + "china air force new": { + "name": "China Air Force New", + "countries": [ + "CHN" + ] + }, + "mvd aeroflot": { + "name": "MVD aeroflot", + "countries": [ + "RUS" + ] + }, + "fsb aeroflot": { + "name": "FSB aeroflot", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 5 crew. Cargo and passenger aircraft. NATO reporting name: Candid", + "abilities": "AEW", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "IL-78M": { + "name": "IL-78M", + "coalition": "red", + "label": "IL-78M Midas", + "era": "Late Cold War", + "shortLabel": "78", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Tanker" + ] + } + ], + "filename": "il-76.png", + "enabled": true, + "liveries": { + "rf air force aeroflot": { + "name": "RF Air Force aeroflot", + "countries": [ + "SUN", + "RUS" + ] + }, + "rf air force new": { + "name": "RF Air Force new", + "countries": [ + "RUS" + ] + }, + "algerian af il-78m": { + "name": "Algerian AF IL-78M", + "countries": [ + "DZA" + ] + }, + "china air force": { + "name": "China Air Force", + "countries": [ + "CHN" + ] + }, + "rf air force": { + "name": "RF Air Force", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 6 crew. Tanker aircraft. NATO reporting name: Midas", + "abilities": "Tanker, Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "J-11A": { + "name": "J-11A", + "coalition": "red", + "label": "J-11A Flaming Dragon", + "era": "Modern", + "shortLabel": "J11", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", + "quantity": 6 + } + ], + "enabled": true, + "code": "FAB-100x36,R-73x2,ECM", + "name": "FAB-100x36,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x FAB-250", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250x8,R-73x2,ECM", + "name": "FAB-250x8,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x FAB-500", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500x8,R-73x2,ECM", + "name": "FAB-500x8,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x B-8M1 - 20 S-8KOM", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-8KOMx80,FAB-250x4,R-73x2,ECM", + "name": "S-8KOMx80,FAB-250x4,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x B-13L - 5 S-13 OF", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-13x20,FAB-250x4,R-73x2,ECM", + "name": "S-13x20,FAB-250x4,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x S-25", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-25x4,FAB-500x4,R-73x2,ECM", + "name": "S-25x4,FAB-500x4,R-73x2,ECM", + "roles": [ + "Strike", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-27ERx4,R-27ETx2,R-73x2,ECM", + "name": "R-27ERx4,R-27ETx2,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 6 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-77x6,R-73x2,ECM", + "name": "R-77x6,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-27ERx6,R-73x2,ECM", + "name": "R-27ERx6,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-77x4,R-27ETx2,R-73x2,ECM", + "name": "R-77x4,R-27ETx2,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-77x4,R-27ERx2,R-73x2,ECM", + "name": "R-77x4,R-27ERx2,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", + "quantity": 6 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500ShPx6,R-73x2,ECM", + "name": "BetAB-500ShPx6,R-73x2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73x4,ECM", + "name": "R-73x4,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-77x2,R-27ETx2,R-73x2,ECM", + "name": "R-77x2,R-27ETx2,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-77x6,R-73x4", + "name": "R-77x6,R-73x4", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-77x2,R-27ETx2,R-27ERx2,R-73x2,ECM", + "name": "R-77x2,R-27ETx2,R-27ERx2,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-27ETx2,R-27ERx4,R-73x2,ECM", + "name": "R-27ETx2,R-27ERx4,R-73x2,ECM", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x B-8M1 - 20 S-8TsM", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-8TsMx80,FAB-250x4,R-73x2,ECM", + "name": "S-8TsMx80,FAB-250x4,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x B-8M1 - 20 S-8OFP2", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-8OFP2x80,FAB-250x4,R-73x2,ECM", + "name": "S-8OFP2x80,FAB-250x4,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-250 - 250kg GP Bombs LD", + "quantity": 3 + } + ], + "enabled": true, + "code": "FAB-250x18,R-73x2,ECM", + "name": "FAB-250x18,R-73x2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x B-8M1 - 20 S-8KOM", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*S8-KOMx2, R-73x2, ECM", + "name": "2*S8-KOMx2, R-73x2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "RKL609 ECM Pod (Right)", + "quantity": 1 + }, + { + "name": "RKL609 ECM Pod (Left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x B-8M1 - 20 S-8OFP2", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*S8-OFP2x2, R-73x2, ECM", + "name": "2*S8-OFP2x2, R-73x2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "2 x FAB-500", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250x4, 2*FAB-500x2, R-73x2", + "name": "FAB-250x4, 2*FAB-500x2, R-73x2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "2 x FAB-250", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250x4, 2*FAB-250x2, R-73x2", + "name": "FAB-250x4, 2*FAB-250x2, R-73x2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + }, + { + "name": "RBK-250-275 - 150 x AO-1SCh, 250kg CBU HE/Frag", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-250 HEAT/APx2, RBK-250 HE/Fragx2, R-73x2", + "name": "RBK-250 HEAT/APx2, RBK-250 HE/Fragx2, R-73x2", + "roles": [ + "CAS" + ] + } + ], + "filename": "su-27.png", + "enabled": true, + "liveries": { + "plaaf 19th ad": { + "name": "PLAAF 19th AD", + "countries": [ + "CHN" + ] + }, + "plaaf 17th ab": { + "name": "PLAAF 17th AB", + "countries": [ + "CHN" + ] + }, + "plaaf 18th ad 'thunderclap wing' (fictional)": { + "name": "PLAAF 18th AD 'Thunderclap Wing' (Fictional)", + "countries": [ + "CHN" + ] + }, + "usn aggressor vfc-13 'ferris' (fictional)": { + "name": "Aggressor VFC-13 'Ferris' (Fictional)", + "countries": [ + "AUSAF" + ] + }, + "plaaf 19th ad (reworked)": { + "name": "PLAAF 19th AD (Reworked)", + "countries": [ + "CHN" + ] + }, + "plaaf 14th ad": { + "name": "PLAAF 14th AD", + "countries": [ + "CHN" + ] + }, + "plaaf 6th ad": { + "name": "PLAAF 6th AD", + "countries": [ + "CHN" + ] + }, + "plaaf 14th ad (reworked)": { + "name": "PLAAF 14th AD (Reworked)", + "countries": [ + "CHN" + ] + }, + "plaaf opfor 'desert' (fictional)": { + "name": "PLAAF OPFOR 'Desert' (Fictional)", + "countries": [ + "CHN" + ] + }, + "plaaf 7th ad (reworked)": { + "name": "PLAAF 7th AD (Reworked)", + "countries": [ + "CHN" + ] + }, + "usaf 65th aggressor sqn 'desert' (fictional)": { + "name": "65th Aggressor SQN 'Desert' (Fictional)", + "countries": [ + "AUSAF" + ] + }, + "sky hunter": { + "name": "Sky Hunter", + "countries": [ + "CHN" + ] + }, + "plaaf 2nd ad (parade)": { + "name": "PLAAF 2nd AD (Parade)", + "countries": [ + "CHN" + ] + }, + "plaaf opfor 'jungle' (fictional)": { + "name": "PLAAF OPFOR 'Jungle' (Fictional) ", + "countries": [ + "CHN" + ] + }, + "plaaf 33th ad (reworked)": { + "name": "PLAAF 33th AD (Reworked)", + "countries": [ + "CHN" + ] + }, + "plaaf 33th ad": { + "name": "PLAAF 33th AD", + "countries": [ + "CHN" + ] + }, + "usaf 65th aggressor sqn 'gray' (fictional)": { + "name": "65th Aggressor SQN 'Gray' (Fictional)", + "countries": [ + "AUSAF" + ] + }, + "plaaf 2nd ad": { + "name": "PLAAF 2nd AD", + "countries": [ + "CHN" + ] + }, + "plaaf 7th ad": { + "name": "PLAAF 7th AD", + "countries": [ + "CHN" + ] + }, + "plaaf ghost gray (fictional)": { + "name": "PLAAF Ghost Gray (Fictional)", + "countries": [ + "CHN" + ] + }, + "plaaf 2nd ad (reworked)": { + "name": "PLAAF 2nd AD (Reworked)", + "countries": [ + "CHN" + ] + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swept wing, 1 crew, fighter and strike. NATO reporting name: Flanker", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "JF-17": { + "name": "JF-17", + "coalition": "red", + "label": "JF-17 Thunder", + "era": "Modern", + "shortLabel": "J17", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "C802AK (DIS)", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C802AKx2, 800L Tank", + "name": "PL-5Ex2, C802AKx2, 800L Tank", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IRx2, 1100L Tank, 800L Tank", + "name": "PL-5Ex2, C-701 IRx2, 1100L Tank, 800L Tank", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, SD-10x2, 1100L Tankx2, WMD7", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "LD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, LD-10x2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, LD-10x2, 1100L Tankx2, WMD7", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 800L Tank, WMD7", + "name": "PL-5Ex2, 800L Tank, WMD7", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "GBU-10", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, GBU-10x2, WMD7", + "name": "PL-5Ex2, GBU-10x2, WMD7", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "GDJ-II19 - 2 x GBU-12", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*GBU-12x2, 800L Tank, WMD7", + "name": "PL-5Ex2, 2*GBU-12x2, 800L Tank, WMD7", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "GDJ-II19 - 2 x Mk-82 SnakeEye", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*Mk-82x2, Mk-83x2, 800L Tank", + "name": "PL-5Ex2, 2*Mk-82x2, Mk-83x2, 800L Tank", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 1100L Tankx2, 800L Tank", + "name": "PL-5Ex2, 1100L Tankx2, 800L Tank", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "CM802AKG (DIS)", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "DATA-LINK POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, WMD7, CM802AKGx2, 800L Tank, DL", + "name": "PL-5Ex2, WMD7, CM802AKGx2, 800L Tank, DL", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "C-701T", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 CCDx2, 1100L Tank, 800L Tank", + "name": "PL-5Ex2, C-701 CCDx2, 1100L Tank, 800L Tank", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "GBU-12", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, GBU-12x2, 1100L Tank, WMD7", + "name": "PL-5Ex2, GBU-12x2, 1100L Tank, WMD7", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "GBU-16", + "quantity": 2 + }, + { + "name": "GDJ-II19 - 2 x GBU-12", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*GBU-12x2, GBU-16x2, WMD7", + "name": "PL-5Ex2, 2*GBU-12x2, GBU-16x2, WMD7", + "roles": [ + "CAS", + "Strike", + "FAC-A" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, 1100L Tankx2, WMD7", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "LD-10 x 2", + "quantity": 1 + }, + { + "name": "KG-600", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, WMD7, 800L Tankx2, SPJ, 2*LD-10", + "name": "PL-5Ex2, WMD7, 800L Tankx2, SPJ, 2*LD-10", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "LS-6-500", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, LS-6x2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, LS-6x2, 1100L Tankx2, WMD7", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IRx2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, C-701 IRx2, 1100L Tankx2, WMD7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "GBU-12", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, GBU-12x2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, GBU-12x2, 1100L Tankx2, WMD7", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "LD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LD-10x2, 1100L Tankx2, SPJ", + "name": "PL-5Ex2, 2*LD-10x2, 1100L Tankx2, SPJ", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "LD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, LD-10x2, 1100L Tankx2, SPJ", + "name": "PL-5Ex2, LD-10x2, 1100L Tankx2, SPJ", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "LS-6-500", + "quantity": 2 + }, + { + "name": "LD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LD-10x2, LS-6x2, SPJ", + "name": "PL-5Ex2, 2*LD-10x2, LS-6x2, SPJ", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "GB-6-HE", + "quantity": 2 + }, + { + "name": "LD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LD-10x2, GB-6-HEx2, SPJ", + "name": "PL-5Ex2, 2*LD-10x2, GB-6-HEx2, SPJ", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IRx2, 800L Tankx2, WMD7", + "name": "PL-5Ex2, C-701 IRx2, 800L Tankx2, WMD7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "C-701T", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 CCDx2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, C-701 CCDx2, 1100L Tankx2, WMD7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "C-701T", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 CCDx2, 800L Tankx2, WMD7", + "name": "PL-5Ex2, C-701 CCDx2, 800L Tankx2, WMD7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "GDJ-II19 - 2 x GBU-12", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*GBU-12x2, 1100L Tank, WMD7", + "name": "PL-5Ex2, 2*GBU-12x2, 1100L Tank, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IRx2, 1100L Tank, WMD7", + "name": "PL-5Ex2, C-701 IRx2, 1100L Tank, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IRx2, 800L Tank, WMD7", + "name": "PL-5Ex2, C-701 IRx2, 800L Tank, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701T", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 CCDx2, 1100L Tank, WMD7", + "name": "PL-5Ex2, C-701 CCDx2, 1100L Tank, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701T", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 CCDx2, 800L Tank, WMD7", + "name": "PL-5Ex2, C-701 CCDx2, 800L Tank, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 1 + }, + { + "name": "C-701T", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "LS-6-500", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IRx2, LS-6x2, 800L Tank", + "name": "PL-5Ex2, C-701 IRx2, LS-6x2, 800L Tank", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 1 + }, + { + "name": "C-701T", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "GB-6-HE", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IR/CCD, GB-6-HEx2, 800L Tank", + "name": "PL-5Ex2, C-701 IR/CCD, GB-6-HEx2, 800L Tank", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701IR", + "quantity": 1 + }, + { + "name": "C-701T", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "GB-6-SFW", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 IR/CCD, GB-6-SFWx2, 800L Tank", + "name": "PL-5Ex2, C-701 IR/CCD, GB-6-SFWx2, 800L Tank", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "GB-6-SFW", + "quantity": 2 + }, + { + "name": "BRM-1_90MM", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, BRM1", + "name": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, BRM1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "GB-6-SFW", + "quantity": 2 + }, + { + "name": "GBU-12", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, GBU-12", + "name": "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, GBU-12", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 3 + }, + { + "name": "GDJ-II19 - 2 x Mk-82 SnakeEye", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*Mk-82SEx2, Mk-83x3", + "name": "PL-5Ex2, 2*Mk-82SEx2, Mk-83x3", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 3 + } + ], + "enabled": true, + "code": "PL-5Ex2, Mk-84x3", + "name": "PL-5Ex2, Mk-84x3", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "GDJ-II19 - 2 x LAU68 MK5", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*Mk5x2, 800L Tank", + "name": "PL-5Ex2, 2*Mk5x2, 800L Tank", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "UG_90MM", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, Unguided 90mmx2, 800L Tank", + "name": "PL-5Ex2, Unguided 90mmx2, 800L Tank", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 3 + }, + { + "name": "GDJ-II19 - 2 x LAU68 MK5", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*Mk5x2, Mk-83x3", + "name": "PL-5Ex2, 2*Mk5x2, Mk-83x3", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "BRM-1_90MM", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, BRM1x2, 1100L Tank, WMD7", + "name": "PL-5Ex2, BRM1x2, 1100L Tank, WMD7", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2x1100L Tank", + "name": "PL-5Ex2, 2x1100L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2, 2x1100L Tank", + "name": "PL-5Ex2, SD-10x2, 2x1100L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*SD-10x2, 2x1100L Tank", + "name": "PL-5Ex2, 2*SD-10x2, 2x1100L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, 800L Tank", + "name": "PL-5Ex2, 800L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2, 800L Tank", + "name": "PL-5Ex2, SD-10x2, 800L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "SD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*SD-10x2, 800L Tank", + "name": "PL-5Ex2, 2*SD-10x2, 800L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2, SPJ", + "name": "PL-5Ex2, SD-10x2, SPJ", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, SPJ", + "name": "PL-5Ex2, SPJ", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "SD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*SD-10x2, SPJ", + "name": "PL-5Ex2, 2*SD-10x2, SPJ", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2", + "name": "PL-5Ex2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2", + "name": "PL-5Ex2, SD-10x2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*SD-10", + "name": "PL-5Ex2, 2*SD-10", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2, SPJ, 1100L Tankx2", + "name": "PL-5Ex2, SD-10x2, SPJ, 1100L Tankx2", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10 x 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*SD-10x2, 1100L Tankx2, 800L Tank", + "name": "PL-5Ex2, 2*SD-10x2, 1100L Tankx2, 800L Tank", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "SD-10", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, SD-10x2, 1100L Tankx2, 800L Tank", + "name": "PL-5Ex2, SD-10x2, 1100L Tankx2, 800L Tank", + "roles": [ + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "BRM-1_90MM", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "GBU-16", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, GBU-16x2, BRM1x2, WMD7", + "name": "PL-5Ex2, GBU-16x2, BRM1x2, WMD7", + "roles": [ + "FAC-A", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "PL-5EII", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, WMD7", + "name": "PL-5Ex2, WMD7", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "LD-10 x 2", + "quantity": 1 + }, + { + "name": "SD-10 x 2", + "quantity": 1 + }, + { + "name": "GB-6", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LD-10, GB-6x2, 2*SD-10, SPJ", + "name": "PL-5Ex2, 2*LD-10, GB-6x2, 2*SD-10, SPJ", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "C-701T", + "quantity": 2 + }, + { + "name": "KG-600", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, C-701 CCDx2, SPJ", + "name": "PL-5Ex2, C-701 CCDx2, SPJ", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "LD-10 x 2", + "quantity": 1 + }, + { + "name": "SD-10 x 2", + "quantity": 1 + }, + { + "name": "CM802AKG (DIS)", + "quantity": 2 + }, + { + "name": "DATA-LINK POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LD-10, CM802AKGx2, 2*SD-10, DL", + "name": "PL-5Ex2, 2*LD-10, CM802AKGx2, 2*SD-10, DL", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 1 + }, + { + "name": "GDJ-II19 - 2 x Mk-82", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*MK-82x2, MK-83x2, MK-84", + "name": "PL-5Ex2, 2*MK-82x2, MK-83x2, MK-84", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "LS-6-500", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "GB-6", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, LS-6x2, GB-6x2, 800L Tank", + "name": "PL-5Ex2, LS-6x2, GB-6x2, 800L Tank", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "GDJ-II19 - 2 x GBU-12", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "LS-6-500", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*GBU-12x2, LS-6x2, WMD7", + "name": "PL-5Ex2, 2*GBU-12x2, LS-6x2, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "GDJ-II19 - 2 x GBU-12", + "quantity": 2 + }, + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "GB-6", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*GBU-12x2, GB-6x2, WMD7", + "name": "PL-5Ex2, 2*GBU-12x2, GB-6x2, WMD7", + "roles": [] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "TYPE-200A Dual", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*Type-200Ax2", + "name": "PL-5Ex2, 2*Type-200Ax2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "TYPE-200A", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, Type-200Ax2", + "name": "PL-5Ex2, Type-200Ax2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "LS-6-250 Dual", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LS6-250x2, 800L Tankx2, WMD7", + "name": "PL-5Ex2, 2*LS6-250x2, 800L Tankx2, WMD7", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "800L Tank", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "LS-6-250 Dual", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LS6-250x2, 800L Tank, 1100L Tankx2", + "name": "PL-5Ex2, 2*LS6-250x2, 800L Tank, 1100L Tankx2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "1100L Tank", + "quantity": 2 + }, + { + "name": "LS-6-100 Dual", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LS6-100x2, 1100L Tankx2, WMD7", + "name": "PL-5Ex2, 2*LS6-100x2, 1100L Tankx2, WMD7", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PL-5EII", + "quantity": 2 + }, + { + "name": "WMD7 POD", + "quantity": 1 + }, + { + "name": "800L Tank", + "quantity": 2 + }, + { + "name": "LS-6-100 Dual", + "quantity": 2 + } + ], + "enabled": true, + "code": "PL-5Ex2, 2*LS6-100x2, 800L Tankx2, WMD7", + "name": "PL-5Ex2, 2*LS6-100x2, 800L Tankx2, WMD7", + "roles": [ + "CAS" + ] + } + ], + "filename": "jf-17.png", + "enabled": true, + "liveries": { + "paf black panthers 07-101": { + "name": "Pakistan Air Force No.16 Sqn Black Panthers 07-101", + "countries": [ + "PAK" + ] + }, + "paf phoenixes": { + "name": "Pakistan Air Force No.28 Sqn Phoenixes", + "countries": [ + "PAK" + ] + }, + "paf black spiders 07-101 (fictional)": { + "name": "Pakistan Air Force No.26 Sqn Black Spiders 07-101 (Fictional)", + "countries": [ + "PAK" + ] + }, + "paf 07-101 (overhauled)": { + "name": "Pakistan Air Force 07-101 (Overhauled)", + "countries": [ + "PAK" + ] + }, + "paf black panthers (b2v2)": { + "name": "Pakistan Air Force No.16 Sqn Black Panthers (Block2 Camo2)", + "countries": [ + "PAK" + ] + }, + "plaaf 125th ab (fictional)": { + "name": "PLAAF 125th AB (Fictional)", + "countries": [ + "CHN" + ] + }, + "naf 722": { + "name": "Nigerian Air Force 722", + "countries": [ + "NGA" + ] + }, + "paf dark camo": { + "name": "Pakistan Air Force Dark Camo", + "countries": [ + "PAK" + ] + }, + "'splinter' camo for blue side (fictional)": { + "name": "\"Splinter\" Camo for Blue Side (Fictional)", + "countries": "All" + }, + "paf black spiders (web camo)": { + "name": "Pakistan Air Force No.26 Sqn Black Spiders (Web Camo)", + "countries": [ + "PAK" + ] + }, + "plaaf 111th ab (fictional)": { + "name": "PLAAF 111th AB (Fictional)", + "countries": [ + "CHN" + ] + }, + "paf black panthers": { + "name": "Pakistan Air Force No.16 Sqn Black Panthers", + "countries": [ + "PAK" + ] + }, + "paf black spiders (default)": { + "name": "Pakistan Air Force No.26 Sqn Black Spiders", + "countries": [ + "PAK" + ] + }, + "paf ccs fierce fragons": { + "name": "Pakistan Air Force CCS Sqn Fierce Dragons", + "countries": [ + "PAK" + ] + }, + "plaaf ghost gray camo (fictional)": { + "name": "PLAAF \"Ghost Gray\" Camo (Fictional)", + "countries": [ + "CHN" + ] + }, + "'chips' camo for blue side (fictional)": { + "name": "USAF \"Chips\" Camo (Fictional)", + "countries": [ + "USA" + ] + }, + "paf black panthers (reworked)": { + "name": "Pakistan Air Force No.16 Sqn Black Panthers (Reworked)", + "countries": [ + "PAK" + ] + }, + "maf blue sea camo": { + "name": "Myanmar Air Force Blue Sea Camo", + "countries": "All" + }, + "proto 06": { + "name": "FC-1 Prototype 06", + "countries": [ + "CHN" + ] + }, + "paf minhasians": { + "name": "Pakistan Air Force No.2 Sqn Minhasians", + "countries": [ + "PAK" + ] + }, + "paf sharp shooters": { + "name": "Pakistan Air Force No.18 Sqn Sharp Shooters", + "countries": [ + "PAK" + ] + }, + "paf tail choppers": { + "name": "Pakistan Air Force No.14 Sqn Tail Choppers", + "countries": [ + "PAK" + ] + }, + "paf black panthers (b2v1)": { + "name": "Pakistan Air Force No.16 Sqn Black Panthers (Block2 Camo1)", + "countries": [ + "PAK" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew, fighter and strike. Geoff", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "KC-135": { + "name": "KC-135", + "coalition": "blue", + "label": "KC-135 Stratotanker", + "era": "Early Cold War", + "shortLabel": "135", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Tanker" + ] + } + ], + "filename": "kc-135.png", + "enabled": true, + "liveries": { + "standard usaf": { + "name": "USAF Standard", + "countries": [ + "USA" + ] + }, + "turaf standard": { + "name": "Turkish Air Force", + "countries": [ + "TUR" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 3 crew. Tanker aircraft. Stratotanker", + "abilities": "Tanker, Boom AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "KC135MPRS": { + "name": "KC135MPRS", + "coalition": "blue", + "label": "KC-135 MPRS Stratotanker", + "era": "Early Cold War", + "shortLabel": "135M", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Tanker" + ] + } + ], + "filename": "kc-135.png", + "enabled": true, + "liveries": { + "100th arw": { + "name": "100th ARW", + "countries": [ + "USA" + ] + }, + "22nd arw": { + "name": "22nd ARW", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swept wing, 3 crew. Tanker aircraft. Stratotanker", + "abilities": "Tanker, Drogue AAR, MPRS", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "L-39ZA": { + "name": "L-39ZA", + "coalition": "red", + "label": "L-39ZA", + "era": "Mid Cold War", + "shortLabel": "L39", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-5KOx32", + "name": "S-5KOx32", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-5KOx64", + "name": "S-5KOx64", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + }, + { + "name": "Fuel Tank 150 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-5KOx32, PTB-150x2", + "name": "S-5KOx32, PTB-150x2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + }, + { + "name": "Fuel Tank 350 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-5KOx32, PTB-350x2", + "name": "S-5KOx32, PTB-350x2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-16UM pod - 16 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + }, + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-5KOx32, FAB-100x2", + "name": "S-5KOx32, FAB-100x2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "2 x OFAB-100 Jupiter - 100kg GP Bombs HD", + "quantity": 2 + }, + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "OFAB-100 Jupiter x4, FAB-100x2", + "name": "OFAB-100 Jupiter x4, FAB-100x2", + "roles": [ + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100x2", + "name": "FAB-100x2", + "roles": [ + "Antiship Strike", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "FAB-100x4", + "name": "FAB-100x4", + "roles": [ + "Antiship Strike", + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "2 x OFAB-100 Jupiter - 100kg GP Bombs HD", + "quantity": 4 + } + ], + "enabled": true, + "code": "OFAB-100 Jupiter x8", + "name": "OFAB-100 Jupiter x8", + "roles": [ + "CAS", + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel Tank 150 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100x2, PTB-150x2", + "name": "FAB-100x2, PTB-150x2", + "roles": [ + "Antiship Strike", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel Tank 350 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100x2, PTB-350x2", + "name": "FAB-100x2, PTB-350x2", + "roles": [ + "Antiship Strike", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "PK-3 - 7.62mm GPMG", + "quantity": 4 + } + ], + "enabled": true, + "code": "PK-3x4", + "name": "PK-3x4", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "PK-3 - 7.62mm GPMG", + "quantity": 2 + }, + { + "name": "Fuel Tank 150 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "PK-3x2, PTB-150x2", + "name": "PK-3x2, PTB-150x2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-60Mx2", + "name": "R-60Mx2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "SAB-100MN - 100 kg Illumination Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "SAB-100x4", + "name": "SAB-100x4", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "R-3S - AAM, IR guided", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-3Sx2", + "name": "R-3Sx2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-3S - AAM, IR guided", + "quantity": 2 + }, + { + "name": "PK-3 - 7.62mm GPMG", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-3Sx2, PK-3x2", + "name": "R-3Sx2, PK-3x2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "PK-3 - 7.62mm GPMG", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-60Mx2, PK-3x2", + "name": "R-60Mx2, PK-3x2", + "roles": [ + "CAP" + ] + } + ], + "filename": "l-39.png", + "enabled": true, + "liveries": { + "splinter camo woodland": { + "name": "Splinter camo woodland", + "countries": "All" + }, + "algerian af tiger nl-36": { + "name": "Algerian AF Tiger NL-36", + "countries": [ + "DZA" + ] + }, + "czech air force": { + "name": "Czech Air Force", + "countries": [ + "CZE" + ] + }, + "algerian af nl-44": { + "name": "Algerian AF NL-44", + "countries": [ + "DZA" + ] + }, + "splinter camo desert": { + "name": "Splinter camo desert", + "countries": "All" + }, + "slovak air force": { + "name": "2nd SQN AFB Sliac", + "countries": [ + "SVK" + ] + }, + "russian air force": { + "name": "1 Russian Air Force", + "countries": [ + "RUS" + ] + }, + "czechoslovakia air force": { + "name": "Czechoslovakia_Air Force", + "countries": [ + "CZE" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "M-2000C": { + "name": "M-2000C", + "coalition": "blue", + "label": "M-2000C Mirage", + "era": "Late Cold War", + "shortLabel": "2k", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fox", + "name": "Fox", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fox / Magic (QRA)", + "name": "Fox / Magic (QRA)", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Super 530D", + "quantity": 2 + } + ], + "enabled": true, + "code": "Alpha / S530D", + "name": "Alpha / S530D", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "Matra Super 530D", + "quantity": 2 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fox / S530D / Magic", + "name": "Fox / S530D / Magic", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "Matra Super 530D", + "quantity": 2 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + }, + { + "name": "Eclair 16 flares 16 chaffs", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fox / S530D / Magic / Eclair", + "name": "Fox / S530D / Magic / Eclair", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + } + ], + "enabled": true, + "code": "Bravo", + "name": "Bravo", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + } + ], + "enabled": true, + "code": "Bravo / Magic", + "name": "Bravo / Magic", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kilo", + "name": "Kilo", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kilo / Magic", + "name": "Kilo / Magic", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "Bravo / 4xMk-82 / Magic", + "name": "Bravo / 4xMk-82 / Magic", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + } + ], + "enabled": true, + "code": "Bravo / GBU-12 / Magic", + "name": "Bravo / GBU-12 / Magic", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "AUF2 GBU-12 x 2", + "quantity": 1 + } + ], + "enabled": true, + "code": "Bravo / 2xGBU-12 / Magic", + "name": "Bravo / 2xGBU-12 / Magic", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "GBU-16 - 1000lb Laser Guided Bomb", + "quantity": 1 + } + ], + "enabled": true, + "code": "Bravo / GBU-16 / Magic", + "name": "Bravo / GBU-16 / Magic", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "GBU-24 Paveway III - 2000lb Laser Guided Bomb", + "quantity": 1 + } + ], + "enabled": true, + "code": "Bravo / GBU-24 / Magic", + "name": "Bravo / GBU-24 / Magic", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "BAP-100 x 18", + "quantity": 1 + } + ], + "enabled": true, + "code": "Bravo / BAP-100 / Magic", + "name": "Bravo / BAP-100 / Magic", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 4 + } + ], + "enabled": true, + "code": "Bravo / 4xSnakeEye / Magic", + "name": "Bravo / 4xSnakeEye / Magic", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fox / 4xMk-82 / Magic", + "name": "Fox / 4xMk-82 / Magic", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Matra Magic II", + "quantity": 2 + }, + { + "name": "RPL 541 2000 liters Fuel Tank ", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + }, + { + "name": "RPL 522 1300 liters Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kilo / 4xMk-82 / Magic", + "name": "Kilo / 4xMk-82 / Magic", + "roles": [ + "Strike" + ] + } + ], + "filename": "m2000.png", + "enabled": true, + "liveries": { + "ada alsace lf-2": { + "name": "Ada Alsace LF-2", + "countries": [ + "FRA" + ] + }, + "peru052": { + "name": "Fuerza Aerea Peruana 052", + "countries": [ + "FRA", + "PER" + ] + }, + "mission accomplie": { + "name": "2022 MISSION ACCOMPLIE by MALBAK", + "countries": "All" + }, + "cambresis": { + "name": "AdA Cambresis", + "countries": [ + "FRA" + ] + }, + "greek air force": { + "name": "Polemikh Aeroporia (Greek Air Force)", + "countries": [ + "FRA", + "GRC" + ] + }, + "brasilian air force": { + "name": "Forca Aerea Brasileira (Brazilian Air Force)", + "countries": [ + "BRA", + "FRA" + ] + }, + "2003 tigermeet": { + "name": "NATO Tigermeet 2003", + "countries": [ + "FRA" + ] + }, + "peru064": { + "name": "Fuerza Aerea Peruana 064", + "countries": [ + "FRA", + "PER" + ] + }, + "2010 tigermeet": { + "name": "NATO Tigermeet 2010", + "countries": [ + "FRA" + ] + }, + "uae air force": { + "name": "UAE Air Defense Air Force", + "countries": [ + "FRA", + "ARE" + ] + }, + "2004 tigermeet": { + "name": "NATO Tigermeet 2004", + "countries": [ + "FRA" + ] + }, + "ada chasse 2-5": { + "name": "AdA Chasse 2/5", + "countries": [ + "FRA" + ] + }, + "iaf silver 59": { + "name": "Israeli Air Force 101 Sqn 1967 scheme", + "countries": [ + "ABH", + "RUS", + "SPN", + "ISR", + "USA", + "RSO", + "UKR", + "TUR", + "BEL", + "NOR", + "ITA", + "POL", + "NETH", + "GER", + "FRA", + "GRG", + "DEN", + "CZE", + "CAN", + "UK" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew, fighter and strike.", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MB-339A": { + "name": "MB-339A", + "coalition": "blue", + "label": "MB-339A", + "era": "Mid Cold War", + "shortLabel": "339", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "Mk-83 - 1000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Mk-81 - 250lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + } + ], + "enabled": true, + "code": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.83 + 2*Mk.81 ", + "name": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.83 + 2*Mk.81 ", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "", + "quantity": 6 + } + ], + "enabled": true, + "code": "A - 2*320L TipTanks [Clean]", + "name": "A - 2*320L TipTanks [Clean]", + "roles": [ + "Transport" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "AN/M3 Gunpod Right", + "quantity": 1 + }, + { + "name": "Photo-Recon Pod (4*70mm Vinten Cameras)", + "quantity": 1 + }, + { + "name": "Fuel Tank 330lt", + "quantity": 2 + }, + { + "name": "", + "quantity": 2 + } + ], + "enabled": true, + "code": "Recon", + "name": "Recon", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "Cylindrical Tip Tank 500lt", + "quantity": 2 + }, + { + "name": "BRD-4-250 - 4 x Mk 76 - 25lb Practice Bomb LD", + "quantity": 1 + }, + { + "name": "", + "quantity": 2 + }, + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + } + ], + "enabled": true, + "code": "Training", + "name": "Training", + "roles": [] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "LAU-10 pod - 4 x 127mm ZUNI, UnGd Rkts Mk71, HE/FRAG", + "quantity": 2 + }, + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + } + ], + "enabled": true, + "code": "AA - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*LAU-10(Zuni Rockets) [ARMADA]", + "name": "AA - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*LAU-10(Zuni Rockets) [ARMADA]", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "LAU-3 pod - 19 x 2.75\" Hydra, UnGd Rkts M151, HE", + "quantity": 2 + }, + { + "name": "Fuel Tank 330lt", + "quantity": 2 + }, + { + "name": "AN/M3 Gunpod Right", + "quantity": 1 + }, + { + "name": "AN/M3 Gunpod Left", + "quantity": 1 + } + ], + "enabled": true, + "code": "AM - 2*320L TipTanks + 2*AN/M3 GunPods + 2*330L Tanks + 2*LAU-3 (Hydra rockets)", + "name": "AM - 2*320L TipTanks + 2*AN/M3 GunPods + 2*330L Tanks + 2*LAU-3 (Hydra rockets)", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 330lt", + "quantity": 2 + }, + { + "name": "", + "quantity": 3 + }, + { + "name": "Cylindrical Tip Tank 500lt", + "quantity": 2 + }, + { + "name": "Luggage Container", + "quantity": 1 + } + ], + "enabled": true, + "code": "A - 2*500L TipTanks + 2*330L Tanks + Luggage Container [Ferry Long Range]", + "name": "A - 2*500L TipTanks + 2*330L Tanks + Luggage Container [Ferry Long Range]", + "roles": [ + "No task", + "Transport" + ] + }, + { + "items": [ + { + "name": "Cylindrical Tip Tank 500lt", + "quantity": 2 + }, + { + "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 API", + "quantity": 2 + }, + { + "name": "Mk-82 Snakeye - 500lb GP Bomb HD", + "quantity": 4 + } + ], + "enabled": true, + "code": "A - 2*500L TipTanks + 4*Mk.82HD + 2*LR-25 (API Rockets)", + "name": "A - 2*500L TipTanks + 4*Mk.82HD + 2*LR-25 (API Rockets)", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "Fuel Tank 330lt", + "quantity": 2 + }, + { + "name": "", + "quantity": 3 + } + ], + "enabled": true, + "code": "A - 2*320L TipTanks + 2*330L Tanks [Ferry Medium Range]", + "name": "A - 2*320L TipTanks + 2*330L Tanks [Ferry Medium Range]", + "roles": [ + "Transport" + ] + }, + { + "items": [ + { + "name": "Cylindrical Tip Tank 500lt", + "quantity": 2 + }, + { + "name": "Matra Type 155 Rocket Pod", + "quantity": 2 + }, + { + "name": "BLG-66-AC Belouga", + "quantity": 2 + }, + { + "name": "AN/M3 Gunpod Right", + "quantity": 1 + }, + { + "name": "AN/M3 Gunpod Left", + "quantity": 1 + } + ], + "enabled": true, + "code": "A - 2*500L TipTanks + 2*AN/M3 GunPods + 2*Matra 155 + 2* Belouga", + "name": "A - 2*500L TipTanks + 2*AN/M3 GunPods + 2*Matra 155 + 2* Belouga", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "BLU-107/B Durandal - 219kg Concrete Piercing Chute Retarded Bomb w/Booster", + "quantity": 4 + }, + { + "name": "Matra Type 155 Rocket Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "Runway Interdiction", + "name": "Runway Interdiction", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + }, + { + "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 API", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Cylindrical Tip Tank 500lt", + "quantity": 2 + } + ], + "enabled": true, + "code": "A - 2*500L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (API Rockets)", + "name": "A - 2*500L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (API Rockets)", + "roles": [] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 API", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + } + ], + "enabled": true, + "code": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD Bombs + 2*LR-25(API Rockets)", + "name": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD Bombs + 2*LR-25(API Rockets)", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "LR-25 - 25 x UnGd Rkts, 50 mm ARF-8/M3 HEI Heavy", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + } + ], + "enabled": true, + "code": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (HEI Rockets)", + "name": "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (HEI Rockets)", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 6 + } + ], + "enabled": true, + "code": "A - 2*320L TipTanks + 6*Mk.82LD", + "name": "A - 2*320L TipTanks + 6*Mk.82LD", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "14-3-M2 - 6 x BAP-100 - 32kg Concrete Piercing Chute Retarded Bomb w/Booster", + "quantity": 6 + } + ], + "enabled": true, + "code": "Runway Interdiction (36*BAP-100)", + "name": "Runway Interdiction (36*BAP-100)", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "14-3-M2 - 6 x BAT-120 ABL - 34kg HE/Frag Chute Retarded Bomb HD", + "quantity": 6 + } + ], + "enabled": true, + "code": "Anti - Light Armoured Vehicle (36*BAT-120 ABL)", + "name": "Anti - Light Armoured Vehicle (36*BAT-120 ABL)", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Elliptic Tip Tank 320lt", + "quantity": 2 + }, + { + "name": "Matra Type 155 Rocket Pod", + "quantity": 2 + }, + { + "name": "Fuel Tank 330lt", + "quantity": 2 + }, + { + "name": "DEFA553 Gunpod Right", + "quantity": 1 + }, + { + "name": "DEFA553 Gunpod Left", + "quantity": 1 + } + ], + "enabled": true, + "code": "AP - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*330L Tanks + 2*Matra 155 (SNEB rockets)", + "name": "AP - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*330L Tanks + 2*Matra 155 (SNEB rockets)", + "roles": [ + "CAS" + ] + } + ], + "filename": "c-101.png", + "enabled": true, + "liveries": { + "mb339an 'nigeria'": { + "name": "Nigerian Air Force | Camo (Low-Vis)", + "countries": [ + "NGA" + ] + }, + "mb339a italian camo - late": { + "name": "Italian Camo - Late", + "countries": [ + "ITA" + ] + }, + "mb339a italian factory": { + "name": "Italian Orange/White", + "countries": [ + "ITA" + ] + }, + "mb339am 'malaysia'": { + "name": "Royal Malaysian Air Force | Camo (Low-Vis)", + "countries": [ + "MYS" + ] + }, + "mb339aa 'armada' - yellow band": { + "name": "ARMADA Argentina | Camo (Yellow Band)", + "countries": [ + "ARG" + ] + }, + "mb339ag 'ghana'": { + "name": "Ghana Air Force | Camo (Low-Vis)", + "countries": [ + "GHA" + ] + }, + "mb339a italian gray": { + "name": "Italian Gray", + "countries": [ + "ITA" + ] + }, + "mb339a italian camo - early": { + "name": "Italian Camo - Early", + "countries": [ + "ITA" + ] + }, + "mb339 'factory'": { + "name": "Aermacchi Factory Scheme | S-001 I-NEUF", + "countries": "All" + }, + "mb339ad 'uae'": { + "name": "UAE Air Force", + "countries": [ + "ARE" + ] + }, + "mb339aa 'armada' - crippa": { + "name": "ARMADA Argentina | Camo (Lt. Crippa's killmark)", + "countries": [ + "ARG" + ] + }, + "mb339ap 'peru'": { + "name": "Peruvian Air Force | Camo (Late)", + "countries": [ + "PER" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 2 crew, light attack trainer. Aviojet", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MQ-9 Reaper": { + "name": "MQ-9 Reaper", + "coalition": "blue", + "label": "MQ-9 Reaper", + "era": "Modern", + "shortLabel": "MQ9", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-12*4", + "name": "GBU-12*4", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "GBU-38*4", + "name": "GBU-38*4", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "M299 - 4 x AGM-114K Hellfire", + "quantity": 2 + }, + { + "name": "GBU-38(V)1/B - JDAM, 500lb GPS Guided Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-114K*8,GBU-38*2", + "name": "AGM-114K*8,GBU-38*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "M299 - 4 x AGM-114K Hellfire", + "quantity": 2 + }, + { + "name": "AGM-114K * 2", + "quantity": 2 + } + ], + "enabled": true, + "code": "AGM-114K*12", + "name": "AGM-114K*12", + "roles": [ + "CAS", + "Strike" + ] + } + ], + "filename": "i-16.png", + "enabled": true, + "liveries": { + "standard": { + "name": "standard", + "countries": [ + "USA" + ] + }, + "standard uk": { + "name": "standard UK", + "countries": [ + "UK" + ] + }, + "standard italy": { + "name": "standard Italy", + "countries": [ + "ITA" + ] + }, + "standard france": { + "name": "standard France", + "countries": [ + "FRA" + ] + }, + "'camo' scheme": { + "name": "'camo' scheme", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "Single turboprop, straight wing, attack aircraft. Reaper", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-15bis": { + "name": "MiG-15bis", + "coalition": "red", + "label": "MiG-15 Fagot", + "era": "Early Cold War", + "shortLabel": "M15", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "FAB-50 - 50kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*FAB-50", + "name": "2*FAB-50", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-100M - 100kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*FAB-100M", + "name": "2*FAB-100M", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 300 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*300L", + "name": "2*300L", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 400 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*400L", + "name": "2*400L", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 600 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "2*600L", + "name": "2*600L", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 300 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "Fuel tank 300", + "name": "Fuel tank 300", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 400 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "Fuel tank 400", + "name": "Fuel tank 400", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + } + ], + "filename": "mig-15.png", + "enabled": true, + "liveries": { + "china_air force": { + "name": "People's Liberation Army Air Force", + "countries": [ + "CHN" + ] + }, + "china volunteer air force": { + "name": "People's Volunteer Army Air Force", + "countries": [ + "CHN" + ] + }, + "ussr_red": { + "name": "USSR Red", + "countries": [ + "SUN", + "RUS" + ] + }, + "algerian af 1962": { + "name": "Algerian AF 1962", + "countries": [ + "DZA" + ] + }, + "north_korea_air force_major_ arkady_ boitsow": { + "name": "North Korea - Major Arkady Boitsow", + "countries": [ + "RUS", + "PRK" + ] + }, + "gdr_air force": { + "name": "Air Forces of the National People's Army", + "countries": [ + "GER" + ] + }, + "default livery": { + "name": "default livery", + "countries": [ + "BRA", + "CUB", + "MYS", + "ARE", + "AUS", + "ABH", + "RUS", + "PHL", + "SPN", + "ISR", + "SUN", + "USA", + "BHR", + "MAR", + "BLR", + "HRV", + "DZA", + "OMN", + "RSO", + "SVK", + "HND", + "IRN", + "UKR", + "TUR", + "JPN", + "PRK", + "SRB", + "IDN", + "KAZ", + "BGR", + "BEL", + "INS", + "THA", + "LBY", + "AUSAF", + "VEN", + "PAK", + "JOR", + "RSA", + "FIN", + "MEX", + "KWT", + "NOR", + "IRQ", + "SYR", + "ITA", + "NZG", + "GRC", + "POL", + "NETH", + "GER", + "SUI", + "CHN", + "SAU", + "SWE", + "YEM", + "VNM", + "ROU", + "RSI", + "FRA", + "CHL", + "KOR", + "HUN", + "AUT", + "GRG", + "DEN", + "TUN", + "EGY", + "IND", + "CZE", + "ETH", + "CAN", + "SDN", + "QAT", + "UK", + "YUG" + ] + }, + "haf fictional": { + "name": "Hellenic Airforce - Fictional", + "countries": [ + "GRC" + ] + }, + "ussr_air forces": { + "name": "Air Forces of Soviet Union", + "countries": [ + "SUN", + "RUS" + ] + }, + "north_korea_air force": { + "name": "Korean People's Air Force", + "countries": [ + "PRK" + ] + }, + "polish_air force": { + "name": "Polish Air Force", + "countries": [ + "POL" + ] + }, + "ussr_air forces old": { + "name": "USSR Old", + "countries": [ + "SUN", + "RUS" + ] + }, + "czechoslovakia_air force": { + "name": "Czechoslovak Air Force", + "countries": [ + "CZE" + ] + }, + "ussr_pepelyaev": { + "name": "USSR Pepelyaev", + "countries": [ + "SUN", + "RUS", + "PRK" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew. Fagot", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-19P": { + "name": "MiG-19P", + "coalition": "red", + "label": "MiG-19 Farmer", + "era": "Early Cold War", + "shortLabel": "M19", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 760 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "PTB-760 x 2", + "name": "PTB-760 x 2", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "K-13A", + "quantity": 2 + }, + { + "name": "Fuel Tank 760 liters", + "quantity": 2 + } + ], + "enabled": true, + "code": "K-13A x 2, PTB-760 x 2", + "name": "K-13A x 2, PTB-760 x 2", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "K-13A", + "quantity": 2 + } + ], + "enabled": true, + "code": "K-13A x 2", + "name": "K-13A x 2", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "K-13A", + "quantity": 2 + }, + { + "name": "Fuel Tank 760 liters", + "quantity": 2 + }, + { + "name": "ORO-57K - S-5M x 8", + "quantity": 2 + } + ], + "enabled": true, + "code": "K-13A x 2, ORO-57K x 2, PTB-760 x 2", + "name": "K-13A x 2, ORO-57K x 2, PTB-760 x 2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 760 liters", + "quantity": 2 + }, + { + "name": "ORO-57K - S-5M x 8", + "quantity": 2 + } + ], + "enabled": true, + "code": "ORO-57K x 2, PTB-760 x 2", + "name": "ORO-57K x 2, PTB-760 x 2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "ORO-57K - S-5M x 8", + "quantity": 4 + } + ], + "enabled": true, + "code": "ORO-57K x 4", + "name": "ORO-57K x 4", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "ORO-57K - S-5M x 8", + "quantity": 2 + } + ], + "enabled": true, + "code": "ORO-57K x 2", + "name": "ORO-57K x 2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-100M - 100kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "ORO-57K - S-5M x 8", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100M x 2, ORO-57K x 2", + "name": "FAB-100M x 2, ORO-57K x 2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "ORO-57K - S-5M x 8", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250 x 2, ORO-57K x 2", + "name": "FAB-250 x 2, ORO-57K x 2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-100M - 100kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100M x 2", + "name": "FAB-100M x 2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250 x 2", + "name": "FAB-250 x 2", + "roles": [ + "CAS", + "Strike" + ] + } + ], + "filename": "mig-19.png", + "enabled": true, + "liveries": { + "ussr_2": { + "name": "764th Fighter Aviation Regiment", + "countries": [ + "SUN", + "RUS" + ] + }, + "plaaf camo": { + "name": "PLAAF Snow Camo", + "countries": [ + "CHN" + ] + }, + "cuba": { + "name": " 211 Escuadron de Caza", + "countries": [ + "CUB" + ] + }, + "iap": { + "name": "234 Fighter Regiment (234 IAP)", + "countries": "All" + }, + "ddr - fictional": { + "name": "Germany DDR camouflage (Fictional)", + "countries": "All" + }, + "snow - fictional": { + "name": "Snow Camouflage Fictional", + "countries": "All" + }, + "plaaf": { + "name": "112th Air Regiment", + "countries": [ + "CHN" + ] + }, + "romania - 66th fighter division": { + "name": "91st Fighter Regiment", + "countries": [ + "ROU" + ] + }, + "poland 39 plm": { + "name": "39 PLM Squadron", + "countries": [ + "POL" + ] + }, + "poland 62 plm": { + "name": "62 PLM Squadron", + "countries": [ + "POL" + ] + }, + "default": { + "name": "default", + "countries": "All" + }, + "czechoslovakia": { + "name": "2nd Fighter-Bomber Regiment", + "countries": [ + "CZE" + ] + }, + "bulgaria": { + "name": "1st Squadron, 18th Fighter Regiment", + "countries": [ + "BGR" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew. Farmer", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-21Bis": { + "name": "MiG-21Bis", + "coalition": "red", + "label": "MiG-21 Fishbed", + "era": "Mid Cold War", + "shortLabel": "M21", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 2 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 2 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Patrol, long range", + "name": "Patrol, long range", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 2 + }, + { + "name": "R-60 x 2", + "quantity": 2 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Patrol, medium range", + "name": "Patrol, medium range", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 490 L Central (21)", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 2 + }, + { + "name": "R-60 x 2", + "quantity": 2 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Patrol, short range", + "name": "Patrol, short range", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "Hard targets, BOMBS", + "name": "Hard targets, BOMBS", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "UB-32M - 32 S-5M", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "Unknown or mixed targets, BOMBS + ROCKETS", + "name": "Unknown or mixed targets, BOMBS + ROCKETS", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "UB-32M - 32 S-5M", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + } + ], + "enabled": true, + "code": "Soft targets, CLUSTERS + ROCKETS", + "name": "Soft targets, CLUSTERS + ROCKETS", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "BL-755 CBU - 450kg, 147 Frag/Pen bomblets", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + } + ], + "enabled": true, + "code": "Soft targets, CLUSTERS", + "name": "Soft targets, CLUSTERS", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "UPK-23-250 - gun pod", + "quantity": 2 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "Soft targets, scattered", + "name": "Soft targets, scattered", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "Kh-66 Grom (21) - AGM, radar guided APU-68", + "quantity": 2 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Few big targets, GROM + BOMBS", + "name": "Few big targets, GROM + BOMBS", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 2 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "Very hard target, PENETRATION", + "name": "Very hard target, PENETRATION", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 4 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Aerial attack, hard targets, CLUSTERS", + "name": "Aerial attack, hard targets, CLUSTERS", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "S-24A (21) - 180 kg, cumulative unguided rocket", + "quantity": 4 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Hard targets, ROCKETS, PENETRATION", + "name": "Hard targets, ROCKETS, PENETRATION", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "S-24B (21) - 180 kg, fragmented unguided rocket", + "quantity": 4 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Soft targets, ROCKETS, BLAST-FRAGMENTS", + "name": "Soft targets, ROCKETS, BLAST-FRAGMENTS", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 490 L Central (21)", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 1 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 1 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + } + ], + "enabled": true, + "code": "Long range, MIX", + "name": "Long range, MIX", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 490 L Central (21)", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 2 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + } + ], + "enabled": true, + "code": "Long range, RADAR GUIDED MISSILES", + "name": "Long range, RADAR GUIDED MISSILES", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 490 L Central (21)", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 2 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + } + ], + "enabled": true, + "code": "Long range, INFRA RED MISSILES", + "name": "Long range, INFRA RED MISSILES", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 2 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 2 + } + ], + "enabled": true, + "code": "Escort", + "name": "Escort", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "SPS-141-100 (21) - jamming and countermeasures pod", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 1 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 1 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + } + ], + "enabled": true, + "code": "Escort, JAMMER", + "name": "Escort, JAMMER", + "roles": [ + "Escort" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "SAB-100MN - 100 kg Illumination Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "Night, ILLUMINATOR", + "name": "Night, ILLUMINATOR", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "SPS-141-100 (21) - jamming and countermeasures pod", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 1 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 1 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + } + ], + "enabled": true, + "code": "Long range, JAMMER", + "name": "Long range, JAMMER", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "UPK-23-250 - gun pod", + "quantity": 2 + }, + { + "name": "UB-16UM - 16 S-5M", + "quantity": 2 + } + ], + "enabled": true, + "code": "Soft targets, UPK + ROCKETS", + "name": "Soft targets, UPK + ROCKETS", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + }, + { + "name": "UPK-23-250 - gun pod", + "quantity": 2 + }, + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Soft targets, UPK + CLUSTERS", + "name": "Soft targets, UPK + CLUSTERS", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-3R - AAM, radar guided", + "quantity": 1 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 1 + }, + { + "name": "SPS-141-100 (21) - jamming and countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + } + ], + "enabled": true, + "code": "Patrol, JAMMER", + "name": "Patrol, JAMMER", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "RN-24 - 470kg, nuclear bomb, free fall", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 1 + } + ], + "enabled": true, + "code": "NUCLEAR A", + "name": "NUCLEAR A", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RN-28 - 260 kg, nuclear bomb, free fall", + "quantity": 1 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + }, + { + "name": "Fuel Tank 490 L (21)", + "quantity": 2 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 1 + } + ], + "enabled": true, + "code": "NUCLEAR B", + "name": "NUCLEAR B", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel Tank 800 L (21)", + "quantity": 1 + }, + { + "name": "R-3R - AAM, radar guided", + "quantity": 2 + }, + { + "name": "R-3S - AAM, IR guided", + "quantity": 2 + }, + { + "name": "ASO-2 - countermeasures pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Short range", + "name": "Short range", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Smoke - white - 21", + "quantity": 1 + } + ], + "enabled": true, + "code": "AEROBATIC", + "name": "AEROBATIC", + "roles": [] + } + ], + "filename": "mig-21.png", + "enabled": true, + "liveries": { + "afghanistan (1)": { + "name": "Afghanistan (1)", + "countries": "All" + }, + "bulgaria - 1-3 iae (3)": { + "name": "Bulgaria - 1/3 IAE (3)", + "countries": "All" + }, + "germany east - jg-8": { + "name": "East Germany - JG-8", + "countries": "All" + }, + "plaaf - white": { + "name": "PLAAF - White", + "countries": "All" + }, + "croatia - 21st fs": { + "name": "Croatia - 21st Fighter Squadron (Zagreb AB)", + "countries": "All" + }, + "plaaf - sky blue": { + "name": "PLAAF - Sky Blue", + "countries": "All" + }, + "iraq - 17th sqn (2)": { + "name": "Iraq - 17th Sqn (2)", + "countries": "All" + }, + "vvs - amt-11 grey": { + "name": "VVS - AMT-11 Grey", + "countries": "All" + }, + "vvs - 234 gviap": { + "name": "VVS - 234 GvIAP", + "countries": "All" + }, + "bare metal": { + "name": "Bare Metal", + "countries": "All" + }, + "bulgaria - 1-3 iae (2)": { + "name": "Bulgaria - 1/3 IAE (2)", + "countries": "All" + }, + "plaaf - splinter": { + "name": "PLAAF - Splinter", + "countries": "All" + }, + "argentina (2)": { + "name": "Argentina (2)", + "countries": "All" + }, + "vvs - demonstrator": { + "name": "VVS Demonstrator", + "countries": "All" + }, + "vvs - 115 gviap": { + "name": "VVS - 115 GvIAP (Kokaydy AB)", + "countries": "All" + }, + "romania - lancer a": { + "name": "Romania - Lancer A", + "countries": "All" + }, + "sweden - 16th air wing": { + "name": "Sweden - 16th Air Wing", + "countries": "All" + }, + "syria (1)": { + "name": "Syria (1)", + "countries": "All" + }, + "egypt - grey 1982": { + "name": "Egypt - Grey 1982", + "countries": "All" + }, + "finland - hävllv 31": { + "name": "Finland - HavLLv 31", + "countries": "All" + }, + "huaf 47th ab - 6115 (griff sqn)": { + "name": "HunAF Griff Sqn. (47th AB) 6115", + "countries": "All" + }, + "libya - 2017": { + "name": "Lybia - 2017", + "countries": "All" + }, + "huaf 47th ab (griff sqn)": { + "name": "HunAF Griff Sqn. (47th AB)", + "countries": "All" + }, + "cuba - 1990s": { + "name": "Cuba - 1990s", + "countries": "All" + }, + "serbia - 101st lae": { + "name": "Serbia - 101st LAE", + "countries": "All" + }, + "slovakia - 1998": { + "name": "Slovakia - 1998", + "countries": "All" + }, + "iran - 51st sqn": { + "name": "Iran - 51st Sqn (Umidiyeh AB)", + "countries": "All" + }, + "vvs - 116 cbp": { + "name": "VVS - 116 CBP", + "countries": "All" + }, + "georgia (2)": { + "name": "Georgia (2)", + "countries": "All" + }, + "huaf metal": { + "name": "HuAF Metal", + "countries": "All" + }, + "bulgaria - 1-3 iae": { + "name": "Bulgaria - 1/3 IAE", + "countries": "All" + }, + "india - 101st sqn (1)": { + "name": "India - 101st Sqn Falcons", + "countries": "All" + }, + "ukraine (2)": { + "name": "Ukraine 02", + "countries": "All" + }, + "vpaf - 927th fighter regiment metal": { + "name": "VPAF - 927th Fighter Regiment Metal", + "countries": "All" + }, + "iran - standard": { + "name": "Iran - Standard", + "countries": "All" + }, + "romania - lancer c": { + "name": "Romania - Lancer C", + "countries": "All" + }, + "angola - c41": { + "name": "Angola - C41", + "countries": "All" + }, + "poland - 1 dlmw": { + "name": "Poland - 1 DLMW", + "countries": "All" + }, + "yugoslavia - gray": { + "name": "Yugoslavia - Grey", + "countries": "All" + }, + "angola - c314": { + "name": "Angola - C314", + "countries": "All" + }, + "argentina (1)": { + "name": "Argentina (1)", + "countries": "All" + }, + "romania - gray": { + "name": "Romania - Gray", + "countries": "All" + }, + "dprk - 2016 - 42": { + "name": "DPRK - 2016 Nr.42", + "countries": "All" + }, + "libya - early": { + "name": "Lybia - Early", + "countries": "All" + }, + "poland - metal": { + "name": "Poland - Lacquer Metal", + "countries": "All" + }, + "syria (2)": { + "name": "Syria (2)", + "countries": "All" + }, + "india - 15th sqn": { + "name": "India - 15 Sqn War Games", + "countries": "All" + }, + "cuba - um 5010 is": { + "name": "Cuba - UM 5010 IS", + "countries": "All" + }, + "afghanistan (2)": { + "name": "Afghanistan (2)", + "countries": "All" + }, + "iraq - 9th sqn": { + "name": "Iraq - 9th Sqn", + "countries": "All" + }, + "vpaf - 927th lam son - 6122": { + "name": "VPAF - 927th Lam Son", + "countries": "All" + }, + "yugoslavia - camo": { + "name": "Yugoslavia - Camo", + "countries": "All" + }, + "egypt - tan 1982": { + "name": "Egypt - Tan 1982", + "countries": "All" + }, + "croatia - 1st fs 1992": { + "name": "Croatia - 1st FS 1992", + "countries": "All" + }, + "southeria": { + "name": "Southeria", + "countries": "All" + }, + "ukraine (1)": { + "name": "Ukraine 01", + "countries": "All" + }, + "georgia (1)": { + "name": "Georgia (1)", + "countries": "All" + }, + "northeria - 32nd fs": { + "name": "Northeria - 32nd FG", + "countries": "All" + }, + "cuba - metal": { + "name": "Cuba - Metal", + "countries": "All" + }, + "huaf 47th ab - early": { + "name": "HunAF Griff Sqn. (47th AB) - Early ", + "countries": "All" + }, + "jasdf": { + "name": "JASDF", + "countries": "All" + }, + "raf - 111th sqn": { + "name": "RAF - 111th Sqn", + "countries": "All" + }, + "sweden - m90": { + "name": "Sweden - M90", + "countries": "All" + }, + "algeria": { + "name": "Algeria FD-43", + "countries": "All" + }, + "india - 101st sqn (2)": { + "name": "India - 101st Sqn Falcons (2)", + "countries": "All" + }, + "draken international": { + "name": "Draken International", + "countries": "All" + }, + "raf - 11th sqn": { + "name": "RAF - 11th Sqn", + "countries": "All" + }, + "vpaf - 921st sao do - 5040": { + "name": "VPAF - 921st Sao Do", + "countries": "All" + }, + "vvs - metal": { + "name": "VVS Metal", + "countries": "All" + }, + "iraq - 17th sqn (1)": { + "name": "Iraq - 17th Sqn (1)", + "countries": "All" + }, + "vvs - 185th gviap": { + "name": "VVS 185th GvIAP", + "countries": "All" + }, + "poland - 10 elt": { + "name": "Poland - 10 ELT", + "countries": "All" + }, + "dprk - 2014 - 34": { + "name": "DPRK - 2014 Nr.34", + "countries": "All" + }, + "huaf grey": { + "name": "HuAF Grey", + "countries": "All" + }, + "huaf 31st ab (turul sqn)": { + "name": "HunAF 1904 Capeti (51th AB)", + "countries": "All" + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew. Fishbed", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-23MLD": { + "name": "MiG-23MLD", + "coalition": "red", + "label": "MiG-23 Flogger", + "era": "Mid Cold War", + "shortLabel": "23", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-60M*4", + "name": "R-60M*4", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "B-8*2,R-60M*2,Fuel-800", + "name": "B-8*2,R-60M*2,Fuel-800", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "UB-32*2,R-60M*2,Fuel-800", + "name": "UB-32*2,R-60M*2,Fuel-800", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-24R*2,R-60M*4,Fuel-800", + "name": "R-24R*2,R-60M*4,Fuel-800", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-24T (AA-7 Apex IR) - Infra Red", + "quantity": 1 + }, + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + }, + { + "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-24R,R-24T,R-60M*4,Fuel-800", + "name": "R-24R,R-24T,R-60M*4,Fuel-800", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-60M*4,Fuel-800", + "name": "R-60M*4,Fuel-800", + "roles": [ + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*2,R-60M*2,Fuel-800", + "name": "FAB-500*2,R-60M*2,Fuel-800", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-24R*2,R-60M*4", + "name": "R-24R*2,R-60M*4", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*2,R-60M*2,Fuel-800", + "name": "FAB-250*2,R-60M*2,Fuel-800", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-250*2,R-60M*2,Fuel-800", + "name": "RBK-250*2,R-60M*2,Fuel-800", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-500*2,R-60M*2,Fuel-800", + "name": "RBK-500*2,R-60M*2,Fuel-800", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-24T (AA-7 Apex IR) - Infra Red", + "quantity": 1 + }, + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-24R (AA-7 Apex SA) - Semi-Act Rdr", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-24R,R-24T,R-60M*4", + "name": "R-24R,R-24T,R-60M*4", + "roles": [ + "CAP" + ] + } + ], + "filename": "mig-23.png", + "enabled": true, + "liveries": { + "af standard-2": { + "name": "af standard-2", + "countries": [ + "SUN", + "RUS" + ] + }, + "af standard-3 (worn-out)": { + "name": "af standard-3 (worn-out)", + "countries": [ + "SUN", + "RUS" + ] + }, + "algerian air force": { + "name": "Algerian Air Force", + "countries": [ + "DZA" + ] + }, + "af standard-1": { + "name": "af standard-1", + "countries": [ + "SUN", + "RUS" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swing wing, 1 crew. Flogger", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-25PD": { + "name": "MiG-25PD", + "coalition": "red", + "label": "MiG-25PD Foxbat", + "era": "Mid Cold War", + "shortLabel": "25P", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-40TD (AA-6 Acrid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-40R*2,R-40T*2", + "name": "R-40R*2,R-40T*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-40R*4", + "name": "R-40R*4", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-40R*2,R-60M*2", + "name": "R-40R*2,R-60M*2", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + } + ], + "filename": "mig-25.png", + "enabled": true, + "liveries": { + "algerian air force": { + "name": "Algeria Air Force standard", + "countries": [ + "DZA" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Foxbat", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-25RBT": { + "name": "MiG-25RBT", + "coalition": "red", + "label": "MiG-25RBT Foxbat", + "era": "Mid Cold War", + "shortLabel": "25R", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-500x2_60x2", + "name": "FAB-500x2_60x2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-60M*2", + "name": "R-60M*2", + "roles": [ + "Reconnaissance" + ] + } + ], + "filename": "mig-25.png", + "enabled": true, + "liveries": { + "algerian air force": { + "name": "Algeria Air Force standard", + "countries": [ + "DZA" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Foxbat", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-27K": { + "name": "MiG-27K", + "coalition": "red", + "label": "MiG-27K Flogger-D", + "era": "Mid Cold War", + "shortLabel": "M27", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*6,R-60M*2,Fuel", + "name": "FAB-250*6,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "BetAB-500ShP*2,FAB-250*2,R-60*2", + "name": "BetAB-500ShP*2,FAB-250*2,R-60*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Kh-25MR (AS-10 Karen) - 300kg, ASM, 10km, RC Guided", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-25MR*2,R-60M*2,Fuel", + "name": "Kh-25MR*2,R-60M*2,Fuel", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*2,R-60M*2,Fuel", + "name": "Kh-29L*2,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + } + ], + "enabled": true, + "code": "B-8*4", + "name": "B-8*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "BetAB-500*2,FAB-500*2,R-60*2", + "name": "BetAB-500*2,FAB-500*2,R-60*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-25MPU*2,R-60M*2,Fuel", + "name": "Kh-25MPU*2,R-60M*2,Fuel", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29T*2,R-60M*2,Fuel", + "name": "Kh-29T*2,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*2,FAB-250*2,R-60M*2,Fuel", + "name": "FAB-500*2,FAB-250*2,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-25ML*2,R-60M*2,Fuel", + "name": "Kh-25ML*2,R-60M*2,Fuel", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "KAB-500LG - 500kg Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "KAB-500*2,R-60M*2,Fuel", + "name": "KAB-500*2,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-500AO*2,RBK-250*2,R-60M*2", + "name": "RBK-500AO*2,RBK-250*2,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + } + ], + "enabled": true, + "code": "UB-32*4", + "name": "UB-32*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*2,R-60*2,Fuel", + "name": "Kh-29L*2,R-60*2,Fuel", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "mig-23.png", + "enabled": true, + "liveries": { + "algerian air force": { + "name": "Algerian Air Force", + "countries": [ + "DZA" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swing wing, 1 crew. Flogger", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-29A": { + "name": "MiG-29A", + "coalition": "red", + "label": "MiG-29A Fulcrum", + "era": "Late Cold War", + "shortLabel": "M29", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel tank 1150L MiG-29", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel-1150*2,Fuel-1500", + "name": "Fuel-1150*2,Fuel-1500", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-500AO*4,R-73*2,Fuel", + "name": "RBK-500AO*4,R-73*2,Fuel", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*4,R-73*2,Fuel", + "name": "FAB-250*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "B-8*4,R-73*2,Fuel", + "name": "B-8*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-60M*4,R-27R*2", + "name": "R-60M*4,R-27R*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*4,R-27R*2,Fuel-1500", + "name": "R-73*4,R-27R*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 6 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*6,Fuel-1500", + "name": "R-73*6,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 6 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-60M*6,Fuel-1500", + "name": "R-60M*6,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-24*4,R-73*2,Fuel", + "name": "S-24*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*4,R-73*2,Fuel", + "name": "FAB-500*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-60M*6", + "name": "R-60M*6", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500*4,R-73*2,Fuel", + "name": "BetAB-500*4,R-73*2,Fuel", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*6", + "name": "R-73*6", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", + "name": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-60M*4,R-27R*2,Fuel-1500", + "name": "R-60M*4,R-27R*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-250*4,R-73*2,Fuel", + "name": "RBK-250*4,R-73*2,Fuel", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-73*4,R-27R*2", + "name": "R-73*4,R-27R*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-73*2,R-60M*2,R-27R*2", + "name": "R-73*2,R-60M*2,R-27R*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-24*2,FAB-500*2,R-73*2,Fuel", + "name": "S-24*2,FAB-500*2,R-73*2,Fuel", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "mig-29.png", + "enabled": true, + "liveries": { + "air force ukraine standard": { + "name": "Air Force (Standard)", + "countries": [ + "UKR" + ] + }, + "air force standard": { + "name": "Air Force (Standard)", + "countries": [ + "SUN", + "RUS" + ] + }, + "strizhi": { + "name": "Strizhi 1992", + "countries": [ + "RUS" + ] + }, + "domna 120th ar": { + "name": "Domna - 120th Aviation Regiment", + "countries": [ + "RUS" + ] + }, + "mary-1 agressors": { + "name": "Soviet Air Forces, a/b 1521 (Mary-1)", + "countries": [ + "RUS" + ] + }, + "polish 41st sqn standard1": { + "name": "41st Sqn Standard 1", + "countries": [ + "POL" + ] + }, + "iriaf sand-blue": { + "name": "IRIAF sand-blue", + "countries": [ + "IRN" + ] + }, + "strizhi (w)": { + "name": "Strizhi 1992(W)", + "countries": [ + "RUS" + ] + }, + "polish 41st sqn standard2": { + "name": "41st Sqn Standard 2", + "countries": [ + "POL" + ] + }, + "vasylkiv 40th brta": { + "name": "Vasylkiv - 40th Brigade of Tactical Aviation", + "countries": [ + "UKR" + ] + }, + "kazakhstan air defense forces": { + "name": "KazAADF 600th Airbase 2015", + "countries": [ + "KAZ" + ] + }, + "kazakhstan kazaadf 2008": { + "name": "KazAADF 600th Airbase 2008", + "countries": [ + "KAZ" + ] + }, + "iriaf blue-grey": { + "name": "IRIAF blue-grey", + "countries": [ + "IRN" + ] + }, + "syaaf": { + "name": "Syrian Arab Air Force", + "countries": [ + "SYR" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Flanker", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-29S": { + "name": "MiG-29S", + "coalition": "red", + "label": "MiG-29S Fulcrum", + "era": "Late Cold War", + "shortLabel": "M29", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-73*2,R-60M*2,R-27R*2", + "name": "R-73*2,R-60M*2,R-27R*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*4,R-27R*2,Fuel-1500", + "name": "R-73*4,R-27R*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 6 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*6,Fuel-1500", + "name": "R-73*6,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 6 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-60M*6,Fuel-1500", + "name": "R-60M*6,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-24*4,R-73*2,Fuel", + "name": "S-24*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*4,R-73*2,Fuel", + "name": "FAB-500*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500*4,R-73*2,Fuel", + "name": "BetAB-500*4,R-73*2,Fuel", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-500AO*4,R-73*2,Fuel", + "name": "RBK-500AO*4,R-73*2,Fuel", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", + "name": "R-73*2,R-60M*2,R-27R*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1150L MiG-29", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-77*2,R-73*2,Fuel-1500,Fuel-1150*2", + "name": "R-77*2,R-73*2,Fuel-1500,Fuel-1150*2", + "roles": [ + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "B-8*4,R-73*2,Fuel", + "name": "B-8*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-250*4,R-73*2,Fuel", + "name": "RBK-250*4,R-73*2,Fuel", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*6", + "name": "R-73*6", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Fuel tank 1150L MiG-29", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel-1150*2,Fuel-1500", + "name": "Fuel-1150*2,Fuel-1500", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-60M*6", + "name": "R-60M*6", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-60M*4,R-27R*2", + "name": "R-60M*4,R-27R*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-73*4,R-27R*2", + "name": "R-73*4,R-27R*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-77*4,R-73*2", + "name": "R-77*4,R-73*2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*4,R-73*2,Fuel", + "name": "FAB-250*4,R-73*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-60M*4,R-27R*2,Fuel-1500", + "name": "R-60M*4,R-27R*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 4 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-77*4,R-73*2,Fuel-1500", + "name": "R-77*4,R-73*2,Fuel-1500", + "roles": [ + "CAP", + "CAP", + "Escort" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "Fuel tank 1400L", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-24*2,FAB-500*2,R-73*2,Fuel", + "name": "S-24*2,FAB-500*2,R-73*2,Fuel", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "mig-29.png", + "enabled": true, + "liveries": { + "algerian af fc-16": { + "name": "Algerian AF FC-16", + "countries": [ + "DZA" + ] + }, + "air force ukraine standard": { + "name": "Air Force (Standard)", + "countries": [ + "UKR" + ] + }, + "air force standard": { + "name": "Air Force (Standard)", + "countries": [ + "RUS" + ] + }, + "kazaadf new faded (fictional)": { + "name": "KazAADF new faded (fictional)", + "countries": [ + "KAZ" + ] + }, + "strizhi": { + "name": "Strizhi 2003", + "countries": [ + "RUS" + ] + }, + "115 gviap_termez": { + "name": "Termez AFB, 115th Guards Aviation Regiment", + "countries": [ + "RUS" + ] + }, + "1521th air base_mary-1": { + "name": "Mary-1 AFB, 1521st Air Force Base", + "countries": [ + "RUS" + ] + }, + "kazaadf old (fictional)": { + "name": "KazAADF old (fictional)", + "countries": [ + "KAZ" + ] + }, + "swifts": { + "name": "Swifts (Aerobatic team)", + "countries": [ + "RUS" + ] + }, + "773 iap_damgarten": { + "name": "Damgarten AFB, 773rd Aviation Regiment", + "countries": [ + "RUS" + ] + }, + "426th air group_erebuni": { + "name": "Erebuni AFB, 426th Air Group", + "countries": [ + "RUS" + ] + }, + "31 gviap_zernograd": { + "name": "Zernograd AFB, 31st Guards Aviation Regiment", + "countries": [ + "RUS" + ] + }, + "28 gviap_andreapol": { + "name": "Andreapol AFB, 28th Guards Aviation Regiment", + "countries": [ + "RUS" + ] + }, + "belarusian air force": { + "name": "Belarusian Air Force 61 FAB Baranavichy (2017)", + "countries": [ + "BLR" + ] + }, + "kazaadf new (fictional)": { + "name": "KazAADF new (fictional)", + "countries": [ + "KAZ" + ] + }, + "falcons of russia": { + "name": "Lipetsk, aerobatic group Falcons of Russia", + "countries": [ + "RUS" + ] + }, + "kazaadf new (fictional digital)": { + "name": "KazAADF new digital (fictional digital)", + "countries": [ + "KAZ" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Flanker", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MiG-31": { + "name": "MiG-31", + "coalition": "red", + "label": "MiG-31 Foxhound", + "era": "Late Cold War", + "shortLabel": "M31", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-40TD (AA-6 Acrid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-40T*2,R-33*4", + "name": "R-40T*2,R-33*4", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", + "quantity": 1 + }, + { + "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", + "quantity": 4 + }, + { + "name": "R-40TD (AA-6 Acrid) - Infra Red", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-40T,R-33*4,R-40R", + "name": "R-40T,R-33*4,R-40R", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-40RD (AA-6 Acrid) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-40R*2,R-33*4", + "name": "R-40R*2,R-33*4", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "APU-60-2M with 2 x R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-33 (AA-9 Amos) - Semi-Act Rdr", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-60M*4,R-33*4", + "name": "R-60M*4,R-33*4", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + } + ], + "filename": "mig-23.png", + "enabled": true, + "liveries": { + "174 gviap_boris safonov": { + "name": "174 GvIAP Boris Safonov", + "countries": [ + "RUS" + ] + }, + "903_white": { + "name": "Demo 903 White", + "countries": [ + "RUS" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 2 crew. Foxhound", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Mirage-F1EE": { + "name": "Mirage-F1EE", + "coalition": "blue", + "label": "Mirage-F1EE", + "era": "Mid Cold War", + "shortLabel": "MF1", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "R530F IR", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", + "name": "2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "R530F EM", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM9-JULI, 2*R530EM, 1*Fuel Tank", + "name": "2*AIM9-JULI, 2*R530EM, 1*Fuel Tank", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "R530F IR", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", + "name": "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "R530F EM", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM9-JULI, 1*R530EM", + "name": "2*AIM9-JULI, 1*R530EM", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "R530F IR", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 1*R530IR", + "name": "2*R550 Magic I, 1*R530IR", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 2 + }, + { + "name": "R530F IR", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", + "name": "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 2 + }, + { + "name": "R530F IR", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", + "name": "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9J Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "MATRA F4 - 18 x UnGd Rkts, 68 mm SNEB Type 251 F1B HE", + "quantity": 2 + }, + { + "name": "R530F IR", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", + "name": "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9J Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 2 + }, + { + "name": "CLB 4 - 4 x SAMP-400 - 400 kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", + "name": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9J Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 2 + }, + { + "name": "CLB 4 - 4 x SAMP-400 - 400 kg GP Chute Retarded Bomb HD", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", + "name": "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "MATRA F1 - 36 x UnGd Rkts, 68 mm SNEB Type 253 F1B HEAT", + "quantity": 4 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", + "name": "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "MATRA F4 - 18 x UnGd Rkts, 68 mm SNEB Type 253 F1B HEAT", + "quantity": 4 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", + "name": "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "MATRA F1 - 36 x UnGd Rkts, 68 mm SNEB Type 256 F1B HE/Frag", + "quantity": 4 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", + "name": "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "MATRA F4 - 18 x UnGd Rkts, 68 mm SNEB Type 256 F1B HE/Frag", + "quantity": 4 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", + "name": "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "SAMP-250 - 250 kg GP Chute Retarded Bomb HD", + "quantity": 2 + }, + { + "name": "MATRA F1 - 36 x UnGd Rkts, 68 mm SNEB Type 256 F1B HE/Frag", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", + "name": "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "SAMP-250 - 250 kg GP Chute Retarded Bomb HD", + "quantity": 4 + }, + { + "name": "CLB 4 - 4 x SAMP-250 - 250 kg GP Chute Retarded Bomb HD", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9JULI, 8*SAMP 250 HD", + "name": "2*AIM-9JULI, 8*SAMP 250 HD", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "SAMP-400 - 400 kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "CLB 4 - 4 x SAMP-400 - 400 kg GP Bomb LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9JULI, 8*SAMP 400 LD", + "name": "2*AIM-9JULI, 8*SAMP 400 LD", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BLU-107/B Durandal - 219kg Concrete Piercing Chute Retarded Bomb w/Booster", + "quantity": 4 + }, + { + "name": "CLB 4 - 4 x BLU-107/B Durandal - 219kg Concrete Piercing Chute Retarded Bomb w/Booster", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM-9JULI, 8*BLU107 Durandal", + "name": "2*AIM-9JULI, 8*BLU107 Durandal", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-9JULI Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "S530F", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*AIM9-JULI, 2*S530F, 1*Fuel Tank", + "name": "2*AIM9-JULI, 2*S530F, 1*Fuel Tank", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "S530F", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 2*S530F, 1*Fuel Tank", + "name": "2*R550 Magic I, 2*S530F, 1*Fuel Tank", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "R550 Magic 1 IR AAM", + "quantity": 2 + }, + { + "name": "S530F", + "quantity": 2 + }, + { + "name": "RP35 Pylon Fuel Tank (1137 l usable)", + "quantity": 1 + }, + { + "name": "BARAX - ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "2*R550 Magic I, 2*S530F, 1*Fuel Tank, 1*BARAX ECM Pod", + "name": "2*R550 Magic I, 2*S530F, 1*Fuel Tank, 1*BARAX ECM Pod", + "roles": [ + "CAP", + "CAP", + "Escort", + "CAP" + ] + } + ], + "filename": "f-5.png", + "enabled": true, + "liveries": { + "ec 330 lorraine": { + "name": "EC 330 Lorraine", + "countries": [ + "FRA" + ] + }, + "ec 5 330 cote d'argent (fictional ct)": { + "name": "EC 5/330 Cote d'Argent (FICTIONAL CT)", + "countries": [ + "FRA" + ] + }, + "er 2 33 savoie 100 ans de reco (fictional cr)": { + "name": "ER 233 Savoie 100 ans de reco (FICTIONAL CR)", + "countries": [ + "FRA" + ] + }, + "iriaf 3-6210 _ 2017 blue (eq variant)": { + "name": "IRIAF 3-6210 _ 2017 Blue (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "iriaf 3-6209 _ 2010s blue_gray (eq variant)": { + "name": "IRIAF 3-6209 _ 2010s Blue_Gray (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "er 233 savoie ba 118 mont de marsan (fictional cr)": { + "name": "ER 2/33 Savoie BA 118 Mont de Marsan (FICTIONAL CR)", + "countries": [ + "FRA" + ] + }, + "ala 14 blue skin (ee) albacete": { + "name": "ALA 14 Blue Skin (EE) Albacete", + "countries": [ + "SPN" + ] + }, + "usa company skin (m-ee)": { + "name": "USA Company Skin EE", + "countries": [ + "USA", + "AUSAF" + ] + }, + "ala 14 nato skin 1 (ee)": { + "name": "ALA 14 NATO Skin 1 (EE)", + "countries": [ + "SPN" + ] + }, + "iriaf 3-6210 _ 2013 gray (eq variant)": { + "name": "IRIAF 3-6210 _ 2013 Gray (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "usa company skin 2 (m-ee)": { + "name": "USA Company Skin 2 EE", + "countries": [ + "USA", + "AUSAF" + ] + }, + "iriaf 3-6214 _ 2021 blue (eq variant)": { + "name": "IRIAF 3-6214 _ 2021 Blue (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "aerges nato grey": { + "name": "AERGES NATO GREY", + "countries": [ + "CUB", + "AUS", + "PRT", + "SUN", + "USA", + "BLR", + "HRV", + "LBN", + "SVK", + "TUR", + "ARG", + "BEL", + "FIN", + "SAU", + "RSI", + "CHL", + "AUT", + "EGY", + "ECU", + "CAN", + "QAT", + "YUG", + "ISR", + "PER", + "BHR", + "NGA", + "IDN", + "KAZ", + "INS", + "AUSAF", + "PAK", + "SVN", + "ROU", + "DEN", + "TUN", + "IND", + "CZE", + "MYS", + "GHA", + "OMN", + "RSO", + "IRN", + "UKR", + "JPN", + "THA", + "JOR", + "RSA", + "MEX", + "NOR", + "ITA", + "NETH", + "SUI", + "VNM", + "KOR", + "GRG", + "SDN", + "UK", + "BRA", + "ARE", + "ABH", + "BOL", + "RUS", + "PHL", + "SPN", + "MAR", + "DZA", + "GDR", + "HND", + "PRK", + "SRB", + "BGR", + "LBY", + "VEN", + "IRQ", + "SYR", + "NZG", + "GRC", + "POL", + "SWE", + "GER", + "CHN", + "YEM", + "FRA", + "HUN", + "ETH", + "KWT" + ] + }, + "ec 3 33 lorraine ba 112 reims - champagne ardennes": { + "name": "EC 333 Lorraine BA 112 Reims - Champagne Ardennes", + "countries": [ + "FRA" + ] + }, + "ec 1 12 cambresis": { + "name": "EC 112 BA 103 Cambrai-Épinoy", + "countries": [ + "FRA" + ] + }, + "ala 46 blue skin (ee) gando": { + "name": "ALA 46 Blue Skin (EE) Gando", + "countries": [ + "SPN" + ] + }, + "aerges blue": { + "name": "AERGES BLUE", + "countries": [ + "CUB", + "AUS", + "PRT", + "SUN", + "USA", + "BLR", + "HRV", + "LBN", + "SVK", + "TUR", + "ARG", + "BEL", + "FIN", + "SAU", + "RSI", + "CHL", + "AUT", + "EGY", + "ECU", + "CAN", + "QAT", + "YUG", + "ISR", + "PER", + "BHR", + "NGA", + "IDN", + "KAZ", + "INS", + "AUSAF", + "PAK", + "SVN", + "ROU", + "DEN", + "TUN", + "IND", + "CZE", + "MYS", + "GHA", + "OMN", + "RSO", + "IRN", + "UKR", + "JPN", + "THA", + "JOR", + "RSA", + "MEX", + "NOR", + "ITA", + "NETH", + "SUI", + "VNM", + "KOR", + "GRG", + "SDN", + "UK", + "BRA", + "ARE", + "ABH", + "BOL", + "RUS", + "PHL", + "SPN", + "MAR", + "DZA", + "GDR", + "HND", + "PRK", + "SRB", + "BGR", + "LBY", + "VEN", + "IRQ", + "SYR", + "NZG", + "GRC", + "POL", + "SWE", + "GER", + "CHN", + "YEM", + "FRA", + "HUN", + "ETH", + "KWT" + ] + }, + "ec 212 picardie": { + "name": "EC 212 Picardie", + "countries": [ + "FRA" + ] + }, + "iriaf 3-6212 _ col. naghdibake (eq variant)": { + "name": "IRIAF 3-6212 _ Col. Naghdibake (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "iriaf 3-6211 _ 2010s blue_gray (eq variant)": { + "name": "IRIAF 3-6211 _ 2010s Blue_Gray (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "ec 1 5 vendee ba orange-cariat": { + "name": "EC 1/5 Vendee BA 115 Orange-Cariat", + "countries": [ + "FRA" + ] + }, + "er 233 savoie ba 118 mont de marsan dessert camu (fictional cr)": { + "name": "ER 233 Savoie BA 118 Mont de Marsan Dessert Camu (FICTIONAL CR)", + "countries": [ + "FRA" + ] + }, + "iriaf 3-6215 _ 2021 blue (eq variant)": { + "name": "IRIAF 3-6215 _ 2021 Blue (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "iriaf 3-6210 _ 2021 blue (eq variant)": { + "name": "IRIAF 3-6210 _ 2021 Blue (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "ala 46 sq 462 blue skin (ee) gando": { + "name": "ALA 46 SQ 462 Blue Skin (EE) Gando", + "countries": [ + "SPN" + ] + }, + "ec 2 30 normandie niemen (fictional ct)": { + "name": "EC 2/30 Normandie Niemen (FICTIONAL CT)", + "countries": [ + "FRA" + ] + }, + "iriaf 3-6215 _ 1990-2010s desert (eq variant)": { + "name": "IRIAF 3-6215 _ 1990-2010s Desert (EQ Variant)", + "countries": [ + "IRN", + "INS" + ] + }, + "aerges camo": { + "name": "AERGES CAMO", + "countries": [ + "CUB", + "AUS", + "PRT", + "SUN", + "USA", + "BLR", + "HRV", + "LBN", + "SVK", + "TUR", + "ARG", + "BEL", + "FIN", + "SAU", + "RSI", + "CHL", + "AUT", + "EGY", + "ECU", + "CAN", + "QAT", + "YUG", + "ISR", + "PER", + "BHR", + "NGA", + "IDN", + "KAZ", + "INS", + "AUSAF", + "PAK", + "SVN", + "ROU", + "DEN", + "TUN", + "IND", + "CZE", + "MYS", + "GHA", + "OMN", + "RSO", + "IRN", + "UKR", + "JPN", + "THA", + "JOR", + "RSA", + "MEX", + "NOR", + "ITA", + "NETH", + "SUI", + "VNM", + "KOR", + "GRG", + "SDN", + "UK", + "BRA", + "ARE", + "ABH", + "BOL", + "RUS", + "PHL", + "SPN", + "MAR", + "DZA", + "GDR", + "HND", + "PRK", + "SRB", + "BGR", + "LBY", + "VEN", + "IRQ", + "SYR", + "NZG", + "GRC", + "POL", + "SWE", + "GER", + "CHN", + "YEM", + "FRA", + "HUN", + "ETH", + "KWT" + ] + }, + "usa company grey (m-ee)": { + "name": "USA Company Grey EE", + "countries": [ + "USA", + "AUSAF" + ] + } + }, + "type": "Aircraft", + "description": "Single Jet engine, swept wing, 1 crew.", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "MosquitoFBMkVI": { + "name": "MosquitoFBMkVI", + "coalition": "blue", + "label": "Mosquito FB MkVI", + "era": "WW2", + "shortLabel": "Mos", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "500 lb S.A.P.", + "quantity": 2 + }, + { + "name": "250 lb S.A.P.", + "quantity": 2 + } + ], + "enabled": true, + "code": "250 lb S.A.P*2; 500 lb S.A.P.*2", + "name": "250 lb S.A.P*2; 500 lb S.A.P.*2", + "roles": [ + "CAP", + "Strike" + ] + }, + { + "items": [ + { + "name": "500 lb GP Mk.V", + "quantity": 2 + }, + { + "name": "500 lb MC Short tail", + "quantity": 2 + } + ], + "enabled": true, + "code": "500 lb GP Mk.V*2, 500 lb GP Short tail*2", + "name": "500 lb GP Mk.V*2, 500 lb GP Short tail*2", + "roles": [ + "CAP", + "Strike", + "CAS", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "100 gal. Drop Tank", + "quantity": 2 + }, + { + "name": "500 lb MC Short tail", + "quantity": 2 + } + ], + "enabled": true, + "code": "100 gal Drop tank*2, 500 lb MC Short tail*2", + "name": "100 gal Drop tank*2, 500 lb MC Short tail*2", + "roles": [ + "CAP", + "Strike" + ] + }, + { + "items": [ + { + "name": "", + "quantity": 2 + }, + { + "name": "250 lb S.A.P.", + "quantity": 2 + }, + { + "name": "4 x RP-3 60lb SAP No2 Mk.I", + "quantity": 2 + } + ], + "enabled": true, + "code": "RP-3 60lb SAP No2 Mk.I*8, 250 lb A.A.P.*2", + "name": "RP-3 60lb SAP No2 Mk.I*8, 250 lb A.A.P.*2", + "roles": [ + "CAP", + "Antiship Strike", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "2 x RP-3 60lb F No1 Mk.I", + "quantity": 2 + }, + { + "name": "100 gal. Drop Tank", + "quantity": 2 + }, + { + "name": "250 lb MC Mk.II", + "quantity": 2 + } + ], + "enabled": true, + "code": "100 gal. Drop tank*2, 250 lb MC Mk.II, RP-3 60lb F No1 Mk.I*4", + "name": "100 gal. Drop tank*2, 250 lb MC Mk.II, RP-3 60lb F No1 Mk.I*4", + "roles": [ + "CAP", + "Antiship Strike", + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "500 lb GP Short tail", + "quantity": 4 + } + ], + "enabled": true, + "code": "500 lb GP Short tail*4", + "name": "500 lb GP Short tail*4", + "roles": [ + "CAP", + "Strike", + "CAS", + "Runway Attack" + ] + } + ], + "filename": "mosquito.png", + "enabled": true, + "liveries": { + "25th bombardment group p": { + "name": "USAAF 25th Bombardment Group \"P\" (Invasion Stripes)", + "countries": [ + "USA" + ] + }, + "l-3 pz474 1945": { + "name": "L-3 PZ474 1945", + "countries": [] + }, + "raf": { + "name": "RAF 1944", + "countries": "All" + }, + "605 sqn up-j wag's war wagon": { + "name": "605 Sqn UP-J \"Wag's War Wagon\"", + "countries": "All" + }, + "605 sqn up-o": { + "name": "605 Sqn UP-O", + "countries": "All" + }, + "605 sqn": { + "name": "605 Sqn", + "countries": "All" + }, + "iaf - 1956 - 110th squadron": { + "name": "IAF - 1956 - 110th Squadron", + "countries": "All" + }, + "ussr air force": { + "name": "USSR Air Force", + "countries": [] + }, + "no. 235 squadron raf 1944": { + "name": "No. 235 Squadron RAF 1944", + "countries": [] + }, + "no. 613 squadron raf june 1944": { + "name": "No. 613 Squadron RAF, June 1944", + "countries": [ + "UK" + ] + }, + "armée de l'air blue": { + "name": "Armée de L'air Blue Camo", + "countries": [ + "FRA" + ] + }, + "raf, ml897d, no.1409 met flight, wyton, late 1943": { + "name": "RAF, ML897/D, No.1409 Met Flight, Wyton, late 1943", + "countries": [ + "UK" + ] + }, + "no. 27 squadron raf popeye camo letters on": { + "name": "No. 27 Squadron RAF Popeye Camo Letters on", + "countries": [] + }, + "25th bombardment group f": { + "name": "USAAF 25th Bombardment Group \"F\"", + "countries": [ + "USA" + ] + }, + "305sqn july": { + "name": "305Sqn July 1944", + "countries": [] + }, + "305sqn june": { + "name": "305Sqn June 1944", + "countries": [] + }, + "25th bombardment group z": { + "name": "USAAF 25th Bombardment Group \"Z\" (Invasion Stripes)", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "2 propeller, straight wing, 2 crew. Mosquito.", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "P-47D-40": { + "name": "P-47D-40", + "coalition": "blue", + "label": "P-47D Thunderbolt", + "era": "WW2", + "shortLabel": "P47", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "AN-M65 - 1000lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "AN-M65*2", + "name": "AN-M65*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "150 US gal. Fuel Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "Fuel150*2", + "name": "Fuel150*2", + "roles": [ + "Escort", + "CAP" + ] + }, + { + "items": [ + { + "name": "AN-M57 - 250lb GP Bomb LD", + "quantity": 3 + } + ], + "enabled": true, + "code": "AN-M57*3", + "name": "AN-M57*3", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "AN-M64 - 500lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "110 US gal. Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "AN-M64*2, Fuel110", + "name": "AN-M64*2, Fuel110", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "3 x 4.5 inch M8 UnGd Rocket", + "quantity": 2 + }, + { + "name": "AN-M57 - 250lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "110 US gal. Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "M8*6, AN-M57*2, Fuel110", + "name": "M8*6, AN-M57*2, Fuel110", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "5 x HVAR, UnGd Rkt", + "quantity": 2 + }, + { + "name": "110 US gal. Fuel Tank", + "quantity": 1 + } + ], + "enabled": true, + "code": "HVAR*10, Fuel110", + "name": "HVAR*10, Fuel110", + "roles": [ + "Strike", + "CAS" + ] + } + ], + "filename": "p-47.png", + "enabled": true, + "liveries": { + "79thfg 86thfs the trojan warhorse": { + "name": "79thFG 86thFS The Trojan Warhorse", + "countries": [ + "USA" + ] + }, + "61st_fs_d_day": { + "name": "61st FS, D-day", + "countries": [ + "USA" + ] + }, + "lt_col_gabreski_d_day": { + "name": "Lt.Col. Gabby Gabreski, 61st FS, D-day", + "countries": [ + "USA" + ] + }, + "lt_col_benjamin_mayo": { + "name": "Lt.Col. Benjamin Mayo", + "countries": [ + "USA" + ] + }, + "eagle dynamics commemorative": { + "name": "Eagle Dynamics Commemorative", + "countries": [ + "USA" + ] + }, + "tony 5th emergency rescue squadron": { + "name": "TONY 5th Emergency Rescue Squadron", + "countries": [ + "USA" + ] + }, + "usaf standard": { + "name": "USAF standard", + "countries": [ + "USA" + ] + }, + "maj_howard_park_1945": { + "name": "Maj. Howard Park, 513th FS, France 1945", + "countries": [ + "USA" + ] + }, + "61st_fs_8th_af_hvz": { + "name": "61st FS 8th Air Force HV-Z (Capt. Witold Lanowski)", + "countries": [ + "USA", + "POL" + ] + }, + "53rd_fs_9th_air_force": { + "name": "53rd Fighter Squadron", + "countries": [ + "USA" + ] + }, + "1st brazilian ftr sq-jambock a1-menezes": { + "name": "1st Brazilian Ftr Sq-Jambock A1-Menezes", + "countries": [] + }, + "61st_fs_1944": { + "name": "61st FS, July 1944", + "countries": [ + "USA" + ] + }, + "lt_col_gabreski_1944": { + "name": "Lt.Col. Gabby Gabreski, 61st FS, July 1944", + "countries": [ + "USA" + ] + }, + "lend-lease": { + "name": "Lend-Lease", + "countries": [ + "SUN", + "RUS" + ] + }, + "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d28": { + "name": "509th FS 405th FG \"Chief Ski-U-Mah\" for D-30 (Early) ", + "countries": "All" + }, + "ussr-blue-scheme": { + "name": "USSR - blue", + "countries": [ + "SUN", + "RUS" + ] + }, + "raf thunderbolt": { + "name": "RAF Thunderbolt", + "countries": [] + }, + "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d40": { + "name": "509th FS 405th FG \"Chief Ski-U-Mah\"", + "countries": "All" + }, + "warchief": { + "name": "WarChief", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "Single propellor, straight wing, 1 crew. Thunderbolt", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "P-51D-30-NA": { + "name": "P-51D-30-NA", + "coalition": "blue", + "label": "P-51D Mustang", + "era": "WW2", + "shortLabel": "P51", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "75 US gal. Fuel Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "Fuel75*2", + "name": "Fuel75*2", + "roles": [ + "CAP", + "CAP", + "FAC-A" + ] + }, + { + "items": [ + { + "name": "HVAR, UnGd Rkt", + "quantity": 6 + }, + { + "name": "75 US gal. Fuel Tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "HVAR*6,Fuel75*2", + "name": "HVAR*6,Fuel75*2", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "HVAR, UnGd Rkt", + "quantity": 6 + }, + { + "name": "AN-M64 - 500lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "HVAR*6,M64*2", + "name": "HVAR*6,M64*2", + "roles": [ + "CAS", + "Strike", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "HVAR, UnGd Rkt", + "quantity": 6 + } + ], + "enabled": true, + "code": "HVAR*6", + "name": "HVAR*6", + "roles": [ + "CAS", + "Strike", + "Antiship Strike", + "FAC-A" + ] + }, + { + "items": [ + { + "name": "AN-M64 - 500lb GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "M64*2", + "name": "M64*2", + "roles": [ + "Strike", + "Antiship Strike", + "CAS", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "HVAR, UnGd Rkt", + "quantity": 10 + } + ], + "enabled": true, + "code": "HVAR*10", + "name": "HVAR*10", + "roles": [ + "CAS", + "Strike", + "Runway Attack", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "HVAR Smoke Generator", + "quantity": 2 + } + ], + "enabled": true, + "code": "Smokes", + "name": "Smokes", + "roles": [] + } + ], + "filename": "p-51.png", + "enabled": true, + "liveries": { + "79thfg 86thfs the trojan warhorse": { + "name": "79thFG 86thFS The Trojan Warhorse", + "countries": [ + "USA" + ] + }, + "61st_fs_d_day": { + "name": "61st FS, D-day", + "countries": [ + "USA" + ] + }, + "lt_col_gabreski_d_day": { + "name": "Lt.Col. Gabby Gabreski, 61st FS, D-day", + "countries": [ + "USA" + ] + }, + "lt_col_benjamin_mayo": { + "name": "Lt.Col. Benjamin Mayo", + "countries": [ + "USA" + ] + }, + "eagle dynamics commemorative": { + "name": "Eagle Dynamics Commemorative", + "countries": [ + "USA" + ] + }, + "tony 5th emergency rescue squadron": { + "name": "TONY 5th Emergency Rescue Squadron", + "countries": [ + "USA" + ] + }, + "usaf standard": { + "name": "USAF standard", + "countries": [ + "USA" + ] + }, + "maj_howard_park_1945": { + "name": "Maj. Howard Park, 513th FS, France 1945", + "countries": [ + "USA" + ] + }, + "61st_fs_8th_af_hvz": { + "name": "61st FS 8th Air Force HV-Z (Capt. Witold Lanowski)", + "countries": [ + "USA", + "POL" + ] + }, + "53rd_fs_9th_air_force": { + "name": "53rd Fighter Squadron", + "countries": [ + "USA" + ] + }, + "1st brazilian ftr sq-jambock a1-menezes": { + "name": "1st Brazilian Ftr Sq-Jambock A1-Menezes", + "countries": [] + }, + "61st_fs_1944": { + "name": "61st FS, July 1944", + "countries": [ + "USA" + ] + }, + "lt_col_gabreski_1944": { + "name": "Lt.Col. Gabby Gabreski, 61st FS, July 1944", + "countries": [ + "USA" + ] + }, + "lend-lease": { + "name": "Lend-Lease", + "countries": [ + "SUN", + "RUS" + ] + }, + "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d28": { + "name": "509th FS 405th FG \"Chief Ski-U-Mah\" for D-30 (Early) ", + "countries": "All" + }, + "ussr-blue-scheme": { + "name": "USSR - blue", + "countries": [ + "SUN", + "RUS" + ] + }, + "raf thunderbolt": { + "name": "RAF Thunderbolt", + "countries": [] + }, + "usaaf 509th fs, 405th fg, eto 1944, chief ski-u-mah d40": { + "name": "509th FS 405th FG \"Chief Ski-U-Mah\"", + "countries": "All" + }, + "warchief": { + "name": "WarChief", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "Single propellor, straight wing, 1 crew. Mustang", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "S-3B Tanker": { + "name": "S-3B Tanker", + "coalition": "blue", + "label": "S-3B Tanker", + "era": "Early Cold War", + "shortLabel": "S3B", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Tanker" + ] + } + ], + "filename": "s-3.png", + "enabled": true, + "liveries": { + "usaf standard": { + "name": "NAVY Standard", + "countries": [ + "USA" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, straight wing, 4 crew. Viking", + "abilities": "Tanker, Drogue AAR, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": false, + "canRearm": false + }, + "Su-17M4": { + "name": "Su-17M4", + "coalition": "red", + "label": "Su-17M4 Fitter", + "era": "Mid Cold War", + "shortLabel": "S17", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "UB-32*4,R-60M*2,FAB-250*4", + "name": "UB-32*4,R-60M*2,FAB-250*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", + "quantity": 6 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100*24,R-60M*2", + "name": "FAB-100*24,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "UB-32*4,R-60M*2,Fuel*2", + "name": "UB-32*4,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "B-8*4,R-60M*2,FAB-250*4", + "name": "B-8*4,R-60M*2,FAB-250*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,R-60M*2,Fuel*2", + "name": "Kh-29L*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "B-8*4,R-60M*2,Fuel*2", + "name": "B-8*4,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29T*2,R-60M*2,Fuel*2", + "name": "Kh-29T*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 6 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "BetAB-500*6,R-60M*2", + "name": "BetAB-500*6,R-60M*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Kh-25MR (AS-10 Karen) - 300kg, ASM, 10km, RC Guided", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-25MR*4,R-60M*2,Fuel*2", + "name": "Kh-25MR*4,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-24*4,R-60M*2,Fuel*2", + "name": "S-24*4,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh25MPU*2_Kh25ML*2_,R60M*2_Fuel*2", + "name": "Kh25MPU*2_Kh25ML*2_,R60M*2_Fuel*2", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh58*2_Kh25MPU*2_R60M*2_Fuel*2", + "name": "Kh58*2_Kh25MPU*2_R60M*2_Fuel*2", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 4 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*16,R-60M*2", + "name": "FAB-250*16,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-25ML*4,R-60M*2,Fuel*2", + "name": "Kh-25ML*4,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-500AO*4,SPPU-22*2,R-60M*2", + "name": "RBK-500AO*4,SPPU-22*2,R-60M*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 4 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 2 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-24*4,R-60M*2,FAB-250*4", + "name": "S-24*4,R-60M*2,FAB-250*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel tank 1150L", + "quantity": 4 + } + ], + "enabled": true, + "code": "Fuel*4", + "name": "Fuel*4", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-500*6,R-60M*2", + "name": "FAB-500*6,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-25ML*2,Kh-29L*2,R-60*2", + "name": "Kh-25ML*2,Kh-29L*2,R-60*2", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "su-17.png", + "enabled": true, + "liveries": { + "af standard (worn-out)": { + "name": "af standard (worn-out)", + "countries": [ + "UKR" + ] + }, + "shap limanskoye ab": { + "name": "shap limanskoye ab", + "countries": [ + "UKR" + ] + }, + "af standard (rus)": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + }, + "af standard (worn-out) (rus)": { + "name": "af standard (worn-out)", + "countries": [ + "RUS" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "UKR" + ] + } + }, + "type": "Aircraft", + "description": "Single jet engine, swept wing, 1 crew. Fitter", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Su-24M": { + "name": "Su-24M", + "coalition": "red", + "label": "Su-24M Fencer", + "era": "Mid Cold War", + "shortLabel": "S24", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 4 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "UB-13*4,FAB-500*2", + "name": "UB-13*4,FAB-500*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-31A*2,R-60M*2,Fuel", + "name": "Kh-31A*2,R-60M*2,Fuel", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 4 + } + ], + "enabled": true, + "code": "UB-13*4", + "name": "UB-13*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "KAB-500LG - 500kg Laser Guided Bomb", + "quantity": 4 + } + ], + "enabled": true, + "code": "KAB-500*4,R-60M*2", + "name": "KAB-500*4,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "Fuel tank 3000L", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-25*2,Fuel*3", + "name": "S-25*2,Fuel*3", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "L-081 Fantasmagoria ELINT pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh31P*2_Kh25ML*2_L-081", + "name": "Kh31P*2_Kh25ML*2_L-081", + "roles": [ + "SEAD", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "Fuel tank 3000L", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "B-8*2,Fuel*3", + "name": "B-8*2,Fuel*3", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-1500 M-54 - 1500kg GP Bomb LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-1500*2,R-60M*2", + "name": "FAB-1500*2,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-24*4", + "name": "S-24*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "BetAB-500*4,R-60M*2", + "name": "BetAB-500*4,R-60M*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + } + ], + "enabled": true, + "code": "Kh-25ML*4", + "name": "Kh-25ML*4", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Kh-25MR (AS-10 Karen) - 300kg, ASM, 10km, RC Guided", + "quantity": 4 + } + ], + "enabled": true, + "code": "Kh-25MR*4", + "name": "Kh-25MR*4", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "FAB-100*24", + "name": "FAB-100*24", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-31A*2,R-60M*2", + "name": "Kh-31A*2,R-60M*2", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "Fuel tank 3000L", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "UB-13*2,Fuel*3", + "name": "UB-13*2,Fuel*3", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "Fuel tank 3000L", + "quantity": 2 + } + ], + "enabled": true, + "code": "B-8*2,Fuel*2", + "name": "B-8*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "L-081 Fantasmagoria ELINT pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh58*2_Kh25ML*2_L-081", + "name": "Kh58*2_Kh25ML*2_L-081", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 8 + } + ], + "enabled": true, + "code": "RBK-250*8", + "name": "RBK-250*8", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + } + ], + "enabled": true, + "code": "UB-32*4", + "name": "UB-32*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,R-60M*2", + "name": "Kh-29L*2,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "S-24B - 240mm UnGd Rkt, 235kg, HE/Frag, (Low Smk)", + "quantity": 2 + }, + { + "name": "Fuel tank 3000L", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-24*2,Fuel*3", + "name": "S-24*2,Fuel*3", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "L-081 Fantasmagoria ELINT pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh25MPU*2_Kh25ML*2_L-081", + "name": "Kh25MPU*2_Kh25ML*2_L-081", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "FAB-500*4,R-60M*2", + "name": "FAB-500*4,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 8 + } + ], + "enabled": true, + "code": "FAB-250*8", + "name": "FAB-250*8", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel tank 3000L", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Fuel*3", + "name": "Fuel*3", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "RBK-500AO*4,R-60M*2", + "name": "RBK-500AO*4,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "KAB-1500L - 1500kg Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "KAB-1500*2,R-60M*2,Fuel", + "name": "KAB-1500*2,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "UB-32*4,FAB-250*4", + "name": "UB-32*4,FAB-250*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29T*2,R-60M*2", + "name": "Kh-29T*2,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + }, + { + "name": "Fuel tank 3000L", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "UB-32*2,Fuel*3", + "name": "UB-32*2,Fuel*3", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "APU-60-1M with R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-59M (AS-18 Kazoo) - 930kg, ASM, IN", + "quantity": 2 + }, + { + "name": "Fuel tank 2000L", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-59M*2,R-60M*2,Fuel", + "name": "Kh-59M*2,R-60M*2,Fuel", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-25*4", + "name": "S-25*4", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + } + ], + "enabled": true, + "code": "B-8*6", + "name": "B-8*6", + "roles": [ + "Strike" + ] + } + ], + "filename": "su-24.png", + "enabled": true, + "liveries": { + "syrian air force": { + "name": "Syrian Air Force", + "countries": [ + "SYR" + ] + }, + "iran air force": { + "name": "Iran Air Force", + "countries": [ + "IRN" + ] + }, + "algerian af kx-12": { + "name": "Algerian AF KX-12", + "countries": [ + "DZA" + ] + }, + "ukrainian air force standard": { + "name": "Ukrainian Air Force", + "countries": [ + "UKR" + ] + }, + "kazakhstan air force": { + "name": "600th Airbase Kazakhstan", + "countries": [ + "KAZ" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "SUN", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swing wing, 2 crew. Fencer", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Su-25": { + "name": "Su-25", + "coalition": "red", + "label": "Su-25T Frogfoot", + "era": "Late Cold War", + "shortLabel": "S25", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-250*2,S-8KOM*80,R-60M*2,Fuel*2", + "name": "RBK-250*2,S-8KOM*80,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", + "name": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", + "quantity": 6 + } + ], + "enabled": true, + "code": "S-25L*6,UB-13*2,R-60M*2", + "name": "S-25L*6,UB-13*2,R-60M*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 6 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-25*6,SPPU-22*2,R-60M*2", + "name": "S-25*6,SPPU-22*2,R-60M*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", + "quantity": 2 + } + ], + "enabled": true, + "code": "2-25L*2, KH-25ML*2, RBK-500*2, B-8MI*2, R-60M*2", + "name": "2-25L*2, KH-25ML*2, RBK-500*2, B-8MI*2, R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-8KOM*120,R-60M*2,Fuel*2", + "name": "S-8KOM*120,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", + "name": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-500AO*4,S-8KOM*40,R-60M*2,Fuel*2", + "name": "RBK-500AO*4,S-8KOM*40,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "SAB-100MN - 100 kg Illumination Bomb", + "quantity": 4 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*2,SPPU-22*2,SAB-100*4,R-60M*2", + "name": "FAB-250*2,SPPU-22*2,SAB-100*4,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-500AO*6,R-60M*2,Fuel*2", + "name": "RBK-500AO*6,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 8 + } + ], + "enabled": true, + "code": "RBK-250*8,R-60M*2", + "name": "RBK-250*8,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,Kh-25ML*4,R-60M*2", + "name": "Kh-29L*2,Kh-25ML*4,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "RBK-250*4,S-8KOM*80,R-60M*2", + "name": "RBK-250*4,S-8KOM*80,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", + "name": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8TsM SM Orange", + "quantity": 8 + } + ], + "enabled": true, + "code": "S-8TsM*160,R-60*2", + "name": "S-8TsM*160,R-60*2", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-25ML*4,R-60M*2,Fuel*2", + "name": "Kh-25ML*4,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", + "quantity": 8 + } + ], + "enabled": true, + "code": "BetAB-500ShP*8,R-60M*2", + "name": "BetAB-500ShP*8,R-60M*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "SAB-100MN - 100 kg Illumination Bomb", + "quantity": 8 + } + ], + "enabled": true, + "code": "SAB-100*8,R-60*2", + "name": "SAB-100*8,R-60*2", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,Kh-25ML*4,S-25L*2,R-60M*2", + "name": "Kh-29L*2,Kh-25ML*4,S-25L*2,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-500*6,R-60M*2,Fuel*2", + "name": "FAB-500*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,Kh-25ML*2,R-60M*2,Fuel*2", + "name": "Kh-29L*2,Kh-25ML*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,R-60M*2,Fuel*2", + "name": "Kh-29L*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", + "quantity": 8 + } + ], + "enabled": true, + "code": "FAB-100*32,R-60M*2", + "name": "FAB-100*32,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100*16,R-60M*2,Fuel*2", + "name": "FAB-100*16,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*6,R-60M*2,Fuel*2", + "name": "FAB-250*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "BetAB-500*6,R-60M*2,Fuel*2", + "name": "BetAB-500*6,R-60M*2,Fuel*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-25*6,R-60M*2,Fuel*2", + "name": "S-25*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "UB-13*6,R-60M*2,Fuel*2", + "name": "UB-13*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-25*4,Kh-29T*2,R-60*2", + "name": "Kh-25*4,Kh-29T*2,R-60*2", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-25L*6,R-60*2,Fuel*2", + "name": "S-25L*6,R-60*2,Fuel*2", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "su-25.png", + "enabled": false, + "liveries": { + "broken camo scheme #2 (native). 452th shap": { + "name": "broken camo scheme #2 (native). 452th shap.", + "countries": [ + "UKR" + ] + }, + "broken camo scheme #1 (native). 299th oshap": { + "name": "broken camo scheme #1 (native). 299th oshap.", + "countries": [ + "UKR" + ] + }, + "field camo scheme #1 (native)": { + "name": "field camo scheme #1 (native)", + "countries": [ + "SUN", + "RUS" + ] + }, + "field camo scheme #1 (native)01": { + "name": "field camo scheme #1 (native)", + "countries": [ + "GRG" + ] + }, + "haf camo": { + "name": "Hellenic Airforce - Camo (Fictional)", + "countries": [ + "GRC" + ] + }, + "`scorpion` demo scheme (native)": { + "name": "`scorpion` demo scheme (native)", + "countries": [ + "GRG" + ] + }, + "abkhazian air force": { + "name": "Abkhazian Air Force", + "countries": [ + "ABH" + ] + }, + "field camo scheme #3 (worn-out). 960th shap": { + "name": "field camo scheme #3 (worn-out). 960th shap.", + "countries": [ + "RUS" + ] + }, + "petal camo scheme #1 (native). 299th brigade": { + "name": "petal camo scheme #1 (native). 299th brigade.", + "countries": [ + "UKR" + ] + }, + "petal camo scheme #2 (native). 299th brigade": { + "name": "petal camo scheme #2 (native). 299th brigade.", + "countries": [ + "UKR" + ] + }, + "algerian af desert fictional": { + "name": "Algerian AF Desert Fictional", + "countries": [ + "DZA" + ] + }, + "forest camo scheme #1 (native)": { + "name": "forest camo scheme #1 (native)", + "countries": [ + "RUS" + ] + }, + "irgc 54": { + "name": "IRGC 54", + "countries": [ + "IRN" + ] + }, + "field camo scheme #2 (native). 960th shap": { + "name": "field camo scheme #2 (native). 960th shap.", + "countries": [ + "RUS" + ] + }, + "haf aegean ghost": { + "name": "Hellenic Airforce - Aegean Ghost (Fictional)", + "countries": [ + "GRC" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Frogfoot", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Su-25T": { + "name": "Su-25", + "coalition": "red", + "label": "Su-25T Frogfoot", + "era": "Late Cold War", + "shortLabel": "S25", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "SAB-100MN - 100 kg Illumination Bomb", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,SPPU-22*2,SAB-100*2,R-60M*2", + "name": "FAB-250*4,SPPU-22*2,SAB-100*2,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Mercury LLTV Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*2,Kh-25ML*4,R-73*2,Mercury LLTV Pod,MPS-410", + "name": "Kh-29L*2,Kh-25ML*4,R-73*2,Mercury LLTV Pod,MPS-410", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "KAB-500Kr - 500kg TV Guided Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "KAB-500Kr*2,Kh-25ML*2,R-73*2,MPS-410,Fuel*2", + "name": "KAB-500Kr*2,Kh-25ML*2,R-73*2,MPS-410,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-500AO*4,UB-32*2,R-60M*2,Fuel*2", + "name": "RBK-500AO*4,UB-32*2,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", + "quantity": 8 + } + ], + "enabled": true, + "code": "BetAB-500ShP*8,R-60M*2", + "name": "BetAB-500ShP*8,R-60M*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "UB-13*6,R-60M*2,Fuel*2", + "name": "UB-13*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29T*2,R-73*2,Fuel*2,MPS-410", + "name": "Kh-29T*2,R-73*2,Fuel*2,MPS-410", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "L-081 Fantasmagoria ELINT pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh58*2_Kh25ML*4_R73*2_L-081_MPS-410", + "name": "Kh58*2_Kh25ML*4_R73*2_L-081_MPS-410", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", + "name": "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "APU-8 - 8 x 9M127-1 Vikhr-M ATGM, LOSBR, Tandem HEAT/Frag", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 2 + } + ], + "enabled": true, + "code": "KH-29T*2, VIKHR*2, ECM", + "name": "KH-29T*2, VIKHR*2, ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29T*2,Kh-25ML*4,R-73*2,MPS-410", + "name": "Kh-29T*2,Kh-25ML*4,R-73*2,MPS-410", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", + "name": "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-500*6,R-60M*2,Fuel*2", + "name": "FAB-500*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel tank 800L Wing", + "quantity": 4 + } + ], + "enabled": true, + "code": "Fuel*4", + "name": "Fuel*4", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "APU-8 - 8 x 9M127-1 Vikhr-M ATGM, LOSBR, Tandem HEAT/Frag", + "quantity": 2 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + }, + { + "name": "Mercury LLTV Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "APU-8 Vikhr-M*2,Kh-25ML,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", + "name": "APU-8 Vikhr-M*2,Kh-25ML,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-8KOM*120,R-60M*2,Fuel*2", + "name": "S-8KOM*120,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "KMGU-2 - 96 x PTAB-2.5KO Dispenser (CBU) HEAT/AP", + "quantity": 8 + } + ], + "enabled": true, + "code": "KMGU-2 (PTAB-2.5KO)*8,R-60M*2", + "name": "KMGU-2 (PTAB-2.5KO)*8,R-60M*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*6,R-60M*2,Fuel*2", + "name": "FAB-250*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Mercury LLTV Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*2,R-73*2,Fuel*2,Mercury LLTV Pod,MPS-410", + "name": "Kh-29L*2,R-73*2,Fuel*2,Mercury LLTV Pod,MPS-410", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", + "quantity": 8 + } + ], + "enabled": true, + "code": "FAB-100*32,R-60M*2", + "name": "FAB-100*32,R-60M*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 8 + } + ], + "enabled": true, + "code": "RBK-250*8,R-60M*2", + "name": "RBK-250*8,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", + "quantity": 6 + } + ], + "enabled": true, + "code": "S-25L*6,UB-13*2,R-60M*2", + "name": "S-25L*6,UB-13*2,R-60M*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", + "name": "FAB-250*4,S-25*2,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-25*2,SPPU-22*4,R-60M*2,R-73*2", + "name": "S-25*2,SPPU-22*4,R-60M*2,R-73*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "KMGU-2 - 96 x AO-2.5RT Dispenser (CBU) HE/Frag", + "quantity": 8 + } + ], + "enabled": true, + "code": "KMGU-2 (AO-2.5RT)*8,R-60M*2", + "name": "KMGU-2 (AO-2.5RT)*8,R-60M*2", + "roles": [ + "CAS", + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25L - 320Kg, 340mm Laser Guided Rkt", + "quantity": 2 + }, + { + "name": "APU-8 - 8 x 9M127-1 Vikhr-M ATGM, LOSBR, Tandem HEAT/Frag", + "quantity": 2 + }, + { + "name": "SPPU-22-1 - 2 x 23mm GSh-23L Autocannon Pod", + "quantity": 2 + }, + { + "name": "Mercury LLTV Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "APU-8 Vikhr-M*2,S-25L*2,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", + "name": "APU-8 Vikhr-M*2,S-25L*2,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "S-25*6,R-60M*2,Fuel*2", + "name": "S-25*6,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-500AO*6,R-60M*2,Fuel*2", + "name": "RBK-500AO*6,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "Kh-58U (AS-11 Kilter) - 640kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "L-081 Fantasmagoria ELINT pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh58*2_Kh25MPU*2_Kh25ML*2_R73*2_L-081_MPS-410", + "name": "Kh58*2_Kh25MPU*2_Kh25ML*2_R73*2_L-081_MPS-410", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "RBK-250*4,UB-32*4,R-60M*2", + "name": "RBK-250*4,UB-32*4,R-60M*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-25MPU (Updated AS-12 Kegler) - 320kg, ARM, IN & Pas Rdr", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + }, + { + "name": "L-081 Fantasmagoria ELINT pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh25MPU*4_R73*2_Fuel*2_L-081_MPS-410", + "name": "Kh25MPU*4_R73*2_Fuel*2_L-081_MPS-410", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 6 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "BetAB-500*6,R-60M*2,Fuel*2", + "name": "BetAB-500*6,R-60M*2,Fuel*2", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "UB-32A pod - 32 x S-5KO, 57mm UnGd Rkts, HEAT/Frag", + "quantity": 4 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 2 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "RBK-250*2,UB-32*4,R-60M*2,Fuel*2", + "name": "RBK-250*2,UB-32*4,R-60M*2,Fuel*2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-60M (AA-8 Aphid) - Infra Red", + "quantity": 2 + }, + { + "name": "MBD2-67U with 4 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + }, + { + "name": "Fuel tank 800L Wing", + "quantity": 2 + } + ], + "enabled": true, + "code": "FAB-100*16,R-60M*2,Fuel*2", + "name": "FAB-100*16,R-60M*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "MPS-410", + "quantity": 2 + }, + { + "name": "Kh-25ML (AS-10 Karen) - 300kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 2 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-29L*2,Kh-25ML*4,R-73*2,ECM", + "name": "Kh-29L*2,Kh-25ML*4,R-73*2,ECM", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "su-25.png", + "enabled": true, + "liveries": { + "af standard 2": { + "name": "af standard 2", + "countries": [ + "SUN", + "RUS" + ] + }, + "algerian af grey ku-02": { + "name": "Algerian AF Grey KU-02", + "countries": [ + "DZA" + ] + }, + "su-25t test scheme": { + "name": "su-25t test scheme", + "countries": [ + "RUS" + ] + }, + "haf - fictional": { + "name": "Hellenic Airforce (Fictional)", + "countries": [ + "GRC" + ] + }, + "algerian af trainer ku-04": { + "name": "Algerian AF Trainer KU-04", + "countries": [ + "DZA" + ] + }, + "algerian af grey ku-01": { + "name": "Algerian AF Grey KU-01", + "countries": [ + "DZA" + ] + }, + "af standard 101": { + "name": "af standard 1", + "countries": [ + "GRG" + ] + }, + "algerian af desert ku-03": { + "name": "Algerian AF Desert KU-03", + "countries": [ + "DZA" + ] + }, + "af standard 1": { + "name": "af standard 1", + "countries": [ + "SUN", + "RUS" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "GRG" + ] + } + }, + "type": "Attack", + "description": "2 jet engine, swept wing, 1 crew. Frogfoot", + "abilities": "Fox 2 and gun, Dumb bombs, rockets, SEAD and ATGMs, Subsonic" + }, + "Su-27": { + "name": "Su-27", + "coalition": "red", + "label": "Su-27 Flanker", + "era": "Late Cold War", + "shortLabel": "S27", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-73*4,R-27ER*4,R-27ET*2", + "name": "R-73*4,R-27ER*4,R-27ET*2", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "KMGU-2 - 96 x AO-2.5RT Dispenser (CBU) HE/Frag", + "quantity": 5 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "KMGU-2 (AO-2.5RT)*5,R-73*2,ECM", + "name": "KMGU-2 (AO-2.5RT)*5,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500ShP - 500kg Concrete Piercing HD w booster Bomb", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500ShP*6,R-73*2,ECM", + "name": "BetAB-500ShP*6,R-73*2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "KMGU-2 - 96 x PTAB-2.5KO Dispenser (CBU) HEAT/AP", + "quantity": 5 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "KMGU-2 (PTAB-2.5KO)*5,R-73*2,ECM", + "name": "KMGU-2 (PTAB-2.5KO)*5,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27ER*6,ECM", + "name": "R-73*2,R-27ER*6,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*6", + "name": "R-73*6", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-13*10,RBK-500AO*2,FAB-500*2,R-73*2,ECM", + "name": "S-13*10,RBK-500AO*2,FAB-500*2,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*4,R-27ER*6", + "name": "R-73*4,R-27ER*6", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27ER*4,R-27ET*2,ECM", + "name": "R-73*2,R-27ER*4,R-27ET*2,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*4,ECM", + "name": "R-73*4,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "ECM", + "name": "ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*6,R-73*2,ECM", + "name": "FAB-500*6,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-25*2,FAB-500*4,R-73*4", + "name": "S-25*2,FAB-500*4,R-73*4", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-25*4, FAB-500*4, R-73*2, ECM", + "name": "S-25*4, FAB-500*4, R-73*2, ECM", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500 - 268 x PTAB-1M, 500kg CBU Light HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + RBK-500 PTAB1", + "name": "CAS S-8KOM Rockets + RBK-500 PTAB1", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8OFP Rockets + FAB-500 Bombs", + "name": "CAS S-8OFP Rockets + FAB-500 Bombs", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAS S-8OFP Rockets", + "name": "CAS S-8OFP Rockets", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8OFP Rockets + FAB-100 Bombs", + "name": "CAS S-8OFP Rockets + FAB-100 Bombs", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + FAB-100 Bombs", + "name": "CAS S-8KOM Rockets + FAB-100 Bombs", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-13L pods - 10 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAS S-13 Rockets", + "name": "CAS S-13 Rockets", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 5 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-250 - 250kg GP Bombs LD", + "quantity": 1 + }, + { + "name": "MBD3-U6-68 with 3 x FAB-250 - 250kg GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + FAB-250 Bombs", + "name": "CAS S-8KOM Rockets + FAB-250 Bombs", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + RBK-250 PTAB2.5", + "name": "CAS S-8KOM Rockets + RBK-250 PTAB2.5", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets", + "name": "CAS S-8KOM Rockets", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + FAB-500 Bombs", + "name": "CAS S-8KOM Rockets + FAB-500 Bombs", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + RBK-500 PTAB10", + "name": "CAS S-8KOM Rockets + RBK-500 PTAB10", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "KMGU-2 - 96 x PTAB-2.5KO Dispenser (CBU) HEAT/AP", + "quantity": 3 + } + ], + "enabled": true, + "code": "CAS S-8KOM Rockets + KMGU PTAB", + "name": "CAS S-8KOM Rockets + KMGU PTAB", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": " CAS S-25 Rockets", + "name": " CAS S-25 Rockets", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-25 Rockets + FAB-500 Bombs", + "name": "CAS S-25 Rockets + FAB-500 Bombs", + "roles": [ + "CAS" + ] + } + ], + "filename": "su-27.png", + "enabled": true, + "liveries": { + "kubinka afb (russian knights old)": { + "name": "Kubinka AFB (Russian Knights Old)", + "countries": [ + "RUS" + ] + }, + "mirgorod afb (831th brigade)": { + "name": "Mirgorod AFB (831th brigade)", + "countries": [ + "UKR" + ] + }, + "lypetsk afb (falcons of russia)": { + "name": "Lypetsk AFB (Falcons of Russia)", + "countries": [ + "RUS" + ] + }, + "hotilovo afb": { + "name": "Hotilovo AFB", + "countries": [ + "RUS" + ] + }, + "plaaf k2s new parade": { + "name": "PLAAF K2S new parade", + "countries": [ + "CHN" + ] + }, + "plaaf standard": { + "name": "PLAAF Standard", + "countries": [ + "CHN" + ] + }, + "algerian af grey 04": { + "name": "Algerian AF GREY 04", + "countries": [ + "DZA" + ] + }, + "air force standard early": { + "name": "Air Force Standard Early", + "countries": [ + "SUN", + "RUS" + ] + }, + "air force ukraine standard": { + "name": "Air Force Ukraine Standard", + "countries": [ + "UKR" + ] + }, + "planaf hh8s": { + "name": "PLANAF HH8S", + "countries": [ + "CHN" + ] + }, + "ozerne afb (9th brigade)": { + "name": "Ozerne AFB (9th brigade)", + "countries": [ + "UKR" + ] + }, + "air force ukraine standard early": { + "name": "Air Force Ukraine Standard Early", + "countries": [ + "UKR" + ] + }, + "algerian af blue 02": { + "name": "Algerian AF Blue 02", + "countries": [ + "DZA" + ] + }, + "plaaf k1s old": { + "name": "PLAAF K1S old", + "countries": [ + "CHN" + ] + }, + "m gromov fri": { + "name": "M Gromov FRI", + "countries": [ + "RUS" + ] + }, + "plaaf k33s": { + "name": "PLAAF K33S", + "countries": [ + "CHN" + ] + }, + "air force standard": { + "name": "Air Force Standard", + "countries": [ + "SUN", + "RUS" + ] + }, + "plaaf k2s old": { + "name": "PLAAF K2S old", + "countries": [ + "CHN" + ] + }, + "chkalovsk afb (689 gviap)": { + "name": "Chkalovsk AFB (689 GvIAP)", + "countries": [ + "RUS" + ] + }, + "kazakhstan air defense forces": { + "name": "Kazakhstan Air Defense Forces", + "countries": [ + "KAZ" + ] + }, + "haf aegean ghost": { + "name": "Hellenic Airforce - Aegean Ghost (Fictional)", + "countries": [ + "GRC" + ] + }, + "besovets afb": { + "name": "Besovets AFB", + "countries": [ + "RUS" + ] + }, + "kilpyavr afb (maresyev)": { + "name": "Kilpyavr AFB (Maresyev)", + "countries": [ + "RUS" + ] + }, + "mirgorod afb (digital camo)": { + "name": "Mirgorod AFB (Digital camo)", + "countries": [ + "UKR" + ] + }, + "plaaf k2s new": { + "name": "PLAAF K2S new", + "countries": [ + "CHN" + ] + }, + "air force standard old": { + "name": "Air Force Standard old", + "countries": [ + "SUN", + "RUS" + ] + }, + "lodeynoye pole afb (177 iap)": { + "name": "Lodeynoye pole AFB (177 IAP)", + "countries": [ + "RUS" + ] + }, + "kubinka afb (russian knights)": { + "name": "Kubinka AFB (Russian Knights)", + "countries": [ + "RUS" + ] + }, + "lypetsk afb (shark)": { + "name": "Lypetsk AFB (Shark)", + "countries": [ + "RUS" + ] + }, + "besovets afb 2 squadron": { + "name": "Besovets AFB 2 squadron", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Flanker", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Su-30": { + "name": "Su-30", + "coalition": "red", + "label": "Su-30 Super Flanker", + "era": "Late Cold War", + "shortLabel": "S30", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-77*6,ECM", + "name": "R-73*2,R-77*6,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27T (AA-10 Alamo B) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27T*2,R-27R*4", + "name": "R-73*2,R-27T*2,R-27R*4", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-500AO*6,R-73*2,ECM", + "name": "RBK-500AO*6,R-73*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-31P*2,Kh-31A*2,R-73*2,R-77*2,ECM", + "name": "Kh-31P*2,Kh-31A*2,R-73*2,R-77*2,ECM", + "roles": [ + "Antiship Strike", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27T (AA-10 Alamo B) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-73*4,R-27T*2,R-27R*4", + "name": "R-73*4,R-27T*2,R-27R*4", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "Kh-35 (AS-20 Kayak) - 520kg, AShM, IN & Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-77*2,Kh-35*2,ECM", + "name": "R-73*2,R-77*2,Kh-35*2,ECM", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "Kh-35 (AS-20 Kayak) - 520kg, AShM, IN & Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-35*2,Kh-31P*2,R-73*2,R-77*2,ECM", + "name": "Kh-35*2,Kh-31P*2,R-73*2,R-77*2,ECM", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*4,B-8*2,R-73*2,ECM", + "name": "FAB-250*4,B-8*2,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "ECM", + "name": "ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "KAB-1500L - 1500kg Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "KAB-1500*2,R-73*2,R-77*2,ECM", + "name": "KAB-1500*2,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-250*6,R-73*2,ECM", + "name": "RBK-250*6,R-73*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*4,R-77*6", + "name": "R-73*4,R-77*6", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*4,S-25*2,R-73*2,ECM", + "name": "FAB-250*4,S-25*2,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27R*2,R-27ER*4,ECM", + "name": "R-73*2,R-27R*2,R-27ER*4,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27T (AA-10 Alamo B) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27T*2,R-27ER*2,R-77*2,ECM", + "name": "R-73*2,R-27T*2,R-27ER*2,R-77*2,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-1500 M-54 - 1500kg GP Bomb LD", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-1500*2,R-73*2,R-77*2,ECM", + "name": "FAB-1500*2,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27T (AA-10 Alamo B) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-73*4,R-27T*2,R-27ER*2,R-77*2", + "name": "R-73*4,R-27T*2,R-27ER*2,R-77*2", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-59M (AS-18 Kazoo) - 930kg, ASM, IN", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-59M*2,R-73*2,R-77*2,ECM", + "name": "Kh-59M*2,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*6,R-73*2,ECM", + "name": "FAB-500*6,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-73*4,R-27R*2,R-27ER*4", + "name": "R-73*4,R-27R*2,R-27ER*4", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*4,R-73*2,R-77*2,ECM", + "name": "Kh-29L*4,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500*6,R-73*2,ECM", + "name": "BetAB-500*6,R-73*2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-73*4", + "name": "R-73*4", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*4,UB-13*2,R-73*2,ECM", + "name": "FAB-250*4,UB-13*2,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 4 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-77*4,R-27ER*2,ECM", + "name": "R-73*2,R-77*4,R-27ER*2,ECM", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "KAB-500LG - 500kg Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "KAB-500*4,R-73*2,R-77*2,ECM", + "name": "KAB-500*4,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*6,R-73*2,ECM", + "name": "FAB-250*6,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 4 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 2 + } + ], + "enabled": true, + "code": "R-73*4,R-77*4,R-27ER*2", + "name": "R-73*4,R-77*4,R-27ER*2", + "roles": [ + "Escort", + "CAP", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29T*4,R-73*2,R-77*2,ECM", + "name": "Kh-29T*4,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", + "quantity": 4 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-31P*4,R-73*2,R-77*2,ECM", + "name": "Kh-31P*4,R-73*2,R-77*2,ECM", + "roles": [ + "SEAD" + ] + } + ], + "filename": "su-34.png", + "enabled": true, + "liveries": { + "af standard last": { + "name": "af standard last", + "countries": [ + "RUS" + ] + }, + "`russian knights` team #25": { + "name": "`russian knights` team #25", + "countries": [ + "RUS" + ] + }, + "adf 148th ctc savasleyka ab": { + "name": "adf 148th ctc savasleyka ab", + "countries": [ + "RUS" + ] + }, + "`desert` test paint scheme": { + "name": "`desert` test paint scheme", + "countries": [ + "RUS" + ] + }, + "`test-pilots` team #597": { + "name": "`test-pilots` team #597", + "countries": [ + "RUS" + ] + }, + "`snow` test paint scheme": { + "name": "`snow` test paint scheme", + "countries": [ + "RUS" + ] + }, + "af standard early": { + "name": "af standard early", + "countries": [ + "SUN", + "RUS" + ] + }, + "af standard last (worn-out)": { + "name": "af standard last (worn-out)", + "countries": [ + "RUS" + ] + }, + "af standard early (worn-out)": { + "name": "af standard early (worn-out)", + "countries": [ + "RUS" + ] + }, + "af standard": { + "name": "af standard", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Flanker", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Su-33": { + "name": "Su-33", + "coalition": "red", + "label": "Su-33 Navy Flanker", + "era": "Late Cold War", + "shortLabel": "S33", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-250*6,R-73*2,R-27R*2,ECM", + "name": "RBK-250*6,R-73*2,R-27R*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + } + ], + "enabled": true, + "code": "R-73*4", + "name": "R-73*4", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*4,R-27R*2,R-27ER*6", + "name": "R-73*4,R-27R*2,R-27ER*6", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27ET*2,R-27ER*6,ECM", + "name": "R-73*2,R-27ET*2,R-27ER*6,ECM", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "R-27ET (AA-10 Alamo D) - IR Extended Range", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + } + ], + "enabled": true, + "code": "R-73*4,R-27ET*2,R-27ER*6", + "name": "R-73*4,R-27ET*2,R-27ER*6", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*6,R-73*2,R-27R*2,ECM", + "name": "FAB-250*6,R-73*2,R-27R*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "R-27ER (AA-10 Alamo C) - Semi-Act Extended Range", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "R-73*2,R-27R*2,R-27ER*6,ECM", + "name": "R-73*2,R-27R*2,R-27ER*6,ECM", + "roles": [ + "CAP", + "Escort", + "CAP", + "CAP" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "ECM", + "name": "ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500*6,R-73*2,R-27R*2,ECM", + "name": "BetAB-500*6,R-73*2,R-27R*2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-500AO*6,R-73*2,R-27R*2,ECM", + "name": "RBK-500AO*6,R-73*2,R-27R*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 4 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "UB-13*4,FAB-250*4,R-73*2,ECM", + "name": "UB-13*4,FAB-250*4,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 4 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "S-25*4,FAB-250*4,R-73*2,ECM", + "name": "S-25*4,FAB-250*4,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 6 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*6,R-73*2,R-27R*2,ECM", + "name": "FAB-500*6,R-73*2,R-27R*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "B-8*4,FAB-250*4,R-73*2,ECM", + "name": "B-8*4,FAB-250*4,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "S-25-OFM - 340mm UnGd Rkt, 480kg Penetrator", + "quantity": 4 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "S-25*4,FAB-500*4,R-73*4", + "name": "S-25*4,FAB-500*4,R-73*4", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM rockets + FAB500", + "name": "CAS S-8KOM rockets + FAB500", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8OFP2 MPP", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8OFP rockets + FAB500", + "name": "CAS S-8OFP rockets + FAB500", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-13L pods - 10 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-13 Rockets + FAB500", + "name": "CAS S-13 Rockets + FAB500", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-13L pods - 10 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-13 Rockets + FAB100", + "name": "CAS S-13 Rockets + FAB100", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 4 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-250 - 250kg GP Bombs LD", + "quantity": 2 + } + ], + "enabled": true, + "code": "CAS S-8KOM rockets + FAB250", + "name": "CAS S-8KOM rockets + FAB250", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x S-25-OFM - 340mm UnGdrocket, 480kg Penetrator", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-25 Rockets + FAB500", + "name": "CAS S-25 Rockets + FAB500", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM rockets + RBK500 PTAB10", + "name": "CAS S-8KOM rockets + RBK500 PTAB10", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 4 + }, + { + "name": "2 x B-8M1 - 40 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 2 + }, + { + "name": "RBK-500 - 268 x PTAB-1M, 500kg CBU Light HEAT/AP", + "quantity": 4 + } + ], + "enabled": true, + "code": "CAS S-8KOM rockets + RBK500 PTAB1", + "name": "CAS S-8KOM rockets + RBK500 PTAB1", + "roles": [ + "CAS" + ] + } + ], + "filename": "su-34.png", + "enabled": true, + "liveries": { + "t-10k-9 test paint scheme": { + "name": "t-10k-9 test paint scheme", + "countries": [ + "RUS" + ] + }, + "279th kiap 1st squad navy": { + "name": "Navy, 279th kiap, 1st squad", + "countries": [ + "RUS" + ] + }, + "aaf blue 68": { + "name": "Algerian AF BLUE No 68", + "countries": [ + "DZA" + ] + }, + "haf - aegean ghost": { + "name": "Hellenic Airforce - Aegean Ghost (Fictional)", + "countries": [ + "GRC" + ] + }, + "279th kiap 2nd squad syria 2017": { + "name": "Syria 2017, 279th kiap, 2nd squad", + "countries": [ + "RUS" + ] + }, + "aaf grey 12": { + "name": "Algerian AF GREY No 12", + "countries": [ + "DZA" + ] + }, + "t-10k-5 test paint scheme": { + "name": "t-10k-5 test paint scheme", + "countries": [ + "RUS" + ] + }, + "279th kiap 1st squad syria 2017": { + "name": "Syria 2017, 279th kiap, 1st squad", + "countries": [ + "RUS" + ] + }, + "279th kiap 2nd squad navy": { + "name": "Navy, 279th kiap, 2nd squad", + "countries": [ + "RUS" + ] + }, + "t-10k-1 test paint scheme": { + "name": "t-10k-1 test paint scheme", + "countries": [ + "SUN", + "RUS" + ] + }, + "plan carrier air wings j-15": { + "name": "PLAN Carrier Air Wings J-15", + "countries": "All" + } + }, + "type": "Aircraft", + "description": "2 jet engine, swept wing, 1 crew. Flanker", + "abilities": "Drogue AAR, Carrier", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Su-34": { + "name": "Su-34", + "coalition": "red", + "label": "Su-34 Hellduck", + "era": "Modern", + "shortLabel": "S34", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-13L pod - 5 x S-13-OF, 122mm UnGd Rkts, Blast/Frag", + "quantity": 4 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "UB-13*4,FAB-250*4,R-73*2,ECM", + "name": "UB-13*4,FAB-250*4,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-100 - 100kg GP Bomb LD", + "quantity": 4 + }, + { + "name": "MBD3-U6-68 with 6 x FAB-100 - 100kg GP Bombs LD", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-100*28,R-73*2,ECM", + "name": "FAB-100*28,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "BetAB-500 - 500kg Concrete Piercing Bomb LD", + "quantity": 8 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "BetAB-500*8,R-73*2,ECM", + "name": "BetAB-500*8,R-73*2,ECM", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*4,R-73*2,R-77*2,ECM", + "name": "Kh-29L*4,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "KAB-500LG - 500kg Laser Guided Bomb", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "KAB-500*4,R-73*2,R-77*2,ECM", + "name": "KAB-500*4,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-250 - 42 x PTAB-2.5M, 250kg CBU Medium HEAT/AP", + "quantity": 8 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-250 PTAB-2.5M*8,R-73*2,ECM", + "name": "RBK-250 PTAB-2.5M*8,R-73*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-250 - 250kg GP Bomb LD", + "quantity": 8 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*8,R-73*2,ECM", + "name": "FAB-250*8,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "ECM", + "name": "ECM", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 4 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29T*4,R-73*2,R-77*2,ECM", + "name": "Kh-29T*4,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 8 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "RBK-500 PTAB-10-5*8,R-73*2,ECM", + "name": "RBK-500 PTAB-10-5*8,R-73*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "FAB-1500 M-54 - 1500kg GP Bomb LD", + "quantity": 3 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-1500*3,R-73*2,R-77*2,ECM", + "name": "FAB-1500*3,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "Kh-59M (AS-18 Kazoo) - 930kg, ASM, IN", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-59M*2,R-73*2,R-77*2,ECM", + "name": "Kh-59M*2,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "B-8M1 - 20 x UnGd Rkts, 80 mm S-8KOM HEAT/Frag", + "quantity": 4 + }, + { + "name": "RBK-500-255 - 30 x PTAB-10-5, 500kg CBU Heavy HEAT/AP", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "B-8*6,R-73*2,R-27R*2,ECM", + "name": "B-8*6,R-73*2,R-27R*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "FAB-500 M-62 - 500kg GP Bomb LD", + "quantity": 8 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*8,R-73*2,ECM", + "name": "FAB-500*8,R-73*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "R-77 (AA-12 Adder) - Active Rdr", + "quantity": 2 + }, + { + "name": "KAB-1500L - 1500kg Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "KAB-1500*2,R-73*2,R-77*2,ECM", + "name": "KAB-1500*2,R-73*2,R-77*2,ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29T (AS-14 Kedge) - 670kg, ASM, TV Guided", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29T*4,R-73*2,R-27R*2,ECM", + "name": "Kh-29T*4,R-73*2,R-27R*2,ECM", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", + "quantity": 4 + }, + { + "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", + "quantity": 2 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-31A*4,Kh-31P*2,R-73*2,R-27R*2,ECM", + "name": "Kh-31A*4,Kh-31P*2,R-73*2,R-27R*2,ECM", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31A (AS-17 Krypton) - 610kg, AShM, IN & Act Rdr", + "quantity": 6 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-31A*6,R-73*2,R-27R*2,ECM", + "name": "Kh-31A*6,R-73*2,R-27R*2,ECM", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-31P (AS-17 Krypton) - 600kg, ARM, IN & Pas Rdr", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-31P*4,R-73*2,R-27R*2,ECM", + "name": "Kh-31P*4,R-73*2,R-27R*2,ECM", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "L005 Sorbtsiya ECM pod (left)", + "quantity": 1 + }, + { + "name": "R-73 (AA-11 Archer) - Infra Red", + "quantity": 2 + }, + { + "name": "Kh-29L (AS-14 Kedge) - 657kg, ASM, Semi-Act Laser", + "quantity": 4 + }, + { + "name": "R-27R (AA-10 Alamo A) - Semi-Act Rdr", + "quantity": 2 + }, + { + "name": "L005 Sorbtsiya ECM pod (right)", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-29L*4,R-73*2,R-27R*2,ECM", + "name": "Kh-29L*4,R-73*2,R-27R*2,ECM", + "roles": [ + "CAS" + ] + } + ], + "filename": "su-34.png", + "enabled": true, + "liveries": { + "russian air force": { + "name": "1 Russian Air Force", + "countries": [ + "RUS" + ] + }, + "russian air force old": { + "name": "Russian Air Force Old", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 Jet engine, swept wing, 2 crew, all weather fighter and strike. Fullback", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Tornado GR4": { + "name": "Tornado GR4", + "coalition": "blue", + "label": "Tornado GR4", + "era": "Late Cold War", + "shortLabel": "GR4", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 1 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Sky-Shadow ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M*2, Fuel*2, ECM", + "name": "AIM-9M*2, Fuel*2, ECM", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "ALARM", + "quantity": 4 + }, + { + "name": "", + "quantity": 4 + } + ], + "enabled": true, + "code": "ALARM*4, Fuel*2, ECM", + "name": "ALARM*4, Fuel*2, ECM", + "roles": [ + "SEAD" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 1 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-16 - 1000lb Laser Guided Bomb", + "quantity": 2 + }, + { + "name": "Sky-Shadow ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "GBU-16*2, AIM-9M*2, Fuel*2, ECM", + "name": "GBU-16*2, AIM-9M*2, Fuel*2, ECM", + "roles": [ + "Strike", + "FAC-A", + "Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 1 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BL-755 CBU - 450kg, 147 Frag/Pen bomblets", + "quantity": 4 + }, + { + "name": "Sky-Shadow ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "BL755*4, AIM-9M*2, Fuel*2, ECM", + "name": "BL755*4, AIM-9M*2, Fuel*2, ECM", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 1 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Sea Eagle - ASM", + "quantity": 2 + }, + { + "name": "Sky-Shadow ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "Sea Eagle*2, AIM-9M*2, Fuel*2, ECM", + "name": "Sea Eagle*2, AIM-9M*2, Fuel*2, ECM", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "tornado.png", + "enabled": true, + "liveries": { + "no. 14 squadron raf lossiemouth ab (morayshire)": { + "name": "no. 14 squadron raf lossiemouth ab (morayshire)", + "countries": [ + "UK" + ] + }, + "o of ii (ac) squadron raf marham": { + "name": "o of ii (ac) squadron raf marham", + "countries": [ + "UK" + ] + }, + "bb of 14 squadron raf lossiemouth": { + "name": "bb of 14 squadron raf lossiemouth", + "countries": [ + "UK" + ] + }, + "no. 9 squadron raf marham ab (norfolk)": { + "name": "no. 9 squadron raf marham ab (norfolk)", + "countries": [ + "UK" + ] + }, + "no. 12 squadron raf lossiemouth ab (morayshire)": { + "name": "no. 12 squadron raf lossiemouth ab (morayshire)", + "countries": [ + "UK" + ] + }, + "no. 617 squadron raf lossiemouth ab (morayshire)": { + "name": "no. 617 squadron raf lossiemouth ab (morayshire)", + "countries": [ + "UK" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swing wing, 2 crew, all weather strike.", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Tornado IDS": { + "name": "Tornado IDS", + "coalition": "blue", + "label": "Tornado IDS", + "era": "Late Cold War", + "shortLabel": "IDS", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Kormoran - ASM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kormoran*2,AIM-9*2,Fuel*2", + "name": "Kormoran*2,AIM-9*2,Fuel*2", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-16 - 1000lb Laser Guided Bomb", + "quantity": 2 + } + ], + "enabled": true, + "code": "GBU-16*2,AIM-9*2,Fuel*2", + "name": "GBU-16*2,AIM-9*2,Fuel*2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + } + ], + "enabled": true, + "code": "Fuel*2", + "name": "Fuel*2", + "roles": [ + "FAC-A" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 1 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 4 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Sky-Shadow ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-88*4,AIM-9*2,ECM", + "name": "AGM-88*4,AIM-9*2,ECM", + "roles": [ + "SEAD", + "CAS" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 1 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 2 + }, + { + "name": "Sky-Shadow ECM Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AGM-88*2,AIM-9*2,Fuel*2,ECM", + "name": "AGM-88*2,AIM-9*2,Fuel*2,ECM", + "roles": [ + "SEAD", + "CAS" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "Kormoran - ASM", + "quantity": 4 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kormoran*4,AIM-9*2", + "name": "Kormoran*4,AIM-9*2", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "AGM-88C HARM - High Speed Anti-Radiation Missile", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Kormoran - ASM", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kormoran*2,AIM-9*2,AGM-88*2", + "name": "Kormoran*2,AIM-9*2,AGM-88*2", + "roles": [ + "Antiship Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "BOZ-107 - Countermeasure Dispenser", + "quantity": 2 + }, + { + "name": "TORNADO Fuel tank", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 - 500lb GP Bomb LD", + "quantity": 4 + } + ], + "enabled": true, + "code": "Mk-82*4,AIM-9*2,Fuel*2", + "name": "Mk-82*4,AIM-9*2,Fuel*2", + "roles": [ + "Strike" + ] + } + ], + "filename": "tornado.png", + "enabled": true, + "liveries": { + "ita tornado black": { + "name": "Tornado Black", + "countries": [ + "ITA" + ] + }, + "marinefliegergeschwader 2 eggebek ab marineflieger": { + "name": "marinefliegergeschwader 2 eggebek ab marineflieger", + "countries": [ + "GER" + ] + }, + "jagdbombergeschwader 31 `boelcke` norvenich ab luftwaffe": { + "name": "jagdbombergeschwader 31 `boelcke` norvenich ab luftwaffe", + "countries": [ + "GER" + ] + }, + "ita tornado mm7042": { + "name": "Tornado MM7042", + "countries": [ + "ITA" + ] + }, + "ita tornado mm55004": { + "name": "Tornado MM55004", + "countries": [ + "ITA" + ] + }, + "aufklarungsgeschwader 51 `immelmann` jagel ab luftwaffe": { + "name": "aufklarungsgeschwader 51 `immelmann` jagel ab luftwaffe", + "countries": [ + "GER" + ] + }, + "jagdbombergeschwader 33 buchel ab no. 43+19 experimental scheme": { + "name": "jagdbombergeschwader 33 buchel ab no. 43+19 experimental scheme", + "countries": [ + "GER" + ] + }, + "jagdbombergeschwader 32 lechfeld ab luftwaffe": { + "name": "jagdbombergeschwader 32 lechfeld ab luftwaffe", + "countries": [ + "GER" + ] + }, + "ita tornado (sesto stormo diavoli rossi)": { + "name": "Tornado (Sesto Stormo Diavoli Rossi)", + "countries": [ + "ITA" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swing wing, 2 crew, all weather strike.", + "abilities": "Drogue AAR", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Tu-142": { + "name": "Tu-142", + "coalition": "red", + "label": "Tu-142 Bear", + "era": "Mid Cold War", + "shortLabel": "142", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "6 x Kh-35 (AS-20 Kayak) - 520kg, AShM, IN & Act Rdr", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-35*6", + "name": "Kh-35*6", + "roles": [ + "Antiship Strike" + ] + } + ], + "filename": "tu-95.png", + "enabled": true, + "liveries": { + "af standard": { + "name": "af standard", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "4 turboprop, swept wing, 11 crew, bomber. Bear", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Tu-160": { + "name": "Tu-160", + "coalition": "red", + "label": "Tu-160 Blackjack", + "era": "Late Cold War", + "shortLabel": "160", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "6 x Kh-65 (AS-15B Kent) - 1250kg, ASM, IN & MCC", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-65*12", + "name": "Kh-65*12", + "roles": [ + "Strike" + ] + } + ], + "filename": "tu-160.png", + "enabled": true, + "liveries": { + "af standard": { + "name": "af standard", + "countries": [ + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "4 jet engine, swing wing, 4 crew bomber. Blackjack", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Tu-22M3": { + "name": "Tu-22M3", + "coalition": "red", + "label": "Tu-22M3 Backfire", + "era": "Late Cold War", + "shortLabel": "T22", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Kh-22 (AS-4 Kitchen) - 1000kg, AShM, IN & Act/Pas Rdr", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-22N", + "name": "Kh-22N", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "Kh-22 (AS-4 Kitchen) - 1000kg, AShM, IN & Act/Pas Rdr", + "quantity": 2 + } + ], + "enabled": true, + "code": "Kh-22N*2", + "name": "Kh-22N*2", + "roles": [ + "Antiship Strike" + ] + }, + { + "items": [ + { + "name": "MBD3-U9M with 9 x FAB-250 - 250kg GP Bombs LD", + "quantity": 4 + }, + { + "name": "33 x FAB-250 - 250kg GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*69", + "name": "FAB-250*69", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "33 x FAB-500 M-62 - 500kg GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*33", + "name": "FAB-500*33", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "MBD3-U9M with 9 x FAB-250 - 250kg GP Bombs LD", + "quantity": 4 + }, + { + "name": "33 x FAB-500 M-62 - 500kg GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-500*33, FAB-250*36", + "name": "FAB-500*33, FAB-250*36", + "roles": [ + "Strike", + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "33 x FAB-250 - 250kg GP Bombs LD", + "quantity": 1 + } + ], + "enabled": true, + "code": "FAB-250*33", + "name": "FAB-250*33", + "roles": [ + "Strike", + "Runway Attack" + ] + } + ], + "filename": "tu-22.png", + "enabled": true, + "liveries": { + "af standard": { + "name": "af standard", + "countries": [ + "UKR", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "2 jet engine, swing wing, 4 crew bomber. Backfire", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "Tu-95MS": { + "name": "Tu-95MS", + "coalition": "red", + "label": "Tu-95MS Bear", + "era": "Mid Cold War", + "shortLabel": "T95", + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "6 x Kh-65 (AS-15B Kent) - 1250kg, ASM, IN & MCC", + "quantity": 1 + } + ], + "enabled": true, + "code": "Kh-65*6", + "name": "Kh-65*6", + "roles": [ + "Strike" + ] + } + ], + "filename": "tu-95.png", + "enabled": true, + "liveries": { + "af standard": { + "name": "af standard", + "countries": [ + "UKR", + "RUS" + ] + } + }, + "type": "Aircraft", + "description": "4 turboprop, swept wing, 6 crew, bomber. Bear", + "abilities": "", + "acquisitionRange": "", + "engagementRange": "", + "canTargetPoint": true, + "canRearm": false + }, + "F-15ESE": { + "name": "F-15ESE", + "coalition": "", + "label": "F-15E Strike Eagle", + "shortLabel": "15E", + "era": "", + "enabled": true, + "loadouts": [ + { + "items": [], + "enabled": true, + "code": "", + "name": "Empty loadout", + "roles": [ + "No task", + "Strike" + ] + }, + { + "items": [ + { + "name": "Fuel tank 610 gal", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "BLU-107 * 6", + "quantity": 2 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C x 2, AIM-9M x 2, BLU-107 x 12, TGP, NVP, Fuel Tank", + "name": "AIM-120C x 2, AIM-9M x 2, BLU-107 x 12, TGP, NVP, Fuel Tank", + "roles": [ + "Runway Attack" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C x 4, AIM-9M x4, TGP, NVP, FUel Tank x 2", + "name": "AIM-120C x 4, AIM-9M x4, TGP, NVP, FUel Tank x 2", + "roles": [ + "Reconnaissance" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "CBU-87 * 3", + "quantity": 2 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M x 4, CBU-87 x 6, TGP, Fuel Tank x 2", + "name": "AIM-9M x 4, CBU-87 x 6, TGP, Fuel Tank x 2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + } + ], + "enabled": true, + "code": "AIM-120Cx4, AIM-9Mx4, Fuel Tanks x 2", + "name": "AIM-120Cx4, AIM-9Mx4, Fuel Tanks x 2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M x 4, TGP, NVP, Fuel Tanks x 2", + "name": "AIM-9M x 4, TGP, NVP, Fuel Tanks x 2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 2 + }, + { + "name": "Mk-82 * 6", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "CBU-97 * 3", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M x 4, Mk-84 x 2, Mk-82 x 6, CBU-87 x 3, TGP, NVP", + "name": "AIM-9M x 4, Mk-84 x 2, Mk-82 x 6, CBU-87 x 3, TGP, NVP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "Captive AIM-9M for ACM", + "quantity": 3 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "CATM-9M x 3, AIM-120B", + "name": "CATM-9M x 3, AIM-120B", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 4 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M x 4, AIM-120B x 4, TGP, NVP, Fuel Tanks x 2", + "name": "AIM-9M x 4, AIM-120B x 4, TGP, NVP, Fuel Tanks x 2", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Captive AIM-9M for ACM", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": "CATM-9M, CAIM-120", + "name": "CATM-9M, CAIM-120", + "roles": [ + "CAP" + ] + }, + { + "items": [ + { + "name": "Captive AIM-9M for ACM", + "quantity": 1 + }, + { + "name": "BDU-50LGB * 2", + "quantity": 2 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 1 + } + ], + "enabled": true, + "code": " AIM-120C x 2, CATM-9M, GBU-12 x 4, TGP, NVP", + "name": " AIM-120C x 2, CATM-9M, GBU-12 x 4, TGP, NVP", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-12 * 4", + "quantity": 2 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "GBU-12 - 500lb Laser Guided Bomb", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 9, TGP, NVP, FUel Tank x 2", + "name": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 9, TGP, NVP, FUel Tank x 2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "Mk-82 * 6", + "quantity": 2 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + } + ], + "enabled": true, + "code": " AIM-9M x 4, MK-82 x 12, TGP, Fuel Tank x 2", + "name": " AIM-9M x 4, MK-82 x 12, TGP, Fuel Tank x 2", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "CBU-87 * 6", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-9M x 4, AIM-120C x 2, CBU-87 x 6, TGP", + "name": "AIM-9M x 4, AIM-120C x 2, CBU-87 x 6, TGP", + "roles": [ + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "GBU-12 * 4", + "quantity": 1 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + }, + { + "name": "GBU-10 * 2", + "quantity": 1 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + } + ], + "enabled": true, + "code": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 4, GBU-10 x 2, TGP, NVP, FUel Tank x 2", + "name": "AIM-120C x 2, AIM-9M x 2, GBU-12 x 4, GBU-10 x 2, TGP, NVP, FUel Tank x 2", + "roles": [ + "Strike" + ] + }, + { + "items": [ + { + "name": "", + "quantity": 3 + } + ], + "enabled": true, + "code": "Clean", + "name": "Clean", + "roles": [] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "Mk-20 Rockeye * 6", + "quantity": 2 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M x 4, Mk-20 x 12, NVP, Fuel Tanks x 2", + "name": "AIM-9M x 4, Mk-20 x 12, NVP, Fuel Tanks x 2", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 4 + }, + { + "name": "Fuel tank 610 gal", + "quantity": 2 + }, + { + "name": "AIM-7MH Sparrow Semi-Active Radar", + "quantity": 2 + }, + { + "name": "Mk-20 Rockeye * 6", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-9M x 4, AIM-7M x 2, Mk-20 x 2, NVP, Fuel Tanks x 2", + "name": "AIM-9M x 4, AIM-7M x 2, Mk-20 x 2, NVP, Fuel Tanks x 2", + "roles": [ + "Strike", + "CAS" + ] + }, + { + "items": [ + { + "name": "AIM-120C-5 AMRAAM - Active Rdr AAM", + "quantity": 2 + }, + { + "name": "Mk-84 - 2000lb GP Bomb LD", + "quantity": 3 + }, + { + "name": "AIM-9M Sidewinder IR AAM", + "quantity": 2 + }, + { + "name": "Mk-82 AIR * 6", + "quantity": 2 + }, + { + "name": "AN/AAQ-14 LANTIRN TGT Pod", + "quantity": 1 + }, + { + "name": "AN/AAQ-13 LANTIRN NAV POD", + "quantity": 1 + } + ], + "enabled": true, + "code": "AIM-120C x2, AIM-9M x 2, Mk-84 x 3, Mk-82AIR x 12", + "name": "AIM-120C x2, AIM-9M x 2, Mk-84 x 3, Mk-82AIR x 12", + "roles": [ + "Strike", + "CAS" + ] + } + ], + "filename": "f-15.png", + "liveries": { + "usaf 334th eagles fs af89 aim high": { + "name": "USAF 334th Eagles AF89-475 'Aim High'", + "countries": [ + "USA" + ] + }, + "usaf 335th chiefs fs af89 low vis combat": { + "name": "USAF 335th Chiefs AF89 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af91 low vis combat": { + "name": "USAF 492nd Madhatters AF91 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 335th chiefs fs af89 high vis clean": { + "name": "USAF 335th Chiefs AF89 High Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 335th chiefs fs af89-0487 lucky": { + "name": "USAF 335th Chiefs AF89-0487 'Lucky'", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af88-1690 darkness falls": { + "name": "USAF 336th Rocketeers AF88-1690 'Darkness Falls'", + "countries": [ + "USA" + ] + }, + "usaf 391st bold tigers fs af92-366 billy the kid": { + "name": "USAF 391st Bold Tigers AF92-366 'Billy the Kid'", + "countries": [ + "USA" + ] + }, + "idf ra'am, 69 hammer sqn": { + "name": "IDF 69th Hammers Scheme B", + "countries": [ + "ISR" + ] + }, + "usaf 336th rocketeers fs af89 high vis clean": { + "name": "USAF 336th Rocketeers AF89 High Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af89-496 shadow": { + "name": "USAF 336th Rocketeers AF89-496 'Shadow'", + "countries": [ + "USA" + ] + }, + "usaf 389th thunderbolts fs af90 low vis combat": { + "name": "USAF 389th Thunderbolts AF90 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd mad hatters fs 97-219 75th d-day anniversary": { + "name": "USAF 492nd Madhatters AF97-219 '75th Anniversary D-Day'", + "countries": [ + "USA" + ] + }, + "usaf 334th eagles fs af89 high vis clean": { + "name": "USAF 334th Eagles AF89 High Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 391st bold tigers fs af91-300 leo": { + "name": "USAF 391st Bold Tigers AF91-300 'Leo'", + "countries": [ + "USA" + ] + }, + "usaf 494th panthers fs af01 low vis clean": { + "name": "USAF 494th Panthers AF01 Low Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af97-220 thanos": { + "name": "USAF 492nd Madhatters AF97-220 'Thanos'", + "countries": [ + "USA" + ] + }, + "usaf 48th fw 70th anniversary af92-364 heritage": { + "name": "USAF 48th FW 70th Aniversary AF92-364 Heritage", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af88 low vis combat": { + "name": "USAF 336th Rocketeers AF88 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af97-221 low vis combat": { + "name": "USAF 492nd Madhatters AF97-221 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af91-315 vader": { + "name": "USAF 492nd Madhatters AF91-315 'Vader'", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af91-327 green goblin": { + "name": "USAF 492nd Madhatters AF91-327 'Green Goblin'", + "countries": [ + "USA" + ] + }, + "usaf 391st bold tigers fs af90-247 kraken": { + "name": "USAF 391st Bold Tigers AF90-247 'kraken'", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af88-1700 dragon betty": { + "name": "USAF 336th Rocketeers AF88-1700 'Dragon Betty'", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af89-501": { + "name": "USAF 336th Rocketeers AF89-501", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af88 high vis clean": { + "name": "USAF 336th Rocketeers AF88 High Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 333rd rocketeers fs af87-199 333 fgs": { + "name": "USAF 333rd Lancers AF87-0199 333 FGS", + "countries": [ + "USA" + ] + }, + "usaf 391st bold tigers fs af90-241 high vis combat": { + "name": "USAF 391st Bold Tigers AF90-241 High Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af96 low vis clean": { + "name": "USAF 492nd Madhatters AF96 Low Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 494th panthers fs af00 low vis combat": { + "name": "USAF 494th Panthers AF00 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af91 low vis clean": { + "name": "USAF 492nd Madhatters AF91 Low Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 494th panthers fs af01 low vis combat": { + "name": "USAF 494th Panthers AF01 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af98 low vis clean": { + "name": "USAF 492nd Madhatters AF98 Low Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 17th ws af90 low vis clean": { + "name": "USAF 17th Weapons Squadron AF90 Low Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af88-1673 336 fgs": { + "name": "USAF 336th Rocketeers AF88-1673 336 FGS", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af89 low vis combat": { + "name": "USAF 336th Rocketeers AF89 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af91-308 low vis clean": { + "name": "USAF 492nd Madhatters AF91-308 Low Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af98 low vis combat": { + "name": "USAF 492nd Madhatters AF98 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 391st bold tigers af90-250 tmota": { + "name": "USAF 391ST Bold Tigers 2005 Tiger Meet of the Americas", + "countries": [ + "USA" + ] + }, + "usaf af86-183 number1": { + "name": "USAF Test AF86-183 'Number 1'", + "countries": [ + "USA" + ] + }, + "usaf 17th wps af90-257": { + "name": "USAF 17th Weapons Squadron AF90-257 High Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 17th ws af90 high vis clean": { + "name": "USAF 17th Weapons Squadron AF90 High Vis Clean", + "countries": [ + "USA" + ] + }, + "usaf 492nd madhatters fs af96 low vis combat": { + "name": "USAF 492nd Madhatters AF96 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 391st bold tigers fs af90 low vis combat": { + "name": "USAF 391st Bold Tigers AF90 Low Vis Combat", + "countries": [ + "USA" + ] + }, + "usaf 494th panthers fs 91-603 75th d-day anniversary": { + "name": "USAF 494th Panthers AF91-603 '75th Anniversary D-Day'", + "countries": [ + "USA" + ] + }, + "usaf 336th fw mountain home 75 years af87-173": { + "name": "USAF 366th FW 'Mountain Home 75 Years' AF87-0173", + "countries": [ + "USA" + ] + }, + "usaf 336th rocketeers fs af88-1687 mad duck iv": { + "name": "USAF 336th Rocketeers AF88-1687 'Mad Duck IV'", + "countries": [ + "USA" + ] + } + } + } } \ No newline at end of file diff --git a/client/public/databases/units/groundunitdatabase.json b/client/public/databases/units/groundunitdatabase.json index 0b529736..73a07df4 100644 --- a/client/public/databases/units/groundunitdatabase.json +++ b/client/public/databases/units/groundunitdatabase.json @@ -64,7 +64,9 @@ "aimTime": 5, "shotsToFire": 100, "markerFile": "groundunit-artillery", - "tags": "120mm" + "tags": "120mm", + "indirectFire": true, + "shotsBaseInterval": 300 }, "2S6 Tunguska": { "name": "2S6 Tunguska", diff --git a/client/src/constants/constants.ts b/client/src/constants/constants.ts index 374a60e0..2a170ed5 100644 --- a/client/src/constants/constants.ts +++ b/client/src/constants/constants.ts @@ -275,4 +275,8 @@ export const MGRS_PRECISION_1M = 6; export const DELETE_CYCLE_TIME = 0.05; export const DELETE_SLOW_THRESHOLD = 50; -export const GROUPING_ZOOM_TRANSITION = 13; \ No newline at end of file +export const GROUPING_ZOOM_TRANSITION = 13; + +export const MAX_SHOTS_SCATTER = 3; +export const MAX_SHOTS_INTENSITY = 3; +export const SHOTS_SCATTER_DEGREES = 10; \ No newline at end of file diff --git a/client/src/unit/unit.ts b/client/src/unit/unit.ts index 223edfcf..65c49207 100644 --- a/client/src/unit/unit.ts +++ b/client/src/unit/unit.ts @@ -5,7 +5,7 @@ import { CustomMarker } from '../map/markers/custommarker'; import { SVGInjector } from '@tanem/svg-injector'; import { UnitDatabase } from './databases/unitdatabase'; import { TargetMarker } from '../map/markers/targetmarker'; -import { DLINK, DataIndexes, GAME_MASTER, HIDE_GROUP_MEMBERS, IDLE, IRST, MOVE_UNIT, OPTIC, RADAR, ROEs, RWR, SHOW_UNIT_CONTACTS, SHOW_UNITS_ENGAGEMENT_RINGS, SHOW_UNIT_PATHS, SHOW_UNIT_TARGETS, VISUAL, emissionsCountermeasures, reactionsToThreat, states, SHOW_UNITS_ACQUISITION_RINGS, HIDE_UNITS_SHORT_RANGE_RINGS, FILL_SELECTED_RING, GROUPING_ZOOM_TRANSITION } from '../constants/constants'; +import { DLINK, DataIndexes, GAME_MASTER, HIDE_GROUP_MEMBERS, IDLE, IRST, MOVE_UNIT, OPTIC, RADAR, ROEs, RWR, SHOW_UNIT_CONTACTS, SHOW_UNITS_ENGAGEMENT_RINGS, SHOW_UNIT_PATHS, SHOW_UNIT_TARGETS, VISUAL, emissionsCountermeasures, reactionsToThreat, states, SHOW_UNITS_ACQUISITION_RINGS, HIDE_UNITS_SHORT_RANGE_RINGS, FILL_SELECTED_RING, GROUPING_ZOOM_TRANSITION, MAX_SHOTS_SCATTER, SHOTS_SCATTER_DEGREES } from '../constants/constants'; import { DataExtractor } from '../server/dataextractor'; import { groundUnitDatabase } from './databases/groundunitdatabase'; import { navyUnitDatabase } from './databases/navyunitdatabase'; @@ -14,6 +14,8 @@ import { Ammo, Contact, GeneralSettings, LoadoutBlueprint, ObjectIconOptions, Of import { RangeCircle } from "../map/rangecircle"; import { Group } from './group'; import { ContextActionSet } from './contextactionset'; +import * as turf from "@turf/turf"; + var pathIcon = new Icon({ iconUrl: '/resources/theme/images/markers/marker-icon.png', shadowUrl: '/resources/theme/images/markers/marker-shadow.png', @@ -1424,7 +1426,22 @@ export abstract class Unit extends CustomMarker { if (!getApp().getMap().hasLayer(this.#targetPositionPolyline)) this.#targetPositionPolyline.addTo(getApp().getMap()); this.#targetPositionMarker.setLatLng(new LatLng(targetPosition.lat, targetPosition.lng)); - this.#targetPositionPolyline.setLatLngs([new LatLng(this.#position.lat, this.#position.lng), new LatLng(targetPosition.lat, targetPosition.lng)]) + + if (this.getState() === 'simulate-fire-fight' && this.getShotsScatter() != MAX_SHOTS_SCATTER) { + let turfUnitPosition = turf.point([this.getPosition().lng, this.getPosition().lat]); + let turfTargetPosition = turf.point([targetPosition.lng, targetPosition.lat]); + + let bearing = turf.bearing(turfUnitPosition, turfTargetPosition); + let scatterDistance = turf.distance(turfUnitPosition, turfTargetPosition) * Math.tan((MAX_SHOTS_SCATTER - this.getShotsScatter()) * deg2rad(SHOTS_SCATTER_DEGREES)); + let destination1 = turf.destination(turfTargetPosition, scatterDistance, bearing + 90); + let destination2 = turf.destination(turfTargetPosition, scatterDistance, bearing - 90); + + this.#targetPositionPolyline.setStyle({dashArray: "4, 8"}); + this.#targetPositionPolyline.setLatLngs([new LatLng(destination1.geometry.coordinates[1], destination1.geometry.coordinates[0]), new LatLng(this.#position.lat, this.#position.lng), new LatLng(destination2.geometry.coordinates[1], destination2.geometry.coordinates[0])]) + } else { + this.#targetPositionPolyline.setStyle({dashArray: ""}); + this.#targetPositionPolyline.setLatLngs([new LatLng(this.#position.lat, this.#position.lng), new LatLng(targetPosition.lat, targetPosition.lng)]) + } } #clearTargetPosition() { @@ -1570,7 +1587,7 @@ export class GroundUnit extends Unit { if (targetPosition !== null) { if (this.canTargetPoint()) { contextActionSet.addContextAction(this, "fire-at-area", "Fire at area", "Fire at a specific area on the ground", (units: Unit[]) => { getApp().getUnitsManager().fireAtArea(targetPosition, units) }); - contextActionSet.addContextAction(this, "simulate-fire-fight", "Simulate fire fight", "Simulate a fire fight by shooting randomly in a certain large area.\nWARNING: works correctly only on neutral units, blue or red units will aim", (units: Unit[]) => { getApp().getUnitsManager().fireAtArea(targetPosition, units) }); + contextActionSet.addContextAction(this, "simulate-fire-fight", "Simulate fire fight", "Simulate a fire fight by shooting randomly in a certain large area.\nWARNING: works correctly only on neutral units, blue or red units will aim", (units: Unit[]) => { getApp().getUnitsManager().simulateFireFight(targetPosition, units) }); } } else { diff --git a/src/core/src/groundunit.cpp b/src/core/src/groundunit.cpp index 4385f74b..e66a8622 100644 --- a/src/core/src/groundunit.cpp +++ b/src/core/src/groundunit.cpp @@ -180,7 +180,7 @@ void GroundUnit::AIloop() if (!getHasTask()) { std::ostringstream taskSS; taskSS.precision(10); - taskSS << "{id = 'FireAtPoint', lat = " << targetPosition.lat << ", lng = " << targetPosition.lng << ", radius = 1000}"; + taskSS << "{id = 'FireAtPoint', lat = " << targetPosition.lat << ", lng = " << targetPosition.lng << ", radius = 100}"; Command* command = dynamic_cast(new SetTask(groupName, taskSS.str(), [this]() { this->setHasTaskAssigned(true); })); scheduler->appendCommand(command); setHasTask(true); @@ -191,10 +191,53 @@ void GroundUnit::AIloop() case State::SIMULATE_FIRE_FIGHT: { setTask("Simulating fire fight"); - if (internalCounter == 0) { - aimAtPoint(targetPosition); + if (internalCounter == 0 && targetPosition != Coords(NULL)) { + /* Get the distance and bearing to the target */ + Coords scatteredTargetPosition = targetPosition; + double distance; + double bearing1; + double bearing2; + Geodesic::WGS84().Inverse(getPosition().lat, getPosition().lng, scatteredTargetPosition.lat, scatteredTargetPosition.lng, distance, bearing1, bearing2); + + /* Compute the scattered position applying a random scatter to the shot */ + double scatterDistance = distance * tan(10 /* degs */ * (ShotsScatter::LOW - shotsScatter) / 57.29577) * RANDOM_MINUS_ONE_TO_ONE; + Geodesic::WGS84().Direct(scatteredTargetPosition.lat, scatteredTargetPosition.lng, bearing1 + 90, scatterDistance, scatteredTargetPosition.lat, scatteredTargetPosition.lng); + + /* Recover the data from the database */ + bool indirectFire = false; + double shotsBaseInterval = 15; /* s */ + if (database.has_object_field(to_wstring(name))) { + json::value databaseEntry = database[to_wstring(name)]; + if (databaseEntry.has_boolean_field(L"indirectFire")) + indirectFire = databaseEntry[L"indirectFire"].as_bool(); + if (databaseEntry.has_number_field(L"shotsBaseInterval")) + shotsBaseInterval = databaseEntry[L"shotsBaseInterval"].as_number().to_double(); + } + + /* If the unit is of the indirect fire type, like a mortar, simply shoot at the target */ + if (indirectFire) { + log(unitName + "(" + name + ")" + " simulating fire fight with indirect fire"); + std::ostringstream taskSS; + taskSS.precision(10); + taskSS << "{id = 'FireAtPoint', lat = " << scatteredTargetPosition.lat << ", lng = " << scatteredTargetPosition.lng << ", radius = 100}"; + Command* command = dynamic_cast(new SetTask(groupName, taskSS.str(), [this]() { this->setHasTaskAssigned(true); })); + scheduler->appendCommand(command); + setHasTask(true); + } + /* Otherwise use the aim method */ + else { + log(unitName + "(" + name + ")" + " simulating fire fight with aim at point method"); + aimAtPoint(scatteredTargetPosition); + } + + /* Wait an amout of time depending on the shots intensity */ + internalCounter = ((ShotsIntensity::HIGH - shotsIntensity) * shotsBaseInterval + 2) / FRAMERATE_TIME_INTERVAL; } + if (targetPosition == Coords(NULL)) + setState(State::IDLE); + + /* Fallback if something went wrong */ if (internalCounter == 0) internalCounter = 20 / FRAMERATE_TIME_INTERVAL; internalCounter--; @@ -204,13 +247,14 @@ void GroundUnit::AIloop() case State::SCENIC_AAA: { setTask("Scenic AAA"); - if ((!getHasTask() || internalCounter == 0) && getOperateAs() > 0) { + if ((!getHasTask() || internalCounter == 0)) { double distance = 0; - unsigned char targetCoalition = getOperateAs() == 2 ? 1 : 2; + unsigned char unitCoalition = coalition == 0 ? getOperateAs() : coalition; + unsigned char targetCoalition = unitCoalition == 2 ? 1 : 2; Unit* target = unitsManager->getClosestUnit(this, targetCoalition, { "Aircraft", "Helicopter" }, distance); /* Only run if an enemy air unit is closer than 20km to avoid useless load */ - if (distance < 20000 /* m */) { + if (target != nullptr && distance < 20000 /* m */) { double r = 15; /* m */ double barrelElevation = r * tan(acos(((double)(rand()) / (double)(RAND_MAX)))); @@ -247,9 +291,10 @@ void GroundUnit::AIloop() if (canAAA) { /* Only run this when the internal counter reaches 0 to avoid excessive computations when no nearby target */ - if (internalCounter == 0 && getOperateAs() > 0) { + if (internalCounter == 0) { double distance = 0; - unsigned char targetCoalition = getOperateAs() == 2 ? 1 : 2; + unsigned char unitCoalition = coalition == 0 ? getOperateAs() : coalition; + unsigned char targetCoalition = unitCoalition == 2 ? 1 : 2; /* Default gun values */ double barrelHeight = 1.0; /* m */ @@ -432,6 +477,8 @@ void GroundUnit::aimAtPoint(Coords aimTarget) { double lng = 0; Geodesic::WGS84().Direct(position.lat, position.lng, bearing1, r, lat, lng); + log(unitName + "(" + name + ")" + " shooting with aim at point method. Barrel elevation: " + to_string(barrelElevation * 57.29577) + "°, bearing: " + to_string(bearing1) + "°"); + std::ostringstream taskSS; taskSS.precision(10); taskSS << "{id = 'FireAtPoint', lat = " << lat << ", lng = " << lng << ", alt = " << position.alt + barrelElevation + barrelHeight << ", radius = 0.001}"; From 244d32e7d27a5031ae6699c7c0b8d1f0cb53994b Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Fri, 24 Nov 2023 11:43:26 +0100 Subject: [PATCH 37/41] Added bounds for South Atlantic map --- client/src/constants/constants.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/client/src/constants/constants.ts b/client/src/constants/constants.ts index 2a170ed5..d1f96605 100644 --- a/client/src/constants/constants.ts +++ b/client/src/constants/constants.ts @@ -102,6 +102,13 @@ export const minimapBoundaries = [ new LatLng(10.7725, 149.3918333), new LatLng(22.5127778, 149.5427778), new LatLng(22.09, 135.0572222) + ], + [ // South Atlantic + new LatLng(-49.097217, -79.418267), + new LatLng(-56.874517,-79.418267), + new LatLng(-56.874517, -43.316433), + new LatLng(-49.097217, -43.316433), + new LatLng(-49.097217, -79.418267) ] ]; @@ -111,7 +118,7 @@ export const mapBounds = { "Nevada": { bounds: new LatLngBounds([34.4037128, -119.7806729], [39.7372411, -112.1130805]), zoom: 5 }, "PersianGulf": { bounds: new LatLngBounds([21.729393, 47.572675], [33.131584, 64.7313594]), zoom: 5 }, "Caucasus": { bounds: new LatLngBounds([39.6170191, 27.634935], [47.3907982, 49.3101946]), zoom: 4 }, - // TODO "Falklands" + "Falklands": { bounds: new LatLngBounds([-49.097217, -79.418267], [-56.874517, -43.316433]), zoom: 3 }, } export const mapLayers = { From 95915489b28acdc9f855783646803119ebba9ff2 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Fri, 24 Nov 2023 11:49:09 +0100 Subject: [PATCH 38/41] Added code to clear any previous connection attempt --- client/src/server/servermanager.ts | 41 +++++++++++++++++------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/client/src/server/servermanager.ts b/client/src/server/servermanager.ts index 0f173803..4402f2c8 100644 --- a/client/src/server/servermanager.ts +++ b/client/src/server/servermanager.ts @@ -20,6 +20,7 @@ export class ServerManager { #demoEnabled = false; #previousMissionElapsedTime:number = 0; // Track if mission elapsed time is increasing (i.e. is the server paused) #serverIsPaused: boolean = false; + #intervals: number[] = []; constructor() { this.#lastUpdateTimes[UNITS_URI] = Date.now(); @@ -404,7 +405,11 @@ export class ServerManager { } startUpdate() { - window.setInterval(() => { + /* Clear any existing interval */ + this.#intervals.forEach((interval: number) => { window.clearInterval(interval); }); + this.#intervals = []; + + this.#intervals.push(window.setInterval(() => { if (!this.getPaused()) { this.getMission((data: MissionData) => { this.checkSessionHash(data.sessionHash); @@ -412,9 +417,9 @@ export class ServerManager { return data.time; }); } - }, 1000); + }, 1000)); - window.setInterval(() => { + this.#intervals.push(window.setInterval(() => { if (!this.getPaused() && getApp().getMissionManager().getCommandModeOptions().commandMode != NONE) { this.getAirbases((data: AirbasesData) => { this.checkSessionHash(data.sessionHash); @@ -422,9 +427,9 @@ export class ServerManager { return data.time; }); } - }, 10000); + }, 10000)); - window.setInterval(() => { + this.#intervals.push(window.setInterval(() => { if (!this.getPaused() && getApp().getMissionManager().getCommandModeOptions().commandMode != NONE){ this.getBullseye((data: BullseyesData) => { this.checkSessionHash(data.sessionHash); @@ -432,9 +437,9 @@ export class ServerManager { return data.time; }); } - }, 10000); + }, 10000)); - window.setInterval(() => { + this.#intervals.push(window.setInterval(() => { if (!this.getPaused() && getApp().getMissionManager().getCommandModeOptions().commandMode != NONE) { this.getLogs((data: any) => { this.checkSessionHash(data.sessionHash); @@ -442,27 +447,27 @@ export class ServerManager { return data.time; }); } - }, 1000); + }, 1000)); - window.setInterval(() => { + this.#intervals.push(window.setInterval(() => { if (!this.getPaused() && getApp().getMissionManager().getCommandModeOptions().commandMode != NONE) { this.getUnits((buffer: ArrayBuffer) => { var time = getApp().getUnitsManager()?.update(buffer); return time; }, false); } - }, 250); + }, 250)); - window.setInterval(() => { + this.#intervals.push(window.setInterval(() => { if (!this.getPaused() && getApp().getMissionManager().getCommandModeOptions().commandMode != NONE) { this.getWeapons((buffer: ArrayBuffer) => { var time = getApp().getWeaponsManager()?.update(buffer); return time; }, false); } - }, 250); + }, 250)); - window.setInterval(() => { + this.#intervals.push(window.setInterval(() => { if (!this.getPaused() && getApp().getMissionManager().getCommandModeOptions().commandMode != NONE) { this.getUnits((buffer: ArrayBuffer) => { var time = getApp().getUnitsManager()?.update(buffer); @@ -486,10 +491,10 @@ export class ServerManager { } } - }, ( this.getServerIsPaused() ? 500 : 5000 )); + }, ( this.getServerIsPaused() ? 500 : 5000 ))); // Mission clock and elapsed time - window.setInterval( () => { + this.#intervals.push(window.setInterval( () => { if ( !this.getConnected() || this.#serverIsPaused ) { return; @@ -503,16 +508,16 @@ export class ServerManager { csp.setMissionTime( [ mt.h, mt.m, mt.s ].map( n => zeroAppend( n, 2 )).join( ":" ) ); csp.setElapsedTime( new Date( elapsedMissionTime * 1000 ).toISOString().substring( 11, 19 ) ); - }, 1000 ); + }, 1000)); - window.setInterval(() => { + this.#intervals.push(window.setInterval(() => { if (!this.getPaused() && getApp().getMissionManager().getCommandModeOptions().commandMode != NONE) { this.getWeapons((buffer: ArrayBuffer) => { var time = getApp().getWeaponsManager()?.update(buffer); return time; }, true); } - }, 5000); + }, 5000)); } refreshAll() { From 7415e0cb975205ebf4a114791718bb821ccfedf6 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Fri, 24 Nov 2023 17:52:48 +0100 Subject: [PATCH 39/41] Added state icons for scenic functions And fixed dropdowns in case of duplicate labels --- client/demo.js | 2 +- .../plugins/databasemanager/package-lock.json | 4863 ++++++++++++++++- client/plugins/databasemanager/package.json | 4 +- .../databases/units/groundunitdatabase.json | 2 +- client/public/stylesheets/markers/units.css | 13 + .../olympus/images/states/miss-on-purpose.svg | 53 + .../olympus/images/states/scenic-aaa.svg | 77 + .../images/states/simulate-fire-fight.svg | 45 + client/src/controls/dropdown.ts | 218 +- client/src/controls/unitspawnmenu.ts | 25 +- 10 files changed, 5236 insertions(+), 66 deletions(-) create mode 100644 client/public/themes/olympus/images/states/miss-on-purpose.svg create mode 100644 client/public/themes/olympus/images/states/scenic-aaa.svg create mode 100644 client/public/themes/olympus/images/states/simulate-fire-fight.svg diff --git a/client/demo.js b/client/demo.js index 8c3a2085..5db2660c 100644 --- a/client/demo.js +++ b/client/demo.js @@ -34,7 +34,7 @@ class DemoDataGenerator { })) - let baseData = { alive: true, human: false, controlled: true, coalition: 2, country: 0, unitName: "Cool guy", groupName: "Cool group 1", state: 1, task: "Being cool!", + let baseData = { alive: true, human: false, controlled: true, coalition: 2, country: 0, unitName: "Cool guy", groupName: "Cool group 1", state: 13, task: "Being cool!", hasTask: true, position: { lat: 37, lng: -116, alt: 1000 }, speed: 200, horizontalVelocity: 200, verticalVelicity: 0, heading: 45, isActiveTanker: false, isActiveAWACS: false, onOff: true, followRoads: false, fuel: 50, desiredSpeed: 300, desiredSpeedType: 1, desiredAltitude: 1000, desiredAltitudeType: 1, leaderID: 0, formationOffset: { x: 0, y: 0, z: 0 }, diff --git a/client/plugins/databasemanager/package-lock.json b/client/plugins/databasemanager/package-lock.json index 7d12735b..546f42b6 100644 --- a/client/plugins/databasemanager/package-lock.json +++ b/client/plugins/databasemanager/package-lock.json @@ -1,13 +1,4864 @@ { "name": "DatabaseManagerPlugin", "version": "v0.0.1", - "lockfileVersion": 3, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "DatabaseManagerPlugin", - "version": "v0.0.1", - "devDependencies": {} + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz", + "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + } + }, + "@babel/compat-data": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", + "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", + "dev": true + }, + "@babel/core": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", + "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.3", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.4.tgz", + "integrity": "sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==", + "dev": true, + "requires": { + "@babel/types": "^7.23.4", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "dependencies": { + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", + "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "requires": { + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + } + }, + "@babel/helpers": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.4.tgz", + "integrity": "sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.4", + "@babel/types": "^7.23.4" + } + }, + "@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz", + "integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + } + }, + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", + "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", + "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz", + "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", + "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz", + "integrity": "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.3", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.3", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.3", + "@babel/plugin-transform-classes": "^7.23.3", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.3", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.3", + "@babel/plugin-transform-for-of": "^7.23.3", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.3", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.3", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.3", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.3", + "@babel/plugin-transform-numeric-separator": "^7.23.3", + "@babel/plugin-transform-object-rest-spread": "^7.23.3", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.3", + "@babel/plugin-transform-optional-chaining": "^7.23.3", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.3", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.4.tgz", + "integrity": "sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + }, + "@babel/traverse": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.4.tgz", + "integrity": "sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.23.4", + "@babel/generator": "^7.23.4", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.4", + "@babel/types": "^7.23.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz", + "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "@browserify/envify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@browserify/envify/-/envify-6.0.0.tgz", + "integrity": "sha512-ovxHR0KTsRCyMNwD7MGV0+VCU1sT6Ds+itC4DaQHM41eUId+w5Jd0qlhLVoDkkIVBnkY3BAAM8yb2QfpBlHkPw==", + "dev": true, + "requires": { + "acorn-node": "^2.0.1", + "dash-ast": "^2.0.1", + "multisplice": "^1.0.0", + "through2": "^4.0.2" + }, + "dependencies": { + "acorn-node": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-2.0.1.tgz", + "integrity": "sha512-VLR5sHqjk+8c5hrKeP2fWaIHb8eewsoxnZ8r2qpwRHXMHuC7KyOPflnOx9dLssVQUurzJ7rO0OzIFjHcndafWw==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + } + } + }, + "@browserify/uglifyify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@browserify/uglifyify/-/uglifyify-6.0.0.tgz", + "integrity": "sha512-48M2a3novsgKhUSo/B3ja10awc7unliK1HfW6aYBJdLFQj3wXDx9BBJVfj6MVYERSQVEVjNHQQ7IK89h4MpCLw==", + "dev": true, + "requires": { + "convert-source-map": "^1.9.0", + "minimatch": "^3.0.2", + "terser": "^5.15.1", + "through2": "^4.0.2", + "xtend": "^4.0.1" + }, + "dependencies": { + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "terser": { + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + } + } + }, + "@goto-bus-stop/common-shake": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@goto-bus-stop/common-shake/-/common-shake-2.4.0.tgz", + "integrity": "sha512-LO+7v+UbxE3IyAS4Suf/KYB7Zq9DEIHibwDe6Wph4apNEfDyyxP7BSxzRS/Qa9lUH5gsm9eL9nF8EE1E0/nQkQ==", + "dev": true, + "requires": { + "acorn-walk": "^7.0.0", + "debug": "^3.2.6", + "escope": "^3.6.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@types/node": { + "version": "18.18.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.13.tgz", + "integrity": "sha512-vXYZGRrSCreZmq1rEjMRLXJhiy8MrIeVasx+PCVlP414N7CJLHnMf+juVvjdprHyH+XRy3zKZLHeNueOpJCn0g==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/sortablejs": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.7.tgz", + "integrity": "sha512-PvgWCx1Lbgm88FdQ6S7OGvLIjWS66mudKPlfdrWil0TjsO5zmoZmzoKiiwRShs1dwPgrlkr0N4ewuy0/+QUXYQ==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==", + "dev": true + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "dev": true, + "requires": { + "object.assign": "^4.1.4", + "util": "^0.10.4" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + } + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-import-to-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-import-to-require/-/babel-plugin-import-to-require-1.0.0.tgz", + "integrity": "sha512-dc843CwrFivjO8AVgxcHvxl0cb7J7Ed8ZGFP8+PjH3X1CnyzYtAU1WL1349m9Wc/+oqk4ETx2+cIEO2jlp3XyQ==", + "dev": true, + "requires": { + "babel-template": "^6.26.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", + "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.3", + "semver": "^6.3.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", + "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.3", + "core-js-compat": "^3.33.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", + "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.3" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", + "dev": true + } + } + }, + "babelify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", + "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", + "dev": true + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + } + }, + "browser-pack-flat": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/browser-pack-flat/-/browser-pack-flat-3.5.0.tgz", + "integrity": "sha512-u3iJUjs+TC/NGIL2GLyIcn5ppoNZXhTWqSW/gQbGIGvQiXXCQQzr5VWfACFraXQn2JrDlyRnKLeOs5AWXzKI6A==", + "dev": true, + "requires": { + "JSONStream": "^1.3.2", + "combine-source-map": "^0.8.0", + "convert-source-map": "^1.5.1", + "count-lines": "^0.1.2", + "dedent": "^0.7.0", + "estree-is-member-expression": "^1.0.0", + "estree-is-require": "^1.0.0", + "esutils": "^2.0.2", + "path-parse": "^1.0.5", + "scope-analyzer": "^2.0.0", + "stream-combiner": "^0.2.2", + "through2": "^3.0.1", + "transform-ast": "^2.4.2", + "umd": "^3.0.3", + "wrap-comment": "^1.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + } + } + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dev": true, + "requires": { + "resolve": "^1.17.0" + } + }, + "browser-unpack": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.4.2.tgz", + "integrity": "sha512-uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA==", + "dev": true, + "requires": { + "acorn-node": "^1.5.2", + "concat-stream": "^1.5.0", + "minimist": "^1.1.1" + } + }, + "browserify": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", + "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.1", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^3.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.2.1", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "^1.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum-object": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^3.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.12.0", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.4", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + } + }, + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "bundle-collapser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.4.0.tgz", + "integrity": "sha512-Gd3K3+3KI1Utuk+gwAvuOVOjT/2XLGL8tU6FwDKk04LlOZkYfT0pwQllsG1Dv8RRhgcjNxZSDmmSXb0AOkwSwg==", + "dev": true, + "requires": { + "browser-pack": "^6.0.2", + "browser-unpack": "^1.1.0", + "concat-stream": "^1.5.0", + "falafel": "^2.1.0", + "minimist": "^1.1.1", + "through2": "^2.0.0" + } + }, + "cached-path-relative": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", + "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", + "dev": true + }, + "call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001564", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz", + "integrity": "sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==", + "dev": true, + "requires": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "common-shakeify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/common-shakeify/-/common-shakeify-1.1.2.tgz", + "integrity": "sha512-r2zRKPCbCx1l9BT8nVGZssZXrH9jeLl5qfHKxUwSBT7Kr9l1jSjZsItZE/jXo+GYDyO3kQfsyV7Poid475MgWQ==", + "dev": true, + "requires": { + "@goto-bus-stop/common-shake": "^2.3.0", + "convert-source-map": "^1.5.1", + "through2": "^2.0.3", + "transform-ast": "^2.4.3", + "wrap-comment": "^1.0.1" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "concurrently": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", + "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "date-fns": "^2.29.1", + "lodash": "^4.17.21", + "rxjs": "^7.0.0", + "shell-quote": "^1.7.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^17.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==", + "dev": true + }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + }, + "core-js-compat": { + "version": "3.33.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.3.tgz", + "integrity": "sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==", + "dev": true, + "requires": { + "browserslist": "^4.22.1" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "count-lines": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/count-lines/-/count-lines-0.1.2.tgz", + "integrity": "sha512-YS8P4UYXX/hrDyLU3r/A5OcCNwdNbJFJckbe8j+x2Jhxsr2J4/rYl0sDwOljLZL7Uxc4s7mRSNcQD8dSjobz+g==", + "dev": true + }, + "cp": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/cp/-/cp-0.2.0.tgz", + "integrity": "sha512-4ftCvShHjIZG/zzomHyunNpBof3sOFTTmU6s6q9DdqAL/ANqrKV3pr6Z6kVfBI4hjn59DFLImrBqn7GuuMqSZA==", + "dev": true + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + }, + "date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.21.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true + }, + "deps-sort": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + } + }, + "des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dev": true, + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "electron-to-chromium": { + "version": "1.4.593", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.593.tgz", + "integrity": "sha512-c7+Hhj87zWmdpmjDONbvNKNo24tvmD4mjal1+qqTYTrlF0/sNpAcDlU0Ki84ftA/5yj3BF2QhSGEC0Rky6larg==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esmify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/esmify/-/esmify-2.1.1.tgz", + "integrity": "sha512-GyOVgjG7sNyYB5Mbo15Ll4aGrcXZzZ3LI22rbLOjCI7L/wYelzQpBHRZkZkqbPNZ/QIRilcaHqzgNCLcEsi1lQ==", + "dev": true, + "requires": { + "@babel/core": "^7.2.2", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "babel-plugin-import-to-require": "^1.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "^1.6.2", + "duplexer2": "^0.1.4", + "through2": "^2.0.5" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", + "dev": true + }, + "estree-is-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-identifier/-/estree-is-identifier-1.0.0.tgz", + "integrity": "sha512-2BDRGrkQJV/NhCAmmE33A35WAaxq3WQaGHgQuD//7orGWfpFqj8Srkwvx0TH+20yIdOF1yMQwi8anv5ISec2AQ==", + "dev": true + }, + "estree-is-member-expression": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz", + "integrity": "sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg==", + "dev": true + }, + "estree-is-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-require/-/estree-is-require-1.0.0.tgz", + "integrity": "sha512-oWxQdSEmnUwNZsDQYiBNpVxKEhMmsJQSSxnDrwsr1MWtooCLfhgzsNGzmokdmfK0EzEIS5V4LPvqxv1Kmb1vvA==", + "dev": true, + "requires": { + "estree-is-identifier": "^1.0.0" + } + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "requires": { + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + } + } + }, + "falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "from2-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/from2-string/-/from2-string-1.1.0.tgz", + "integrity": "sha512-m8vCh+KnXXXBtfF2VUbiYlQ+nczLcntB0BrtNgpmLkHylhObe9WF1b2LZjBBzrZzA6P4mkEla6ZYQoOUTG8cYA==", + "dev": true, + "requires": { + "from2": "^2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==", + "dev": true + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==", + "dev": true, + "requires": { + "source-map": "~0.5.3" + } + }, + "insert-module-globals": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", + "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.11" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true + }, + "labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", + "integrity": "sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.1" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "minify-stream": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minify-stream/-/minify-stream-2.1.0.tgz", + "integrity": "sha512-P5xE4EQRkn7Td54VGcgfDMFx1jmKPPIXCdcMfrbXS6cNHK4dO1LXwtYFb48hHrSmZfT+jlGImvHgSZEkbpNtCw==", + "dev": true, + "requires": { + "concat-stream": "^2.0.0", + "convert-source-map": "^1.5.0", + "duplexify": "^4.1.1", + "from2-string": "^1.1.0", + "terser": "^4.7.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "module-deps": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multi-stage-sourcemap": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz", + "integrity": "sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ==", + "dev": true, + "requires": { + "source-map": "^0.1.34" + }, + "dependencies": { + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "multisplice": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/multisplice/-/multisplice-1.0.0.tgz", + "integrity": "sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA==", + "dev": true + }, + "mutexify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.4.0.tgz", + "integrity": "sha512-pbYSsOrSB/AKN5h/WzzLRMFgZhClWccf2XIB4RSMC8JbquiB0e0/SH5AIfdQMdyHmYtv4seU7yV/TvAwPLJ1Yg==", + "dev": true, + "requires": { + "queue-tick": "^1.0.0" + } + }, + "nanobench": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nanobench/-/nanobench-2.1.1.tgz", + "integrity": "sha512-z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A==", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2", + "chalk": "^1.1.3", + "mutexify": "^1.1.0", + "pretty-hrtime": "^1.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "outpipe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", + "integrity": "sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==", + "dev": true, + "requires": { + "shell-quote": "^1.4.2" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==", + "dev": true, + "requires": { + "path-platform": "~0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true + }, + "queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "dev": true + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "dev": true, + "requires": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + }, + "dependencies": { + "dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + } + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", + "dev": true, + "requires": { + "fast-safe-stringify": "^2.0.7" + } + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true + }, + "simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "sortablejs": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", + "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "dev": true + }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "dev": true, + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", + "dev": true, + "requires": { + "minimist": "^1.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dev": true, + "requires": { + "acorn-node": "^1.2.0" + } + }, + "terser": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", + "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", + "dev": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.9" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==", + "dev": true, + "requires": { + "process": "~0.11.0" + } + }, + "tinyify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tinyify/-/tinyify-4.0.0.tgz", + "integrity": "sha512-jNDxImwUrJJAU2NyGG144J8aWx2ni39UuBo7ppCXFRmhSH0CbpWL4HgjNvrsAW05WQAgNZePwAlEemNuB+byaA==", + "dev": true, + "requires": { + "@browserify/envify": "^6.0.0", + "@browserify/uglifyify": "^6.0.0", + "browser-pack-flat": "^3.0.9", + "bundle-collapser": "^1.3.0", + "common-shakeify": "^1.1.1", + "minify-stream": "^2.0.1", + "multisplice": "^1.0.0", + "terser": "3.16.1", + "through2": "^4.0.2", + "unassertify": "^3.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + } + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "transform-ast": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", + "integrity": "sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "convert-source-map": "^1.5.1", + "dash-ast": "^1.0.0", + "is-buffer": "^2.0.0", + "magic-string": "^0.23.2", + "merge-source-map": "1.0.4", + "nanobench": "^2.1.1" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + } + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "tsconfig": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz", + "integrity": "sha512-Cq65A3kVp6BbsUgg9DRHafaGmbMb9EhAc7fjWvudNWKjkbWrt43FnrtZt6awshH1R0ocfF2Z0uxock3lVqEgOg==", + "dev": true, + "requires": { + "any-promise": "^1.3.0", + "parse-json": "^2.2.0", + "strip-bom": "^2.0.0", + "strip-json-comments": "^2.0.0" + } + }, + "tsify": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/tsify/-/tsify-5.0.4.tgz", + "integrity": "sha512-XAZtQ5OMPsJFclkZ9xMZWkSNyMhMxEPsz3D2zu79yoKorH9j/DT4xCloJeXk5+cDhosEibu4bseMVjyPOAyLJA==", + "dev": true, + "requires": { + "convert-source-map": "^1.1.0", + "fs.realpath": "^1.0.0", + "object-assign": "^4.1.0", + "semver": "^6.1.0", + "through2": "^2.0.0", + "tsconfig": "^5.0.3" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true + }, + "umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "dev": true + }, + "unassert": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unassert/-/unassert-2.0.2.tgz", + "integrity": "sha512-P6OOg/aRdQmWH+b0g+T4U+9MgL+DG7w6oQPG+N3F2IMuvvd1WfZ5alT/Rjik2lMFVyhfACUxF7PGP1VCwSHlQA==", + "dev": true, + "requires": { + "estraverse": "^5.0.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "unassertify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/unassertify/-/unassertify-3.0.1.tgz", + "integrity": "sha512-461ykSPY3oWU+39J5haiq7S/hcYy1oGJ2nHU92lqdL3jft+pSU6oAbb7o6VVmM7nZGLqppszgyzfpCnRBFgFtw==", + "dev": true, + "requires": { + "acorn": "^8.0.0", + "convert-source-map": "^1.1.1", + "escodegen": "^2.0.0", + "multi-stage-sourcemap": "^0.3.1", + "through": "^2.3.7", + "unassert": "^2.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true + } + } + }, + "undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dev": true, + "requires": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, + "usng.js": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/usng.js/-/usng.js-0.4.5.tgz", + "integrity": "sha512-JTJcFFDy/JqA5iiU8DqMOV5gJiL3ZdXH0hCKYaRMDbbredhFna5Ok4C1YDFU07mTGAgm+5FzHaaOzQnO/3BzWQ==", + "dev": true + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "watchify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz", + "integrity": "sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==", + "dev": true, + "requires": { + "anymatch": "^3.1.0", + "browserify": "^17.0.0", + "chokidar": "^3.4.0", + "defined": "^1.0.0", + "outpipe": "^1.1.0", + "through2": "^4.0.2", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + } + } + }, + "which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "wrap-comment": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wrap-comment/-/wrap-comment-1.0.1.tgz", + "integrity": "sha512-APccrMwl/ont0RHFTXNAQfM647duYYEfs6cngrIyTByTI0xbWnDnPSptFZhS68L4WCjt2ZxuhCFwuY6Pe88KZQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true } } } diff --git a/client/plugins/databasemanager/package.json b/client/plugins/databasemanager/package.json index 7b6208ad..c311005d 100644 --- a/client/plugins/databasemanager/package.json +++ b/client/plugins/databasemanager/package.json @@ -4,14 +4,14 @@ "private": true, "scripts": { "build": "browserify ./src/index.ts -p [ tsify --noImplicitAny] > index.js && copy.bat", - "build-release": "browserify ./src/index.ts -p [ tsify --noImplicitAny] -p [ tinyify ] > index.js && copy.bat", + "build-release": "browserify ./src/index.ts -p [ tsify --noImplicitAny] -p [ tinyify ] > index.js && copy.bat", "start": "npm run copy & concurrently --kill-others \"npm run watch\"", "copy": "copy.bat", "watch": "watchify ./src/index.ts --debug -o ../../public/plugins/databasemanager/index.js -t [ babelify --global true --presets [ @babel/preset-env ] --extensions '.js'] -p [ tsify --noImplicitAny ]" }, "dependencies": {}, "devDependencies": { - "@babel/preset-env": "^7.21.4", + "@babel/preset-env": "^7.21.4", "@types/node": "^18.16.1", "@types/sortablejs": "^1.15.0", "babelify": "^10.0.0", diff --git a/client/public/databases/units/groundunitdatabase.json b/client/public/databases/units/groundunitdatabase.json index 73a07df4..868bb76b 100644 --- a/client/public/databases/units/groundunitdatabase.json +++ b/client/public/databases/units/groundunitdatabase.json @@ -7225,7 +7225,7 @@ "name": "Infantry AK Ins", "coalition": "red", "era": "Early Cold War", - "label": "AK-74", + "label": "Insurgent AK-74", "shortLabel": "AK-74 (Ins)", "type": "Infantry", "enabled": true, diff --git a/client/public/stylesheets/markers/units.css b/client/public/stylesheets/markers/units.css index 7038f26f..35143799 100644 --- a/client/public/stylesheets/markers/units.css +++ b/client/public/stylesheets/markers/units.css @@ -329,6 +329,19 @@ background-image: url("/resources/theme/images/states/awacs.svg"); } +[data-object|="unit"][data-state="miss-on-purpose"] .unit-state { + background-image: url("/resources/theme/images/states/miss-on-purpose.svg"); +} + +[data-object|="unit"][data-state="scenic-aaa"] .unit-state { + background-image: url("/resources/theme/images/states/scenic-aaa.svg"); +} + +[data-object|="unit"][data-state="simulate-fire-fight"] .unit-state { + background-image: url("/resources/theme/images/states/simulate-fire-fight.svg"); +} + + [data-object|="unit"] .unit-health::before { background-image: url("/resources/theme/images/icons/health.svg"); background-repeat: no-repeat; diff --git a/client/public/themes/olympus/images/states/miss-on-purpose.svg b/client/public/themes/olympus/images/states/miss-on-purpose.svg new file mode 100644 index 00000000..1fe1c274 --- /dev/null +++ b/client/public/themes/olympus/images/states/miss-on-purpose.svg @@ -0,0 +1,53 @@ + + diff --git a/client/public/themes/olympus/images/states/scenic-aaa.svg b/client/public/themes/olympus/images/states/scenic-aaa.svg new file mode 100644 index 00000000..53fbbfa4 --- /dev/null +++ b/client/public/themes/olympus/images/states/scenic-aaa.svg @@ -0,0 +1,77 @@ + + diff --git a/client/public/themes/olympus/images/states/simulate-fire-fight.svg b/client/public/themes/olympus/images/states/simulate-fire-fight.svg new file mode 100644 index 00000000..113730be --- /dev/null +++ b/client/public/themes/olympus/images/states/simulate-fire-fight.svg @@ -0,0 +1,45 @@ + + diff --git a/client/src/controls/dropdown.ts b/client/src/controls/dropdown.ts index a1b71a5c..04a19bc8 100644 --- a/client/src/controls/dropdown.ts +++ b/client/src/controls/dropdown.ts @@ -5,9 +5,10 @@ export class Dropdown { #callback: CallableFunction; #defaultValue: string; #optionsList: string[] = []; + #labelsList: string[] | undefined = []; #index: number = 0; #hidden: boolean = false; - #text!:HTMLElement; + #text!: HTMLElement; constructor(ID: string | null, callback: CallableFunction, options: string[] | null = null, defaultText?: string) { if (ID === null) @@ -18,7 +19,7 @@ export class Dropdown { this.#options = this.#container.querySelector(".ol-select-options") as HTMLElement; const text = this.#container.querySelector(".ol-select-value-text"); - this.#value = ( text instanceof HTMLElement ) ? text : this.#container.querySelector(".ol-select-value") as HTMLElement; + this.#value = (text instanceof HTMLElement) ? text : this.#container.querySelector(".ol-select-value") as HTMLElement; this.#defaultValue = this.#value.innerText; this.#callback = callback; @@ -40,48 +41,37 @@ export class Dropdown { return this.#container; } - setOptions(optionsList: string[], sort: "" | "string" | "number" | "string+number" = "string") { - if (sort === "number") { - this.#optionsList = optionsList.sort((optionA: string, optionB: string) => { - const a = parseInt(optionA); - const b = parseInt(optionB); - if (a > b) - return 1; - else - return (b > a) ? -1 : 0; - }); - } else if (sort === "string+number") { - this.#optionsList = optionsList.sort((optionA: string, optionB: string) => { - var regex = /\d+/g; - var matchesA = optionA.match(regex); - var matchesB = optionB.match(regex); - if ((matchesA != null && matchesA?.length > 0) && (matchesB != null && matchesB?.length > 0) && optionA[0] == optionB[0]) { - const a = parseInt(matchesA[0] ?? 0); - const b = parseInt(matchesB[0] ?? 0); - if (a > b) - return 1; - else - return (b > a) ? -1 : 0; - } else { - if (optionA > optionB) - return 1; - else - return (optionB > optionA) ? -1 : 0; - } - - }); - } else if (sort === "string") { - this.#optionsList = optionsList.sort(); - } + /** Set the dropdown options strings + * + * @param optionsList List of options. These are the keys that will always be returned on selection + * @param sort Sort method. "string" performs js default sort. "number" sorts purely by numeric value. + * "string+number" sorts by string, unless two elements are lexicographically identical up to a numeric value (e.g. "SA-2" and "SA-3"), in which case it sorts by number. + * @param labelsList (Optional) List of labels to be shown instead of the keys directly. If provided, the options will be sorted by label. + */ + setOptions(optionsList: string[], sort: "" | "string" | "number" | "string+number" = "string", labelsList: string[] | undefined = undefined) { + /* If labels are provided, sort by labels, else by options */ + if (labelsList && labelsList.length == optionsList.length) + this.#sortByLabels(optionsList, sort, labelsList); + else + this.#sortByOptions(optionsList, sort); + /* If no options are provided, return */ if (this.#optionsList.length == 0) { optionsList = ["No options available"] this.#value.innerText = "No options available"; + return; } - this.#options.replaceChildren(...optionsList.map((option: string, idx: number) => { + + /* Create the buttons containing the options or the labels */ + this.#options.replaceChildren(...this.#optionsList.map((option: string, idx: number) => { var div = document.createElement("div"); var button = document.createElement("button"); - button.textContent = option; + + /* If the labels are provided use them for the options */ + if (this.#labelsList && this.#labelsList.length === optionsList.length) + button.textContent = this.#labelsList[idx]; + else + button.textContent = option; div.appendChild(button); if (option === this.#defaultValue) @@ -95,8 +85,21 @@ export class Dropdown { })); } + getOptionsList() { + return this.#optionsList; + } + + getLabelsList() { + return this.#labelsList; + } + + /** Manually set the HTMLElements of the dropdown values. Handling of the selection must be performed externally. + * + * @param optionsElements List of elements to be added to the dropdown + */ setOptionsElements(optionsElements: HTMLElement[]) { this.#optionsList = []; + this.#labelsList = []; this.#options.replaceChildren(...optionsElements); } @@ -108,19 +111,22 @@ export class Dropdown { this.#options.appendChild(optionElement); } - selectText(text: string) { - const index = [].slice.call(this.#options.children).findIndex((opt: Element) => opt.querySelector("button")?.innerText === text); - if (index > -1) { - this.selectValue(index); - } - } - + /** Select the active value of the dropdown + * + * @param idx The index of the element to select + * @returns True if the index is valid, false otherwise + */ selectValue(idx: number) { if (idx < this.#optionsList.length) { var option = this.#optionsList[idx]; var el = document.createElement("div"); el.classList.add("ol-ellipsed"); - el.innerText = option; + + if (this.#labelsList && this.#labelsList.length == this.#optionsList.length) + el.innerText = this.#labelsList[idx]; + else + el.innerText = option; + this.#value.replaceChildren(); this.#value.appendChild(el); this.#index = idx; @@ -137,16 +143,24 @@ export class Dropdown { this.#value.innerText = this.#defaultValue; } - getValue() { - return this.#value.innerText; - } - + /** Manually set the selected value of the dropdown + * + * @param value The value to select. Must be one of the valid options + */ setValue(value: string) { var index = this.#optionsList.findIndex((option) => { return option === value }); if (index > -1) this.selectValue(index); } + getValue() { + return this.#value.innerText; + } + + /** Force the selected value of the dropdown. + * + * @param value Any string. Will be shown as selected value even if not one of the options. + */ forceValue(value: string) { var el = document.createElement("div"); el.classList.add("ol-ellipsed"); @@ -209,4 +223,110 @@ export class Dropdown { div.append(value, options); return div; } + + /** Sort the elements by their option keys + * + * @param optionsList The unsorted list of options + * @param sort The sorting method + */ + #sortByOptions(optionsList: string[], sort: string) { + if (sort === "number") { + this.#optionsList = JSON.parse(JSON.stringify(this.#numberSort(optionsList))); + } else if (sort === "string+number") { + this.#optionsList = JSON.parse(JSON.stringify(this.#stringNumberSort(optionsList))); + } else if (sort === "string") { + this.#optionsList = JSON.parse(JSON.stringify(this.#stringSort(optionsList))); + } + } + + /** Sort the elements by their labels + * + * @param optionsList The unsorted list of options + * @param sort The sorting method + * @param labelsList The unsorted list of labels. The elements will be sorted according to these values + */ + #sortByLabels(optionsList: string[], sort: string, labelsList: string[]) { + /* Create a temporary deepcopied list. This is necessary because unlike options, labels can be repeated. + Once matched, labels are removed from the temporary array to avoid repeating the same key multiple times */ + var tempLabelsList: (string | undefined)[] = JSON.parse(JSON.stringify(labelsList)); + + if (sort === "number") { + this.#labelsList = JSON.parse(JSON.stringify(this.#numberSort(labelsList))); + } else if (sort === "string+number") { + this.#labelsList = JSON.parse(JSON.stringify(this.#stringNumberSort(labelsList))); + } else if (sort === "string") { + this.#labelsList = JSON.parse(JSON.stringify(this.#stringSort(labelsList))); + } + + /* Remap the options list to match their labels */ + this.#optionsList = optionsList?.map((option: string, idx: number) => { + let originalIdx = tempLabelsList.indexOf(this.#labelsList? this.#labelsList[idx]: ""); + /* After a match has been completed, set the label to undefined so it won't be matched again. This allows to have repeated labels */ + tempLabelsList[originalIdx] = undefined; + return optionsList[originalIdx]; + }) + } + + /** Sort elements by number. All elements must be parsable as numbers. + * + * @param elements List of strings + * @returns Sorted list + */ + #numberSort(elements: string[]) { + return elements.sort((elementA: string, elementB: string) => { + const a = parseFloat(elementA); + const b = parseFloat(elementB); + if (a > b) + return 1; + else + return (b > a) ? -1 : 0; + }); + } + + /** Sort elements by string, unless two elements are lexicographically identical up to a numeric value (e.g. "SA-2" and "SA-3"), in which case sort by number + * + * @param elements List of strings + * @returns Sorted list + */ + #stringNumberSort(elements: string[]) { + return elements.sort((elementA: string, elementB: string) => { + /* Check if there is a number in both strings */ + var regex = /\d+/g; + var matchesA = elementA.match(regex); + var matchesB = elementB.match(regex); + + /* Get the position of the number in the string */ + var indexA = -1; + var indexB = -1; + if (matchesA != null && matchesA?.length > 0) + indexA = elementA.search(matchesA[0]); + + if (matchesB != null && matchesB?.length > 0) + indexB = elementB.search(matchesB[0]); + + /* If the two strings are the same up to the number, sort them using the number value, else sort them according to the string */ + if ((matchesA != null && matchesA?.length > 0) && (matchesB != null && matchesB?.length > 0) && elementA.substring(0, indexA) === elementB.substring(0, indexB)) { + const a = parseInt(matchesA[0] ?? 0); + const b = parseInt(matchesB[0] ?? 0); + if (a > b) + return 1; + else + return (b > a) ? -1 : 0; + } else { + if (elementA > elementB) + return 1; + else + return (elementB > elementA) ? -1 : 0; + } + }); + } + + /** Sort by string. Just a wrapper for consistency. + * + * @param elements List of strings + * @returns Sorted list + */ + #stringSort(elements: string[]) { + return elements.sort(); + } } \ No newline at end of file diff --git a/client/src/controls/unitspawnmenu.ts b/client/src/controls/unitspawnmenu.ts index f8df0863..5fd5b57d 100644 --- a/client/src/controls/unitspawnmenu.ts +++ b/client/src/controls/unitspawnmenu.ts @@ -10,7 +10,7 @@ import { aircraftDatabase } from "../unit/databases/aircraftdatabase"; import { helicopterDatabase } from "../unit/databases/helicopterdatabase"; import { groundUnitDatabase } from "../unit/databases/groundunitdatabase"; import { navyUnitDatabase } from "../unit/databases/navyunitdatabase"; -import { UnitSpawnOptions, UnitSpawnTable } from "../interfaces"; +import { UnitBlueprint, UnitSpawnOptions, UnitSpawnTable } from "../interfaces"; export class UnitSpawnMenu { protected showRangeCircles: boolean = false; @@ -61,7 +61,7 @@ export class UnitSpawnMenu { /* Create the dropdowns and the altitude slider */ this.#unitRoleTypeDropdown = new Dropdown(null, (roleType: string) => this.#setUnitRoleType(roleType), undefined, "Unit type"); - this.#unitLabelDropdown = new Dropdown(null, (label: string) => this.#setUnitLabel(label), undefined, "Unit label"); + this.#unitLabelDropdown = new Dropdown(null, (name: string) => this.#setUnitName(name), undefined, "Unit label"); this.#unitLoadoutDropdown = new Dropdown(null, (loadout: string) => this.#setUnitLoadout(loadout), undefined, "Unit loadout"); this.#unitCountDropdown = new Dropdown(null, (count: string) => this.#setUnitCount(count), undefined, "Unit count"); this.#unitCountryDropdown = new Dropdown(null, () => { /* Custom button implementation */ }, undefined, "Unit country"); @@ -153,16 +153,28 @@ export class UnitSpawnMenu { this.#unitImageEl.classList.toggle("hide", true); this.#unitLiveryDropdown.reset(); + var blueprints: UnitBlueprint[] = []; if (this.#orderByRole) - this.#unitLabelDropdown.setOptions(this.#unitDatabase.getByRole(this.spawnOptions.roleType).map((blueprint) => { return blueprint.label }), "string+number"); + blueprints = this.#unitDatabase.getByRole(this.spawnOptions.roleType); else - this.#unitLabelDropdown.setOptions(this.#unitDatabase.getByType(this.spawnOptions.roleType).map((blueprint) => { return blueprint.label }), "string+number"); + blueprints = this.#unitDatabase.getByType(this.spawnOptions.roleType); + + /* Presort the elements by name in case any have equal labels */ + blueprints = blueprints.sort((blueprintA: UnitBlueprint, blueprintB: UnitBlueprint) => { + if (blueprintA.name > blueprintA.name) + return 1; + else + return (blueprintB.name > blueprintA.name) ? -1 : 0; + }); + + this.#unitLabelDropdown.setOptions(blueprints.map((blueprint) => { return blueprint.name }), "string+number", blueprints.map((blueprint) => { return blueprint.label })); /* Add the tags to the options */ var elements: HTMLElement[] = []; for (let idx = 0; idx < this.#unitLabelDropdown.getOptionElements().length; idx++) { + let name = this.#unitLabelDropdown.getOptionsList()[idx]; let element = this.#unitLabelDropdown.getOptionElements()[idx] as HTMLElement; - let entry = this.#unitDatabase.getByLabel(element.textContent ?? ""); + let entry = this.#unitDatabase.getByName(name); if (entry) { element.querySelectorAll("button")[0]?.append(...(entry.tags?.split(",").map((tag: string) => { tag = tag.trim(); @@ -418,8 +430,7 @@ export class UnitSpawnMenu { this.#container.dispatchEvent(new Event("unitRoleTypeChanged")); } - #setUnitLabel(label: string) { - var name = this.#unitDatabase.getByLabel(label)?.name || null; + #setUnitName(name: string) { if (name != null) this.spawnOptions.name = name; this.#container.dispatchEvent(new Event("unitLabelChanged")); From 124b909aa4eeed1569208f07d74e4a427d15ed42 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Fri, 24 Nov 2023 19:43:24 +0100 Subject: [PATCH 40/41] v0.4.8 --- client/bin/www | 2 +- client/package-lock.json | 4 ++-- client/package.json | 2 +- client/views/other/dialogs.ejs | 2 +- client/views/toolbars/primary.ejs | 2 +- installer/olympus.iss | 2 +- mod/entry.lua | 2 +- scripts/OlympusCommand.lua | 2 +- scripts/OlympusHook.lua | 2 +- src/shared/include/defines.h | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/client/bin/www b/client/bin/www index 3cd2f8c1..d6b5b056 100644 --- a/client/bin/www +++ b/client/bin/www @@ -112,5 +112,5 @@ function onListening() { debug('Listening on ' + bind); } -console.log("DCS Olympus server v0.4.7 started correctly!") +console.log("DCS Olympus server v0.4.8 started correctly!") console.log("Waiting for connections...") diff --git a/client/package-lock.json b/client/package-lock.json index feb55304..44be542b 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,12 +1,12 @@ { "name": "DCSOlympus", - "version": "v0.4.7-alpha", + "version": "v0.4.8-alpha", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "DCSOlympus", - "version": "v0.4.7-alpha", + "version": "v0.4.8-alpha", "dependencies": { "@turf/turf": "^6.5.0", "body-parser": "^1.20.2", diff --git a/client/package.json b/client/package.json index d5f6265f..1a4f62fb 100644 --- a/client/package.json +++ b/client/package.json @@ -2,7 +2,7 @@ "name": "DCSOlympus", "node-main": "./bin/www", "main": "http://localhost:3000", - "version": "v0.4.7-alpha", + "version": "v0.4.8-alpha", "private": true, "scripts": { "build": "browserify .\\src\\index.ts --debug -o .\\public\\javascripts\\bundle.js -t [ babelify --global true --presets [ @babel/preset-env ] --extensions '.js'] -p [ tsify --noImplicitAny ] && copy.bat", diff --git a/client/views/other/dialogs.ejs b/client/views/other/dialogs.ejs index a981d324..994616a9 100644 --- a/client/views/other/dialogs.ejs +++ b/client/views/other/dialogs.ejs @@ -3,7 +3,7 @@

DCS Olympus

Dynamic Unit Command

-
Version v0.4.7-alpha
+
Version v0.4.8-alpha
diff --git a/client/views/toolbars/primary.ejs b/client/views/toolbars/primary.ejs index a75fcefb..f9da3347 100644 --- a/client/views/toolbars/primary.ejs +++ b/client/views/toolbars/primary.ejs @@ -6,7 +6,7 @@

DCS Olympus

-
version v0.4.7-alpha
+
version v0.4.8-alpha
Discord diff --git a/installer/olympus.iss b/installer/olympus.iss index 9b23d707..162dd20e 100644 --- a/installer/olympus.iss +++ b/installer/olympus.iss @@ -1,6 +1,6 @@ #define nwjsFolder "..\..\nwjs\" #define nodejsFolder "..\..\node\" -#define version "v0.4.7-alpha" +#define version "v0.4.8-alpha" [Setup] AppName=DCS Olympus diff --git a/mod/entry.lua b/mod/entry.lua index 2a0ecb73..5a3367d1 100644 --- a/mod/entry.lua +++ b/mod/entry.lua @@ -15,7 +15,7 @@ declare_plugin(self_ID, shortName = "Olympus", fileMenuName = "Olympus", - version = "v0.4.7-alpha", + version = "v0.4.8-alpha", state = "installed", developerName= "DCS Refugees 767 squadron", info = _("DCS Olympus is a mod for DCS World. It allows users to spawn, control, task, group, and remove units from a DCS World server using a real-time map interface, similarly to Real Time Strategy games. The user interface also provides useful informations units, like loadouts, fuel, tasking, and so on. In the future, more features for DCS World GCI and JTAC will be available."), diff --git a/scripts/OlympusCommand.lua b/scripts/OlympusCommand.lua index 291b139b..9c07f5ee 100644 --- a/scripts/OlympusCommand.lua +++ b/scripts/OlympusCommand.lua @@ -1,4 +1,4 @@ -local version = "v0.4.7-alpha" +local version = "v0.4.8-alpha" local debug = false -- True enables debug printing using DCS messages diff --git a/scripts/OlympusHook.lua b/scripts/OlympusHook.lua index 261023eb..35e20fd7 100644 --- a/scripts/OlympusHook.lua +++ b/scripts/OlympusHook.lua @@ -1,4 +1,4 @@ -local version = 'v0.4.7-alpha' +local version = 'v0.4.8-alpha' Olympus = {} Olympus.OlympusDLL = nil diff --git a/src/shared/include/defines.h b/src/shared/include/defines.h index 1506bfd2..70e12cd7 100644 --- a/src/shared/include/defines.h +++ b/src/shared/include/defines.h @@ -1,6 +1,6 @@ #pragma once -#define VERSION "v0.4.7-alpha" +#define VERSION "v0.4.8-alpha" #define LOG_NAME "Olympus_log.txt" #define REST_ADDRESS "http://localhost:30000" #define REST_URI "olympus" From a879761dc2ac339469e44132ed42926eab94b4c7 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Fri, 24 Nov 2023 21:38:55 +0100 Subject: [PATCH 41/41] Installation fixes --- client/@types/olympus/index.d.ts | 38 +- client/package.json | 2 +- client/plugins/controltips/package-lock.json | 4625 +++++++++++------ client/plugins/controltips/package.json | 2 +- client/plugins/databasemanager/index.js | 1106 +--- .../plugins/databasemanager/package-lock.json | 4624 ++++++++++------ client/plugins/databasemanager/package.json | 2 +- installer/olympus.iss | 10 +- scripts/python/configurator/configurator.spec | 9 +- 9 files changed, 6029 insertions(+), 4389 deletions(-) diff --git a/client/@types/olympus/index.d.ts b/client/@types/olympus/index.d.ts index 4c1626d2..b41b21a3 100644 --- a/client/@types/olympus/index.d.ts +++ b/client/@types/olympus/index.d.ts @@ -150,6 +150,10 @@ declare module "constants/constants" { bounds: LatLngBounds; zoom: number; }; + Falklands: { + bounds: LatLngBounds; + zoom: number; + }; }; export const mapLayers: { "ArcGIS Satellite": { @@ -265,6 +269,9 @@ declare module "constants/constants" { export const DELETE_CYCLE_TIME = 0.05; export const DELETE_SLOW_THRESHOLD = 50; export const GROUPING_ZOOM_TRANSITION = 13; + export const MAX_SHOTS_SCATTER = 3; + export const MAX_SHOTS_INTENSITY = 3; + export const SHOTS_SCATTER_DEGREES = 10; } declare module "map/markers/custommarker" { import { Map, Marker } from "leaflet"; @@ -315,15 +322,40 @@ declare module "controls/dropdown" { #private; constructor(ID: string | null, callback: CallableFunction, options?: string[] | null, defaultText?: string); getContainer(): HTMLElement; - setOptions(optionsList: string[], sort?: "" | "string" | "number" | "string+number"): void; + /** Set the dropdown options strings + * + * @param optionsList List of options. These are the keys that will always be returned on selection + * @param sort Sort method. "string" performs js default sort. "number" sorts purely by numeric value. + * "string+number" sorts by string, unless two elements are lexicographically identical up to a numeric value (e.g. "SA-2" and "SA-3"), in which case it sorts by number. + * @param labelsList (Optional) List of labels to be shown instead of the keys directly. If provided, the options will be sorted by label. + */ + setOptions(optionsList: string[], sort?: "" | "string" | "number" | "string+number", labelsList?: string[] | undefined): void; + getOptionsList(): string[]; + getLabelsList(): string[] | undefined; + /** Manually set the HTMLElements of the dropdown values. Handling of the selection must be performed externally. + * + * @param optionsElements List of elements to be added to the dropdown + */ setOptionsElements(optionsElements: HTMLElement[]): void; getOptionElements(): HTMLCollection; addOptionElement(optionElement: HTMLElement): void; - selectText(text: string): void; + /** Select the active value of the dropdown + * + * @param idx The index of the element to select + * @returns True if the index is valid, false otherwise + */ selectValue(idx: number): boolean; reset(): void; - getValue(): string; + /** Manually set the selected value of the dropdown + * + * @param value The value to select. Must be one of the valid options + */ setValue(value: string): void; + getValue(): string; + /** Force the selected value of the dropdown. + * + * @param value Any string. Will be shown as selected value even if not one of the options. + */ forceValue(value: string): void; getIndex(): number; clip(): void; diff --git a/client/package.json b/client/package.json index 1a4f62fb..e7727c1f 100644 --- a/client/package.json +++ b/client/package.json @@ -6,7 +6,7 @@ "private": true, "scripts": { "build": "browserify .\\src\\index.ts --debug -o .\\public\\javascripts\\bundle.js -t [ babelify --global true --presets [ @babel/preset-env ] --extensions '.js'] -p [ tsify --noImplicitAny ] && copy.bat", - "build-release": "browserify .\\src\\index.ts -o .\\public\\javascripts\\bundle.js -t [ babelify --global true --presets [ @babel/preset-env ] --extensions '.js'] -p [ tsify --noImplicitAny ] -p [ tinyify ] && copy.bat", + "build-release": "browserify .\\src\\index.ts -o .\\public\\javascripts\\bundle.js -t [ babelify --global true --presets [ @babel/preset-env ] --extensions '.js'] -p [ tsify --noImplicitAny ] && copy.bat", "emit-declarations": "tsc --project tsconfig.json --declaration --emitDeclarationOnly --outfile ./@types/olympus/index.d.ts", "copy": "copy.bat", "start": "node ./bin/www", diff --git a/client/plugins/controltips/package-lock.json b/client/plugins/controltips/package-lock.json index 4efdafda..967172cf 100644 --- a/client/plugins/controltips/package-lock.json +++ b/client/plugins/controltips/package-lock.json @@ -1,72 +1,111 @@ { "name": "ControlTipsPlugin", "version": "v0.0.1", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@ampproject/remapping": { + "packages": { + "": { + "name": "ControlTipsPlugin", + "version": "v0.0.1", + "devDependencies": { + "@babel/preset-env": "^7.21.4", + "@types/node": "^18.16.1", + "@types/sortablejs": "^1.15.0", + "babelify": "^10.0.0", + "browserify": "^17.0.0", + "concurrently": "^7.6.0", + "cp": "^0.2.0", + "esmify": "^2.1.1", + "nodemon": "^2.0.20", + "requirejs": "^2.3.6", + "sortablejs": "^1.15.0", + "tinyify": "^4.0.0", + "tsify": "^5.0.4", + "tslib": "latest", + "typescript": "^4.9.4", + "usng.js": "^0.4.5", + "watchify": "^4.0.0" + } + }, + "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/code-frame": { + "node_modules/@babel/code-frame": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz", "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==", "dev": true, - "requires": { + "dependencies": { "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "engines": { + "node": ">=6.9.0" } }, - "@babel/compat-data": { + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/core": { + "node_modules/@babel/core": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", "dev": true, - "requires": { + "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", "@babel/generator": "^7.23.3", @@ -83,87 +122,116 @@ "json5": "^2.2.3", "semver": "^6.3.1" }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/generator": { + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/generator": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.4.tgz", "integrity": "sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.23.4", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, - "dependencies": { - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - } + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-annotate-as-pure": { + "node_modules/@babel/generator/node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-compilation-targets": { + "node_modules/@babel/helper-compilation-targets": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-create-class-features-plugin": { + "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", @@ -173,533 +241,771 @@ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-create-regexp-features-plugin": { + "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-define-polyfill-provider": { + "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2" }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/helper-environment-visitor": { + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-function-name": { + "node_modules/@babel/helper-function-name": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, - "requires": { + "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-hoist-variables": { + "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-member-expression-to-functions": { + "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-imports": { + "node_modules/@babel/helper-module-imports": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-transforms": { + "node_modules/@babel/helper-module-transforms": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-optimise-call-expression": { + "node_modules/@babel/helper-optimise-call-expression": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-plugin-utils": { + "node_modules/@babel/helper-plugin-utils": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-remap-async-to-generator": { + "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-replace-supers": { + "node_modules/@babel/helper-replace-supers": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-simple-access": { + "node_modules/@babel/helper-simple-access": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-skip-transparent-expression-wrappers": { + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-split-export-declaration": { + "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-string-parser": { + "node_modules/@babel/helper-string-parser": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-identifier": { + "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-option": { + "node_modules/@babel/helper-validator-option": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-wrap-function": { + "node_modules/@babel/helper-wrap-function": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.15", "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helpers": { + "node_modules/@babel/helpers": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.4.tgz", "integrity": "sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==", "dev": true, - "requires": { + "dependencies": { "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.4", "@babel/types": "^7.23.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/highlight": { + "node_modules/@babel/highlight": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "engines": { + "node": ">=6.9.0" } }, - "@babel/parser": { + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz", "integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==", - "dev": true + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-proposal-private-property-in-object": { + "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "@babel/plugin-syntax-async-generators": { + "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-properties": { + "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-static-block": { + "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-dynamic-import": { + "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-export-namespace-from": { + "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-import-assertions": { + "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-import-attributes": { + "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-import-meta": { + "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-json-strings": { + "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-numeric-separator": { + "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-object-rest-spread": { + "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-catch-binding": { + "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-chaining": { + "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-private-property-in-object": { + "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-top-level-await": { + "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-unicode-sets-regex": { + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-arrow-functions": { + "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-async-generator-functions": { + "node_modules/@babel/plugin-transform-async-generator-functions": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-async-to-generator": { + "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoped-functions": { + "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoping": { + "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-class-properties": { + "node_modules/@babel/plugin-transform-class-properties": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-class-static-block": { + "node_modules/@babel/plugin-transform-class-static-block": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "@babel/plugin-transform-classes": { + "node_modules/@babel/plugin-transform-classes": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz", "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-environment-visitor": "^7.22.20", @@ -709,410 +1015,656 @@ "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-computed-properties": { + "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-destructuring": { + "node_modules/@babel/plugin-transform-destructuring": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-dotall-regex": { + "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-duplicate-keys": { + "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-dynamic-import": { + "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-exponentiation-operator": { + "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-export-namespace-from": { + "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-for-of": { + "node_modules/@babel/plugin-transform-for-of": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-function-name": { + "node_modules/@babel/plugin-transform-function-name": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-function-name": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-json-strings": { + "node_modules/@babel/plugin-transform-json-strings": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-literals": { + "node_modules/@babel/plugin-transform-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-logical-assignment-operators": { + "node_modules/@babel/plugin-transform-logical-assignment-operators": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-member-expression-literals": { + "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-amd": { + "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-commonjs": { + "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-systemjs": { + "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-umd": { + "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-new-target": { + "node_modules/@babel/plugin-transform-new-target": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-nullish-coalescing-operator": { + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-numeric-separator": { + "node_modules/@babel/plugin-transform-numeric-separator": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-object-rest-spread": { + "node_modules/@babel/plugin-transform-object-rest-spread": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-object-super": { + "node_modules/@babel/plugin-transform-object-super": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-optional-catch-binding": { + "node_modules/@babel/plugin-transform-optional-catch-binding": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-optional-chaining": { + "node_modules/@babel/plugin-transform-optional-chaining": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-parameters": { + "node_modules/@babel/plugin-transform-parameters": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-private-methods": { + "node_modules/@babel/plugin-transform-private-methods": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-private-property-in-object": { + "node_modules/@babel/plugin-transform-private-property-in-object": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-property-literals": { + "node_modules/@babel/plugin-transform-property-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-regenerator": { + "node_modules/@babel/plugin-transform-regenerator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-reserved-words": { + "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-shorthand-properties": { + "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-spread": { + "node_modules/@babel/plugin-transform-spread": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-sticky-regex": { + "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-template-literals": { + "node_modules/@babel/plugin-transform-template-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-typeof-symbol": { + "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-escapes": { + "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-property-regex": { + "node_modules/@babel/plugin-transform-unicode-property-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-regex": { + "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-sets-regex": { + "node_modules/@babel/plugin-transform-unicode-sets-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/preset-env": { + "node_modules/@babel/preset-env": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz", "integrity": "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", @@ -1193,51 +1745,66 @@ "babel-plugin-polyfill-regenerator": "^0.5.3", "core-js-compat": "^3.31.0", "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-modules": { + "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "@babel/regjsgen": { + "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", "dev": true }, - "@babel/runtime": { + "node_modules/@babel/runtime": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.4.tgz", "integrity": "sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==", "dev": true, - "requires": { + "dependencies": { "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/template": { + "node_modules/@babel/template": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/traverse": { + "node_modules/@babel/traverse": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.4.tgz", "integrity": "sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.23.4", "@babel/generator": "^7.23.4", "@babel/helper-environment-visitor": "^7.22.20", @@ -1249,420 +1816,476 @@ "debug": "^4.1.0", "globals": "^11.1.0" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/types": { + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/types": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz", "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@browserify/envify": { + "node_modules/@browserify/envify": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@browserify/envify/-/envify-6.0.0.tgz", "integrity": "sha512-ovxHR0KTsRCyMNwD7MGV0+VCU1sT6Ds+itC4DaQHM41eUId+w5Jd0qlhLVoDkkIVBnkY3BAAM8yb2QfpBlHkPw==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^2.0.1", "dash-ast": "^2.0.1", "multisplice": "^1.0.0", "through2": "^4.0.2" }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } + "bin": { + "envify": "bin/envify" } }, - "@browserify/uglifyify": { + "node_modules/@browserify/envify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@browserify/envify/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/@browserify/uglifyify": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@browserify/uglifyify/-/uglifyify-6.0.0.tgz", "integrity": "sha512-48M2a3novsgKhUSo/B3ja10awc7unliK1HfW6aYBJdLFQj3wXDx9BBJVfj6MVYERSQVEVjNHQQ7IK89h4MpCLw==", "dev": true, - "requires": { + "dependencies": { "convert-source-map": "^1.9.0", "minimatch": "^3.0.2", "terser": "^5.15.1", "through2": "^4.0.2", "xtend": "^4.0.1" - }, - "dependencies": { - "acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "terser": { - "version": "5.24.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", - "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } } }, - "@goto-bus-stop/common-shake": { + "node_modules/@browserify/uglifyify/node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@browserify/uglifyify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@browserify/uglifyify/node_modules/terser": { + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@browserify/uglifyify/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/@goto-bus-stop/common-shake": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@goto-bus-stop/common-shake/-/common-shake-2.4.0.tgz", "integrity": "sha512-LO+7v+UbxE3IyAS4Suf/KYB7Zq9DEIHibwDe6Wph4apNEfDyyxP7BSxzRS/Qa9lUH5gsm9eL9nF8EE1E0/nQkQ==", "dev": true, - "requires": { + "dependencies": { "acorn-walk": "^7.0.0", "debug": "^3.2.6", "escope": "^3.6.0" } }, - "@jridgewell/gen-mapping": { + "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@jridgewell/resolve-uri": { + "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0.0" + } }, - "@jridgewell/set-array": { + "node_modules/@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0.0" + } }, - "@jridgewell/source-map": { + "node_modules/@jridgewell/source-map": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, - "@jridgewell/sourcemap-codec": { + "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, - "@jridgewell/trace-mapping": { + "node_modules/@jridgewell/trace-mapping": { "version": "0.3.20", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "@types/node": { + "node_modules/@types/node": { "version": "18.18.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.11.tgz", "integrity": "sha512-c1vku6qnTeujJneYH94/4aq73XrVcsJe35UPyAsSok1ijiKrkRzK+AxQPSpNMUnC03roWBBwJx/9I8V7lQoxmA==", "dev": true, - "requires": { + "dependencies": { "undici-types": "~5.26.4" } }, - "@types/sortablejs": { + "node_modules/@types/sortablejs": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.6.tgz", "integrity": "sha512-/G23qmK63iBjke89C1KvyFGMC7sooH4OKPuhOhLZUttZJ49dw7y7oimqICFe2PHCdQ4Cfb9tsF/Xy8kYr1/nIg==", "dev": true }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { + "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "acorn": { + "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "acorn-node": { + "node_modules/acorn-node": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-2.0.1.tgz", "integrity": "sha512-VLR5sHqjk+8c5hrKeP2fWaIHb8eewsoxnZ8r2qpwRHXMHuC7KyOPflnOx9dLssVQUurzJ7rO0OzIFjHcndafWw==", "dev": true, - "requires": { + "dependencies": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", "xtend": "^4.0.2" } }, - "acorn-walk": { + "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, - "amdefine": { + "node_modules/amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.2" + } }, - "ansi-regex": { + "node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "ansi-styles": { + "node_modules/ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "any-promise": { + "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, - "anymatch": { + "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "requires": { + "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "array-from": { + "node_modules/array-from": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==", "dev": true }, - "asn1.js": { + "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "assert": { + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/assert": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", "dev": true, - "requires": { + "dependencies": { "object.assign": "^4.1.4", "util": "^0.10.4" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - } } }, - "available-typed-arrays": { + "node_modules/assert/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "babel-code-frame": { + "node_modules/babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", "dev": true, - "requires": { + "dependencies": { "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" - }, - "dependencies": { - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", - "dev": true - } } }, - "babel-messages": { + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "node_modules/babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", "dev": true, - "requires": { + "dependencies": { "babel-runtime": "^6.22.0" } }, - "babel-plugin-import-to-require": { + "node_modules/babel-plugin-import-to-require": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-import-to-require/-/babel-plugin-import-to-require-1.0.0.tgz", "integrity": "sha512-dc843CwrFivjO8AVgxcHvxl0cb7J7Ed8ZGFP8+PjH3X1CnyzYtAU1WL1349m9Wc/+oqk4ETx2+cIEO2jlp3XyQ==", "dev": true, - "requires": { + "dependencies": { "babel-template": "^6.26.0" } }, - "babel-plugin-polyfill-corejs2": { + "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.4.3", "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "babel-plugin-polyfill-corejs3": { + "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.8.6", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.3", "core-js-compat": "^3.33.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "babel-plugin-polyfill-regenerator": { + "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.3" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "babel-runtime": { + "node_modules/babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", "dev": true, - "requires": { + "dependencies": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } } }, - "babel-template": { + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "node_modules/babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", "dev": true, - "requires": { + "dependencies": { "babel-runtime": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", @@ -1670,12 +2293,12 @@ "lodash": "^4.17.4" } }, - "babel-traverse": { + "node_modules/babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", "dev": true, - "requires": { + "dependencies": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", @@ -1685,133 +2308,166 @@ "globals": "^9.18.0", "invariant": "^2.2.2", "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } } }, - "babel-types": { + "node_modules/babel-traverse/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/babel-traverse/node_modules/globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-traverse/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", "dev": true, - "requires": { + "dependencies": { "babel-runtime": "^6.26.0", "esutils": "^2.0.2", "lodash": "^4.17.4", "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", - "dev": true - } } }, - "babelify": { + "node_modules/babel-types/node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babelify": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } }, - "babylon": { + "node_modules/babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true + "dev": true, + "bin": { + "babylon": "bin/babylon.js" + } }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base64-js": { + "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "binary-extensions": { + "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "bn.js": { + "node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "dev": true }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "braces": { + "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "requires": { + "dependencies": { "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "brorand": { + "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, - "browser-pack": { + "node_modules/browser-pack": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "combine-source-map": "~0.8.0", "defined": "^1.0.0", + "JSONStream": "^1.0.3", "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" + }, + "bin": { + "browser-pack": "bin/cmd.js" } }, - "browser-pack-flat": { + "node_modules/browser-pack-flat": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/browser-pack-flat/-/browser-pack-flat-3.5.0.tgz", "integrity": "sha512-u3iJUjs+TC/NGIL2GLyIcn5ppoNZXhTWqSW/gQbGIGvQiXXCQQzr5VWfACFraXQn2JrDlyRnKLeOs5AWXzKI6A==", "dev": true, - "requires": { - "JSONStream": "^1.3.2", + "dependencies": { "combine-source-map": "^0.8.0", "convert-source-map": "^1.5.1", "count-lines": "^0.1.2", @@ -1819,6 +2475,7 @@ "estree-is-member-expression": "^1.0.0", "estree-is-require": "^1.0.0", "esutils": "^2.0.2", + "JSONStream": "^1.3.2", "path-parse": "^1.0.5", "scope-analyzer": "^2.0.0", "stream-combiner": "^0.2.2", @@ -1827,65 +2484,66 @@ "umd": "^3.0.3", "wrap-comment": "^1.0.0" }, - "dependencies": { - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - } + "bin": { + "browser-pack-flat": "cli.js" } }, - "browser-process-hrtime": { + "node_modules/browser-pack-flat/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/browser-process-hrtime": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", "dev": true }, - "browser-resolve": { + "node_modules/browser-resolve": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, - "requires": { + "dependencies": { "resolve": "^1.17.0" } }, - "browser-unpack": { + "node_modules/browser-unpack": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.4.2.tgz", "integrity": "sha512-uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.5.2", "concat-stream": "^1.5.0", "minimist": "^1.1.1" }, - "dependencies": { - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - } + "bin": { + "browser-unpack": "bin/cmd.js" } }, - "browserify": { + "node_modules/browser-unpack/node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/browserify": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^2.0.0", @@ -1907,6 +2565,7 @@ "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.2.1", + "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp-classic": "^0.5.2", "module-deps": "^6.2.3", @@ -1933,14 +2592,20 @@ "util": "~0.12.0", "vm-browserify": "^1.0.0", "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8" } }, - "browserify-aes": { + "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "requires": { + "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", @@ -1949,45 +2614,45 @@ "safe-buffer": "^5.0.1" } }, - "browserify-cipher": { + "node_modules/browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, - "requires": { + "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, - "browserify-des": { + "node_modules/browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "browserify-rsa": { + "node_modules/browserify-rsa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, - "browserify-sign": { + "node_modules/browserify-sign": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^5.2.1", "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", @@ -1998,232 +2663,312 @@ "readable-stream": "^3.6.2", "safe-buffer": "^5.2.1" }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "engines": { + "node": ">= 4" } }, - "browserify-zlib": { + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, - "requires": { + "dependencies": { "pako": "~1.0.5" } }, - "browserslist": { + "node_modules/browserslist": { "version": "4.22.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { "caniuse-lite": "^1.0.30001541", "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "buffer": { + "node_modules/buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, - "requires": { + "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, - "buffer-from": { + "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "buffer-xor": { + "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true }, - "builtin-status-codes": { + "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true }, - "bundle-collapser": { + "node_modules/bundle-collapser": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.4.0.tgz", "integrity": "sha512-Gd3K3+3KI1Utuk+gwAvuOVOjT/2XLGL8tU6FwDKk04LlOZkYfT0pwQllsG1Dv8RRhgcjNxZSDmmSXb0AOkwSwg==", "dev": true, - "requires": { + "dependencies": { "browser-pack": "^6.0.2", "browser-unpack": "^1.1.0", "concat-stream": "^1.5.0", "falafel": "^2.1.0", "minimist": "^1.1.1", "through2": "^2.0.0" + }, + "bin": { + "bundle-collapser": "bin/cmd.js" } }, - "cached-path-relative": { + "node_modules/cached-path-relative": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", "dev": true }, - "call-bind": { + "node_modules/call-bind": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.2", "get-intrinsic": "^1.2.1", "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "caniuse-lite": { + "node_modules/caniuse-lite": { "version": "1.0.30001563", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==", - "dev": true + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, - "chalk": { + "node_modules/chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "chokidar": { + "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "cipher-base": { + "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, - "cliui": { + "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "requires": { + "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } + "engines": { + "node": ">=12" } }, - "color-convert": { + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { + "dependencies": { "color-name": "1.1.3" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "combine-source-map": { + "node_modules/combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==", "dev": true, - "requires": { + "dependencies": { "convert-source-map": "~1.1.0", "inline-source-map": "~0.6.0", "lodash.memoize": "~3.0.3", "source-map": "~0.5.3" - }, - "dependencies": { - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } } }, - "commander": { + "node_modules/combine-source-map/node_modules/convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==", + "dev": true + }, + "node_modules/combine-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "common-shakeify": { + "node_modules/common-shakeify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/common-shakeify/-/common-shakeify-1.1.2.tgz", "integrity": "sha512-r2zRKPCbCx1l9BT8nVGZssZXrH9jeLl5qfHKxUwSBT7Kr9l1jSjZsItZE/jXo+GYDyO3kQfsyV7Poid475MgWQ==", "dev": true, - "requires": { + "dependencies": { "@goto-bus-stop/common-shake": "^2.3.0", "convert-source-map": "^1.5.1", "through2": "^2.0.3", @@ -2231,30 +2976,33 @@ "wrap-comment": "^1.0.1" } }, - "concat-map": { + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "concat-stream": { + "node_modules/concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, - "requires": { + "engines": [ + "node >= 0.8" + ], + "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, - "concurrently": { + "node_modules/concurrently": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.1.0", "date-fns": "^2.29.1", "lodash": "^4.17.21", @@ -2265,144 +3013,184 @@ "tree-kill": "^1.2.2", "yargs": "^17.3.1" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "console-browserify": { + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, - "constants-browserify": { + "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", "dev": true }, - "convert-source-map": { + "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, - "core-js": { + "node_modules/core-js": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true }, - "core-js-compat": { + "node_modules/core-js-compat": { "version": "3.33.3", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.3.tgz", "integrity": "sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==", "dev": true, - "requires": { + "dependencies": { "browserslist": "^4.22.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "core-util-is": { + "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "count-lines": { + "node_modules/count-lines": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/count-lines/-/count-lines-0.1.2.tgz", "integrity": "sha512-YS8P4UYXX/hrDyLU3r/A5OcCNwdNbJFJckbe8j+x2Jhxsr2J4/rYl0sDwOljLZL7Uxc4s7mRSNcQD8dSjobz+g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "cp": { + "node_modules/cp": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/cp/-/cp-0.2.0.tgz", "integrity": "sha512-4ftCvShHjIZG/zzomHyunNpBof3sOFTTmU6s6q9DdqAL/ANqrKV3pr6Z6kVfBI4hjn59DFLImrBqn7GuuMqSZA==", "dev": true }, - "create-ecdh": { + "node_modules/create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "create-hash": { + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", @@ -2410,12 +3198,12 @@ "sha.js": "^2.4.0" } }, - "create-hmac": { + "node_modules/create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", @@ -2424,12 +3212,12 @@ "sha.js": "^2.4.8" } }, - "crypto-browserify": { + "node_modules/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, - "requires": { + "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", @@ -2441,199 +3229,231 @@ "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" } }, - "d": { + "node_modules/d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, - "requires": { + "dependencies": { "es5-ext": "^0.10.50", "type": "^1.0.1" } }, - "dash-ast": { + "node_modules/dash-ast": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", "dev": true }, - "date-fns": { + "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "dev": true, - "requires": { + "dependencies": { "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" } }, - "debug": { + "node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "requires": { + "dependencies": { "ms": "^2.1.1" } }, - "dedent": { + "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, - "define-data-property": { + "node_modules/define-data-property": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", "dev": true, - "requires": { + "dependencies": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "define-properties": { + "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "requires": { + "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "defined": { + "node_modules/defined": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "deps-sort": { + "node_modules/deps-sort": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, - "requires": { + "dependencies": { "JSONStream": "^1.0.3", "shasum-object": "^1.0.0", "subarg": "^1.0.0", "through2": "^2.0.0" + }, + "bin": { + "deps-sort": "bin/cmd.js" } }, - "des.js": { + "node_modules/des.js": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, - "detective": { + "node_modules/detective": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.8.2", "defined": "^1.0.0", "minimist": "^1.2.6" }, - "dependencies": { - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - } + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" } }, - "diffie-hellman": { + "node_modules/detective/node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "domain-browser": { + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } }, - "duplexer": { + "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "duplexer2": { + "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "^2.0.2" } }, - "duplexify": { + "node_modules/duplexify": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", "dev": true, - "requires": { + "dependencies": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", "readable-stream": "^3.1.1", "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, - "electron-to-chromium": { + "node_modules/duplexify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/electron-to-chromium": { "version": "1.4.589", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.589.tgz", "integrity": "sha512-zF6y5v/YfoFIgwf2dDfAqVlPPsyQeWNpEWXbAlDUS8Ax4Z2VoiiZpAPC0Jm9hXEkJm2vIZpwB6rc4KnLTQffbQ==", "dev": true }, - "elliptic": { + "node_modules/elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", @@ -2641,68 +3461,70 @@ "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "emoji-regex": { + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "end-of-stream": { + "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "requires": { + "dependencies": { "once": "^1.4.0" } }, - "error-ex": { + "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { + "dependencies": { "is-arrayish": "^0.2.1" } }, - "es5-ext": { + "node_modules/es5-ext": { "version": "0.10.62", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, - "requires": { + "hasInstallScript": true, + "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "es6-iterator": { + "node_modules/es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "^0.10.35", "es6-symbol": "^3.1.1" } }, - "es6-map": { + "node_modules/es6-map": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "~0.10.14", "es6-iterator": "~2.0.1", @@ -2711,12 +3533,12 @@ "event-emitter": "~0.3.5" } }, - "es6-set": { + "node_modules/es6-set": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", "dev": true, - "requires": { + "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", "es6-iterator": "~2.0.3", @@ -2724,87 +3546,107 @@ "event-emitter": "^0.3.5", "type": "^2.7.2" }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } + "engines": { + "node": ">=0.12" } }, - "es6-symbol": { + "node_modules/es6-set/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, - "requires": { + "dependencies": { "d": "^1.0.1", "ext": "^1.1.2" } }, - "es6-weak-map": { + "node_modules/es6-weak-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "^0.10.46", "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.1" } }, - "escalade": { + "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "escape-string-regexp": { + "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "escodegen": { + "node_modules/escodegen": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "requires": { + "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "source-map": "~0.6.1" + "esutils": "^2.0.2" }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "escope": { + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escope": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", "dev": true, - "requires": { + "dependencies": { "es6-map": "^0.1.3", "es6-weak-map": "^2.0.1", "esrecurse": "^4.1.0", "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=0.4.0" } }, - "esmify": { + "node_modules/esmify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/esmify/-/esmify-2.1.1.tgz", "integrity": "sha512-GyOVgjG7sNyYB5Mbo15Ll4aGrcXZzZ3LI22rbLOjCI7L/wYelzQpBHRZkZkqbPNZ/QIRilcaHqzgNCLcEsi1lQ==", "dev": true, - "requires": { + "dependencies": { "@babel/core": "^7.2.2", "@babel/plugin-syntax-async-generators": "^7.2.0", "@babel/plugin-syntax-dynamic-import": "^7.2.0", @@ -2817,707 +3659,925 @@ "through2": "^2.0.5" } }, - "esprima": { + "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "esrecurse": { + "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "requires": { + "dependencies": { "estraverse": "^5.2.0" }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "engines": { + "node": ">=4.0" } }, - "estraverse": { + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "estree-is-function": { + "node_modules/estree-is-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", "dev": true }, - "estree-is-identifier": { + "node_modules/estree-is-identifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-identifier/-/estree-is-identifier-1.0.0.tgz", "integrity": "sha512-2BDRGrkQJV/NhCAmmE33A35WAaxq3WQaGHgQuD//7orGWfpFqj8Srkwvx0TH+20yIdOF1yMQwi8anv5ISec2AQ==", "dev": true }, - "estree-is-member-expression": { + "node_modules/estree-is-member-expression": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz", "integrity": "sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg==", "dev": true }, - "estree-is-require": { + "node_modules/estree-is-require": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-require/-/estree-is-require-1.0.0.tgz", "integrity": "sha512-oWxQdSEmnUwNZsDQYiBNpVxKEhMmsJQSSxnDrwsr1MWtooCLfhgzsNGzmokdmfK0EzEIS5V4LPvqxv1Kmb1vvA==", "dev": true, - "requires": { + "dependencies": { "estree-is-identifier": "^1.0.0" } }, - "esutils": { + "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "event-emitter": { + "node_modules/event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "~0.10.14" } }, - "events": { + "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.x" + } }, - "evp_bytestokey": { + "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, - "requires": { + "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, - "ext": { + "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, - "requires": { - "type": "^2.7.2" - }, "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } + "type": "^2.7.2" } }, - "falafel": { + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/falafel": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", "dev": true, - "requires": { + "dependencies": { "acorn": "^7.1.1", "isarray": "^2.0.1" }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } + "engines": { + "node": ">=0.4.0" } }, - "fast-safe-stringify": { + "node_modules/falafel/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, - "fill-range": { + "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "requires": { + "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "for-each": { + "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "requires": { + "dependencies": { "is-callable": "^1.1.3" } }, - "from2": { + "node_modules/from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" } }, - "from2-string": { + "node_modules/from2-string": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/from2-string/-/from2-string-1.1.0.tgz", "integrity": "sha512-m8vCh+KnXXXBtfF2VUbiYlQ+nczLcntB0BrtNgpmLkHylhObe9WF1b2LZjBBzrZzA6P4mkEla6ZYQoOUTG8cYA==", "dev": true, - "requires": { + "dependencies": { "from2": "^2.0.3" } }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "fsevents": { + "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "optional": true + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "gensync": { + "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "get-assigned-identifiers": { + "node_modules/get-assigned-identifiers": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", "dev": true }, - "get-caller-file": { + "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "get-intrinsic": { + "node_modules/get-intrinsic": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "glob": { + "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "requires": { + "dependencies": { "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "globals": { + "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "gopd": { + "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "requires": { + "dependencies": { "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has": { + "node_modules/has": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4.0" + } }, - "has-ansi": { + "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "has-flag": { + "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "has-property-descriptors": { + "node_modules/has-property-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, - "requires": { + "dependencies": { "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-proto": { + "node_modules/has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-symbols": { + "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-tostringtag": { + "node_modules/has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, - "requires": { + "dependencies": { "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "hash-base": { + "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "engines": { + "node": ">=4" } }, - "hash.js": { + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, - "hasown": { + "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "hmac-drbg": { + "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, - "requires": { + "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, - "htmlescape": { + "node_modules/htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10" + } }, - "https-browserify": { + "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true }, - "ieee754": { + "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "ignore-by-default": { + "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "inline-source-map": { + "node_modules/inline-source-map": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==", "dev": true, - "requires": { - "source-map": "~0.5.3" - }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } + "source-map": "~0.5.3" } }, - "insert-module-globals": { + "node_modules/inline-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/insert-module-globals": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", "undeclared-identifiers": "^1.1.2", "xtend": "^4.0.0" }, - "dependencies": { - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - } + "bin": { + "insert-module-globals": "bin/cmd.js" } }, - "invariant": { + "node_modules/insert-module-globals/node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/insert-module-globals/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, - "requires": { + "dependencies": { "loose-envify": "^1.0.0" } }, - "is-arguments": { + "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "is-binary-path": { + "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "requires": { + "dependencies": { "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-buffer": { + "node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } }, - "is-callable": { + "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-core-module": { + "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, - "requires": { + "dependencies": { "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "is-generator-function": { + "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.12.0" + } }, - "is-typed-array": { + "node_modules/is-typed-array": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, - "requires": { + "dependencies": { "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-utf8": { + "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true }, - "isarray": { + "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "jsesc": { + "node_modules/jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } }, - "json5": { + "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } }, - "jsonparse": { + "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true + "dev": true, + "engines": [ + "node >= 0.2.0" + ] }, - "labeled-stream-splicer": { + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "stream-splicer": "^2.0.0" } }, - "lodash": { + "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.debounce": { + "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "lodash.memoize": { + "node_modules/lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==", "dev": true }, - "loose-envify": { + "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, - "requires": { + "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "lru-cache": { + "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "requires": { + "dependencies": { "yallist": "^3.0.2" } }, - "magic-string": { + "node_modules/magic-string": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", "integrity": "sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA==", "dev": true, - "requires": { + "dependencies": { "sourcemap-codec": "^1.4.1" } }, - "md5.js": { + "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, - "requires": { + "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "merge-source-map": { + "node_modules/merge-source-map": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", "dev": true, - "requires": { - "source-map": "^0.5.6" - }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } + "source-map": "^0.5.6" } }, - "miller-rabin": { + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } + "bin": { + "miller-rabin": "bin/miller-rabin" } }, - "minify-stream": { + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/minify-stream": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/minify-stream/-/minify-stream-2.1.0.tgz", "integrity": "sha512-P5xE4EQRkn7Td54VGcgfDMFx1jmKPPIXCdcMfrbXS6cNHK4dO1LXwtYFb48hHrSmZfT+jlGImvHgSZEkbpNtCw==", "dev": true, - "requires": { + "dependencies": { "concat-stream": "^2.0.0", "convert-source-map": "^1.5.0", "duplexify": "^4.1.1", @@ -3525,83 +4585,101 @@ "terser": "^4.7.0", "xtend": "^4.0.1" }, - "dependencies": { - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - } + "engines": { + "node": ">= 6" } }, - "minimalistic-assert": { + "node_modules/minify-stream/node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/minify-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minify-stream/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "minimalistic-crypto-utils": { + "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true }, - "minimatch": { + "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { + "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "mkdirp-classic": { + "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, - "module-deps": { + "node_modules/module-deps": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "browser-resolve": "^2.0.0", "cached-path-relative": "^1.0.2", "concat-stream": "~1.6.0", @@ -3609,6 +4687,7 @@ "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", + "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", @@ -3616,79 +4695,90 @@ "subarg": "^1.0.0", "through2": "^2.0.0", "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8.0" } }, - "ms": { + "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "multi-stage-sourcemap": { + "node_modules/multi-stage-sourcemap": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz", "integrity": "sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ==", "dev": true, - "requires": { - "source-map": "^0.1.34" - }, "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "source-map": "^0.1.34" } }, - "multisplice": { + "node_modules/multi-stage-sourcemap/node_modules/source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dev": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/multisplice": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/multisplice/-/multisplice-1.0.0.tgz", "integrity": "sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA==", "dev": true }, - "mutexify": { + "node_modules/mutexify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.4.0.tgz", "integrity": "sha512-pbYSsOrSB/AKN5h/WzzLRMFgZhClWccf2XIB4RSMC8JbquiB0e0/SH5AIfdQMdyHmYtv4seU7yV/TvAwPLJ1Yg==", "dev": true, - "requires": { + "dependencies": { "queue-tick": "^1.0.0" } }, - "nanobench": { + "node_modules/nanobench": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nanobench/-/nanobench-2.1.1.tgz", "integrity": "sha512-z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A==", "dev": true, - "requires": { + "dependencies": { "browser-process-hrtime": "^0.1.2", "chalk": "^1.1.3", "mutexify": "^1.1.0", "pretty-hrtime": "^1.0.2" + }, + "bin": { + "nanobench": "run.js", + "nanobench-compare": "compare.js" } }, - "next-tick": { + "node_modules/next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", "dev": true }, - "node-releases": { + "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, - "nodemon": { + "node_modules/nodemon": { "version": "2.0.22", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", "dev": true, - "requires": { + "dependencies": { "chokidar": "^3.5.2", "debug": "^3.2.7", "ignore-by-default": "^1.0.1", @@ -3700,114 +4790,152 @@ "touch": "^3.1.0", "undefsafe": "^2.0.5" }, - "dependencies": { - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" } }, - "nopt": { + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "dev": true, - "requires": { + "dependencies": { "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" } }, - "normalize-path": { + "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "object-inspect": { + "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + } }, - "object.assign": { + "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "requires": { + "dependencies": { "wrappy": "1" } }, - "os-browserify": { + "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, - "outpipe": { + "node_modules/outpipe": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", "integrity": "sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==", "dev": true, - "requires": { + "dependencies": { "shell-quote": "^1.4.2" } }, - "pako": { + "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "parents": { + "node_modules/parents": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==", "dev": true, - "requires": { + "dependencies": { "path-platform": "~0.11.15" } }, - "parse-asn1": { + "node_modules/parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, - "requires": { + "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", "evp_bytestokey": "^1.0.0", @@ -3815,171 +4943,202 @@ "safe-buffer": "^5.1.1" } }, - "parse-json": { + "node_modules/parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, - "requires": { + "dependencies": { "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "path-browserify": { + "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-platform": { + "node_modules/path-platform": { "version": "0.11.15", "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "pbkdf2": { + "node_modules/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, - "requires": { + "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", "ripemd160": "^2.0.1", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" } }, - "picocolors": { + "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "picomatch": { + "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "pretty-hrtime": { + "node_modules/pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "process": { + "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6.0" + } }, - "process-nextick-args": { + "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "pstree.remy": { + "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true }, - "public-encrypt": { + "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "punycode": { + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true }, - "qs": { + "node_modules/qs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, - "requires": { + "dependencies": { "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "querystring-es3": { + "node_modules/querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.x" + } }, - "queue-tick": { + "node_modules/queue-tick": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", "dev": true }, - "randombytes": { + "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "^5.1.0" } }, - "randomfill": { + "node_modules/randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, - "requires": { + "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, - "read-only-stream": { + "node_modules/read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "^2.0.2" } }, - "readable-stream": { + "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "requires": { + "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", @@ -3989,128 +5148,156 @@ "util-deprecate": "~1.0.1" } }, - "readdirp": { + "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": { + "dependencies": { "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "regenerate": { + "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, - "regenerate-unicode-properties": { + "node_modules/regenerate-unicode-properties": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, - "requires": { + "dependencies": { "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" } }, - "regenerator-runtime": { + "node_modules/regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", "dev": true }, - "regenerator-transform": { + "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, - "requires": { + "dependencies": { "@babel/runtime": "^7.8.4" } }, - "regexpu-core": { + "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, - "requires": { + "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" } }, - "regjsparser": { + "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, - "requires": { + "dependencies": { "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" } }, - "require-directory": { + "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "requirejs": { + "node_modules/requirejs": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", - "dev": true + "dev": true, + "bin": { + "r_js": "bin/r.js", + "r.js": "bin/r.js" + }, + "engines": { + "node": ">=0.4.0" + } }, - "resolve": { + "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "requires": { + "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "ripemd160": { + "node_modules/ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, - "requires": { + "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, - "rxjs": { + "node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, - "requires": { + "dependencies": { "tslib": "^2.1.0" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "scope-analyzer": { + "node_modules/scope-analyzer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", "dev": true, - "requires": { + "dependencies": { "array-from": "^2.1.1", "dash-ast": "^2.0.1", "es6-map": "^0.1.5", @@ -4120,355 +5307,424 @@ "get-assigned-identifiers": "^1.1.0" } }, - "semver": { + "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, - "set-function-length": { + "node_modules/set-function-length": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", "dev": true, - "requires": { + "dependencies": { "define-data-property": "^1.1.1", "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "sha.js": { + "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" } }, - "shasum-object": { + "node_modules/shasum-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, - "requires": { + "dependencies": { "fast-safe-stringify": "^2.0.7" } }, - "shell-quote": { + "node_modules/shell-quote": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "side-channel": { + "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "simple-concat": { + "node_modules/simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "simple-update-notifier": { + "node_modules/simple-update-notifier": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", "dev": true, - "requires": { + "dependencies": { "semver": "~7.0.0" }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } + "engines": { + "node": ">=8.10.0" } }, - "sortablejs": { + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sortablejs": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==", "dev": true }, - "source-map": { + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-support": { + "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "requires": { + "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "sourcemap-codec": { + "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", "dev": true }, - "spawn-command": { + "node_modules/spawn-command": { "version": "0.0.2-1", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", "dev": true }, - "stream-browserify": { + "node_modules/stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, - "requires": { + "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, - "stream-combiner": { + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", "dev": true, - "requires": { + "dependencies": { "duplexer": "~0.1.1", "through": "~2.3.4" } }, - "stream-combiner2": { + "node_modules/stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, - "requires": { + "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" } }, - "stream-http": { + "node_modules/stream-http": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, - "requires": { + "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", "readable-stream": "^3.6.0", "xtend": "^4.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, - "stream-shift": { + "node_modules/stream-http/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, - "stream-splicer": { + "node_modules/stream-splicer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.2" } }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "string_decoder": { + "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "~5.1.0" } }, - "strip-ansi": { + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "strip-bom": { + "node_modules/strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, - "requires": { + "dependencies": { "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "subarg": { + "node_modules/subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", "dev": true, - "requires": { + "dependencies": { "minimist": "^1.1.0" } }, - "supports-color": { + "node_modules/supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "syntax-error": { + "node_modules/syntax-error": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, - "requires": { - "acorn-node": "^1.2.0" - }, "dependencies": { - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - } + "acorn-node": "^1.2.0" } }, - "terser": { + "node_modules/syntax-error/node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/terser": { "version": "3.16.1", "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", "dev": true, - "requires": { + "dependencies": { "commander": "~2.17.1", "source-map": "~0.6.1", "source-map-support": "~0.5.9" }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - } + "bin": { + "terser": "bin/uglifyjs" + }, + "engines": { + "node": ">=6.0.0" } }, - "through": { + "node_modules/terser/node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "through2": { + "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, - "timers-browserify": { + "node_modules/timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==", "dev": true, - "requires": { + "dependencies": { "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" } }, - "tinyify": { + "node_modules/tinyify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tinyify/-/tinyify-4.0.0.tgz", "integrity": "sha512-jNDxImwUrJJAU2NyGG144J8aWx2ni39UuBo7ppCXFRmhSH0CbpWL4HgjNvrsAW05WQAgNZePwAlEemNuB+byaA==", "dev": true, - "requires": { + "dependencies": { "@browserify/envify": "^6.0.0", "@browserify/uglifyify": "^6.0.0", "browser-pack-flat": "^3.0.9", @@ -4479,60 +5735,70 @@ "terser": "3.16.1", "through2": "^4.0.2", "unassertify": "^3.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } } }, - "to-fast-properties": { + "node_modules/tinyify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tinyify/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "touch": { + "node_modules/touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "dev": true, - "requires": { + "dependencies": { "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" } }, - "transform-ast": { + "node_modules/transform-ast": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", "integrity": "sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.3.0", "convert-source-map": "^1.5.1", "dash-ast": "^1.0.0", @@ -4540,238 +5806,297 @@ "magic-string": "^0.23.2", "merge-source-map": "1.0.4", "nanobench": "^2.1.1" - }, - "dependencies": { - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "dash-ast": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", - "dev": true - } } }, - "tree-kill": { + "node_modules/transform-ast/node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/transform-ast/node_modules/dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + }, + "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true + "dev": true, + "bin": { + "tree-kill": "cli.js" + } }, - "tsconfig": { + "node_modules/tsconfig": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz", "integrity": "sha512-Cq65A3kVp6BbsUgg9DRHafaGmbMb9EhAc7fjWvudNWKjkbWrt43FnrtZt6awshH1R0ocfF2Z0uxock3lVqEgOg==", "dev": true, - "requires": { + "dependencies": { "any-promise": "^1.3.0", "parse-json": "^2.2.0", "strip-bom": "^2.0.0", "strip-json-comments": "^2.0.0" } }, - "tsify": { + "node_modules/tsify": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/tsify/-/tsify-5.0.4.tgz", "integrity": "sha512-XAZtQ5OMPsJFclkZ9xMZWkSNyMhMxEPsz3D2zu79yoKorH9j/DT4xCloJeXk5+cDhosEibu4bseMVjyPOAyLJA==", "dev": true, - "requires": { + "dependencies": { "convert-source-map": "^1.1.0", "fs.realpath": "^1.0.0", "object-assign": "^4.1.0", "semver": "^6.1.0", "through2": "^2.0.0", "tsconfig": "^5.0.3" + }, + "engines": { + "node": ">=0.12" + }, + "peerDependencies": { + "browserify": ">= 10.x", + "typescript": ">= 2.8" } }, - "tslib": { + "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, - "tty-browserify": { + "node_modules/tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, - "type": { + "node_modules/type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", "dev": true }, - "typedarray": { + "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "typescript": { + "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "umd": { + "node_modules/umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "dev": true + "dev": true, + "bin": { + "umd": "bin/cli.js" + } }, - "unassert": { + "node_modules/unassert": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/unassert/-/unassert-2.0.2.tgz", "integrity": "sha512-P6OOg/aRdQmWH+b0g+T4U+9MgL+DG7w6oQPG+N3F2IMuvvd1WfZ5alT/Rjik2lMFVyhfACUxF7PGP1VCwSHlQA==", "dev": true, - "requires": { - "estraverse": "^5.0.0" - }, "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "estraverse": "^5.0.0" } }, - "unassertify": { + "node_modules/unassert/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/unassertify": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/unassertify/-/unassertify-3.0.1.tgz", "integrity": "sha512-461ykSPY3oWU+39J5haiq7S/hcYy1oGJ2nHU92lqdL3jft+pSU6oAbb7o6VVmM7nZGLqppszgyzfpCnRBFgFtw==", "dev": true, - "requires": { + "dependencies": { "acorn": "^8.0.0", "convert-source-map": "^1.1.1", "escodegen": "^2.0.0", "multi-stage-sourcemap": "^0.3.1", "through": "^2.3.7", "unassert": "^2.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true - } } }, - "undeclared-identifiers": { + "node_modules/unassertify/node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/undeclared-identifiers": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.3.0", "dash-ast": "^1.0.0", "get-assigned-identifiers": "^1.2.0", "simple-concat": "^1.0.0", "xtend": "^4.0.1" }, - "dependencies": { - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "dash-ast": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", - "dev": true - } + "bin": { + "undeclared-identifiers": "bin.js" } }, - "undefsafe": { + "node_modules/undeclared-identifiers/node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/undeclared-identifiers/node_modules/dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + }, + "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, - "undici-types": { + "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, - "unicode-canonical-property-names-ecmascript": { + "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unicode-match-property-ecmascript": { + "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "requires": { + "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "unicode-match-property-value-ecmascript": { + "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unicode-property-aliases-ecmascript": { + "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "update-browserslist-db": { + "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "url": { + "node_modules/url": { "version": "0.11.3", "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "dev": true, - "requires": { + "dependencies": { "punycode": "^1.4.1", "qs": "^6.11.2" } }, - "usng.js": { + "node_modules/usng.js": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/usng.js/-/usng.js-0.4.5.tgz", "integrity": "sha512-JTJcFFDy/JqA5iiU8DqMOV5gJiL3ZdXH0hCKYaRMDbbredhFna5Ok4C1YDFU07mTGAgm+5FzHaaOzQnO/3BzWQ==", - "dev": true + "dev": true, + "bin": { + "usng-cli": "bin/cli.js" + } }, - "util": { + "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", @@ -4779,24 +6104,24 @@ "which-typed-array": "^1.1.2" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "vm-browserify": { + "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, - "watchify": { + "node_modules/watchify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz", "integrity": "sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==", "dev": true, - "requires": { + "dependencies": { "anymatch": "^3.1.0", "browserify": "^17.0.0", "chokidar": "^3.4.0", @@ -4805,130 +6130,168 @@ "through2": "^4.0.2", "xtend": "^4.0.2" }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } + "bin": { + "watchify": "bin/cmd.js" + }, + "engines": { + "node": ">= 8.10.0" } }, - "which-typed-array": { + "node_modules/watchify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/watchify/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/which-typed-array": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dev": true, - "requires": { + "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "wrap-ansi": { + "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "wrap-comment": { + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-comment": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wrap-comment/-/wrap-comment-1.0.1.tgz", "integrity": "sha512-APccrMwl/ont0RHFTXNAQfM647duYYEfs6cngrIyTByTI0xbWnDnPSptFZhS68L4WCjt2ZxuhCFwuY6Pe88KZQ==", "dev": true }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "xtend": { + "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4" + } }, - "y18n": { + "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + } }, - "yallist": { + "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "yargs": { + "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "requires": { + "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -4936,13 +6299,19 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true + "dev": true, + "engines": { + "node": ">=12" + } } } } diff --git a/client/plugins/controltips/package.json b/client/plugins/controltips/package.json index 28506544..141b7bec 100644 --- a/client/plugins/controltips/package.json +++ b/client/plugins/controltips/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "build": "browserify ./src/index.ts -p [ tsify --noImplicitAny] > index.js && copy.bat", - "build-release": "browserify ./src/index.ts -p [ tsify --noImplicitAny] -p [ tinyify ] > index.js && copy.bat" + "build-release": "browserify ./src/index.ts -p [ tsify --noImplicitAny] > index.js && copy.bat" }, "dependencies": {}, "devDependencies": { diff --git a/client/plugins/databasemanager/index.js b/client/plugins/databasemanager/index.js index 4039ea7f..9305ff01 100644 --- a/client/plugins/databasemanager/index.js +++ b/client/plugins/databasemanager/index.js @@ -1,1105 +1 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i { - var _a; - if (this.visible) - (_a = __classPrivateFieldGet(this, _AirUnitEditor_loadoutEditor, "f")) === null || _a === void 0 ? void 0 : _a.show(); - }); - } - /** Sets a unit blueprint as the currently active one - * - * @param blueprint The blueprint to edit - */ - setBlueprint(blueprint) { - var _a, _b, _c, _d, _e, _f, _g; - this.blueprint = blueprint; - if (this.blueprint !== null) { - this.contentDiv2.replaceChildren(); - var title = document.createElement("label"); - title.innerText = "Unit properties"; - this.contentDiv2.appendChild(title); - (0, utils_1.addStringInput)(this.contentDiv2, "Name", blueprint.name, "text", (value) => { blueprint.name = value; }, true); - (0, utils_1.addStringInput)(this.contentDiv2, "Label", blueprint.label, "text", (value) => { blueprint.label = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Short label", blueprint.shortLabel, "text", (value) => { blueprint.shortLabel = value; }); - (0, utils_1.addDropdownInput)(this.contentDiv2, "Coalition", blueprint.coalition, ["", "blue", "red"], (value) => { blueprint.coalition = value; }); - (0, utils_1.addDropdownInput)(this.contentDiv2, "Era", blueprint.era, ["WW2", "Early Cold War", "Mid Cold War", "Late Cold War", "Modern"], (value) => { blueprint.era = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Filename", (_a = blueprint.filename) !== null && _a !== void 0 ? _a : "", "text", (value) => { blueprint.filename = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Cost", (_b = String(blueprint.cost)) !== null && _b !== void 0 ? _b : "", "number", (value) => { blueprint.cost = parseFloat(value); }); - (0, utils_1.addCheckboxInput)(this.contentDiv2, "Can target point", (_c = blueprint.canTargetPoint) !== null && _c !== void 0 ? _c : false, (value) => { blueprint.canTargetPoint = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Description", (_d = blueprint.description) !== null && _d !== void 0 ? _d : "", "text", (value) => { blueprint.description = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Tags", (_e = blueprint.tags) !== null && _e !== void 0 ? _e : "", "text", (value) => { blueprint.tags = value; }); - /* Add a scrollable list of loadouts that the user can edit */ - var title = document.createElement("label"); - title.innerText = "Loadouts"; - this.contentDiv2.appendChild(title); - (0, utils_1.addLoadoutsScroll)(this.contentDiv2, (_f = blueprint.loadouts) !== null && _f !== void 0 ? _f : [], (loadout) => { - var _a, _b; - (_a = __classPrivateFieldGet(this, _AirUnitEditor_loadoutEditor, "f")) === null || _a === void 0 ? void 0 : _a.setLoadout(loadout); - (_b = __classPrivateFieldGet(this, _AirUnitEditor_loadoutEditor, "f")) === null || _b === void 0 ? void 0 : _b.show(); - }); - (0, utils_1.addNewElementInput)(this.contentDiv2, (ev, input) => { this.addLoadout(input.value); }); - (_g = __classPrivateFieldGet(this, _AirUnitEditor_loadoutEditor, "f")) === null || _g === void 0 ? void 0 : _g.hide(); - } - } - /** Add a new empty blueprint - * - * @param key Blueprint key - */ - addBlueprint(key) { - if (this.database != null) { - this.database.blueprints[key] = { - name: key, - coalition: "", - label: "", - shortLabel: "", - era: "", - loadouts: [], - enabled: true - }; - this.show(); - this.setBlueprint(this.database.blueprints[key]); - } - } - /** Add a new empty loadout to the currently active blueprint - * - * @param loadoutName The name of the new loadout - */ - addLoadout(loadoutName) { - var _a; - if (loadoutName && this.blueprint !== null) { - (_a = this.blueprint.loadouts) === null || _a === void 0 ? void 0 : _a.push({ - name: loadoutName, - code: "", - fuel: 1, - items: [], - roles: [], - enabled: true - }); - this.setBlueprint(this.blueprint); - } - } - /** Hide the editor - * - */ - hide() { - var _a; - super.hide(); - (_a = __classPrivateFieldGet(this, _AirUnitEditor_loadoutEditor, "f")) === null || _a === void 0 ? void 0 : _a.hide(); - } -} -exports.AirUnitEditor = AirUnitEditor; -_AirUnitEditor_loadoutEditor = new WeakMap(); - -},{"./loadouteditor":5,"./uniteditor":7,"./utils":8}],2:[function(require,module,exports){ -"use strict"; -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { - if (kind === "m") throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; -}; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); -}; -var _DatabaseManagerPlugin_instances, _DatabaseManagerPlugin_app, _DatabaseManagerPlugin_element, _DatabaseManagerPlugin_mainContentContainer, _DatabaseManagerPlugin_contentDiv1, _DatabaseManagerPlugin_contentDiv2, _DatabaseManagerPlugin_contentDiv3, _DatabaseManagerPlugin_button1, _DatabaseManagerPlugin_button2, _DatabaseManagerPlugin_button3, _DatabaseManagerPlugin_button4, _DatabaseManagerPlugin_button5, _DatabaseManagerPlugin_button6, _DatabaseManagerPlugin_button7, _DatabaseManagerPlugin_button8, _DatabaseManagerPlugin_button9, _DatabaseManagerPlugin_aircraftEditor, _DatabaseManagerPlugin_helicopterEditor, _DatabaseManagerPlugin_groundUnitEditor, _DatabaseManagerPlugin_navyUnitEditor, _DatabaseManagerPlugin_hideAll, _DatabaseManagerPlugin_loadDatabases, _DatabaseManagerPlugin_saveDatabases, _DatabaseManagerPlugin_resetToDefaultDatabases, _DatabaseManagerPlugin_restoreToPreviousDatabases, _DatabaseManagerPlugin_uploadDatabase, _DatabaseManagerPlugin_resetToDefaultDatabase, _DatabaseManagerPlugin_restoreToPreviousDatabase; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DatabaseManagerPlugin = void 0; -const airuniteditor_1 = require("./airuniteditor"); -const grounduniteditor_1 = require("./grounduniteditor"); -const navyuniteditor_1 = require("./navyuniteditor"); -/** Database Manager - * - * This database provides a user interface to allow easier and convenient unit databases manipulation. It allows to edit all the fields of the units databases, save them - * on the server, and restore the defaults. - * - * TODO: - * Add ability to manage liveries - * - */ -class DatabaseManagerPlugin { - constructor() { - _DatabaseManagerPlugin_instances.add(this); - _DatabaseManagerPlugin_app.set(this, void 0); - _DatabaseManagerPlugin_element.set(this, void 0); - _DatabaseManagerPlugin_mainContentContainer.set(this, void 0); - _DatabaseManagerPlugin_contentDiv1.set(this, void 0); - _DatabaseManagerPlugin_contentDiv2.set(this, void 0); - _DatabaseManagerPlugin_contentDiv3.set(this, void 0); - /* Upper tab buttons */ - _DatabaseManagerPlugin_button1.set(this, void 0); - _DatabaseManagerPlugin_button2.set(this, void 0); - _DatabaseManagerPlugin_button3.set(this, void 0); - _DatabaseManagerPlugin_button4.set(this, void 0); - /* Lower operation buttons */ - _DatabaseManagerPlugin_button5.set(this, void 0); - _DatabaseManagerPlugin_button6.set(this, void 0); - _DatabaseManagerPlugin_button7.set(this, void 0); - _DatabaseManagerPlugin_button8.set(this, void 0); - _DatabaseManagerPlugin_button9.set(this, void 0); - /* Database editors */ - _DatabaseManagerPlugin_aircraftEditor.set(this, void 0); - _DatabaseManagerPlugin_helicopterEditor.set(this, void 0); - _DatabaseManagerPlugin_groundUnitEditor.set(this, void 0); - _DatabaseManagerPlugin_navyUnitEditor.set(this, void 0); - /* Create main HTML element */ - __classPrivateFieldSet(this, _DatabaseManagerPlugin_element, document.createElement("div"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_element, "f").id = "database-manager-panel"; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_element, "f").oncontextmenu = () => { return false; }; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_element, "f").classList.add("ol-dialog"); - document.body.appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_element, "f")); - /* Start hidden */ - this.toggle(false); - /* Create the top tab buttons container and buttons */ - let topButtonContainer = document.createElement("div"); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_button1, document.createElement("button"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button1, "f").classList.add("tab-button"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button1, "f").textContent = "Aircraft database"; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button1, "f").onclick = () => { __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_hideAll).call(this); __classPrivateFieldGet(this, _DatabaseManagerPlugin_aircraftEditor, "f").show(); __classPrivateFieldGet(this, _DatabaseManagerPlugin_button1, "f").classList.add("selected"); }; - topButtonContainer.appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_button1, "f")); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_button2, document.createElement("button"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button2, "f").classList.add("tab-button"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button2, "f").textContent = "Helicopter database"; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button2, "f").onclick = () => { __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_hideAll).call(this); __classPrivateFieldGet(this, _DatabaseManagerPlugin_helicopterEditor, "f").show(); __classPrivateFieldGet(this, _DatabaseManagerPlugin_button2, "f").classList.add("selected"); }; - topButtonContainer.appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_button2, "f")); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_button3, document.createElement("button"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button3, "f").classList.add("tab-button"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button3, "f").textContent = "Ground Unit database"; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button3, "f").onclick = () => { __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_hideAll).call(this); __classPrivateFieldGet(this, _DatabaseManagerPlugin_groundUnitEditor, "f").show(); __classPrivateFieldGet(this, _DatabaseManagerPlugin_button3, "f").classList.add("selected"); }; - topButtonContainer.appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_button3, "f")); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_button4, document.createElement("button"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button4, "f").classList.add("tab-button"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button4, "f").textContent = "Navy Unit database"; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button4, "f").onclick = () => { __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_hideAll).call(this); __classPrivateFieldGet(this, _DatabaseManagerPlugin_navyUnitEditor, "f").show(); __classPrivateFieldGet(this, _DatabaseManagerPlugin_button4, "f").classList.add("selected"); }; - topButtonContainer.appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_button4, "f")); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_element, "f").appendChild(topButtonContainer); - /* Create the container for the database editor elements and the elements themselves */ - __classPrivateFieldSet(this, _DatabaseManagerPlugin_mainContentContainer, document.createElement("div"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_mainContentContainer, "f").classList.add("dm-container"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_element, "f").appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_mainContentContainer, "f")); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_contentDiv1, document.createElement("div"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv1, "f").classList.add("dm-content-container", "ol-scrollable"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_mainContentContainer, "f").appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv1, "f")); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_contentDiv2, document.createElement("div"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv2, "f").classList.add("dm-content-container", "ol-scrollable"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_mainContentContainer, "f").appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv2, "f")); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_contentDiv3, document.createElement("div"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv3, "f").classList.add("dm-content-container", "ol-scrollable"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_mainContentContainer, "f").appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv3, "f")); - /* Create the database editors, which use the three divs created before */ - __classPrivateFieldSet(this, _DatabaseManagerPlugin_aircraftEditor, new airuniteditor_1.AirUnitEditor(__classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv1, "f"), __classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv2, "f"), __classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv3, "f")), "f"); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_helicopterEditor, new airuniteditor_1.AirUnitEditor(__classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv1, "f"), __classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv2, "f"), __classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv3, "f")), "f"); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_groundUnitEditor, new grounduniteditor_1.GroundUnitEditor(__classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv1, "f"), __classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv2, "f"), __classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv3, "f")), "f"); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_navyUnitEditor, new navyuniteditor_1.NavyUnitEditor(__classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv1, "f"), __classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv2, "f"), __classPrivateFieldGet(this, _DatabaseManagerPlugin_contentDiv3, "f")), "f"); - /* Create the bottom buttons container. These buttons allow to save, restore, reset, and discard the changes */ - let bottomButtonContainer = document.createElement("div"); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_button5, document.createElement("button"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button5, "f").textContent = "Save"; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button5, "f").title = "Save the changes on the server"; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button5, "f").onclick = () => { __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_saveDatabases).call(this); }; - bottomButtonContainer.appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_button5, "f")); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_button6, document.createElement("button"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button6, "f").textContent = "Discard"; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button6, "f").title = "Discard all changes and reload the database from the server"; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button6, "f").onclick = () => { __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_loadDatabases).call(this); }; - bottomButtonContainer.appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_button6, "f")); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_button7, document.createElement("button"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button7, "f").textContent = "Reset defaults"; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button7, "f").onclick = () => { __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_resetToDefaultDatabases).call(this); }; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button7, "f").title = "Reset the databases to the default values"; - bottomButtonContainer.appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_button7, "f")); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_button8, document.createElement("button"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button8, "f").textContent = "Restore previous"; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button8, "f").onclick = () => { __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_restoreToPreviousDatabases).call(this); }; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button8, "f").title = "Restore the previously saved databases. Use this if you saved a database by mistake."; - bottomButtonContainer.appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_button8, "f")); - __classPrivateFieldSet(this, _DatabaseManagerPlugin_button9, document.createElement("button"), "f"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button9, "f").textContent = "Close"; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button9, "f").title = "Close the Database Manager"; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button9, "f").onclick = () => { this.toggle(false); }; - bottomButtonContainer.appendChild(__classPrivateFieldGet(this, _DatabaseManagerPlugin_button9, "f")); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_element, "f").appendChild(bottomButtonContainer); - } - /** - * - * @returns The name of the plugin - */ - getName() { - return "Database Control Plugin"; - } - /** Initialize the plugin - * - * @param app The OlympusApp singleton - * @returns True if successfull - */ - initialize(app) { - var _a; - __classPrivateFieldSet(this, _DatabaseManagerPlugin_app, app, "f"); - const contextManager = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f").getContextManager(); - contextManager.add("databaseManager", { - "allowUnitCopying": false, - "allowUnitPasting": false, - "useSpawnMenu": false, - "useUnitControlPanel": false, - "useUnitInfoPanel": false - }); - /* Load the databases and initialize the editors */ - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_loadDatabases).call(this); - /* Add a button to the main Olympus App to allow the users to open the dialog */ - var mainButtonDiv = document.createElement("div"); - var mainButton = document.createElement("button"); - mainButton.textContent = "Database manager"; - mainButtonDiv.appendChild(mainButton); - var toolbar = (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getToolbarsManager().get("primaryToolbar"); - var elements = toolbar.getMainDropdown().getOptionElements(); - var arr = Array.prototype.slice.call(elements); - arr.splice(arr.length - 3, 0, mainButtonDiv); - toolbar.getMainDropdown().setOptionsElements(arr); - mainButton.onclick = () => { - var _a; - toolbar.getMainDropdown().close(); - if (((_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getMissionManager().getCommandModeOptions().commandMode) === "Game master") - this.toggle(); - }; - return true; - } - /** - * - * @returns The main container element - */ - getElement() { - return __classPrivateFieldGet(this, _DatabaseManagerPlugin_element, "f"); - } - /** Toggles the visibility of the dialog - * - * @param bool Force a specific visibility state - */ - toggle(bool) { - if (bool) - this.getElement().classList.toggle("hide", !bool); - else - this.getElement().classList.toggle("hide"); - if (__classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) - __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f").getContextManager().setContext(this.getElement().classList.contains("hide") ? "olympus" : "databaseManager"); - } -} -exports.DatabaseManagerPlugin = DatabaseManagerPlugin; -_DatabaseManagerPlugin_app = new WeakMap(), _DatabaseManagerPlugin_element = new WeakMap(), _DatabaseManagerPlugin_mainContentContainer = new WeakMap(), _DatabaseManagerPlugin_contentDiv1 = new WeakMap(), _DatabaseManagerPlugin_contentDiv2 = new WeakMap(), _DatabaseManagerPlugin_contentDiv3 = new WeakMap(), _DatabaseManagerPlugin_button1 = new WeakMap(), _DatabaseManagerPlugin_button2 = new WeakMap(), _DatabaseManagerPlugin_button3 = new WeakMap(), _DatabaseManagerPlugin_button4 = new WeakMap(), _DatabaseManagerPlugin_button5 = new WeakMap(), _DatabaseManagerPlugin_button6 = new WeakMap(), _DatabaseManagerPlugin_button7 = new WeakMap(), _DatabaseManagerPlugin_button8 = new WeakMap(), _DatabaseManagerPlugin_button9 = new WeakMap(), _DatabaseManagerPlugin_aircraftEditor = new WeakMap(), _DatabaseManagerPlugin_helicopterEditor = new WeakMap(), _DatabaseManagerPlugin_groundUnitEditor = new WeakMap(), _DatabaseManagerPlugin_navyUnitEditor = new WeakMap(), _DatabaseManagerPlugin_instances = new WeakSet(), _DatabaseManagerPlugin_hideAll = function _DatabaseManagerPlugin_hideAll() { - __classPrivateFieldGet(this, _DatabaseManagerPlugin_aircraftEditor, "f").hide(); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_helicopterEditor, "f").hide(); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_groundUnitEditor, "f").hide(); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_navyUnitEditor, "f").hide(); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button1, "f").classList.remove("selected"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button2, "f").classList.remove("selected"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button3, "f").classList.remove("selected"); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button4, "f").classList.remove("selected"); -}, _DatabaseManagerPlugin_loadDatabases = function _DatabaseManagerPlugin_loadDatabases() { - var _a, _b, _c, _d; - var aircraftDatabase = (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getAircraftDatabase(); - if (aircraftDatabase != null) - __classPrivateFieldGet(this, _DatabaseManagerPlugin_aircraftEditor, "f").setDatabase(aircraftDatabase); - var helicopterDatabase = (_b = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _b === void 0 ? void 0 : _b.getHelicopterDatabase(); - if (helicopterDatabase != null) - __classPrivateFieldGet(this, _DatabaseManagerPlugin_helicopterEditor, "f").setDatabase(helicopterDatabase); - var groundUnitDatabase = (_c = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _c === void 0 ? void 0 : _c.getGroundUnitDatabase(); - if (groundUnitDatabase != null) - __classPrivateFieldGet(this, _DatabaseManagerPlugin_groundUnitEditor, "f").setDatabase(groundUnitDatabase); - var navyUnitDatabase = (_d = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _d === void 0 ? void 0 : _d.getNavyUnitDatabase(); - if (navyUnitDatabase != null) - __classPrivateFieldGet(this, _DatabaseManagerPlugin_navyUnitEditor, "f").setDatabase(navyUnitDatabase); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_hideAll).call(this); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_aircraftEditor, "f").show(); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button1, "f").classList.add("selected"); -}, _DatabaseManagerPlugin_saveDatabases = function _DatabaseManagerPlugin_saveDatabases() { - var aircraftDatabase = __classPrivateFieldGet(this, _DatabaseManagerPlugin_aircraftEditor, "f").getDatabase(); - if (aircraftDatabase) { - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_uploadDatabase).call(this, aircraftDatabase, "aircraftdatabase", "Aircraft database", () => { - var helicopterDatabase = __classPrivateFieldGet(this, _DatabaseManagerPlugin_helicopterEditor, "f").getDatabase(); - if (helicopterDatabase) { - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_uploadDatabase).call(this, helicopterDatabase, "helicopterDatabase", "Helicopter database", () => { - var groundUnitDatabase = __classPrivateFieldGet(this, _DatabaseManagerPlugin_groundUnitEditor, "f").getDatabase(); - if (groundUnitDatabase) { - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_uploadDatabase).call(this, groundUnitDatabase, "groundUnitDatabase", "Ground Unit database", () => { - var navyUnitDatabase = __classPrivateFieldGet(this, _DatabaseManagerPlugin_navyUnitEditor, "f").getDatabase(); - if (navyUnitDatabase) { - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_uploadDatabase).call(this, navyUnitDatabase, "navyUnitDatabase", "Navy Unit database", () => { - var _a, _b, _c, _d, _e; - (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getAircraftDatabase().load(() => { }); - (_b = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _b === void 0 ? void 0 : _b.getHelicopterDatabase().load(() => { }); - (_c = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _c === void 0 ? void 0 : _c.getGroundUnitDatabase().load(() => { }); - (_d = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _d === void 0 ? void 0 : _d.getNavyUnitDatabase().load(() => { }); - (_e = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _e === void 0 ? void 0 : _e.getServerManager().reloadDatabases(() => { - var _a, _b; - (_b = (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getPopupsManager().get("infoPopup")) === null || _b === void 0 ? void 0 : _b.setText("Olympus core databases reloaded"); - }); - }); - } - }); - } - }); - } - }); - } -}, _DatabaseManagerPlugin_resetToDefaultDatabases = function _DatabaseManagerPlugin_resetToDefaultDatabases() { - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_resetToDefaultDatabase).call(this, "aircraftdatabase", "Aircraft database", () => { - var _a; - (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getAircraftDatabase().load(() => { - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_resetToDefaultDatabase).call(this, "helicopterdatabase", "Helicopter database", () => { - var _a; - (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getHelicopterDatabase().load(() => { - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_resetToDefaultDatabase).call(this, "groundunitdatabase", "Ground Unit database", () => { - var _a; - (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getGroundUnitDatabase().load(() => { - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_resetToDefaultDatabase).call(this, "navyunitdatabase", "Navy Unit database", () => { - var _a; - (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getNavyUnitDatabase().load(() => { - var _a; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_loadDatabases).call(this); - (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getServerManager().reloadDatabases(() => { - var _a, _b; - (_b = (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getPopupsManager().get("infoPopup")) === null || _b === void 0 ? void 0 : _b.setText("Olympus core databases reloaded"); - }); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_hideAll).call(this); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_aircraftEditor, "f").show(); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button1, "f").classList.add("selected"); - }); - }); - }); - }); - }); - }); - }); - }); -}, _DatabaseManagerPlugin_restoreToPreviousDatabases = function _DatabaseManagerPlugin_restoreToPreviousDatabases() { - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_restoreToPreviousDatabase).call(this, "aircraftdatabase", "Aircraft database", () => { - var _a; - (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getAircraftDatabase().load(() => { - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_restoreToPreviousDatabase).call(this, "helicopterdatabase", "Helicopter database", () => { - var _a; - (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getHelicopterDatabase().load(() => { - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_restoreToPreviousDatabase).call(this, "groundunitdatabase", "Ground Unit database", () => { - var _a; - (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getGroundUnitDatabase().load(() => { - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_restoreToPreviousDatabase).call(this, "navyunitdatabase", "Navy Unit database", () => { - var _a; - (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getNavyUnitDatabase().load(() => { - var _a; - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_loadDatabases).call(this); - (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getServerManager().reloadDatabases(() => { - var _a, _b; - (_b = (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getPopupsManager().get("infoPopup")) === null || _b === void 0 ? void 0 : _b.setText("Olympus core databases reloaded"); - }); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_instances, "m", _DatabaseManagerPlugin_hideAll).call(this); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_aircraftEditor, "f").show(); - __classPrivateFieldGet(this, _DatabaseManagerPlugin_button1, "f").classList.add("selected"); - }); - }); - }); - }); - }); - }); - }); - }); -}, _DatabaseManagerPlugin_uploadDatabase = function _DatabaseManagerPlugin_uploadDatabase(database, name, label, callback) { - var xmlHttp = new XMLHttpRequest(); - xmlHttp.open("PUT", "/api/databases/save/units/" + name); - xmlHttp.setRequestHeader("Content-Type", "application/json"); - xmlHttp.onload = (res) => { - var _a, _b, _c, _d; - if (xmlHttp.status == 200) { - (_b = (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getPopupsManager().get("infoPopup")) === null || _b === void 0 ? void 0 : _b.setText(label + " saved successfully"); - callback(); - } - else { - (_d = (_c = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _c === void 0 ? void 0 : _c.getPopupsManager().get("infoPopup")) === null || _d === void 0 ? void 0 : _d.setText("An error has occurred while saving the " + label); - } - }; - xmlHttp.onerror = (res) => { - var _a, _b; - (_b = (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getPopupsManager().get("infoPopup")) === null || _b === void 0 ? void 0 : _b.setText("An error has occurred while saving the " + label); - }; - xmlHttp.send(JSON.stringify(database)); -}, _DatabaseManagerPlugin_resetToDefaultDatabase = function _DatabaseManagerPlugin_resetToDefaultDatabase(name, label, callback) { - var xmlHttp = new XMLHttpRequest(); - xmlHttp.open("PUT", "/api/databases/reset/units/" + name); - xmlHttp.setRequestHeader("Content-Type", "application/json"); - xmlHttp.onload = (res) => { - var _a, _b, _c, _d; - if (xmlHttp.status == 200) { - (_b = (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getPopupsManager().get("infoPopup")) === null || _b === void 0 ? void 0 : _b.setText(label + " reset successfully"); - callback(); - } - else { - (_d = (_c = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _c === void 0 ? void 0 : _c.getPopupsManager().get("infoPopup")) === null || _d === void 0 ? void 0 : _d.setText("An error has occurred while resetting the " + label); - } - }; - xmlHttp.onerror = (res) => { - var _a, _b; - (_b = (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getPopupsManager().get("infoPopup")) === null || _b === void 0 ? void 0 : _b.setText("An error has occurred while resetting the " + label); - }; - xmlHttp.send(""); -}, _DatabaseManagerPlugin_restoreToPreviousDatabase = function _DatabaseManagerPlugin_restoreToPreviousDatabase(name, label, callback) { - var xmlHttp = new XMLHttpRequest(); - xmlHttp.open("PUT", "/api/databases/restore/units/" + name); - xmlHttp.setRequestHeader("Content-Type", "application/json"); - xmlHttp.onload = (res) => { - var _a, _b, _c, _d; - if (xmlHttp.status == 200) { - (_b = (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getPopupsManager().get("infoPopup")) === null || _b === void 0 ? void 0 : _b.setText(label + " restored successfully"); - callback(); - } - else { - (_d = (_c = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _c === void 0 ? void 0 : _c.getPopupsManager().get("infoPopup")) === null || _d === void 0 ? void 0 : _d.setText("An error has occurred while restoring the " + label); - } - }; - xmlHttp.onerror = (res) => { - var _a, _b; - (_b = (_a = __classPrivateFieldGet(this, _DatabaseManagerPlugin_app, "f")) === null || _a === void 0 ? void 0 : _a.getPopupsManager().get("infoPopup")) === null || _b === void 0 ? void 0 : _b.setText("An error has occurred while restoring the " + label); - }; - xmlHttp.send(""); -}; - -},{"./airuniteditor":1,"./grounduniteditor":3,"./navyuniteditor":6}],3:[function(require,module,exports){ -"use strict"; -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { - if (kind === "m") throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; -}; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); -}; -var _GroundUnitEditor_blueprint; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GroundUnitEditor = void 0; -const uniteditor_1 = require("./uniteditor"); -const utils_1 = require("./utils"); -/** Database editor for ground units - * - */ -class GroundUnitEditor extends uniteditor_1.UnitEditor { - constructor(contentDiv1, contentDiv2, contentDiv3) { - super(contentDiv1, contentDiv2, contentDiv3); - _GroundUnitEditor_blueprint.set(this, null); - } - /** Sets a unit blueprint as the currently active one - * - * @param blueprint The blueprint to edit - */ - setBlueprint(blueprint) { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w; - __classPrivateFieldSet(this, _GroundUnitEditor_blueprint, blueprint, "f"); - if (__classPrivateFieldGet(this, _GroundUnitEditor_blueprint, "f") !== null) { - this.contentDiv2.replaceChildren(); - var title = document.createElement("label"); - title.innerText = "Unit properties"; - this.contentDiv2.appendChild(title); - (0, utils_1.addStringInput)(this.contentDiv2, "Name", blueprint.name, "text", (value) => { blueprint.name = value; }, true); - (0, utils_1.addStringInput)(this.contentDiv2, "Label", blueprint.label, "text", (value) => { blueprint.label = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Short label", blueprint.shortLabel, "text", (value) => { blueprint.shortLabel = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Type", (_a = blueprint.type) !== null && _a !== void 0 ? _a : "", "text", (value) => { blueprint.type = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Unit when grouped", (_b = blueprint.unitWhenGrouped) !== null && _b !== void 0 ? _b : "", "text", (value) => { blueprint.unitWhenGrouped = value; }); - (0, utils_1.addDropdownInput)(this.contentDiv2, "Coalition", blueprint.coalition, ["", "blue", "red"], (value) => { blueprint.coalition = value; }); - (0, utils_1.addDropdownInput)(this.contentDiv2, "Era", blueprint.era, ["WW2", "Early Cold War", "Mid Cold War", "Late Cold War", "Modern"], (value) => { blueprint.era = value; }); - //addStringInput(this.contentDiv2, "Filename", blueprint.filename?? "", "text", (value: string) => {blueprint.filename = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Cost", (_c = String(blueprint.cost)) !== null && _c !== void 0 ? _c : "", "number", (value) => { blueprint.cost = parseFloat(value); }); - (0, utils_1.addStringInput)(this.contentDiv2, "Acquisition range [m]", (_d = String(blueprint.acquisitionRange)) !== null && _d !== void 0 ? _d : "", "number", (value) => { blueprint.acquisitionRange = parseFloat(value); }); - (0, utils_1.addStringInput)(this.contentDiv2, "Engagement range [m]", (_e = String(blueprint.engagementRange)) !== null && _e !== void 0 ? _e : "", "number", (value) => { blueprint.engagementRange = parseFloat(value); }); - (0, utils_1.addStringInput)(this.contentDiv2, "Targeting range [m]", (_f = String(blueprint.targetingRange)) !== null && _f !== void 0 ? _f : "", "number", (value) => { blueprint.targetingRange = parseFloat(value); }); - (0, utils_1.addStringInput)(this.contentDiv2, "Aim method range [m]", (_g = String(blueprint.aimMethodRange)) !== null && _g !== void 0 ? _g : "", "number", (value) => { blueprint.aimMethodRange = parseFloat(value); }); - (0, utils_1.addStringInput)(this.contentDiv2, "Barrel height [m]", (_h = String(blueprint.barrelHeight)) !== null && _h !== void 0 ? _h : "", "number", (value) => { blueprint.barrelHeight = parseFloat(value); }); - (0, utils_1.addStringInput)(this.contentDiv2, "Muzzle velocity [m/s]", (_j = String(blueprint.muzzleVelocity)) !== null && _j !== void 0 ? _j : "", "number", (value) => { blueprint.muzzleVelocity = parseFloat(value); }); - (0, utils_1.addStringInput)(this.contentDiv2, "Aim time [s]", (_k = String(blueprint.aimTime)) !== null && _k !== void 0 ? _k : "", "number", (value) => { blueprint.aimTime = parseFloat(value); }); - (0, utils_1.addStringInput)(this.contentDiv2, "Shots to fire", (_l = String(blueprint.shotsToFire)) !== null && _l !== void 0 ? _l : "", "number", (value) => { blueprint.shotsToFire = Math.round(parseFloat(value)); }); - (0, utils_1.addStringInput)(this.contentDiv2, "Shots base interval [s]", (_m = String(blueprint.shotsBaseInterval)) !== null && _m !== void 0 ? _m : "", "number", (value) => { blueprint.shotsBaseInterval = Math.round(parseFloat(value)); }); - (0, utils_1.addStringInput)(this.contentDiv2, "Shots base scatter [°]", (_o = String(blueprint.shotsBaseScatter)) !== null && _o !== void 0 ? _o : "", "number", (value) => { blueprint.shotsBaseScatter = Math.round(parseFloat(value)); }); - (0, utils_1.addStringInput)(this.contentDiv2, "Alertness time constant [s]", (_p = String(blueprint.alertnessTimeConstant)) !== null && _p !== void 0 ? _p : "", "number", (value) => { blueprint.alertnessTimeConstant = Math.round(parseFloat(value)); }); - (0, utils_1.addCheckboxInput)(this.contentDiv2, "Can target point", (_q = blueprint.canTargetPoint) !== null && _q !== void 0 ? _q : false, (value) => { blueprint.canTargetPoint = value; }); - (0, utils_1.addCheckboxInput)(this.contentDiv2, "Can rearm", (_r = blueprint.canRearm) !== null && _r !== void 0 ? _r : false, (value) => { blueprint.canRearm = value; }); - (0, utils_1.addCheckboxInput)(this.contentDiv2, "Can operate as AAA", (_s = blueprint.canAAA) !== null && _s !== void 0 ? _s : false, (value) => { blueprint.canAAA = value; }); - (0, utils_1.addCheckboxInput)(this.contentDiv2, "Indirect fire (e.g. mortar)", (_t = blueprint.indirectFire) !== null && _t !== void 0 ? _t : false, (value) => { blueprint.indirectFire = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Description", (_u = blueprint.description) !== null && _u !== void 0 ? _u : "", "text", (value) => { blueprint.description = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Tags", (_v = blueprint.tags) !== null && _v !== void 0 ? _v : "", "text", (value) => { blueprint.tags = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Marker file", (_w = blueprint.markerFile) !== null && _w !== void 0 ? _w : "", "text", (value) => { blueprint.markerFile = value; }); - } - } - /** Add a new empty blueprint - * - * @param key Blueprint key - */ - addBlueprint(key) { - if (this.database != null) { - this.database.blueprints[key] = { - name: key, - coalition: "", - label: "", - shortLabel: "", - era: "", - enabled: true - }; - this.show(); - this.setBlueprint(this.database.blueprints[key]); - } - } -} -exports.GroundUnitEditor = GroundUnitEditor; -_GroundUnitEditor_blueprint = new WeakMap(); - -},{"./uniteditor":7,"./utils":8}],4:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const databasemanagerplugin_1 = require("./databasemanagerplugin"); -globalThis.getOlympusPlugin = () => { - return new databasemanagerplugin_1.DatabaseManagerPlugin(); -}; - -},{"./databasemanagerplugin":2}],5:[function(require,module,exports){ -"use strict"; -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { - if (kind === "m") throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; -}; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); -}; -var _LoadoutEditor_contentDiv, _LoadoutEditor_loadout, _LoadoutEditor_visible; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LoadoutEditor = void 0; -const utils_1 = require("./utils"); -/** The LoadoutEditor allows the user to edit a loadout - * - */ -class LoadoutEditor { - constructor(contentDiv) { - _LoadoutEditor_contentDiv.set(this, void 0); - _LoadoutEditor_loadout.set(this, null); - _LoadoutEditor_visible.set(this, false); - __classPrivateFieldSet(this, _LoadoutEditor_contentDiv, contentDiv, "f"); - __classPrivateFieldGet(this, _LoadoutEditor_contentDiv, "f").addEventListener("refresh", () => { - if (__classPrivateFieldGet(this, _LoadoutEditor_visible, "f")) - this.show(); - }); - } - /** Set the loadout to edit - * - * @param loadout The loadout to edit - */ - setLoadout(loadout) { - __classPrivateFieldSet(this, _LoadoutEditor_loadout, loadout, "f"); - } - /** Show the editor - * - */ - show() { - __classPrivateFieldSet(this, _LoadoutEditor_visible, true, "f"); - __classPrivateFieldGet(this, _LoadoutEditor_contentDiv, "f").replaceChildren(); - var title = document.createElement("label"); - title.innerText = "Loadout properties"; - __classPrivateFieldGet(this, _LoadoutEditor_contentDiv, "f").appendChild(title); - if (__classPrivateFieldGet(this, _LoadoutEditor_loadout, "f")) { - var loadout = __classPrivateFieldGet(this, _LoadoutEditor_loadout, "f"); - (0, utils_1.addStringInput)(__classPrivateFieldGet(this, _LoadoutEditor_contentDiv, "f"), "Name", loadout.name, "text", (value) => { loadout.name = value; __classPrivateFieldGet(this, _LoadoutEditor_contentDiv, "f").dispatchEvent(new Event("refresh")); }); - (0, utils_1.addStringInput)(__classPrivateFieldGet(this, _LoadoutEditor_contentDiv, "f"), "Code", loadout.code, "text", (value) => { loadout.code = value; }); - (0, utils_1.addStringInput)(__classPrivateFieldGet(this, _LoadoutEditor_contentDiv, "f"), "Roles", (0, utils_1.arrayToString)(loadout.roles), "text", (value) => { loadout.roles = (0, utils_1.stringToArray)(value); }); - (0, utils_1.addLoadoutItemsEditor)(__classPrivateFieldGet(this, _LoadoutEditor_contentDiv, "f"), __classPrivateFieldGet(this, _LoadoutEditor_loadout, "f")); - } - } - /** Hide the editor - * - */ - hide() { - __classPrivateFieldSet(this, _LoadoutEditor_visible, false, "f"); - __classPrivateFieldGet(this, _LoadoutEditor_contentDiv, "f").replaceChildren(); - } -} -exports.LoadoutEditor = LoadoutEditor; -_LoadoutEditor_contentDiv = new WeakMap(), _LoadoutEditor_loadout = new WeakMap(), _LoadoutEditor_visible = new WeakMap(); - -},{"./utils":8}],6:[function(require,module,exports){ -"use strict"; -var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { - if (kind === "m") throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; -}; -var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); -}; -var _NavyUnitEditor_blueprint; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NavyUnitEditor = void 0; -const uniteditor_1 = require("./uniteditor"); -const utils_1 = require("./utils"); -/** Database editor for navy units - * - */ -class NavyUnitEditor extends uniteditor_1.UnitEditor { - constructor(contentDiv1, contentDiv2, contentDiv3) { - super(contentDiv1, contentDiv2, contentDiv3); - _NavyUnitEditor_blueprint.set(this, null); - } - /** Sets a unit blueprint as the currently active one - * - * @param blueprint The blueprint to edit - */ - setBlueprint(blueprint) { - var _a, _b, _c, _d; - __classPrivateFieldSet(this, _NavyUnitEditor_blueprint, blueprint, "f"); - if (__classPrivateFieldGet(this, _NavyUnitEditor_blueprint, "f") !== null) { - this.contentDiv2.replaceChildren(); - var title = document.createElement("label"); - title.innerText = "Unit properties"; - this.contentDiv2.appendChild(title); - (0, utils_1.addStringInput)(this.contentDiv2, "Name", blueprint.name, "text", (value) => { blueprint.name = value; }, true); - (0, utils_1.addStringInput)(this.contentDiv2, "Label", blueprint.label, "text", (value) => { blueprint.label = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Short label", blueprint.shortLabel, "text", (value) => { blueprint.shortLabel = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Type", (_a = blueprint.type) !== null && _a !== void 0 ? _a : "", "text", (value) => { blueprint.type = value; }); - (0, utils_1.addDropdownInput)(this.contentDiv2, "Coalition", blueprint.coalition, ["", "blue", "red"], (value) => { blueprint.coalition = value; }); - (0, utils_1.addDropdownInput)(this.contentDiv2, "Era", blueprint.era, ["WW2", "Early Cold War", "Mid Cold War", "Late Cold War", "Modern"], (value) => { blueprint.era = value; }); - //addStringInput(this.contentDiv2, "Filename", blueprint.filename?? "", "text", (value: string) => {blueprint.filename = value; }); - (0, utils_1.addStringInput)(this.contentDiv2, "Cost", (_b = String(blueprint.cost)) !== null && _b !== void 0 ? _b : "", "number", (value) => { blueprint.cost = parseFloat(value); }); - (0, utils_1.addStringInput)(this.contentDiv2, "Barrel height [m]", (_c = String(blueprint.barrelHeight)) !== null && _c !== void 0 ? _c : "", "number", (value) => { blueprint.barrelHeight = parseFloat(value); }); - (0, utils_1.addStringInput)(this.contentDiv2, "Muzzle velocity [m/s]", (_d = String(blueprint.muzzleVelocity)) !== null && _d !== void 0 ? _d : "", "number", (value) => { blueprint.muzzleVelocity = parseFloat(value); }); - } - } - /** Add a new empty blueprint - * - * @param key Blueprint key - */ - addBlueprint(key) { - if (this.database != null) { - this.database.blueprints[key] = { - name: key, - coalition: "", - label: "", - shortLabel: "", - era: "", - enabled: true - }; - this.show(); - this.setBlueprint(this.database.blueprints[key]); - } - } -} -exports.NavyUnitEditor = NavyUnitEditor; -_NavyUnitEditor_blueprint = new WeakMap(); - -},{"./uniteditor":7,"./utils":8}],7:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UnitEditor = void 0; -const utils_1 = require("./utils"); -/** Base abstract class of Unit database editors - * - */ -class UnitEditor { - constructor(contentDiv1, contentDiv2, contentDiv3) { - this.blueprint = null; - this.database = null; - this.visible = false; - this.contentDiv1 = contentDiv1; - this.contentDiv2 = contentDiv2; - this.contentDiv3 = contentDiv3; - /* Refresh the list of units if it changes */ - this.contentDiv1.addEventListener("refresh", () => { - if (this.visible) - this.show(); - }); - /* If the unit properties or loadout are edited, reload the editor */ - this.contentDiv2.addEventListener("refresh", () => { - if (this.visible) { - if (this.blueprint !== null) - this.setBlueprint(this.blueprint); - } - }); - this.contentDiv3.addEventListener("refresh", () => { - if (this.visible) { - if (this.blueprint !== null) - this.setBlueprint(this.blueprint); - } - }); - } - /** - * - * @param database The database that the editor will operate on - */ - setDatabase(database) { - this.database = JSON.parse(JSON.stringify({ blueprints: database.getBlueprints(true) })); - } - /** Show the editor - * @param filter String filter - */ - show(filter = "") { - this.visible = true; - this.contentDiv1.replaceChildren(); - this.contentDiv2.replaceChildren(); - this.contentDiv3.replaceChildren(); - /* Create the list of units. Each unit is clickable to activate the editor on it */ - if (this.database != null) { - var title = document.createElement("label"); - title.innerText = "Units list"; - this.contentDiv1.appendChild(title); - var filterInput = document.createElement("input"); - filterInput.value = filter; - this.contentDiv1.appendChild(filterInput); - filterInput.onchange = (e) => { - this.show(e.target.value); - }; - this.addBlueprints(filter); - } - } - /** Hide the editor - * - */ - hide() { - this.visible = false; - this.contentDiv1.replaceChildren(); - this.contentDiv2.replaceChildren(); - this.contentDiv3.replaceChildren(); - } - /** - * - * @returns The edited database - */ - getDatabase() { - return this.database; - } - /** - * - * @param filter String filter - */ - addBlueprints(filter = "") { - if (this.database) { - (0, utils_1.addBlueprintsScroll)(this.contentDiv1, this.database, filter, (key) => { - if (this.database != null) - this.setBlueprint(this.database.blueprints[key]); - }); - (0, utils_1.addNewElementInput)(this.contentDiv1, (ev, input) => { - if (input.value != "") - this.addBlueprint((input).value); - }); - } - } -} -exports.UnitEditor = UnitEditor; - -},{"./utils":8}],8:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.stringToArray = exports.arrayToString = exports.addLoadoutsScroll = exports.addBlueprintsScroll = exports.addNewElementInput = exports.addLoadoutItemsEditor = exports.addCheckboxInput = exports.addDropdownInput = exports.addStringInput = void 0; -/** This file contains a set of utility functions that are reused in the various editors and allows to declutter the classes - * - */ -/** Add a string input in the form of String: [ value ] - * - * @param div The HTMLElement that will contain the input - * @param key The key of the input, which will be used as label - * @param value The initial value of the input - * @param type The type of the input, e.g. "Text" or "Number" as per html standard - * @param callback Callback called when the user enters a new value - * @param disabled If true, the input will be disabled and read only - */ -function addStringInput(div, key, value, type, callback, disabled) { - var row = document.createElement("div"); - var dt = document.createElement("dt"); - var dd = document.createElement("dd"); - dt.innerText = key; - var input = document.createElement("input"); - input.value = value; - input.textContent = value; - input.type = type !== null && type !== void 0 ? type : "text"; - input.disabled = disabled !== null && disabled !== void 0 ? disabled : false; - input.onchange = () => callback(input.value); - dd.appendChild(input); - row.appendChild(dt); - row.appendChild(dd); - row.classList.add("input-row"); - div.appendChild(row); -} -exports.addStringInput = addStringInput; -/** Add a dropdown (select) input - * - * @param div The HTMLElement that will contain the input - * @param key The key of the input, which will be used as label - * @param value The initial value of the input - * @param options The dropdown options - */ -function addDropdownInput(div, key, value, options, callback, disabled) { - var row = document.createElement("div"); - var dt = document.createElement("dt"); - var dd = document.createElement("dd"); - dt.innerText = key; - var select = document.createElement("select"); - options.forEach((option) => { - var el = document.createElement("option"); - el.value = option; - el.innerText = option; - select.appendChild(el); - }); - select.value = value; - select.disabled = disabled !== null && disabled !== void 0 ? disabled : false; - select.onchange = () => callback(select.value); - dd.appendChild(select); - row.appendChild(dt); - row.appendChild(dd); - row.classList.add("input-row"); - div.appendChild(row); -} -exports.addDropdownInput = addDropdownInput; -/** Add a checkbox input in the form of String: [ value ] - * - * @param div The HTMLElement that will contain the input - * @param key The key of the input, which will be used as label - * @param value The initial value of the input - * @param callback Callback called when the user enters a new value - * @param disabled If true, the input will be disabled and read only - */ -function addCheckboxInput(div, key, value, callback, disabled) { - var row = document.createElement("div"); - var dt = document.createElement("dt"); - var dd = document.createElement("dd"); - dt.innerText = key; - var input = document.createElement("input"); - input.checked = value; - input.type = "checkbox"; - input.disabled = disabled !== null && disabled !== void 0 ? disabled : false; - input.onchange = () => callback(input.checked); - dd.appendChild(input); - row.appendChild(dt); - row.appendChild(dd); - row.classList.add("input-row"); - div.appendChild(row); -} -exports.addCheckboxInput = addCheckboxInput; -/** Create a loadout items editor. This editor allows to add or remove loadout items, as well as changing their name and quantity - * - * @param div The HTMLElement that will contain the editor - * @param loadout The loadout to edit - */ -function addLoadoutItemsEditor(div, loadout) { - var itemsEl = document.createElement("div"); - itemsEl.classList.add("dm-scroll-container", "dm-items-container"); - /* Create a row for each loadout item to allow and change the name and quantity of the item itself */ - loadout.items.sort((a, b) => a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })); - loadout.items.forEach((item, index) => { - var rowDiv = document.createElement("div"); - var nameLabel = document.createElement("label"); - nameLabel.innerText = "Name"; - rowDiv.appendChild(nameLabel); - var nameInput = document.createElement("input"); - rowDiv.appendChild(nameInput); - nameInput.textContent = item.name; - nameInput.value = item.name; - nameInput.onchange = () => { loadout.items[index].name = nameInput.value; }; - var quantityLabel = document.createElement("label"); - quantityLabel.innerText = "Quantity"; - rowDiv.appendChild(quantityLabel); - var quantityInput = document.createElement("input"); - rowDiv.appendChild(quantityInput); - quantityInput.textContent = String(item.quantity); - quantityInput.value = String(item.quantity); - quantityInput.type = "number"; - quantityInput.step = "1"; - quantityInput.onchange = () => { loadout.items[index].quantity = parseInt(quantityInput.value); }; - /* This button allows to remove the item */ - var button = document.createElement("button"); - button.innerText = "X"; - button.onclick = () => { - loadout.items.splice(index, 1); - div.dispatchEvent(new Event("refresh")); - }; - rowDiv.appendChild(button); - itemsEl.appendChild(rowDiv); - }); - div.appendChild(itemsEl); - /* Button to add a new item to the loadout */ - var inputDiv = document.createElement("div"); - inputDiv.classList.add("dm-new-item-input"); - var button = document.createElement("button"); - button.innerText = "Add"; - inputDiv.appendChild(button); - div.appendChild(inputDiv); - button.addEventListener("click", (ev) => { - loadout === null || loadout === void 0 ? void 0 : loadout.items.push({ - name: "", - quantity: 1 - }); - div.dispatchEvent(new Event("refresh")); - }); -} -exports.addLoadoutItemsEditor = addLoadoutItemsEditor; -/** Add a input and button to create a new element in a list. It uses a generic callback to actually add the element. - * - * @param div The HTMLElement that will contain the input and button - * @param callback Callback called when the user clicks on "Add" - */ -function addNewElementInput(div, callback) { - var inputDiv = document.createElement("div"); - inputDiv.classList.add("dm-new-element-input"); - var input = document.createElement("input"); - inputDiv.appendChild(input); - var button = document.createElement("button"); - button.innerText = "Add"; - button.addEventListener("click", (ev) => callback(ev, input)); - inputDiv.appendChild(button); - div.appendChild(inputDiv); -} -exports.addNewElementInput = addNewElementInput; -/** Add a scrollable list of blueprints - * - * @param div The HTMLElement that will contain the list - * @param database The database that will be used to fill the list of blueprints - * @param filter A string filter that will be executed to filter the blueprints to add - * @param callback Callback called when the user clicks on one of the elements - */ -function addBlueprintsScroll(div, database, filter, callback) { - var scrollDiv = document.createElement("div"); - scrollDiv.classList.add("dm-scroll-container"); - if (database !== null) { - var blueprints = database.blueprints; - for (let key of Object.keys(blueprints).sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }))) { - var addKey = true; - if (filter !== "") { - try { - var blueprint = blueprints[key]; - addKey = eval(filter); - } - catch (_a) { - console.error("An error has occurred evaluating the blueprint filter"); - } - } - if (addKey) { - var rowDiv = document.createElement("div"); - scrollDiv.appendChild(rowDiv); - let text = document.createElement("div"); - text.innerHTML = `
${key}
${blueprints[key].label}
`; - text.onclick = () => { - callback(key); - const collection = document.getElementsByClassName("blueprint-selected"); - for (let i = 0; i < collection.length; i++) { - collection[i].classList.remove("blueprint-selected"); - } - text.classList.add("blueprint-selected"); - }; - rowDiv.appendChild(text); - let checkbox = document.createElement("input"); - checkbox.type = "checkbox"; - checkbox.checked = blueprints[key].enabled; - checkbox.onclick = () => { - console.log(checkbox.checked); - blueprints[key].enabled = checkbox.checked; - }; - rowDiv.appendChild(checkbox); - /* This button allows to remove an element from the list. It requires a refresh. */ - var button = document.createElement("button"); - button.innerText = "X"; - button.onclick = () => { - delete blueprints[key]; - div.dispatchEvent(new Event("refresh")); - }; - rowDiv.appendChild(button); - } - } - } - div.appendChild(scrollDiv); -} -exports.addBlueprintsScroll = addBlueprintsScroll; -/** Add a scrollable list of loadouts - * - * @param div The HTMLElement that will contain the list - * @param loadouts The loadouts that will be used to fill the list - * @param callback Callback called when the user clicks on one of the elements - */ -function addLoadoutsScroll(div, loadouts, callback) { - var loadoutsEl = document.createElement("div"); - loadoutsEl.classList.add("dm-scroll-container", "dm-loadout-container"); - loadouts.sort((a, b) => a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })); - loadouts.forEach((loadout, index) => { - var rowDiv = document.createElement("div"); - loadoutsEl.appendChild(rowDiv); - var text = document.createElement("label"); - text.textContent = loadout.name; - text.onclick = () => { callback(loadout); }; - rowDiv.appendChild(text); - /* The "Empty loadout" can not be removed */ - if (loadout.name !== "Empty loadout") { - let checkbox = document.createElement("input"); - checkbox.type = "checkbox"; - checkbox.checked = loadout.enabled; - checkbox.onclick = () => { - console.log(checkbox.checked); - loadout.enabled = checkbox.checked; - }; - rowDiv.appendChild(checkbox); - /* This button allows to remove an element from the list. It requires a refresh. */ - var button = document.createElement("button"); - button.innerText = "X"; - button.onclick = () => { - loadouts.splice(index, 1); - div.dispatchEvent(new Event("refresh")); - }; - rowDiv.appendChild(button); - } - }); - div.appendChild(loadoutsEl); -} -exports.addLoadoutsScroll = addLoadoutsScroll; -/** Converts an array of string into a single string like [val1, val2, val3] - * - * @param array The input array of strings - * @returns The string - */ -function arrayToString(array) { - return "[" + array.join(", ") + "]"; -} -exports.arrayToString = arrayToString; -/** Converts an a single string like [val1, val2, val3] into an array - * - * @param input The input string - * @returns The array - */ -function stringToArray(input) { - var _a; - return (_a = input.match(/(\w)+/g)) !== null && _a !== void 0 ? _a : []; -} -exports.stringToArray = stringToArray; - -},{}]},{},[4]); +!function(){var _$utils_8={};function addStringInput(a,t,e,i,n,s){var _=document.createElement("div"),l=document.createElement("dt"),r=document.createElement("dd");l.innerText=t;var o=document.createElement("input");o.value=e,o.textContent=e,o.type=null!=i?i:"text",o.disabled=null!=s&&s,o.onchange=()=>n(o.value),r.appendChild(o),_.appendChild(l),_.appendChild(r),_.classList.add("input-row"),a.appendChild(_)}function addDropdownInput(a,t,e,i,n,s){var _=document.createElement("div"),l=document.createElement("dt"),r=document.createElement("dd");l.innerText=t;var o=document.createElement("select");i.forEach(a=>{var t=document.createElement("option");t.value=a,t.innerText=a,o.appendChild(t)}),o.value=e,o.disabled=null!=s&&s,o.onchange=()=>n(o.value),r.appendChild(o),_.appendChild(l),_.appendChild(r),_.classList.add("input-row"),a.appendChild(_)}function addCheckboxInput(a,t,e,i,n){var s=document.createElement("div"),_=document.createElement("dt"),l=document.createElement("dd");_.innerText=t;var r=document.createElement("input");r.checked=e,r.type="checkbox",r.disabled=null!=n&&n,r.onchange=()=>i(r.checked),l.appendChild(r),s.appendChild(_),s.appendChild(l),s.classList.add("input-row"),a.appendChild(s)}function addLoadoutItemsEditor(a,t){var e=document.createElement("div");e.classList.add("dm-scroll-container","dm-items-container"),t.items.sort((a,t)=>a.name.localeCompare(t.name,void 0,{sensitivity:"base"})),t.items.forEach((i,n)=>{var s=document.createElement("div"),_=document.createElement("label");_.innerText="Name",s.appendChild(_);var l=document.createElement("input");s.appendChild(l),l.textContent=i.name,l.value=i.name,l.onchange=()=>{t.items[n].name=l.value};var r=document.createElement("label");r.innerText="Quantity",s.appendChild(r);var o=document.createElement("input");s.appendChild(o),o.textContent=String(i.quantity),o.value=String(i.quantity),o.type="number",o.step="1",o.onchange=()=>{t.items[n].quantity=parseInt(o.value)};var d=document.createElement("button");d.innerText="X",d.onclick=()=>{t.items.splice(n,1),a.dispatchEvent(new Event("refresh"))},s.appendChild(d),e.appendChild(s)}),a.appendChild(e);var i=document.createElement("div");i.classList.add("dm-new-item-input");var n=document.createElement("button");n.innerText="Add",i.appendChild(n),a.appendChild(i),n.addEventListener("click",e=>{null==t||t.items.push({name:"",quantity:1}),a.dispatchEvent(new Event("refresh"))})}function addNewElementInput(a,t){var e=document.createElement("div");e.classList.add("dm-new-element-input");var i=document.createElement("input");e.appendChild(i);var n=document.createElement("button");n.innerText="Add",n.addEventListener("click",a=>t(a,i)),e.appendChild(n),a.appendChild(e)}function addBlueprintsScroll(div,database,filter,callback){var scrollDiv=document.createElement("div");if(scrollDiv.classList.add("dm-scroll-container"),null!==database){var blueprints=database.blueprints;for(let key of Object.keys(blueprints).sort((a,t)=>a.localeCompare(t,void 0,{sensitivity:"base"}))){var addKey=!0;if(""!==filter)try{var blueprint=blueprints[key];addKey=eval(filter)}catch(_a){console.error("An error has occurred evaluating the blueprint filter")}if(addKey){var rowDiv=document.createElement("div");scrollDiv.appendChild(rowDiv);let a=document.createElement("div");a.innerHTML=`
${key}
${blueprints[key].label}
`,a.onclick=()=>{callback(key);const t=document.getElementsByClassName("blueprint-selected");for(let a=0;a{console.log(t.checked),blueprints[key].enabled=t.checked},rowDiv.appendChild(t);var button=document.createElement("button");button.innerText="X",button.onclick=()=>{delete blueprints[key],div.dispatchEvent(new Event("refresh"))},rowDiv.appendChild(button)}}}div.appendChild(scrollDiv)}function addLoadoutsScroll(a,t,e){var i=document.createElement("div");i.classList.add("dm-scroll-container","dm-loadout-container"),t.sort((a,t)=>a.name.localeCompare(t.name,void 0,{sensitivity:"base"})),t.forEach((n,s)=>{var _=document.createElement("div");i.appendChild(_);var l=document.createElement("label");if(l.textContent=n.name,l.onclick=()=>{e(n)},_.appendChild(l),"Empty loadout"!==n.name){let e=document.createElement("input");e.type="checkbox",e.checked=n.enabled,e.onclick=()=>{console.log(e.checked),n.enabled=e.checked},_.appendChild(e);var r=document.createElement("button");r.innerText="X",r.onclick=()=>{t.splice(s,1),a.dispatchEvent(new Event("refresh"))},_.appendChild(r)}}),a.appendChild(i)}function arrayToString(a){return"["+a.join(", ")+"]"}function stringToArray(a){var t;return null!==(t=a.match(/(\w)+/g))&&void 0!==t?t:[]}Object.defineProperty(_$utils_8,"__esModule",{value:!0}),_$utils_8.stringToArray=_$utils_8.arrayToString=_$utils_8.addLoadoutsScroll=_$utils_8.addBlueprintsScroll=_$utils_8.addNewElementInput=_$utils_8.addLoadoutItemsEditor=_$utils_8.addCheckboxInput=_$utils_8.addDropdownInput=_$utils_8.addStringInput=void 0,_$utils_8.addStringInput=addStringInput,_$utils_8.addDropdownInput=addDropdownInput,_$utils_8.addCheckboxInput=addCheckboxInput,_$utils_8.addLoadoutItemsEditor=addLoadoutItemsEditor,_$utils_8.addNewElementInput=addNewElementInput,_$utils_8.addBlueprintsScroll=addBlueprintsScroll,_$utils_8.addLoadoutsScroll=addLoadoutsScroll,_$utils_8.arrayToString=arrayToString,_$utils_8.stringToArray=stringToArray;var _$uniteditor_7={};Object.defineProperty(_$uniteditor_7,"__esModule",{value:!0}),_$uniteditor_7.UnitEditor=void 0,_$uniteditor_7.UnitEditor=class{constructor(a,t,e){this.blueprint=null,this.database=null,this.visible=!1,this.contentDiv1=a,this.contentDiv2=t,this.contentDiv3=e,this.contentDiv1.addEventListener("refresh",()=>{this.visible&&this.show()}),this.contentDiv2.addEventListener("refresh",()=>{this.visible&&null!==this.blueprint&&this.setBlueprint(this.blueprint)}),this.contentDiv3.addEventListener("refresh",()=>{this.visible&&null!==this.blueprint&&this.setBlueprint(this.blueprint)})}setDatabase(a){this.database=JSON.parse(JSON.stringify({blueprints:a.getBlueprints(!0)}))}show(a=""){if(this.visible=!0,this.contentDiv1.replaceChildren(),this.contentDiv2.replaceChildren(),this.contentDiv3.replaceChildren(),null!=this.database){var t=document.createElement("label");t.innerText="Units list",this.contentDiv1.appendChild(t);var e=document.createElement("input");e.value=a,this.contentDiv1.appendChild(e),e.onchange=a=>{this.show(a.target.value)},this.addBlueprints(a)}}hide(){this.visible=!1,this.contentDiv1.replaceChildren(),this.contentDiv2.replaceChildren(),this.contentDiv3.replaceChildren()}getDatabase(){return this.database}addBlueprints(a=""){this.database&&((0,_$utils_8.addBlueprintsScroll)(this.contentDiv1,this.database,a,a=>{null!=this.database&&this.setBlueprint(this.database.blueprints[a])}),(0,_$utils_8.addNewElementInput)(this.contentDiv1,(a,t)=>{""!=t.value&&this.addBlueprint(t.value)}))}};var _$loadouteditor_5={},_LoadoutEditor_contentDiv,_LoadoutEditor_loadout,_LoadoutEditor_visible,__classPrivateFieldSet=this&&this.__classPrivateFieldSet||function(a,t,e,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?a!==t||!n:!t.has(a))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(a,e):n?n.value=e:t.set(a,e),e},__classPrivateFieldGet=this&&this.__classPrivateFieldGet||function(a,t,e,i){if("a"===e&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?a!==t||!i:!t.has(a))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===e?i:"a"===e?i.call(a):i?i.value:t.get(a)};Object.defineProperty(_$loadouteditor_5,"__esModule",{value:!0}),_$loadouteditor_5.LoadoutEditor=void 0,_$loadouteditor_5.LoadoutEditor=class{constructor(a){_LoadoutEditor_contentDiv.set(this,void 0),_LoadoutEditor_loadout.set(this,null),_LoadoutEditor_visible.set(this,!1),__classPrivateFieldSet(this,_LoadoutEditor_contentDiv,a,"f"),__classPrivateFieldGet(this,_LoadoutEditor_contentDiv,"f").addEventListener("refresh",()=>{__classPrivateFieldGet(this,_LoadoutEditor_visible,"f")&&this.show()})}setLoadout(a){__classPrivateFieldSet(this,_LoadoutEditor_loadout,a,"f")}show(){__classPrivateFieldSet(this,_LoadoutEditor_visible,!0,"f"),__classPrivateFieldGet(this,_LoadoutEditor_contentDiv,"f").replaceChildren();var a=document.createElement("label");if(a.innerText="Loadout properties",__classPrivateFieldGet(this,_LoadoutEditor_contentDiv,"f").appendChild(a),__classPrivateFieldGet(this,_LoadoutEditor_loadout,"f")){var t=__classPrivateFieldGet(this,_LoadoutEditor_loadout,"f");(0,_$utils_8.addStringInput)(__classPrivateFieldGet(this,_LoadoutEditor_contentDiv,"f"),"Name",t.name,"text",a=>{t.name=a,__classPrivateFieldGet(this,_LoadoutEditor_contentDiv,"f").dispatchEvent(new Event("refresh"))}),(0,_$utils_8.addStringInput)(__classPrivateFieldGet(this,_LoadoutEditor_contentDiv,"f"),"Code",t.code,"text",a=>{t.code=a}),(0,_$utils_8.addStringInput)(__classPrivateFieldGet(this,_LoadoutEditor_contentDiv,"f"),"Roles",(0,_$utils_8.arrayToString)(t.roles),"text",a=>{t.roles=(0,_$utils_8.stringToArray)(a)}),(0,_$utils_8.addLoadoutItemsEditor)(__classPrivateFieldGet(this,_LoadoutEditor_contentDiv,"f"),__classPrivateFieldGet(this,_LoadoutEditor_loadout,"f"))}}hide(){__classPrivateFieldSet(this,_LoadoutEditor_visible,!1,"f"),__classPrivateFieldGet(this,_LoadoutEditor_contentDiv,"f").replaceChildren()}},_LoadoutEditor_contentDiv=new WeakMap,_LoadoutEditor_loadout=new WeakMap,_LoadoutEditor_visible=new WeakMap;var _$airuniteditor_1={},_AirUnitEditor_loadoutEditor,____classPrivateFieldSet_1=this&&this.__classPrivateFieldSet||function(a,t,e,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?a!==t||!n:!t.has(a))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(a,e):n?n.value=e:t.set(a,e),e},____classPrivateFieldGet_1=this&&this.__classPrivateFieldGet||function(a,t,e,i){if("a"===e&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?a!==t||!i:!t.has(a))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===e?i:"a"===e?i.call(a):i?i.value:t.get(a)};Object.defineProperty(_$airuniteditor_1,"__esModule",{value:!0}),_$airuniteditor_1.AirUnitEditor=void 0;class AirUnitEditor extends _$uniteditor_7.UnitEditor{constructor(a,t,e){super(a,t,e),_AirUnitEditor_loadoutEditor.set(this,null),____classPrivateFieldSet_1(this,_AirUnitEditor_loadoutEditor,new _$loadouteditor_5.LoadoutEditor(this.contentDiv3),"f"),this.contentDiv3.addEventListener("refresh",()=>{var a;this.visible&&(null===(a=____classPrivateFieldGet_1(this,_AirUnitEditor_loadoutEditor,"f"))||void 0===a||a.show())})}setBlueprint(a){var t,e,i,n,s,_,l,r;this.blueprint=a,null!==this.blueprint&&(this.contentDiv2.replaceChildren(),(r=document.createElement("label")).innerText="Unit properties",this.contentDiv2.appendChild(r),(0,_$utils_8.addStringInput)(this.contentDiv2,"Name",a.name,"text",t=>{a.name=t},!0),(0,_$utils_8.addStringInput)(this.contentDiv2,"Label",a.label,"text",t=>{a.label=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Short label",a.shortLabel,"text",t=>{a.shortLabel=t}),(0,_$utils_8.addDropdownInput)(this.contentDiv2,"Coalition",a.coalition,["","blue","red"],t=>{a.coalition=t}),(0,_$utils_8.addDropdownInput)(this.contentDiv2,"Era",a.era,["WW2","Early Cold War","Mid Cold War","Late Cold War","Modern"],t=>{a.era=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Filename",null!==(t=a.filename)&&void 0!==t?t:"","text",t=>{a.filename=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Cost",null!==(e=String(a.cost))&&void 0!==e?e:"","number",t=>{a.cost=parseFloat(t)}),(0,_$utils_8.addCheckboxInput)(this.contentDiv2,"Can target point",null!==(i=a.canTargetPoint)&&void 0!==i&&i,t=>{a.canTargetPoint=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Description",null!==(n=a.description)&&void 0!==n?n:"","text",t=>{a.description=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Tags",null!==(s=a.tags)&&void 0!==s?s:"","text",t=>{a.tags=t}),(r=document.createElement("label")).innerText="Loadouts",this.contentDiv2.appendChild(r),(0,_$utils_8.addLoadoutsScroll)(this.contentDiv2,null!==(_=a.loadouts)&&void 0!==_?_:[],a=>{var t,e;null===(t=____classPrivateFieldGet_1(this,_AirUnitEditor_loadoutEditor,"f"))||void 0===t||t.setLoadout(a),null===(e=____classPrivateFieldGet_1(this,_AirUnitEditor_loadoutEditor,"f"))||void 0===e||e.show()}),(0,_$utils_8.addNewElementInput)(this.contentDiv2,(a,t)=>{this.addLoadout(t.value)}),null===(l=____classPrivateFieldGet_1(this,_AirUnitEditor_loadoutEditor,"f"))||void 0===l||l.hide())}addBlueprint(a){null!=this.database&&(this.database.blueprints[a]={name:a,coalition:"",label:"",shortLabel:"",era:"",loadouts:[],enabled:!0},this.show(),this.setBlueprint(this.database.blueprints[a]))}addLoadout(a){var t;a&&null!==this.blueprint&&(null===(t=this.blueprint.loadouts)||void 0===t||t.push({name:a,code:"",fuel:1,items:[],roles:[],enabled:!0}),this.setBlueprint(this.blueprint))}hide(){var a;super.hide(),null===(a=____classPrivateFieldGet_1(this,_AirUnitEditor_loadoutEditor,"f"))||void 0===a||a.hide()}}_$airuniteditor_1.AirUnitEditor=AirUnitEditor,_AirUnitEditor_loadoutEditor=new WeakMap;var _$grounduniteditor_3={},_GroundUnitEditor_blueprint,____classPrivateFieldSet_3=this&&this.__classPrivateFieldSet||function(a,t,e,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?a!==t||!n:!t.has(a))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(a,e):n?n.value=e:t.set(a,e),e},____classPrivateFieldGet_3=this&&this.__classPrivateFieldGet||function(a,t,e,i){if("a"===e&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?a!==t||!i:!t.has(a))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===e?i:"a"===e?i.call(a):i?i.value:t.get(a)};Object.defineProperty(_$grounduniteditor_3,"__esModule",{value:!0}),_$grounduniteditor_3.GroundUnitEditor=void 0;class GroundUnitEditor extends _$uniteditor_7.UnitEditor{constructor(a,t,e){super(a,t,e),_GroundUnitEditor_blueprint.set(this,null)}setBlueprint(a){var t,e,i,n,s,_,l,r,o,d,u,c,g,v,b,h,p,P,D,M,m;if(____classPrivateFieldSet_3(this,_GroundUnitEditor_blueprint,a,"f"),null!==____classPrivateFieldGet_3(this,_GroundUnitEditor_blueprint,"f")){this.contentDiv2.replaceChildren();var f=document.createElement("label");f.innerText="Unit properties",this.contentDiv2.appendChild(f),(0,_$utils_8.addStringInput)(this.contentDiv2,"Name",a.name,"text",t=>{a.name=t},!0),(0,_$utils_8.addStringInput)(this.contentDiv2,"Label",a.label,"text",t=>{a.label=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Short label",a.shortLabel,"text",t=>{a.shortLabel=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Type",null!==(t=a.type)&&void 0!==t?t:"","text",t=>{a.type=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Unit when grouped",null!==(e=a.unitWhenGrouped)&&void 0!==e?e:"","text",t=>{a.unitWhenGrouped=t}),(0,_$utils_8.addDropdownInput)(this.contentDiv2,"Coalition",a.coalition,["","blue","red"],t=>{a.coalition=t}),(0,_$utils_8.addDropdownInput)(this.contentDiv2,"Era",a.era,["WW2","Early Cold War","Mid Cold War","Late Cold War","Modern"],t=>{a.era=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Cost",null!==(i=String(a.cost))&&void 0!==i?i:"","number",t=>{a.cost=parseFloat(t)}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Acquisition range [m]",null!==(n=String(a.acquisitionRange))&&void 0!==n?n:"","number",t=>{a.acquisitionRange=parseFloat(t)}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Engagement range [m]",null!==(s=String(a.engagementRange))&&void 0!==s?s:"","number",t=>{a.engagementRange=parseFloat(t)}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Targeting range [m]",null!==(_=String(a.targetingRange))&&void 0!==_?_:"","number",t=>{a.targetingRange=parseFloat(t)}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Aim method range [m]",null!==(l=String(a.aimMethodRange))&&void 0!==l?l:"","number",t=>{a.aimMethodRange=parseFloat(t)}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Barrel height [m]",null!==(r=String(a.barrelHeight))&&void 0!==r?r:"","number",t=>{a.barrelHeight=parseFloat(t)}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Muzzle velocity [m/s]",null!==(o=String(a.muzzleVelocity))&&void 0!==o?o:"","number",t=>{a.muzzleVelocity=parseFloat(t)}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Aim time [s]",null!==(d=String(a.aimTime))&&void 0!==d?d:"","number",t=>{a.aimTime=parseFloat(t)}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Shots to fire",null!==(u=String(a.shotsToFire))&&void 0!==u?u:"","number",t=>{a.shotsToFire=Math.round(parseFloat(t))}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Shots base interval [s]",null!==(c=String(a.shotsBaseInterval))&&void 0!==c?c:"","number",t=>{a.shotsBaseInterval=Math.round(parseFloat(t))}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Shots base scatter [\xb0]",null!==(g=String(a.shotsBaseScatter))&&void 0!==g?g:"","number",t=>{a.shotsBaseScatter=Math.round(parseFloat(t))}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Alertness time constant [s]",null!==(v=String(a.alertnessTimeConstant))&&void 0!==v?v:"","number",t=>{a.alertnessTimeConstant=Math.round(parseFloat(t))}),(0,_$utils_8.addCheckboxInput)(this.contentDiv2,"Can target point",null!==(b=a.canTargetPoint)&&void 0!==b&&b,t=>{a.canTargetPoint=t}),(0,_$utils_8.addCheckboxInput)(this.contentDiv2,"Can rearm",null!==(h=a.canRearm)&&void 0!==h&&h,t=>{a.canRearm=t}),(0,_$utils_8.addCheckboxInput)(this.contentDiv2,"Can operate as AAA",null!==(p=a.canAAA)&&void 0!==p&&p,t=>{a.canAAA=t}),(0,_$utils_8.addCheckboxInput)(this.contentDiv2,"Indirect fire (e.g. mortar)",null!==(P=a.indirectFire)&&void 0!==P&&P,t=>{a.indirectFire=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Description",null!==(D=a.description)&&void 0!==D?D:"","text",t=>{a.description=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Tags",null!==(M=a.tags)&&void 0!==M?M:"","text",t=>{a.tags=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Marker file",null!==(m=a.markerFile)&&void 0!==m?m:"","text",t=>{a.markerFile=t})}}addBlueprint(a){null!=this.database&&(this.database.blueprints[a]={name:a,coalition:"",label:"",shortLabel:"",era:"",enabled:!0},this.show(),this.setBlueprint(this.database.blueprints[a]))}}_$grounduniteditor_3.GroundUnitEditor=GroundUnitEditor,_GroundUnitEditor_blueprint=new WeakMap;var _$navyuniteditor_6={},_NavyUnitEditor_blueprint,____classPrivateFieldSet_6=this&&this.__classPrivateFieldSet||function(a,t,e,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?a!==t||!n:!t.has(a))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(a,e):n?n.value=e:t.set(a,e),e},____classPrivateFieldGet_6=this&&this.__classPrivateFieldGet||function(a,t,e,i){if("a"===e&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?a!==t||!i:!t.has(a))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===e?i:"a"===e?i.call(a):i?i.value:t.get(a)};Object.defineProperty(_$navyuniteditor_6,"__esModule",{value:!0}),_$navyuniteditor_6.NavyUnitEditor=void 0;class NavyUnitEditor extends _$uniteditor_7.UnitEditor{constructor(a,t,e){super(a,t,e),_NavyUnitEditor_blueprint.set(this,null)}setBlueprint(a){var t,e,i,n;if(____classPrivateFieldSet_6(this,_NavyUnitEditor_blueprint,a,"f"),null!==____classPrivateFieldGet_6(this,_NavyUnitEditor_blueprint,"f")){this.contentDiv2.replaceChildren();var s=document.createElement("label");s.innerText="Unit properties",this.contentDiv2.appendChild(s),(0,_$utils_8.addStringInput)(this.contentDiv2,"Name",a.name,"text",t=>{a.name=t},!0),(0,_$utils_8.addStringInput)(this.contentDiv2,"Label",a.label,"text",t=>{a.label=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Short label",a.shortLabel,"text",t=>{a.shortLabel=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Type",null!==(t=a.type)&&void 0!==t?t:"","text",t=>{a.type=t}),(0,_$utils_8.addDropdownInput)(this.contentDiv2,"Coalition",a.coalition,["","blue","red"],t=>{a.coalition=t}),(0,_$utils_8.addDropdownInput)(this.contentDiv2,"Era",a.era,["WW2","Early Cold War","Mid Cold War","Late Cold War","Modern"],t=>{a.era=t}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Cost",null!==(e=String(a.cost))&&void 0!==e?e:"","number",t=>{a.cost=parseFloat(t)}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Barrel height [m]",null!==(i=String(a.barrelHeight))&&void 0!==i?i:"","number",t=>{a.barrelHeight=parseFloat(t)}),(0,_$utils_8.addStringInput)(this.contentDiv2,"Muzzle velocity [m/s]",null!==(n=String(a.muzzleVelocity))&&void 0!==n?n:"","number",t=>{a.muzzleVelocity=parseFloat(t)})}}addBlueprint(a){null!=this.database&&(this.database.blueprints[a]={name:a,coalition:"",label:"",shortLabel:"",era:"",enabled:!0},this.show(),this.setBlueprint(this.database.blueprints[a]))}}_$navyuniteditor_6.NavyUnitEditor=NavyUnitEditor,_NavyUnitEditor_blueprint=new WeakMap;var _$databasemanagerplugin_2={},_DatabaseManagerPlugin_instances,_DatabaseManagerPlugin_app,_DatabaseManagerPlugin_element,_DatabaseManagerPlugin_mainContentContainer,_DatabaseManagerPlugin_contentDiv1,_DatabaseManagerPlugin_contentDiv2,_DatabaseManagerPlugin_contentDiv3,_DatabaseManagerPlugin_button1,_DatabaseManagerPlugin_button2,_DatabaseManagerPlugin_button3,_DatabaseManagerPlugin_button4,_DatabaseManagerPlugin_button5,_DatabaseManagerPlugin_button6,_DatabaseManagerPlugin_button7,_DatabaseManagerPlugin_button8,_DatabaseManagerPlugin_button9,_DatabaseManagerPlugin_aircraftEditor,_DatabaseManagerPlugin_helicopterEditor,_DatabaseManagerPlugin_groundUnitEditor,_DatabaseManagerPlugin_navyUnitEditor,_DatabaseManagerPlugin_hideAll,_DatabaseManagerPlugin_loadDatabases,_DatabaseManagerPlugin_saveDatabases,_DatabaseManagerPlugin_resetToDefaultDatabases,_DatabaseManagerPlugin_restoreToPreviousDatabases,_DatabaseManagerPlugin_uploadDatabase,_DatabaseManagerPlugin_resetToDefaultDatabase,_DatabaseManagerPlugin_restoreToPreviousDatabase,____classPrivateFieldSet_2=this&&this.__classPrivateFieldSet||function(a,t,e,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?a!==t||!n:!t.has(a))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(a,e):n?n.value=e:t.set(a,e),e},____classPrivateFieldGet_2=this&&this.__classPrivateFieldGet||function(a,t,e,i){if("a"===e&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?a!==t||!i:!t.has(a))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===e?i:"a"===e?i.call(a):i?i.value:t.get(a)};Object.defineProperty(_$databasemanagerplugin_2,"__esModule",{value:!0}),_$databasemanagerplugin_2.DatabaseManagerPlugin=void 0,_$databasemanagerplugin_2.DatabaseManagerPlugin=class{constructor(){_DatabaseManagerPlugin_instances.add(this),_DatabaseManagerPlugin_app.set(this,void 0),_DatabaseManagerPlugin_element.set(this,void 0),_DatabaseManagerPlugin_mainContentContainer.set(this,void 0),_DatabaseManagerPlugin_contentDiv1.set(this,void 0),_DatabaseManagerPlugin_contentDiv2.set(this,void 0),_DatabaseManagerPlugin_contentDiv3.set(this,void 0),_DatabaseManagerPlugin_button1.set(this,void 0),_DatabaseManagerPlugin_button2.set(this,void 0),_DatabaseManagerPlugin_button3.set(this,void 0),_DatabaseManagerPlugin_button4.set(this,void 0),_DatabaseManagerPlugin_button5.set(this,void 0),_DatabaseManagerPlugin_button6.set(this,void 0),_DatabaseManagerPlugin_button7.set(this,void 0),_DatabaseManagerPlugin_button8.set(this,void 0),_DatabaseManagerPlugin_button9.set(this,void 0),_DatabaseManagerPlugin_aircraftEditor.set(this,void 0),_DatabaseManagerPlugin_helicopterEditor.set(this,void 0),_DatabaseManagerPlugin_groundUnitEditor.set(this,void 0),_DatabaseManagerPlugin_navyUnitEditor.set(this,void 0),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_element,document.createElement("div"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_element,"f").id="database-manager-panel",____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_element,"f").oncontextmenu=()=>!1,____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_element,"f").classList.add("ol-dialog"),document.body.appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_element,"f")),this.toggle(!1);let a=document.createElement("div");____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_button1,document.createElement("button"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button1,"f").classList.add("tab-button"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button1,"f").textContent="Aircraft database",____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button1,"f").onclick=()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_hideAll).call(this),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_aircraftEditor,"f").show(),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button1,"f").classList.add("selected")},a.appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button1,"f")),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_button2,document.createElement("button"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button2,"f").classList.add("tab-button"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button2,"f").textContent="Helicopter database",____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button2,"f").onclick=()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_hideAll).call(this),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_helicopterEditor,"f").show(),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button2,"f").classList.add("selected")},a.appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button2,"f")),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_button3,document.createElement("button"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button3,"f").classList.add("tab-button"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button3,"f").textContent="Ground Unit database",____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button3,"f").onclick=()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_hideAll).call(this),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_groundUnitEditor,"f").show(),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button3,"f").classList.add("selected")},a.appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button3,"f")),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_button4,document.createElement("button"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button4,"f").classList.add("tab-button"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button4,"f").textContent="Navy Unit database",____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button4,"f").onclick=()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_hideAll).call(this),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_navyUnitEditor,"f").show(),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button4,"f").classList.add("selected")},a.appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button4,"f")),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_element,"f").appendChild(a),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_mainContentContainer,document.createElement("div"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_mainContentContainer,"f").classList.add("dm-container"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_element,"f").appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_mainContentContainer,"f")),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_contentDiv1,document.createElement("div"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv1,"f").classList.add("dm-content-container","ol-scrollable"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_mainContentContainer,"f").appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv1,"f")),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_contentDiv2,document.createElement("div"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv2,"f").classList.add("dm-content-container","ol-scrollable"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_mainContentContainer,"f").appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv2,"f")),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_contentDiv3,document.createElement("div"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv3,"f").classList.add("dm-content-container","ol-scrollable"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_mainContentContainer,"f").appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv3,"f")),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_aircraftEditor,new _$airuniteditor_1.AirUnitEditor(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv1,"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv2,"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv3,"f")),"f"),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_helicopterEditor,new _$airuniteditor_1.AirUnitEditor(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv1,"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv2,"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv3,"f")),"f"),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_groundUnitEditor,new _$grounduniteditor_3.GroundUnitEditor(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv1,"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv2,"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv3,"f")),"f"),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_navyUnitEditor,new _$navyuniteditor_6.NavyUnitEditor(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv1,"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv2,"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_contentDiv3,"f")),"f");let t=document.createElement("div");____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_button5,document.createElement("button"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button5,"f").textContent="Save",____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button5,"f").title="Save the changes on the server",____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button5,"f").onclick=()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_saveDatabases).call(this)},t.appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button5,"f")),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_button6,document.createElement("button"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button6,"f").textContent="Discard",____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button6,"f").title="Discard all changes and reload the database from the server",____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button6,"f").onclick=()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_loadDatabases).call(this)},t.appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button6,"f")),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_button7,document.createElement("button"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button7,"f").textContent="Reset defaults",____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button7,"f").onclick=()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_resetToDefaultDatabases).call(this)},____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button7,"f").title="Reset the databases to the default values",t.appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button7,"f")),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_button8,document.createElement("button"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button8,"f").textContent="Restore previous",____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button8,"f").onclick=()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_restoreToPreviousDatabases).call(this)},____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button8,"f").title="Restore the previously saved databases. Use this if you saved a database by mistake.",t.appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button8,"f")),____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_button9,document.createElement("button"),"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button9,"f").textContent="Close",____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button9,"f").title="Close the Database Manager",____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button9,"f").onclick=()=>{this.toggle(!1)},t.appendChild(____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button9,"f")),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_element,"f").appendChild(t)}getName(){return"Database Control Plugin"}initialize(a){var t;____classPrivateFieldSet_2(this,_DatabaseManagerPlugin_app,a,"f"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f").getContextManager().add("databaseManager",{allowUnitCopying:!1,allowUnitPasting:!1,useSpawnMenu:!1,useUnitControlPanel:!1,useUnitInfoPanel:!1}),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_loadDatabases).call(this);var e=document.createElement("div"),i=document.createElement("button");i.textContent="Database manager",e.appendChild(i);var n=null===(t=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===t?void 0:t.getToolbarsManager().get("primaryToolbar"),s=n.getMainDropdown().getOptionElements(),_=Array.prototype.slice.call(s);return _.splice(_.length-3,0,e),n.getMainDropdown().setOptionsElements(_),i.onclick=()=>{var a;n.getMainDropdown().close(),"Game master"===(null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a?void 0:a.getMissionManager().getCommandModeOptions().commandMode)&&this.toggle()},!0}getElement(){return ____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_element,"f")}toggle(a){a?this.getElement().classList.toggle("hide",!a):this.getElement().classList.toggle("hide"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f")&&____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f").getContextManager().setContext(this.getElement().classList.contains("hide")?"olympus":"databaseManager")}},_DatabaseManagerPlugin_app=new WeakMap,_DatabaseManagerPlugin_element=new WeakMap,_DatabaseManagerPlugin_mainContentContainer=new WeakMap,_DatabaseManagerPlugin_contentDiv1=new WeakMap,_DatabaseManagerPlugin_contentDiv2=new WeakMap,_DatabaseManagerPlugin_contentDiv3=new WeakMap,_DatabaseManagerPlugin_button1=new WeakMap,_DatabaseManagerPlugin_button2=new WeakMap,_DatabaseManagerPlugin_button3=new WeakMap,_DatabaseManagerPlugin_button4=new WeakMap,_DatabaseManagerPlugin_button5=new WeakMap,_DatabaseManagerPlugin_button6=new WeakMap,_DatabaseManagerPlugin_button7=new WeakMap,_DatabaseManagerPlugin_button8=new WeakMap,_DatabaseManagerPlugin_button9=new WeakMap,_DatabaseManagerPlugin_aircraftEditor=new WeakMap,_DatabaseManagerPlugin_helicopterEditor=new WeakMap,_DatabaseManagerPlugin_groundUnitEditor=new WeakMap,_DatabaseManagerPlugin_navyUnitEditor=new WeakMap,_DatabaseManagerPlugin_instances=new WeakSet,_DatabaseManagerPlugin_hideAll=function(){____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_aircraftEditor,"f").hide(),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_helicopterEditor,"f").hide(),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_groundUnitEditor,"f").hide(),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_navyUnitEditor,"f").hide(),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button1,"f").classList.remove("selected"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button2,"f").classList.remove("selected"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button3,"f").classList.remove("selected"),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button4,"f").classList.remove("selected")},_DatabaseManagerPlugin_loadDatabases=function(){var a,t,e,i,n=null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a?void 0:a.getAircraftDatabase();null!=n&&____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_aircraftEditor,"f").setDatabase(n);var s=null===(t=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===t?void 0:t.getHelicopterDatabase();null!=s&&____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_helicopterEditor,"f").setDatabase(s);var _=null===(e=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===e?void 0:e.getGroundUnitDatabase();null!=_&&____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_groundUnitEditor,"f").setDatabase(_);var l=null===(i=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===i?void 0:i.getNavyUnitDatabase();null!=l&&____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_navyUnitEditor,"f").setDatabase(l),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_hideAll).call(this),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_aircraftEditor,"f").show(),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button1,"f").classList.add("selected")},_DatabaseManagerPlugin_saveDatabases=function(){var a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_aircraftEditor,"f").getDatabase();a&&____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_uploadDatabase).call(this,a,"aircraftdatabase","Aircraft database",()=>{var a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_helicopterEditor,"f").getDatabase();a&&____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_uploadDatabase).call(this,a,"helicopterDatabase","Helicopter database",()=>{var a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_groundUnitEditor,"f").getDatabase();a&&____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_uploadDatabase).call(this,a,"groundUnitDatabase","Ground Unit database",()=>{var a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_navyUnitEditor,"f").getDatabase();a&&____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_uploadDatabase).call(this,a,"navyUnitDatabase","Navy Unit database",()=>{var a,t,e,i,n;null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a||a.getAircraftDatabase().load(()=>{}),null===(t=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===t||t.getHelicopterDatabase().load(()=>{}),null===(e=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===e||e.getGroundUnitDatabase().load(()=>{}),null===(i=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===i||i.getNavyUnitDatabase().load(()=>{}),null===(n=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===n||n.getServerManager().reloadDatabases(()=>{var a,t;null===(t=null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a?void 0:a.getPopupsManager().get("infoPopup"))||void 0===t||t.setText("Olympus core databases reloaded")})})})})})},_DatabaseManagerPlugin_resetToDefaultDatabases=function(){____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_resetToDefaultDatabase).call(this,"aircraftdatabase","Aircraft database",()=>{var a;null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a||a.getAircraftDatabase().load(()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_resetToDefaultDatabase).call(this,"helicopterdatabase","Helicopter database",()=>{var a;null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a||a.getHelicopterDatabase().load(()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_resetToDefaultDatabase).call(this,"groundunitdatabase","Ground Unit database",()=>{var a;null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a||a.getGroundUnitDatabase().load(()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_resetToDefaultDatabase).call(this,"navyunitdatabase","Navy Unit database",()=>{var a;null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a||a.getNavyUnitDatabase().load(()=>{var a;____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_loadDatabases).call(this),null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a||a.getServerManager().reloadDatabases(()=>{var a,t;null===(t=null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a?void 0:a.getPopupsManager().get("infoPopup"))||void 0===t||t.setText("Olympus core databases reloaded")}),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_hideAll).call(this),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_aircraftEditor,"f").show(),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button1,"f").classList.add("selected")})})})})})})})})},_DatabaseManagerPlugin_restoreToPreviousDatabases=function(){____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_restoreToPreviousDatabase).call(this,"aircraftdatabase","Aircraft database",()=>{var a;null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a||a.getAircraftDatabase().load(()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_restoreToPreviousDatabase).call(this,"helicopterdatabase","Helicopter database",()=>{var a;null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a||a.getHelicopterDatabase().load(()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_restoreToPreviousDatabase).call(this,"groundunitdatabase","Ground Unit database",()=>{var a;null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a||a.getGroundUnitDatabase().load(()=>{____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_restoreToPreviousDatabase).call(this,"navyunitdatabase","Navy Unit database",()=>{var a;null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a||a.getNavyUnitDatabase().load(()=>{var a;____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_loadDatabases).call(this),null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a||a.getServerManager().reloadDatabases(()=>{var a,t;null===(t=null===(a=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===a?void 0:a.getPopupsManager().get("infoPopup"))||void 0===t||t.setText("Olympus core databases reloaded")}),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_instances,"m",_DatabaseManagerPlugin_hideAll).call(this),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_aircraftEditor,"f").show(),____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_button1,"f").classList.add("selected")})})})})})})})})},_DatabaseManagerPlugin_uploadDatabase=function(a,t,e,i){var n=new XMLHttpRequest;n.open("PUT","/api/databases/save/units/"+t),n.setRequestHeader("Content-Type","application/json"),n.onload=a=>{var t,s,_,l;200==n.status?(null===(s=null===(t=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===t?void 0:t.getPopupsManager().get("infoPopup"))||void 0===s||s.setText(e+" saved successfully"),i()):null===(l=null===(_=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===_?void 0:_.getPopupsManager().get("infoPopup"))||void 0===l||l.setText("An error has occurred while saving the "+e)},n.onerror=a=>{var t,i;null===(i=null===(t=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===t?void 0:t.getPopupsManager().get("infoPopup"))||void 0===i||i.setText("An error has occurred while saving the "+e)},n.send(JSON.stringify(a))},_DatabaseManagerPlugin_resetToDefaultDatabase=function(a,t,e){var i=new XMLHttpRequest;i.open("PUT","/api/databases/reset/units/"+a),i.setRequestHeader("Content-Type","application/json"),i.onload=a=>{var n,s,_,l;200==i.status?(null===(s=null===(n=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===n?void 0:n.getPopupsManager().get("infoPopup"))||void 0===s||s.setText(t+" reset successfully"),e()):null===(l=null===(_=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===_?void 0:_.getPopupsManager().get("infoPopup"))||void 0===l||l.setText("An error has occurred while resetting the "+t)},i.onerror=a=>{var e,i;null===(i=null===(e=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===e?void 0:e.getPopupsManager().get("infoPopup"))||void 0===i||i.setText("An error has occurred while resetting the "+t)},i.send("")},_DatabaseManagerPlugin_restoreToPreviousDatabase=function(a,t,e){var i=new XMLHttpRequest;i.open("PUT","/api/databases/restore/units/"+a),i.setRequestHeader("Content-Type","application/json"),i.onload=a=>{var n,s,_,l;200==i.status?(null===(s=null===(n=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===n?void 0:n.getPopupsManager().get("infoPopup"))||void 0===s||s.setText(t+" restored successfully"),e()):null===(l=null===(_=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===_?void 0:_.getPopupsManager().get("infoPopup"))||void 0===l||l.setText("An error has occurred while restoring the "+t)},i.onerror=a=>{var e,i;null===(i=null===(e=____classPrivateFieldGet_2(this,_DatabaseManagerPlugin_app,"f"))||void 0===e?void 0:e.getPopupsManager().get("infoPopup"))||void 0===i||i.setText("An error has occurred while restoring the "+t)},i.send("")};var _$index_4={};Object.defineProperty(_$index_4,"__esModule",{value:!0}),globalThis.getOlympusPlugin=()=>new _$databasemanagerplugin_2.DatabaseManagerPlugin}(); \ No newline at end of file diff --git a/client/plugins/databasemanager/package-lock.json b/client/plugins/databasemanager/package-lock.json index 546f42b6..5ff5edad 100644 --- a/client/plugins/databasemanager/package-lock.json +++ b/client/plugins/databasemanager/package-lock.json @@ -1,41 +1,73 @@ { "name": "DatabaseManagerPlugin", "version": "v0.0.1", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@ampproject/remapping": { + "packages": { + "": { + "name": "DatabaseManagerPlugin", + "version": "v0.0.1", + "devDependencies": { + "@babel/preset-env": "^7.21.4", + "@types/node": "^18.16.1", + "@types/sortablejs": "^1.15.0", + "babelify": "^10.0.0", + "browserify": "^17.0.0", + "concurrently": "^7.6.0", + "cp": "^0.2.0", + "esmify": "^2.1.1", + "nodemon": "^2.0.20", + "requirejs": "^2.3.6", + "sortablejs": "^1.15.0", + "tinyify": "^4.0.0", + "tsify": "^5.0.4", + "tslib": "latest", + "typescript": "^4.9.4", + "usng.js": "^0.4.5", + "watchify": "^4.0.0" + } + }, + "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/code-frame": { + "node_modules/@babel/code-frame": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz", "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==", "dev": true, - "requires": { + "dependencies": { "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/compat-data": { + "node_modules/@babel/compat-data": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/core": { + "node_modules/@babel/core": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", "dev": true, - "requires": { + "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", "@babel/generator": "^7.23.3", @@ -52,72 +84,93 @@ "json5": "^2.2.3", "semver": "^6.3.1" }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "@babel/generator": { + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@babel/generator": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.4.tgz", "integrity": "sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.23.4", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, - "dependencies": { - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - } + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-annotate-as-pure": { + "node_modules/@babel/generator/node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-compilation-targets": { + "node_modules/@babel/helper-compilation-targets": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-create-class-features-plugin": { + "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", @@ -127,485 +180,710 @@ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-create-regexp-features-plugin": { + "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-define-polyfill-provider": { + "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "@babel/helper-environment-visitor": { + "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-function-name": { + "node_modules/@babel/helper-function-name": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, - "requires": { + "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-hoist-variables": { + "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-member-expression-to-functions": { + "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-imports": { + "node_modules/@babel/helper-module-imports": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-transforms": { + "node_modules/@babel/helper-module-transforms": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-optimise-call-expression": { + "node_modules/@babel/helper-optimise-call-expression": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-plugin-utils": { + "node_modules/@babel/helper-plugin-utils": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-remap-async-to-generator": { + "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-replace-supers": { + "node_modules/@babel/helper-replace-supers": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-simple-access": { + "node_modules/@babel/helper-simple-access": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-skip-transparent-expression-wrappers": { + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-split-export-declaration": { + "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-string-parser": { + "node_modules/@babel/helper-string-parser": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-identifier": { + "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-option": { + "node_modules/@babel/helper-validator-option": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-wrap-function": { + "node_modules/@babel/helper-wrap-function": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.15", "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helpers": { + "node_modules/@babel/helpers": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.4.tgz", "integrity": "sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==", "dev": true, - "requires": { + "dependencies": { "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.4", "@babel/types": "^7.23.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/highlight": { + "node_modules/@babel/highlight": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/parser": { + "node_modules/@babel/parser": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz", "integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==", - "dev": true + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-proposal-private-property-in-object": { + "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "@babel/plugin-syntax-async-generators": { + "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-properties": { + "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-static-block": { + "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-dynamic-import": { + "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-export-namespace-from": { + "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-import-assertions": { + "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-import-attributes": { + "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-import-meta": { + "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-json-strings": { + "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-numeric-separator": { + "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-object-rest-spread": { + "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-catch-binding": { + "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-chaining": { + "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-private-property-in-object": { + "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-top-level-await": { + "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-unicode-sets-regex": { + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-arrow-functions": { + "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-async-generator-functions": { + "node_modules/@babel/plugin-transform-async-generator-functions": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-async-to-generator": { + "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoped-functions": { + "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoping": { + "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-class-properties": { + "node_modules/@babel/plugin-transform-class-properties": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-class-static-block": { + "node_modules/@babel/plugin-transform-class-static-block": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "@babel/plugin-transform-classes": { + "node_modules/@babel/plugin-transform-classes": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz", "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-environment-visitor": "^7.22.20", @@ -615,410 +893,656 @@ "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-computed-properties": { + "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-destructuring": { + "node_modules/@babel/plugin-transform-destructuring": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-dotall-regex": { + "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-duplicate-keys": { + "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-dynamic-import": { + "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-exponentiation-operator": { + "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-export-namespace-from": { + "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-for-of": { + "node_modules/@babel/plugin-transform-for-of": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-function-name": { + "node_modules/@babel/plugin-transform-function-name": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-function-name": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-json-strings": { + "node_modules/@babel/plugin-transform-json-strings": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-literals": { + "node_modules/@babel/plugin-transform-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-logical-assignment-operators": { + "node_modules/@babel/plugin-transform-logical-assignment-operators": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-member-expression-literals": { + "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-amd": { + "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-commonjs": { + "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-systemjs": { + "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-umd": { + "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-new-target": { + "node_modules/@babel/plugin-transform-new-target": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-nullish-coalescing-operator": { + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-numeric-separator": { + "node_modules/@babel/plugin-transform-numeric-separator": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-object-rest-spread": { + "node_modules/@babel/plugin-transform-object-rest-spread": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-object-super": { + "node_modules/@babel/plugin-transform-object-super": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-optional-catch-binding": { + "node_modules/@babel/plugin-transform-optional-catch-binding": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-optional-chaining": { + "node_modules/@babel/plugin-transform-optional-chaining": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-parameters": { + "node_modules/@babel/plugin-transform-parameters": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-private-methods": { + "node_modules/@babel/plugin-transform-private-methods": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-private-property-in-object": { + "node_modules/@babel/plugin-transform-private-property-in-object": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-property-literals": { + "node_modules/@babel/plugin-transform-property-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-regenerator": { + "node_modules/@babel/plugin-transform-regenerator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-reserved-words": { + "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-shorthand-properties": { + "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-spread": { + "node_modules/@babel/plugin-transform-spread": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-sticky-regex": { + "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-template-literals": { + "node_modules/@babel/plugin-transform-template-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-typeof-symbol": { + "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-escapes": { + "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-property-regex": { + "node_modules/@babel/plugin-transform-unicode-property-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-regex": { + "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-sets-regex": { + "node_modules/@babel/plugin-transform-unicode-sets-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/preset-env": { + "node_modules/@babel/preset-env": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz", "integrity": "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", @@ -1099,51 +1623,66 @@ "babel-plugin-polyfill-regenerator": "^0.5.3", "core-js-compat": "^3.31.0", "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-modules": { + "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "@babel/regjsgen": { + "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", "dev": true }, - "@babel/runtime": { + "node_modules/@babel/runtime": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.4.tgz", "integrity": "sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==", "dev": true, - "requires": { + "dependencies": { "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/template": { + "node_modules/@babel/template": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/traverse": { + "node_modules/@babel/traverse": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.4.tgz", "integrity": "sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.23.4", "@babel/generator": "^7.23.4", "@babel/helper-environment-visitor": "^7.22.20", @@ -1154,481 +1693,544 @@ "@babel/types": "^7.23.4", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/types": { + "node_modules/@babel/types": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz", "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@browserify/envify": { + "node_modules/@browserify/envify": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@browserify/envify/-/envify-6.0.0.tgz", "integrity": "sha512-ovxHR0KTsRCyMNwD7MGV0+VCU1sT6Ds+itC4DaQHM41eUId+w5Jd0qlhLVoDkkIVBnkY3BAAM8yb2QfpBlHkPw==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^2.0.1", "dash-ast": "^2.0.1", "multisplice": "^1.0.0", "through2": "^4.0.2" }, + "bin": { + "envify": "bin/envify" + } + }, + "node_modules/@browserify/envify/node_modules/acorn-node": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-2.0.1.tgz", + "integrity": "sha512-VLR5sHqjk+8c5hrKeP2fWaIHb8eewsoxnZ8r2qpwRHXMHuC7KyOPflnOx9dLssVQUurzJ7rO0OzIFjHcndafWw==", + "dev": true, "dependencies": { - "acorn-node": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-2.0.1.tgz", - "integrity": "sha512-VLR5sHqjk+8c5hrKeP2fWaIHb8eewsoxnZ8r2qpwRHXMHuC7KyOPflnOx9dLssVQUurzJ7rO0OzIFjHcndafWw==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "dash-ast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", - "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", - "dev": true - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } - } - }, - "@browserify/uglifyify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@browserify/uglifyify/-/uglifyify-6.0.0.tgz", - "integrity": "sha512-48M2a3novsgKhUSo/B3ja10awc7unliK1HfW6aYBJdLFQj3wXDx9BBJVfj6MVYERSQVEVjNHQQ7IK89h4MpCLw==", - "dev": true, - "requires": { - "convert-source-map": "^1.9.0", - "minimatch": "^3.0.2", - "terser": "^5.15.1", - "through2": "^4.0.2", - "xtend": "^4.0.1" - }, - "dependencies": { - "acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "terser": { - "version": "5.24.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", - "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } - } - }, - "@goto-bus-stop/common-shake": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@goto-bus-stop/common-shake/-/common-shake-2.4.0.tgz", - "integrity": "sha512-LO+7v+UbxE3IyAS4Suf/KYB7Zq9DEIHibwDe6Wph4apNEfDyyxP7BSxzRS/Qa9lUH5gsm9eL9nF8EE1E0/nQkQ==", - "dev": true, - "requires": { - "acorn-walk": "^7.0.0", - "debug": "^3.2.6", - "escope": "^3.6.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@types/node": { - "version": "18.18.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.13.tgz", - "integrity": "sha512-vXYZGRrSCreZmq1rEjMRLXJhiy8MrIeVasx+PCVlP414N7CJLHnMf+juVvjdprHyH+XRy3zKZLHeNueOpJCn0g==", - "dev": true, - "requires": { - "undici-types": "~5.26.4" - } - }, - "@types/sortablejs": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.7.tgz", - "integrity": "sha512-PvgWCx1Lbgm88FdQ6S7OGvLIjWS66mudKPlfdrWil0TjsO5zmoZmzoKiiwRShs1dwPgrlkr0N4ewuy0/+QUXYQ==", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", "xtend": "^4.0.2" } }, - "acorn-walk": { + "node_modules/@browserify/envify/node_modules/dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "node_modules/@browserify/envify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@browserify/envify/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/@browserify/uglifyify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@browserify/uglifyify/-/uglifyify-6.0.0.tgz", + "integrity": "sha512-48M2a3novsgKhUSo/B3ja10awc7unliK1HfW6aYBJdLFQj3wXDx9BBJVfj6MVYERSQVEVjNHQQ7IK89h4MpCLw==", + "dev": true, + "dependencies": { + "convert-source-map": "^1.9.0", + "minimatch": "^3.0.2", + "terser": "^5.15.1", + "through2": "^4.0.2", + "xtend": "^4.0.1" + } + }, + "node_modules/@browserify/uglifyify/node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@browserify/uglifyify/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@browserify/uglifyify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@browserify/uglifyify/node_modules/terser": { + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@browserify/uglifyify/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/@goto-bus-stop/common-shake": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@goto-bus-stop/common-shake/-/common-shake-2.4.0.tgz", + "integrity": "sha512-LO+7v+UbxE3IyAS4Suf/KYB7Zq9DEIHibwDe6Wph4apNEfDyyxP7BSxzRS/Qa9lUH5gsm9eL9nF8EE1E0/nQkQ==", + "dev": true, + "dependencies": { + "acorn-walk": "^7.0.0", + "debug": "^3.2.6", + "escope": "^3.6.0" + } + }, + "node_modules/@goto-bus-stop/common-shake/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@types/node": { + "version": "18.18.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.13.tgz", + "integrity": "sha512-vXYZGRrSCreZmq1rEjMRLXJhiy8MrIeVasx+PCVlP414N7CJLHnMf+juVvjdprHyH+XRy3zKZLHeNueOpJCn0g==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/sortablejs": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.7.tgz", + "integrity": "sha512-PvgWCx1Lbgm88FdQ6S7OGvLIjWS66mudKPlfdrWil0TjsO5zmoZmzoKiiwRShs1dwPgrlkr0N4ewuy0/+QUXYQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, - "amdefine": { + "node_modules/amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.2" + } }, - "ansi-regex": { + "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "ansi-styles": { + "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "requires": { + "dependencies": { "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "any-promise": { + "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, - "anymatch": { + "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "requires": { + "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "array-from": { + "node_modules/array-from": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==", "dev": true }, - "asn1.js": { + "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "assert": { + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/assert": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", "dev": true, - "requires": { + "dependencies": { "object.assign": "^4.1.4", "util": "^0.10.4" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - } } }, - "available-typed-arrays": { + "node_modules/assert/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "babel-code-frame": { + "node_modules/babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", "dev": true, - "requires": { + "dependencies": { "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true - } } }, - "babel-messages": { + "node_modules/babel-code-frame/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", "dev": true, - "requires": { + "dependencies": { "babel-runtime": "^6.22.0" } }, - "babel-plugin-import-to-require": { + "node_modules/babel-plugin-import-to-require": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-import-to-require/-/babel-plugin-import-to-require-1.0.0.tgz", "integrity": "sha512-dc843CwrFivjO8AVgxcHvxl0cb7J7Ed8ZGFP8+PjH3X1CnyzYtAU1WL1349m9Wc/+oqk4ETx2+cIEO2jlp3XyQ==", "dev": true, - "requires": { + "dependencies": { "babel-template": "^6.26.0" } }, - "babel-plugin-polyfill-corejs2": { + "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.4.3", "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "babel-plugin-polyfill-corejs3": { + "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.8.6", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.3", "core-js-compat": "^3.33.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "babel-plugin-polyfill-regenerator": { + "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.3" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "babel-runtime": { + "node_modules/babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", "dev": true, - "requires": { + "dependencies": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } } }, - "babel-template": { + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "node_modules/babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", "dev": true, - "requires": { + "dependencies": { "babel-runtime": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", @@ -1636,12 +2238,12 @@ "lodash": "^4.17.4" } }, - "babel-traverse": { + "node_modules/babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", "dev": true, - "requires": { + "dependencies": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", @@ -1651,133 +2253,166 @@ "globals": "^9.18.0", "invariant": "^2.2.2", "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } } }, - "babel-types": { + "node_modules/babel-traverse/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/babel-traverse/node_modules/globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-traverse/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", "dev": true, - "requires": { + "dependencies": { "babel-runtime": "^6.26.0", "esutils": "^2.0.2", "lodash": "^4.17.4", "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", - "dev": true - } } }, - "babelify": { + "node_modules/babel-types/node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babelify": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } }, - "babylon": { + "node_modules/babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true + "dev": true, + "bin": { + "babylon": "bin/babylon.js" + } }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base64-js": { + "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "binary-extensions": { + "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "bn.js": { + "node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "dev": true }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "braces": { + "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "requires": { + "dependencies": { "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "brorand": { + "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, - "browser-pack": { + "node_modules/browser-pack": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "combine-source-map": "~0.8.0", "defined": "^1.0.0", + "JSONStream": "^1.0.3", "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" + }, + "bin": { + "browser-pack": "bin/cmd.js" } }, - "browser-pack-flat": { + "node_modules/browser-pack-flat": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/browser-pack-flat/-/browser-pack-flat-3.5.0.tgz", "integrity": "sha512-u3iJUjs+TC/NGIL2GLyIcn5ppoNZXhTWqSW/gQbGIGvQiXXCQQzr5VWfACFraXQn2JrDlyRnKLeOs5AWXzKI6A==", "dev": true, - "requires": { - "JSONStream": "^1.3.2", + "dependencies": { "combine-source-map": "^0.8.0", "convert-source-map": "^1.5.1", "count-lines": "^0.1.2", @@ -1785,6 +2420,7 @@ "estree-is-member-expression": "^1.0.0", "estree-is-require": "^1.0.0", "esutils": "^2.0.2", + "JSONStream": "^1.3.2", "path-parse": "^1.0.5", "scope-analyzer": "^2.0.0", "stream-combiner": "^0.2.2", @@ -1793,58 +2429,61 @@ "umd": "^3.0.3", "wrap-comment": "^1.0.0" }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - } + "bin": { + "browser-pack-flat": "cli.js" } }, - "browser-process-hrtime": { + "node_modules/browser-pack-flat/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/browser-pack-flat/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/browser-process-hrtime": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", "dev": true }, - "browser-resolve": { + "node_modules/browser-resolve": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, - "requires": { + "dependencies": { "resolve": "^1.17.0" } }, - "browser-unpack": { + "node_modules/browser-unpack": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.4.2.tgz", "integrity": "sha512-uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.5.2", "concat-stream": "^1.5.0", "minimist": "^1.1.1" + }, + "bin": { + "browser-unpack": "bin/cmd.js" } }, - "browserify": { + "node_modules/browserify": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^2.0.0", @@ -1866,6 +2505,7 @@ "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.2.1", + "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp-classic": "^0.5.2", "module-deps": "^6.2.3", @@ -1892,14 +2532,20 @@ "util": "~0.12.0", "vm-browserify": "^1.0.0", "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8" } }, - "browserify-aes": { + "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "requires": { + "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", @@ -1908,45 +2554,45 @@ "safe-buffer": "^5.0.1" } }, - "browserify-cipher": { + "node_modules/browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, - "requires": { + "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, - "browserify-des": { + "node_modules/browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "browserify-rsa": { + "node_modules/browserify-rsa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, - "browserify-sign": { + "node_modules/browserify-sign": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^5.2.1", "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", @@ -1957,232 +2603,294 @@ "readable-stream": "^3.6.2", "safe-buffer": "^5.2.1" }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "engines": { + "node": ">= 4" } }, - "browserify-zlib": { + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, - "requires": { + "dependencies": { "pako": "~1.0.5" } }, - "browserslist": { + "node_modules/browserslist": { "version": "4.22.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { "caniuse-lite": "^1.0.30001541", "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "buffer": { + "node_modules/buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, - "requires": { + "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, - "buffer-from": { + "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "buffer-xor": { + "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true }, - "builtin-status-codes": { + "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true }, - "bundle-collapser": { + "node_modules/bundle-collapser": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.4.0.tgz", "integrity": "sha512-Gd3K3+3KI1Utuk+gwAvuOVOjT/2XLGL8tU6FwDKk04LlOZkYfT0pwQllsG1Dv8RRhgcjNxZSDmmSXb0AOkwSwg==", "dev": true, - "requires": { + "dependencies": { "browser-pack": "^6.0.2", "browser-unpack": "^1.1.0", "concat-stream": "^1.5.0", "falafel": "^2.1.0", "minimist": "^1.1.1", "through2": "^2.0.0" + }, + "bin": { + "bundle-collapser": "bin/cmd.js" } }, - "cached-path-relative": { + "node_modules/cached-path-relative": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", "dev": true }, - "call-bind": { + "node_modules/call-bind": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.2", "get-intrinsic": "^1.2.1", "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "caniuse-lite": { + "node_modules/caniuse-lite": { "version": "1.0.30001564", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz", "integrity": "sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==", - "dev": true + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, - "chalk": { + "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "chokidar": { + "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "cipher-base": { + "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, - "cliui": { + "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "requires": { + "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "color-convert": { + "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { + "dependencies": { "color-name": "1.1.3" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "combine-source-map": { + "node_modules/combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==", "dev": true, - "requires": { + "dependencies": { "convert-source-map": "~1.1.0", "inline-source-map": "~0.6.0", "lodash.memoize": "~3.0.3", "source-map": "~0.5.3" } }, - "commander": { + "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "common-shakeify": { + "node_modules/common-shakeify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/common-shakeify/-/common-shakeify-1.1.2.tgz", "integrity": "sha512-r2zRKPCbCx1l9BT8nVGZssZXrH9jeLl5qfHKxUwSBT7Kr9l1jSjZsItZE/jXo+GYDyO3kQfsyV7Poid475MgWQ==", "dev": true, - "requires": { + "dependencies": { "@goto-bus-stop/common-shake": "^2.3.0", "convert-source-map": "^1.5.1", "through2": "^2.0.3", "transform-ast": "^2.4.3", "wrap-comment": "^1.0.1" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - } } }, - "concat-map": { + "node_modules/common-shakeify/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "concat-stream": { + "node_modules/concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, - "requires": { + "engines": [ + "node >= 0.8" + ], + "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, - "concurrently": { + "node_modules/concurrently": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.1.0", "date-fns": "^2.29.1", "lodash": "^4.17.21", @@ -2193,144 +2901,184 @@ "tree-kill": "^1.2.2", "yargs": "^17.3.1" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "console-browserify": { + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, - "constants-browserify": { + "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", "dev": true }, - "convert-source-map": { + "node_modules/convert-source-map": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==", "dev": true }, - "core-js": { + "node_modules/core-js": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true }, - "core-js-compat": { + "node_modules/core-js-compat": { "version": "3.33.3", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.3.tgz", "integrity": "sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==", "dev": true, - "requires": { + "dependencies": { "browserslist": "^4.22.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "core-util-is": { + "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "count-lines": { + "node_modules/count-lines": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/count-lines/-/count-lines-0.1.2.tgz", "integrity": "sha512-YS8P4UYXX/hrDyLU3r/A5OcCNwdNbJFJckbe8j+x2Jhxsr2J4/rYl0sDwOljLZL7Uxc4s7mRSNcQD8dSjobz+g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "cp": { + "node_modules/cp": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/cp/-/cp-0.2.0.tgz", "integrity": "sha512-4ftCvShHjIZG/zzomHyunNpBof3sOFTTmU6s6q9DdqAL/ANqrKV3pr6Z6kVfBI4hjn59DFLImrBqn7GuuMqSZA==", "dev": true }, - "create-ecdh": { + "node_modules/create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "create-hash": { + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", @@ -2338,12 +3086,12 @@ "sha.js": "^2.4.0" } }, - "create-hmac": { + "node_modules/create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", @@ -2352,12 +3100,12 @@ "sha.js": "^2.4.8" } }, - "crypto-browserify": { + "node_modules/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, - "requires": { + "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", @@ -2369,186 +3117,228 @@ "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" } }, - "d": { + "node_modules/d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, - "requires": { + "dependencies": { "es5-ext": "^0.10.50", "type": "^1.0.1" } }, - "dash-ast": { + "node_modules/dash-ast": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", "dev": true }, - "date-fns": { + "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "dev": true, - "requires": { + "dependencies": { "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" } }, - "debug": { + "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "requires": { + "dependencies": { "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "dedent": { + "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, - "define-data-property": { + "node_modules/define-data-property": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", "dev": true, - "requires": { + "dependencies": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "define-properties": { + "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "requires": { + "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "defined": { + "node_modules/defined": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "deps-sort": { + "node_modules/deps-sort": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, - "requires": { + "dependencies": { "JSONStream": "^1.0.3", "shasum-object": "^1.0.0", "subarg": "^1.0.0", "through2": "^2.0.0" + }, + "bin": { + "deps-sort": "bin/cmd.js" } }, - "des.js": { + "node_modules/des.js": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, - "detective": { + "node_modules/detective": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.8.2", "defined": "^1.0.0", "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" } }, - "diffie-hellman": { + "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "domain-browser": { + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } }, - "duplexer": { + "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "duplexer2": { + "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "^2.0.2" } }, - "duplexify": { + "node_modules/duplexify": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", "dev": true, - "requires": { + "dependencies": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", "readable-stream": "^3.1.1", "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, - "electron-to-chromium": { + "node_modules/duplexify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/electron-to-chromium": { "version": "1.4.593", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.593.tgz", "integrity": "sha512-c7+Hhj87zWmdpmjDONbvNKNo24tvmD4mjal1+qqTYTrlF0/sNpAcDlU0Ki84ftA/5yj3BF2QhSGEC0Rky6larg==", "dev": true }, - "elliptic": { + "node_modules/elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", @@ -2556,68 +3346,70 @@ "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "emoji-regex": { + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "end-of-stream": { + "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "requires": { + "dependencies": { "once": "^1.4.0" } }, - "error-ex": { + "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { + "dependencies": { "is-arrayish": "^0.2.1" } }, - "es5-ext": { + "node_modules/es5-ext": { "version": "0.10.62", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, - "requires": { + "hasInstallScript": true, + "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "es6-iterator": { + "node_modules/es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "^0.10.35", "es6-symbol": "^3.1.1" } }, - "es6-map": { + "node_modules/es6-map": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "~0.10.14", "es6-iterator": "~2.0.1", @@ -2626,12 +3418,12 @@ "event-emitter": "~0.3.5" } }, - "es6-set": { + "node_modules/es6-set": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", "dev": true, - "requires": { + "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", "es6-iterator": "~2.0.3", @@ -2639,94 +3431,117 @@ "event-emitter": "^0.3.5", "type": "^2.7.2" }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } + "engines": { + "node": ">=0.12" } }, - "es6-symbol": { + "node_modules/es6-set/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, - "requires": { + "dependencies": { "d": "^1.0.1", "ext": "^1.1.2" } }, - "es6-weak-map": { + "node_modules/es6-weak-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "^0.10.46", "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.1" } }, - "escalade": { + "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "escape-string-regexp": { + "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "escodegen": { + "node_modules/escodegen": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "requires": { + "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "source-map": "~0.6.1" + "esutils": "^2.0.2" }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "escope": { + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escope": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", "dev": true, - "requires": { + "dependencies": { "es6-map": "^0.1.3", "es6-weak-map": "^2.0.1", "esrecurse": "^4.1.0", "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=0.4.0" } }, - "esmify": { + "node_modules/esmify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/esmify/-/esmify-2.1.1.tgz", "integrity": "sha512-GyOVgjG7sNyYB5Mbo15Ll4aGrcXZzZ3LI22rbLOjCI7L/wYelzQpBHRZkZkqbPNZ/QIRilcaHqzgNCLcEsi1lQ==", "dev": true, - "requires": { + "dependencies": { "@babel/core": "^7.2.2", "@babel/plugin-syntax-async-generators": "^7.2.0", "@babel/plugin-syntax-dynamic-import": "^7.2.0", @@ -2739,674 +3554,862 @@ "through2": "^2.0.5" } }, - "esprima": { + "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "esrecurse": { + "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "requires": { + "dependencies": { "estraverse": "^5.2.0" }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "engines": { + "node": ">=4.0" } }, - "estraverse": { + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "estree-is-function": { + "node_modules/estree-is-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", "dev": true }, - "estree-is-identifier": { + "node_modules/estree-is-identifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-identifier/-/estree-is-identifier-1.0.0.tgz", "integrity": "sha512-2BDRGrkQJV/NhCAmmE33A35WAaxq3WQaGHgQuD//7orGWfpFqj8Srkwvx0TH+20yIdOF1yMQwi8anv5ISec2AQ==", "dev": true }, - "estree-is-member-expression": { + "node_modules/estree-is-member-expression": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz", "integrity": "sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg==", "dev": true }, - "estree-is-require": { + "node_modules/estree-is-require": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/estree-is-require/-/estree-is-require-1.0.0.tgz", "integrity": "sha512-oWxQdSEmnUwNZsDQYiBNpVxKEhMmsJQSSxnDrwsr1MWtooCLfhgzsNGzmokdmfK0EzEIS5V4LPvqxv1Kmb1vvA==", "dev": true, - "requires": { + "dependencies": { "estree-is-identifier": "^1.0.0" } }, - "esutils": { + "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "event-emitter": { + "node_modules/event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "~0.10.14" } }, - "events": { + "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.x" + } }, - "evp_bytestokey": { + "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, - "requires": { + "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, - "ext": { + "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, - "requires": { - "type": "^2.7.2" - }, "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } + "type": "^2.7.2" } }, - "falafel": { + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/falafel": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", "dev": true, - "requires": { + "dependencies": { "acorn": "^7.1.1", "isarray": "^2.0.1" }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } + "engines": { + "node": ">=0.4.0" } }, - "fast-safe-stringify": { + "node_modules/falafel/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, - "fill-range": { + "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "requires": { + "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "for-each": { + "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "requires": { + "dependencies": { "is-callable": "^1.1.3" } }, - "from2": { + "node_modules/from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" } }, - "from2-string": { + "node_modules/from2-string": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/from2-string/-/from2-string-1.1.0.tgz", "integrity": "sha512-m8vCh+KnXXXBtfF2VUbiYlQ+nczLcntB0BrtNgpmLkHylhObe9WF1b2LZjBBzrZzA6P4mkEla6ZYQoOUTG8cYA==", "dev": true, - "requires": { + "dependencies": { "from2": "^2.0.3" } }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "fsevents": { + "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "optional": true + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "gensync": { + "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "get-assigned-identifiers": { + "node_modules/get-assigned-identifiers": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", "dev": true }, - "get-caller-file": { + "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "get-intrinsic": { + "node_modules/get-intrinsic": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "glob": { + "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "requires": { + "dependencies": { "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "globals": { + "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "gopd": { + "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "requires": { + "dependencies": { "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has": { + "node_modules/has": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4.0" + } }, - "has-ansi": { + "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^2.0.0" }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "has-flag": { + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "has-property-descriptors": { + "node_modules/has-property-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, - "requires": { + "dependencies": { "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-proto": { + "node_modules/has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-symbols": { + "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-tostringtag": { + "node_modules/has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, - "requires": { + "dependencies": { "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "hash-base": { + "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "engines": { + "node": ">=4" } }, - "hash.js": { + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, - "hasown": { + "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "hmac-drbg": { + "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, - "requires": { + "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, - "htmlescape": { + "node_modules/htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10" + } }, - "https-browserify": { + "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true }, - "ieee754": { + "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "ignore-by-default": { + "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "inline-source-map": { + "node_modules/inline-source-map": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==", "dev": true, - "requires": { + "dependencies": { "source-map": "~0.5.3" } }, - "insert-module-globals": { + "node_modules/insert-module-globals": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", "undeclared-identifiers": "^1.1.2", "xtend": "^4.0.0" + }, + "bin": { + "insert-module-globals": "bin/cmd.js" } }, - "invariant": { + "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, - "requires": { + "dependencies": { "loose-envify": "^1.0.0" } }, - "is-arguments": { + "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "is-binary-path": { + "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "requires": { + "dependencies": { "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-buffer": { + "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-callable": { + "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-core-module": { + "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, - "requires": { + "dependencies": { "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "is-generator-function": { + "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.12.0" + } }, - "is-typed-array": { + "node_modules/is-typed-array": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, - "requires": { + "dependencies": { "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-utf8": { + "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true }, - "isarray": { + "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "jsesc": { + "node_modules/jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } }, - "json5": { + "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } }, - "jsonparse": { + "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true + "dev": true, + "engines": [ + "node >= 0.2.0" + ] }, - "labeled-stream-splicer": { + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "stream-splicer": "^2.0.0" } }, - "lodash": { + "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.debounce": { + "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "lodash.memoize": { + "node_modules/lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==", "dev": true }, - "loose-envify": { + "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, - "requires": { + "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "lru-cache": { + "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "requires": { + "dependencies": { "yallist": "^3.0.2" } }, - "magic-string": { + "node_modules/magic-string": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", "integrity": "sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA==", "dev": true, - "requires": { + "dependencies": { "sourcemap-codec": "^1.4.1" } }, - "md5.js": { + "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, - "requires": { + "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "merge-source-map": { + "node_modules/merge-source-map": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", "dev": true, - "requires": { + "dependencies": { "source-map": "^0.5.6" } }, - "miller-rabin": { + "node_modules/miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } + "bin": { + "miller-rabin": "bin/miller-rabin" } }, - "minify-stream": { + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/minify-stream": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/minify-stream/-/minify-stream-2.1.0.tgz", "integrity": "sha512-P5xE4EQRkn7Td54VGcgfDMFx1jmKPPIXCdcMfrbXS6cNHK4dO1LXwtYFb48hHrSmZfT+jlGImvHgSZEkbpNtCw==", "dev": true, - "requires": { + "dependencies": { "concat-stream": "^2.0.0", "convert-source-map": "^1.5.0", "duplexify": "^4.1.1", @@ -3414,95 +4417,116 @@ "terser": "^4.7.0", "xtend": "^4.0.1" }, - "dependencies": { - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - } + "engines": { + "node": ">= 6" } }, - "minimalistic-assert": { + "node_modules/minify-stream/node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/minify-stream/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/minify-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minify-stream/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minify-stream/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "minimalistic-crypto-utils": { + "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true }, - "minimatch": { + "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { + "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "mkdirp-classic": { + "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, - "module-deps": { + "node_modules/module-deps": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, - "requires": { - "JSONStream": "^1.0.3", + "dependencies": { "browser-resolve": "^2.0.0", "cached-path-relative": "^1.0.2", "concat-stream": "~1.6.0", @@ -3510,6 +4534,7 @@ "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", + "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", @@ -3517,121 +4542,145 @@ "subarg": "^1.0.0", "through2": "^2.0.0", "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8.0" } }, - "ms": { + "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "multi-stage-sourcemap": { + "node_modules/multi-stage-sourcemap": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz", "integrity": "sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ==", "dev": true, - "requires": { - "source-map": "^0.1.34" - }, "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "source-map": "^0.1.34" } }, - "multisplice": { + "node_modules/multi-stage-sourcemap/node_modules/source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dev": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/multisplice": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/multisplice/-/multisplice-1.0.0.tgz", "integrity": "sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA==", "dev": true }, - "mutexify": { + "node_modules/mutexify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.4.0.tgz", "integrity": "sha512-pbYSsOrSB/AKN5h/WzzLRMFgZhClWccf2XIB4RSMC8JbquiB0e0/SH5AIfdQMdyHmYtv4seU7yV/TvAwPLJ1Yg==", "dev": true, - "requires": { + "dependencies": { "queue-tick": "^1.0.0" } }, - "nanobench": { + "node_modules/nanobench": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nanobench/-/nanobench-2.1.1.tgz", "integrity": "sha512-z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A==", "dev": true, - "requires": { + "dependencies": { "browser-process-hrtime": "^0.1.2", "chalk": "^1.1.3", "mutexify": "^1.1.0", "pretty-hrtime": "^1.0.2" }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true - } + "bin": { + "nanobench": "run.js", + "nanobench-compare": "compare.js" } }, - "next-tick": { + "node_modules/nanobench/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanobench/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanobench/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanobench/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanobench/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", "dev": true }, - "node-releases": { + "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, - "nodemon": { + "node_modules/nodemon": { "version": "2.0.22", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", "dev": true, - "requires": { + "dependencies": { "chokidar": "^3.5.2", "debug": "^3.2.7", "ignore-by-default": "^1.0.1", @@ -3643,114 +4692,149 @@ "touch": "^3.1.0", "undefsafe": "^2.0.5" }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - } + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" } }, - "nopt": { + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "dev": true, - "requires": { + "dependencies": { "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" } }, - "normalize-path": { + "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "object-inspect": { + "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + } }, - "object.assign": { + "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "requires": { + "dependencies": { "wrappy": "1" } }, - "os-browserify": { + "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, - "outpipe": { + "node_modules/outpipe": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", "integrity": "sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==", "dev": true, - "requires": { + "dependencies": { "shell-quote": "^1.4.2" } }, - "pako": { + "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "parents": { + "node_modules/parents": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==", "dev": true, - "requires": { + "dependencies": { "path-platform": "~0.11.15" } }, - "parse-asn1": { + "node_modules/parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, - "requires": { + "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", "evp_bytestokey": "^1.0.0", @@ -3758,171 +4842,202 @@ "safe-buffer": "^5.1.1" } }, - "parse-json": { + "node_modules/parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, - "requires": { + "dependencies": { "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "path-browserify": { + "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-platform": { + "node_modules/path-platform": { "version": "0.11.15", "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "pbkdf2": { + "node_modules/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, - "requires": { + "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", "ripemd160": "^2.0.1", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" } }, - "picocolors": { + "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "picomatch": { + "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "pretty-hrtime": { + "node_modules/pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "process": { + "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6.0" + } }, - "process-nextick-args": { + "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "pstree.remy": { + "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true }, - "public-encrypt": { + "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } } }, - "punycode": { + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true }, - "qs": { + "node_modules/qs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, - "requires": { + "dependencies": { "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "querystring-es3": { + "node_modules/querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.x" + } }, - "queue-tick": { + "node_modules/queue-tick": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", "dev": true }, - "randombytes": { + "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "^5.1.0" } }, - "randomfill": { + "node_modules/randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, - "requires": { + "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, - "read-only-stream": { + "node_modules/read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "^2.0.2" } }, - "readable-stream": { + "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "requires": { + "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", @@ -3930,147 +5045,187 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, - "readdirp": { + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": { + "dependencies": { "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "regenerate": { + "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, - "regenerate-unicode-properties": { + "node_modules/regenerate-unicode-properties": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, - "requires": { + "dependencies": { "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" } }, - "regenerator-runtime": { + "node_modules/regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", "dev": true }, - "regenerator-transform": { + "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, - "requires": { + "dependencies": { "@babel/runtime": "^7.8.4" } }, - "regexpu-core": { + "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, - "requires": { + "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" } }, - "regjsparser": { + "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, - "requires": { + "dependencies": { "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" } }, - "require-directory": { + "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "requirejs": { + "node_modules/requirejs": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", - "dev": true + "dev": true, + "bin": { + "r_js": "bin/r.js", + "r.js": "bin/r.js" + }, + "engines": { + "node": ">=0.4.0" + } }, - "resolve": { + "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "requires": { + "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "ripemd160": { + "node_modules/ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, - "requires": { + "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, - "rxjs": { + "node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, - "requires": { + "dependencies": { "tslib": "^2.1.0" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "scope-analyzer": { + "node_modules/scope-analyzer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", "dev": true, - "requires": { + "dependencies": { "array-from": "^2.1.1", "dash-ast": "^2.0.1", "es6-map": "^0.1.5", @@ -4078,352 +5233,421 @@ "es6-symbol": "^3.1.1", "estree-is-function": "^1.0.0", "get-assigned-identifiers": "^1.1.0" - }, - "dependencies": { - "dash-ast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", - "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", - "dev": true - } } }, - "semver": { + "node_modules/scope-analyzer/node_modules/dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, - "set-function-length": { + "node_modules/set-function-length": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", "dev": true, - "requires": { + "dependencies": { "define-data-property": "^1.1.1", "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "sha.js": { + "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" } }, - "shasum-object": { + "node_modules/shasum-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, - "requires": { + "dependencies": { "fast-safe-stringify": "^2.0.7" } }, - "shell-quote": { + "node_modules/shell-quote": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "side-channel": { + "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "simple-concat": { + "node_modules/simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "simple-update-notifier": { + "node_modules/simple-update-notifier": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", "dev": true, - "requires": { + "dependencies": { "semver": "~7.0.0" }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } + "engines": { + "node": ">=8.10.0" } }, - "sortablejs": { + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sortablejs": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==", "dev": true }, - "source-map": { + "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-support": { + "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "requires": { + "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, - "sourcemap-codec": { + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", "dev": true }, - "spawn-command": { + "node_modules/spawn-command": { "version": "0.0.2-1", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", "dev": true }, - "stream-browserify": { + "node_modules/stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, - "requires": { + "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, - "stream-combiner": { + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", "dev": true, - "requires": { + "dependencies": { "duplexer": "~0.1.1", "through": "~2.3.4" } }, - "stream-combiner2": { + "node_modules/stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, - "requires": { + "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" } }, - "stream-http": { + "node_modules/stream-http": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, - "requires": { + "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", "readable-stream": "^3.6.0", "xtend": "^4.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, - "stream-shift": { + "node_modules/stream-http/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, - "stream-splicer": { + "node_modules/stream-splicer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.2" } }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string_decoder": { + "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "~5.2.0" } }, - "strip-ansi": { + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-bom": { + "node_modules/strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, - "requires": { + "dependencies": { "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "subarg": { + "node_modules/subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", "dev": true, - "requires": { + "dependencies": { "minimist": "^1.1.0" } }, - "supports-color": { + "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { + "dependencies": { "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "syntax-error": { + "node_modules/syntax-error": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.2.0" } }, - "terser": { + "node_modules/terser": { "version": "3.16.1", "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", "dev": true, - "requires": { + "dependencies": { "commander": "~2.17.1", "source-map": "~0.6.1", "source-map-support": "~0.5.9" }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "bin": { + "terser": "bin/uglifyjs" + }, + "engines": { + "node": ">=6.0.0" } }, - "through": { + "node_modules/terser/node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "through2": { + "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, - "timers-browserify": { + "node_modules/timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==", "dev": true, - "requires": { + "dependencies": { "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" } }, - "tinyify": { + "node_modules/tinyify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tinyify/-/tinyify-4.0.0.tgz", "integrity": "sha512-jNDxImwUrJJAU2NyGG144J8aWx2ni39UuBo7ppCXFRmhSH0CbpWL4HgjNvrsAW05WQAgNZePwAlEemNuB+byaA==", "dev": true, - "requires": { + "dependencies": { "@browserify/envify": "^6.0.0", "@browserify/uglifyify": "^6.0.0", "browser-pack-flat": "^3.0.9", @@ -4434,60 +5658,70 @@ "terser": "3.16.1", "through2": "^4.0.2", "unassertify": "^3.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } } }, - "to-fast-properties": { + "node_modules/tinyify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tinyify/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "touch": { + "node_modules/touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "dev": true, - "requires": { + "dependencies": { "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" } }, - "transform-ast": { + "node_modules/transform-ast": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", "integrity": "sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.3.0", "convert-source-map": "^1.5.1", "dash-ast": "^1.0.0", @@ -4495,214 +5729,292 @@ "magic-string": "^0.23.2", "merge-source-map": "1.0.4", "nanobench": "^2.1.1" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - } } }, - "tree-kill": { + "node_modules/transform-ast/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/transform-ast/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true + "dev": true, + "bin": { + "tree-kill": "cli.js" + } }, - "tsconfig": { + "node_modules/tsconfig": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz", "integrity": "sha512-Cq65A3kVp6BbsUgg9DRHafaGmbMb9EhAc7fjWvudNWKjkbWrt43FnrtZt6awshH1R0ocfF2Z0uxock3lVqEgOg==", "dev": true, - "requires": { + "dependencies": { "any-promise": "^1.3.0", "parse-json": "^2.2.0", "strip-bom": "^2.0.0", "strip-json-comments": "^2.0.0" } }, - "tsify": { + "node_modules/tsify": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/tsify/-/tsify-5.0.4.tgz", "integrity": "sha512-XAZtQ5OMPsJFclkZ9xMZWkSNyMhMxEPsz3D2zu79yoKorH9j/DT4xCloJeXk5+cDhosEibu4bseMVjyPOAyLJA==", "dev": true, - "requires": { + "dependencies": { "convert-source-map": "^1.1.0", "fs.realpath": "^1.0.0", "object-assign": "^4.1.0", "semver": "^6.1.0", "through2": "^2.0.0", "tsconfig": "^5.0.3" + }, + "engines": { + "node": ">=0.12" + }, + "peerDependencies": { + "browserify": ">= 10.x", + "typescript": ">= 2.8" } }, - "tslib": { + "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, - "tty-browserify": { + "node_modules/tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, - "type": { + "node_modules/type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", "dev": true }, - "typedarray": { + "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "typescript": { + "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "umd": { + "node_modules/umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "dev": true + "dev": true, + "bin": { + "umd": "bin/cli.js" + } }, - "unassert": { + "node_modules/unassert": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/unassert/-/unassert-2.0.2.tgz", "integrity": "sha512-P6OOg/aRdQmWH+b0g+T4U+9MgL+DG7w6oQPG+N3F2IMuvvd1WfZ5alT/Rjik2lMFVyhfACUxF7PGP1VCwSHlQA==", "dev": true, - "requires": { - "estraverse": "^5.0.0" - }, "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "estraverse": "^5.0.0" } }, - "unassertify": { + "node_modules/unassert/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/unassertify": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/unassertify/-/unassertify-3.0.1.tgz", "integrity": "sha512-461ykSPY3oWU+39J5haiq7S/hcYy1oGJ2nHU92lqdL3jft+pSU6oAbb7o6VVmM7nZGLqppszgyzfpCnRBFgFtw==", "dev": true, - "requires": { + "dependencies": { "acorn": "^8.0.0", "convert-source-map": "^1.1.1", "escodegen": "^2.0.0", "multi-stage-sourcemap": "^0.3.1", "through": "^2.3.7", "unassert": "^2.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true - } } }, - "undeclared-identifiers": { + "node_modules/unassertify/node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/undeclared-identifiers": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, - "requires": { + "dependencies": { "acorn-node": "^1.3.0", "dash-ast": "^1.0.0", "get-assigned-identifiers": "^1.2.0", "simple-concat": "^1.0.0", "xtend": "^4.0.1" + }, + "bin": { + "undeclared-identifiers": "bin.js" } }, - "undefsafe": { + "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, - "undici-types": { + "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, - "unicode-canonical-property-names-ecmascript": { + "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unicode-match-property-ecmascript": { + "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "requires": { + "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "unicode-match-property-value-ecmascript": { + "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unicode-property-aliases-ecmascript": { + "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "update-browserslist-db": { + "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "url": { + "node_modules/url": { "version": "0.11.3", "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "dev": true, - "requires": { + "dependencies": { "punycode": "^1.4.1", "qs": "^6.11.2" } }, - "usng.js": { + "node_modules/usng.js": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/usng.js/-/usng.js-0.4.5.tgz", "integrity": "sha512-JTJcFFDy/JqA5iiU8DqMOV5gJiL3ZdXH0hCKYaRMDbbredhFna5Ok4C1YDFU07mTGAgm+5FzHaaOzQnO/3BzWQ==", - "dev": true + "dev": true, + "bin": { + "usng-cli": "bin/cli.js" + } }, - "util": { + "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", @@ -4710,24 +6022,24 @@ "which-typed-array": "^1.1.2" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "vm-browserify": { + "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, - "watchify": { + "node_modules/watchify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz", "integrity": "sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==", "dev": true, - "requires": { + "dependencies": { "anymatch": "^3.1.0", "browserify": "^17.0.0", "chokidar": "^3.4.0", @@ -4736,115 +6048,147 @@ "through2": "^4.0.2", "xtend": "^4.0.2" }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } + "bin": { + "watchify": "bin/cmd.js" + }, + "engines": { + "node": ">= 8.10.0" } }, - "which-typed-array": { + "node_modules/watchify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/watchify/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/which-typed-array": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dev": true, - "requires": { + "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "wrap-ansi": { + "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "wrap-comment": { + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-comment": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wrap-comment/-/wrap-comment-1.0.1.tgz", "integrity": "sha512-APccrMwl/ont0RHFTXNAQfM647duYYEfs6cngrIyTByTI0xbWnDnPSptFZhS68L4WCjt2ZxuhCFwuY6Pe88KZQ==", "dev": true }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "xtend": { + "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4" + } }, - "y18n": { + "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + } }, - "yallist": { + "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "yargs": { + "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "requires": { + "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -4852,13 +6196,19 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true + "dev": true, + "engines": { + "node": ">=12" + } } } } diff --git a/client/plugins/databasemanager/package.json b/client/plugins/databasemanager/package.json index c311005d..bd252192 100644 --- a/client/plugins/databasemanager/package.json +++ b/client/plugins/databasemanager/package.json @@ -7,7 +7,7 @@ "build-release": "browserify ./src/index.ts -p [ tsify --noImplicitAny] -p [ tinyify ] > index.js && copy.bat", "start": "npm run copy & concurrently --kill-others \"npm run watch\"", "copy": "copy.bat", - "watch": "watchify ./src/index.ts --debug -o ../../public/plugins/databasemanager/index.js -t [ babelify --global true --presets [ @babel/preset-env ] --extensions '.js'] -p [ tsify --noImplicitAny ]" + "watch": "watchify ./src/index.ts --debug -o ../../public/plugins/databasemanager/index.js -t [ babelify --global true --presets [ @babel/preset-env ] --extensions '.js']" }, "dependencies": {}, "devDependencies": { diff --git a/installer/olympus.iss b/installer/olympus.iss index 162dd20e..bf8a38a9 100644 --- a/installer/olympus.iss +++ b/installer/olympus.iss @@ -44,9 +44,9 @@ Source: "..\img\olympus.ico"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: Source: "..\img\olympus_server.ico"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: ignoreversion; Source: "..\img\olympus_configurator.ico"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: ignoreversion; Source: "..\img\configurator_logo.png"; DestDir: "{app}\Mods\Services\Olympus\img"; Flags: ignoreversion; -Source: "{#nwjsFolder}\*.*"; DestDir: "{app}\Mods\Services\Olympus\client\bin\nw"; Flags: ignoreversion recursesubdirs; Check: CheckLocalInstall -Source: "{#nodejsFolder}\*.*"; DestDir: "{app}\Mods\Services\Olympus\client\bin\node"; Flags: ignoreversion recursesubdirs; Check: CheckServerInstall -Source: "..\scripts\python\configurator\dist\configurator.exe"; DestDir: "{app}\Mods\Services\Olympus"; Flags: ignoreversion; Check: CheckServerInstall +Source: "{#nwjsFolder}\*.*"; DestDir: "{app}\Mods\Services\Olympus\client"; Flags: ignoreversion recursesubdirs; Check: CheckLocalInstall +Source: "{#nodejsFolder}\*.*"; DestDir: "{app}\Mods\Services\Olympus\client"; Flags: ignoreversion recursesubdirs; Check: CheckServerInstall +Source: "..\scripts\python\configurator\dist\configurator.exe"; DestDir: "{app}\Mods\Services\Olympus"; Flags: ignoreversion; [Run] Filename: "{app}\Mods\Services\Olympus\configurator.exe"; Parameters: -a {code:GetAddress} -c {code:GetClientPort} -b {code:GetBackendPort} -p {code:GetPassword} -bp {code:GetBluePassword} -rp {code:GetRedPassword} @@ -60,8 +60,8 @@ Root: HKCU; Subkey: "Environment"; ValueType: expandsz; ValueName: "Path"; Value ChangesEnvironment=yes [Icons] -Name: "{userdesktop}\DCS Olympus Client"; Filename: "{app}\Mods\Services\Olympus\client\bin\nw\nw.exe"; Tasks: desktopicon; IconFilename: "{app}\Mods\Services\Olympus\img\olympus.ico"; Check: CheckLocalInstall -Name: "{userdesktop}\DCS Olympus Server"; Filename: "{app}\Mods\Services\Olympus\client\bin\node\node.exe"; Tasks: desktopicon; IconFilename: "{app}\Mods\Services\Olympus\img\olympus_server.ico"; WorkingDir: "{app}\Mods\Services\Olympus\client"; Parameters: ".\bin\www"; Check: CheckServerInstall +Name: "{userdesktop}\DCS Olympus Client"; Filename: "{app}\Mods\Services\Olympus\client\nw.exe"; Tasks: desktopicon; IconFilename: "{app}\Mods\Services\Olympus\img\olympus.ico"; Check: CheckLocalInstall +Name: "{userdesktop}\DCS Olympus Server"; Filename: "{app}\Mods\Services\Olympus\client\node.exe"; Tasks: desktopicon; IconFilename: "{app}\Mods\Services\Olympus\img\olympus_server.ico"; Parameters: ".\bin\www"; Check: CheckServerInstall Name: "{userdesktop}\DCS Olympus Configurator"; Filename: "{app}\Mods\Services\Olympus\configurator.exe"; Tasks: desktopicon; IconFilename: "{app}\Mods\Services\Olympus\img\olympus_configurator.ico"; Check: CheckServerInstall [Code] diff --git a/scripts/python/configurator/configurator.spec b/scripts/python/configurator/configurator.spec index 48ea3c25..c30c0038 100644 --- a/scripts/python/configurator/configurator.spec +++ b/scripts/python/configurator/configurator.spec @@ -1,9 +1,6 @@ # -*- mode: python ; coding: utf-8 -*- -block_cipher = None - - a = Analysis( ['configurator.py'], pathex=[], @@ -14,18 +11,14 @@ a = Analysis( hooksconfig={}, runtime_hooks=[], excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, noarchive=False, ) -pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) +pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, a.binaries, - a.zipfiles, a.datas, [], name='configurator',