diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..0deca3d2ab --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +root = true + +[*] +end_of_line = crlf +insert_final_newline = true +charset = utf-8 +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + diff --git a/README.md b/README.md index ddece2a48d..8721a3f217 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,23 @@

-
+ +

+

ACE version - + ACE download - + ACE issues - + ACE license

Requires the latest version of CBA A3 | BIF thread

-**ACE 3** is a join effort by the teams behind **ACE 2**, **AGM**, **CSE** and **RHS** to improve the realism and authenticity of Arma 3. +**ACE 3** is a joint effort by the teams behind **ACE2**, **AGM** and **CSE** to improve the realism and authenticity of Arma 3. This mod is entirely **open-source**, and everyone is free to propose changes or maintain their own, customized version as long as they make their changes open to the public in accordance with the GNU General Public License (for more information check the license file attached to this project). @@ -32,7 +34,7 @@ More information on the purpose of the different components of ACE and which one * Realistic ballistics including wind and humidity * Backblast simulation * Weapon resting and bipod deployment -* A fire control system for armored vehicles and helicopters +* A fire control system for armored vehicles and helicopters ***and more...*** For a full list of current features, check [the official wiki](https://github.com/KoffeinFlummi/ACE3/wiki). diff --git a/addons/parachute/Gurtgeschirr.p3d b/TO_MERGE/agm/Parachute/Gurtgeschirr.p3d similarity index 100% rename from addons/parachute/Gurtgeschirr.p3d rename to TO_MERGE/agm/Parachute/Gurtgeschirr.p3d diff --git a/addons/parachute/T10Schirm.p3d b/TO_MERGE/agm/Parachute/T10Schirm.p3d similarity index 100% rename from addons/parachute/T10Schirm.p3d rename to TO_MERGE/agm/Parachute/T10Schirm.p3d diff --git a/TO_MERGE/cse/sys_misc/functions/fn_moduleAmbianceSoundLoop.sqf b/TO_MERGE/cse/sys_misc/functions/fn_moduleAmbianceSoundLoop.sqf deleted file mode 100644 index 4b4d93d453..0000000000 --- a/TO_MERGE/cse/sys_misc/functions/fn_moduleAmbianceSoundLoop.sqf +++ /dev/null @@ -1,98 +0,0 @@ -/** - * fn_moduleAmbianceSoundLoop.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -private ["_logic", "_units", "_activated","_ambianceSounds", "_soundFiles", "_minimalDistance","_maximalDistance", "_minimalDistance", "_maxDelayBetweenSounds", "_allUnits", "_newPos", "_targetUnit", "_soundToPlay", "_soundPath", "_unparsedSounds", "_list", "_splittedList", "_nilCheckPassedList"]; -_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; -_units = [_this,1,[],[[]]] call BIS_fnc_param; -_activated = [_this,2,true,[true]] call BIS_fnc_param; - -if (_activated && isServer) then { - _ambianceSounds = []; - _unparsedSounds = _logic getvariable ["soundFiles", ""]; - _minimalDistance = (_logic getvariable ["minimalDistance", 400]) max 1; - _maximalDistance = (_logic getvariable ["maximalDistance", 10]) max _minimalDistance; - _minDelayBetweensounds = (_logic getvariable ["minimalDelay", 10]) max 1; - _maxDelayBetweenSounds = (_logic getvariable ["maximalDelay", 170]) max _minDelayBetweensounds; - _volume = (_logic getvariable ["soundVolume", 30]) max 1; - _followPlayers = _logic getvariable ["followPlayers", false]; - - _splittedList = [_unparsedSounds, ","] call BIS_fnc_splitString; - - _nilCheckPassedList = ""; - { - _x = [_x] call cse_fnc_string_removeWhiteSpace; - _splittedList set [_foreachIndex, _x]; - }foreach _splittedList; - - _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; - { - if (isclass (missionConfigFile >> "CfgSounds" >> _x)) then { - _ambianceSounds pushback (_soundPath + (getArray(missionConfigFile >> "CfgSounds" >> _x >> "sound") select 0)); - } else { - if (isclass (configFile >> "CfgSounds" >> _x)) then { - _ambianceSounds pushback ((getArray(configFile >> "CfgSounds" >> _x >> "sound") select 0)); - }; - }; - }foreach _splittedList; - - if (count _ambianceSounds == 0) exitwith { - [format["No Ambiance sounds available"]] call cse_fnc_debug; - }; - { - if !([".", _x, true] call BIS_fnc_inString) then { - [format["Ambiance soundfile does not contain a file extension %1", _x]] call cse_fnc_debug; - _ambianceSounds set [_foreachIndex, _x + ".wss"]; - }; - }foreach _ambianceSounds; - [format["Ambiance sounds %1", _ambianceSounds]] call cse_fnc_debug; - - while {alive _logic} do { - _allUnits = switch (true) do { - case isMultiplayer: {playableUnits}; - case isDedicated: {[_logic]}; - default {[player]}; - }; - - if (count _allUnits > 0) then { - _targetUnit = _allUnits select (round(random((count _allUnits)-1))); - - _newPos = (getPos _targetUnit); - if (!_followPlayers) then { - _newPos = getPos _logic; - }; - - if (random(1) >= 0.5) then { - if (random(1) >= 0.5) then { - _newPos set [0, (_newPos select 0) + (_minimalDistance + random(_maximalDistance))]; - } else { - _newPos set [0, (_newPos select 0) - (_minimalDistance + random(_maximalDistance))]; - }; - } else { - if (random(1) >= 0.5) then { - _newPos set [1, (_newPos select 1) + (_minimalDistance + random(_maximalDistance))]; - } else { - _newPos set [1, (_newPos select 1) - (_minimalDistance + random(_maximalDistance))]; - }; - }; - - if ({(_newPos distance _x < (_minimalDistance / 2))}count _allUnits == 0) then { - - _soundToPlay = _ambianceSounds select (round(random((count _ambianceSounds)-1))); - playSound3D [_soundToPlay, _targetUnit, false, _newPos, _volume, 1, 1000]; - - [format["Played a sound %1", _soundToPlay]] call cse_fnc_debug; - - sleep (_minDelayBetweensounds + random(_maxDelayBetweenSounds)) min _maxDelayBetweenSounds; - }; - }; - }; -}; - -true; \ No newline at end of file diff --git a/ace_fcs.dll b/ace_fcs.dll index 9907d9e1a0..7c222dc1d7 100644 Binary files a/ace_fcs.dll and b/ace_fcs.dll differ diff --git a/addons/aircraft/CfgVehicles.hpp b/addons/aircraft/CfgVehicles.hpp index 5f419506c0..e9fb90e61e 100644 --- a/addons/aircraft/CfgVehicles.hpp +++ b/addons/aircraft/CfgVehicles.hpp @@ -217,9 +217,8 @@ class CfgVehicles { };*/ }; - class I_Heli_Transport_02_F: Heli_Transport_02_base_F {}; - - class I_Heli_light_03_base_F: Helicopter_Base_F { + class Heli_light_03_base_F: Helicopter_Base_F {}; + class I_Heli_light_03_base_F: Heli_light_03_base_F { lockDetectionSystem = 0; incomingMissileDetectionSystem = 16; driverCanEject = 1; @@ -242,15 +241,15 @@ class CfgVehicles { }; }; - class I_Heli_light_03_F: I_Heli_light_03_base_F { + class I_Heli_light_03_F: Heli_light_03_base_F { class Turrets: Turrets { class MainTurret: MainTurret {}; }; }; - class I_Heli_light_03_unarmed_base_F: I_Heli_light_03_base_F {}; + class Heli_light_03_unarmed_base_F: Heli_light_03_base_F {}; - class I_Heli_light_03_unarmed_F: I_Heli_light_03_unarmed_base_F {}; + class I_Heli_light_03_unarmed_F: Heli_light_03_unarmed_base_F {}; class Plane_CAS_01_base_F: Plane_Base_F { lockDetectionSystem = 12; @@ -303,7 +302,8 @@ class CfgVehicles { };*/ }; - class B_Heli_Transport_03_base_F: Helicopter_Base_H { + class Heli_Transport_03_base_F: Helicopter_Base_H {}; + class B_Heli_Transport_03_base_F: Heli_Transport_03_base_F { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; driverCanEject = 1; @@ -317,7 +317,7 @@ class CfgVehicles { }; }; - class B_Heli_Transport_03_unarmed_base_F: B_Heli_Transport_03_base_F { + class B_Heli_Transport_03_unarmed_base_F: Heli_Transport_03_base_F { class Turrets: Turrets { class CopilotTurret: CopilotTurret { canEject = 1; diff --git a/addons/attach/CfgVehicles.hpp b/addons/attach/CfgVehicles.hpp index 1cd65127a6..047549dfba 100644 --- a/addons/attach/CfgVehicles.hpp +++ b/addons/attach/CfgVehicles.hpp @@ -1,25 +1,27 @@ #define MACRO_ATTACHTOVEHICLE \ class ACE_Actions { \ - class GVAR(AttachVehicle) { \ - displayName = "$STR_ACE_Attach_AttachDetach"; \ - condition = QUOTE(([ARR_3(_player, _target, '')] call FUNC(canAttach))); \ - statement = QUOTE( [ARR_2(_player, _target)] call FUNC(openAttachUI);); \ - exceptions[] = {"ACE_Drag_isNotDragging"}; \ - showDisabled = 0; \ - priority = 0; \ - icon = PATHTOF(UI\attach_ca.paa); \ - distance = 4; \ - }; \ - class GVAR(DetachVehicle) { \ - displayName = "$STR_ACE_Attach_Detach"; \ - condition = QUOTE(([ARR_2(_player, _target)] call FUNC(canDetach))); \ - statement = QUOTE( [ARR_2(_player, _target)] call FUNC(detach) ); \ - exceptions[] = {"ACE_Drag_isNotDragging"}; \ - showDisabled = 0; \ - priority = 0; \ - icon = PATHTOF(UI\detach_ca.paa); \ - distance = 4; \ + class ACE_MainActions { \ + class GVAR(AttachVehicle) { \ + displayName = "$STR_ACE_Attach_AttachDetach"; \ + condition = QUOTE(([ARR_3(_player, _target, '')] call FUNC(canAttach))); \ + statement = QUOTE( [ARR_2(_player, _target)] call FUNC(openAttachUI);); \ + exceptions[] = {"ACE_Drag_isNotDragging"}; \ + showDisabled = 0; \ + priority = 0; \ + icon = PATHTOF(UI\attach_ca.paa); \ + distance = 4; \ + }; \ + class GVAR(DetachVehicle) { \ + displayName = "$STR_ACE_Attach_Detach"; \ + condition = QUOTE(([ARR_2(_player, _target)] call FUNC(canDetach))); \ + statement = QUOTE( [ARR_2(_player, _target)] call FUNC(detach) ); \ + exceptions[] = {"ACE_Drag_isNotDragging"}; \ + showDisabled = 0; \ + priority = 0; \ + icon = PATHTOF(UI\detach_ca.paa); \ + distance = 4; \ + }; \ }; \ }; diff --git a/addons/attach/functions/fnc_openAttachUI.sqf b/addons/attach/functions/fnc_openAttachUI.sqf index 5533956bb6..1b95be9b84 100644 --- a/addons/attach/functions/fnc_openAttachUI.sqf +++ b/addons/attach/functions/fnc_openAttachUI.sqf @@ -62,6 +62,5 @@ _attachables = items _unit; }, { call EFUNC(interaction,hideMenu); - if !(profileNamespace getVariable [QEGVAR(interaction,AutoCloseMenu), false]) then {"Default" call EFUNC(interaction,openMenuSelf)}; } ] call EFUNC(interaction,openSelectMenu); diff --git a/addons/backpacks/$PBOPREFIX$ b/addons/backpacks/$PBOPREFIX$ new file mode 100644 index 0000000000..99e61f20d4 --- /dev/null +++ b/addons/backpacks/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\backpacks \ No newline at end of file diff --git a/addons/lockbackpacks/CfgEventHandlers.hpp b/addons/backpacks/CfgEventHandlers.hpp similarity index 74% rename from addons/lockbackpacks/CfgEventHandlers.hpp rename to addons/backpacks/CfgEventHandlers.hpp index 9a26e6f614..1aad146690 100644 --- a/addons/lockbackpacks/CfgEventHandlers.hpp +++ b/addons/backpacks/CfgEventHandlers.hpp @@ -5,6 +5,12 @@ class Extended_PreInit_EventHandlers { }; }; +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); + }; +}; + class Extended_InventoryOpened_EventHandlers { class CAManBase { class GVAR(onOpenInventory) { diff --git a/addons/lockbackpacks/README.md b/addons/backpacks/README.md similarity index 100% rename from addons/lockbackpacks/README.md rename to addons/backpacks/README.md diff --git a/addons/backpacks/XEH_postInit.sqf b/addons/backpacks/XEH_postInit.sqf new file mode 100644 index 0000000000..375fcd5f89 --- /dev/null +++ b/addons/backpacks/XEH_postInit.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +["backpackOpened", {_this call FUNC(backpackOpened)}] call EFUNC(common,addEventHandler); diff --git a/addons/lockbackpacks/XEH_preInit.sqf b/addons/backpacks/XEH_preInit.sqf similarity index 86% rename from addons/lockbackpacks/XEH_preInit.sqf rename to addons/backpacks/XEH_preInit.sqf index c474ff625a..a47825d0b0 100644 --- a/addons/lockbackpacks/XEH_preInit.sqf +++ b/addons/backpacks/XEH_preInit.sqf @@ -2,6 +2,7 @@ ADDON = false; +PREP(backpackOpened); PREP(getBackpackAssignedUnit); PREP(isBackpack); PREP(onOpenInventory); diff --git a/addons/lockbackpacks/config.cpp b/addons/backpacks/config.cpp similarity index 78% rename from addons/lockbackpacks/config.cpp rename to addons/backpacks/config.cpp index 0224b4b237..ddc7639921 100644 --- a/addons/lockbackpacks/config.cpp +++ b/addons/backpacks/config.cpp @@ -5,7 +5,7 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common","ace_interaction"}; + requiredAddons[] = {"ace_common"}; author[] = {"bux","commy2"}; authorUrl = "https://github.com/commy2/"; VERSION_CONFIG; @@ -13,4 +13,3 @@ class CfgPatches { }; #include "CfgEventHandlers.hpp" -#include "CfgVehicles.hpp" diff --git a/addons/backpacks/functions/fnc_backpackOpened.sqf b/addons/backpacks/functions/fnc_backpackOpened.sqf new file mode 100644 index 0000000000..186202027f --- /dev/null +++ b/addons/backpacks/functions/fnc_backpackOpened.sqf @@ -0,0 +1,51 @@ +/* + * Author: commy2 + * + * Someone opened your backpack. Execute locally. + * + * Argument: + * 0: Who accessed your inventory? (Object) + * 1: Unit that wields the backpack (Object) + * 2: The backpack object (Object) + * + * Return value: + * None. + */ +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; +_backpack = _this select 2; + +// do cam shake if the target is the player +if ([_target] call EFUNC(common,isPlayer)) then { + addCamShake [4, 0.5, 5]; +}; + +// play a rustling sound +private ["_sounds", "_position"]; + +_sounds = [ + /*"a3\sounds_f\characters\ingame\AinvPknlMstpSlayWpstDnon_medic.wss", + "a3\sounds_f\characters\ingame\AinvPknlMstpSlayWrflDnon_medic.wss", + "a3\sounds_f\characters\ingame\AinvPpneMstpSlayWpstDnon_medic.wss", + "a3\sounds_f\characters\ingame\AinvPpneMstpSlayWrflDnon_medic.wss"*/ + + QUOTE(PATHTO_R(sounds\zip_in.wav)), + QUOTE(PATHTO_R(sounds\zip_out.wav)) +]; + +_position = _target modelToWorld (_target selectionPosition "Spine3"); +_position = _position call EFUNC(common,positionToASL); + +playSound3D [ + _sounds select floor random count _sounds, + objNull, + false, + _position, + 1, + 1, + 50 +]; diff --git a/addons/lockbackpacks/functions/fnc_getBackpackAssignedUnit.sqf b/addons/backpacks/functions/fnc_getBackpackAssignedUnit.sqf similarity index 100% rename from addons/lockbackpacks/functions/fnc_getBackpackAssignedUnit.sqf rename to addons/backpacks/functions/fnc_getBackpackAssignedUnit.sqf diff --git a/addons/lockbackpacks/functions/fnc_isBackpack.sqf b/addons/backpacks/functions/fnc_isBackpack.sqf similarity index 100% rename from addons/lockbackpacks/functions/fnc_isBackpack.sqf rename to addons/backpacks/functions/fnc_isBackpack.sqf diff --git a/addons/backpacks/functions/fnc_onOpenInventory.sqf b/addons/backpacks/functions/fnc_onOpenInventory.sqf new file mode 100644 index 0000000000..63e4aa87a3 --- /dev/null +++ b/addons/backpacks/functions/fnc_onOpenInventory.sqf @@ -0,0 +1,30 @@ +/* + * Author: commy2 + * + * Handle the open inventory event. Display message on traget client. + * + * Argument: + * Input from "InventoryOpened" eventhandler + * + * Return value: + * false. Always open the inventory dialog. (Bool) + */ +#include "script_component.hpp" + +private ["_unit", "_backpack"]; + +_unit = _this select 0; +_backpack = _this select 1; + +// exit if the target is not a backpack +if !([_backpack] call FUNC(isBackpack)) exitWith {}; + +// get the unit that wears the backpack object +private "_target"; +_target = [_backpack] call FUNC(getBackpackAssignedUnit); + +// raise event on target unit +["backpackOpened", _target, [_unit, _target, _backpack]] call EFUNC(common,targetEvent); + +// return false to open inventory as usual +false diff --git a/addons/backpacks/functions/script_component.hpp b/addons/backpacks/functions/script_component.hpp new file mode 100644 index 0000000000..b6bb78fff5 --- /dev/null +++ b/addons/backpacks/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\backpacks\script_component.hpp" \ No newline at end of file diff --git a/addons/backpacks/script_component.hpp b/addons/backpacks/script_component.hpp new file mode 100644 index 0000000000..2837367bfb --- /dev/null +++ b/addons/backpacks/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT backpacks +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_BACKPACKS + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_ENABLED_BACKPACKS + #define DEBUG_SETTINGS DEBUG_ENABLED_BACKPACKS +#endif + +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/backpacks/sounds/zip_in.wav b/addons/backpacks/sounds/zip_in.wav new file mode 100644 index 0000000000..b93549310a Binary files /dev/null and b/addons/backpacks/sounds/zip_in.wav differ diff --git a/addons/backpacks/sounds/zip_out.wav b/addons/backpacks/sounds/zip_out.wav new file mode 100644 index 0000000000..b671c118a3 Binary files /dev/null and b/addons/backpacks/sounds/zip_out.wav differ diff --git a/addons/captives/CfgEventHandlers.hpp b/addons/captives/CfgEventHandlers.hpp index 722750f915..0ce09280a7 100644 --- a/addons/captives/CfgEventHandlers.hpp +++ b/addons/captives/CfgEventHandlers.hpp @@ -9,7 +9,6 @@ class Extended_PostInit_EventHandlers { init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; - //release escorted captive when entering a vehicle class Extended_GetIn_EventHandlers { class All { @@ -18,7 +17,6 @@ class Extended_GetIn_EventHandlers { }; }; }; - //reset captive animation after leaving vehicle class Extended_GetOut_EventHandlers { class All { @@ -27,7 +25,6 @@ class Extended_GetOut_EventHandlers { }; }; }; - //reset captivity and escorting status when getting killed class Extended_Killed_EventHandlers { class CAManBase { @@ -36,7 +33,6 @@ class Extended_Killed_EventHandlers { }; }; }; - //mission start class Extended_InitPost_EventHandlers { class CAManBase { @@ -45,4 +41,3 @@ class Extended_InitPost_EventHandlers { }; }; }; - diff --git a/addons/captives/CfgMoves.hpp b/addons/captives/CfgMoves.hpp index 6e67f3615b..d60fab5a33 100644 --- a/addons/captives/CfgMoves.hpp +++ b/addons/captives/CfgMoves.hpp @@ -72,7 +72,7 @@ class CfgMovesMaleSdr: CfgMovesBasic { InterpolateTo[] = {"Unconscious",0.01}; }; class ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon: ACE_AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon { - speed = 0.333; //for gameplay reasons, slow this down + speed = 0.5; //for gameplay reasons, slow this down actions = "CivilStandActions"; file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\sur\non\AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon"; ConnectTo[] = {"AmovPercMstpSnonWnonDnon",0.1}; diff --git a/addons/captives/CfgVehicles.hpp b/addons/captives/CfgVehicles.hpp index d292402bcf..930f2b27d8 100644 --- a/addons/captives/CfgVehicles.hpp +++ b/addons/captives/CfgVehicles.hpp @@ -2,70 +2,70 @@ class CfgVehicles { class Man; class CAManBase: Man { class ACE_Actions { + class ACE_ApplyHandcuffs { displayName = "$STR_ACE_Captives_SetCaptive"; - distance = 4; + selection = "righthand"; + distance = 2; condition = QUOTE([ARR_2(_player, _target)] call FUNC(canApplyHandcuffs)); statement = QUOTE([ARR_2(_player, _target)] call FUNC(doApplyHandcuffs)); exceptions[] = {}; - showDisabled = 0; - priority = 2.4; icon = QUOTE(PATHTOF(UI\handcuff_ca.paa)); - hotkey = "C"; }; class ACE_RemoveHandcuffs { displayName = "$STR_ACE_Captives_ReleaseCaptive"; - distance = 4; + selection = "righthand"; + distance = 2; condition = QUOTE([ARR_2(_player, _target)] call FUNC(canRemoveHandcuffs)); statement = QUOTE([ARR_2(_player, _target)] call FUNC(doRemoveHandcuffs)); exceptions[] = {}; - showDisabled = 0; - priority = 2.4; icon = QUOTE(PATHTOF(UI\handcuff_ca.paa)); - hotkey = "R"; }; - class ACE_EscortCaptive { - displayName = "$STR_ACE_Captives_EscortCaptive"; - distance = 4; - condition = QUOTE([ARR_2(_player, _target)] call FUNC(canEscortCaptive)); - statement = QUOTE([ARR_3(_player, _target, true)] call FUNC(doEscortCaptive)); - exceptions[] = {}; - showDisabled = 0; - icon = QUOTE(PATHTOF(UI\captive_ca.paa)); - priority = 2.3; - hotkey = "E"; - }; - class ACE_StopEscorting { - displayName = "$STR_ACE_Captives_StopEscorting"; - distance = 4; - condition = QUOTE([ARR_2(_player, _target)] call FUNC(canStopEscorting)); - statement = QUOTE([ARR_3(_player,_target, false)] call FUNC(doEscortCaptive)); - exceptions[] = {QGVAR(isNotEscorting)}; - showDisabled = 0; - icon = QUOTE(PATHTOF(UI\captive_ca.paa)); - priority = 2.3; - hotkey = "E"; - }; - class ACE_LoadCaptive { - displayName = "$STR_ACE_Captives_LoadCaptive"; - distance = 4; - condition = QUOTE([ARR_3(_player, _target, objNull)] call FUNC(canLoadCaptive)); - statement = QUOTE([ARR_3(_player, _target, objNull)] call FUNC(doLoadCaptive)); - exceptions[] = {QGVAR(isNotEscorting)}; - showDisabled = 0; - icon = QUOTE(PATHTOF(UI\captive_ca.paa)); - priority = 2.2; - hotkey = "L"; - }; - class ACE_FriskPerson { - displayName = "$STR_ACE_Captives_FriskPerson"; - distance = 2; - condition = QUOTE([ARR_2(_player, _target)] call FUNC(canFriskPerson)); - statement = QUOTE([ARR_2(_player, _target)] call FUNC(doFriskPerson)); - showDisabled = 0; - //icon = ""; //@todo - priority = 3; - hotkey = "F"; + + class ACE_MainActions { + class ACE_EscortCaptive { + displayName = "$STR_ACE_Captives_EscortCaptive"; + distance = 4; + condition = QUOTE([ARR_2(_player, _target)] call FUNC(canEscortCaptive)); + statement = QUOTE([ARR_3(_player, _target, true)] call FUNC(doEscortCaptive)); + exceptions[] = {}; + showDisabled = 0; + icon = QUOTE(PATHTOF(UI\captive_ca.paa)); + priority = 2.3; + hotkey = "E"; + }; + class ACE_StopEscorting { + displayName = "$STR_ACE_Captives_StopEscorting"; + distance = 4; + condition = QUOTE([ARR_2(_player, _target)] call FUNC(canStopEscorting)); + statement = QUOTE([ARR_3(_player,_target, false)] call FUNC(doEscortCaptive)); + exceptions[] = {QGVAR(isNotEscorting)}; + showDisabled = 0; + icon = QUOTE(PATHTOF(UI\captive_ca.paa)); + priority = 2.3; + hotkey = "E"; + }; + class ACE_LoadCaptive { + displayName = "$STR_ACE_Captives_LoadCaptive"; + distance = 4; + condition = QUOTE([ARR_3(_player, _target, objNull)] call FUNC(canLoadCaptive)); + statement = QUOTE([ARR_3(_player, _target, objNull)] call FUNC(doLoadCaptive)); + exceptions[] = {QGVAR(isNotEscorting)}; + showDisabled = 0; + icon = QUOTE(PATHTOF(UI\captive_ca.paa)); + priority = 2.2; + hotkey = "L"; + }; + class ACE_FriskPerson { + displayName = "$STR_ACE_Captives_FriskPerson"; + distance = 2; + condition = QUOTE([ARR_2(_player, _target)] call FUNC(canFriskPerson)); + statement = QUOTE([ARR_2(_player, _target)] call FUNC(doFriskPerson)); + showDisabled = 0; + //icon = ""; //@todo + priority = 3; + hotkey = "F"; + }; }; }; @@ -82,7 +82,7 @@ class CfgVehicles { class ACE_StartSurrenderingSelf { displayName = "$STR_ACE_Captives_StartSurrendering"; condition = QUOTE([ARR_2(_player, true)] call FUNC(canSurrender)); - statement = QUOTE([ARR_2(_player, true)] call FUNC(surrender)); + statement = QUOTE([ARR_2(_player, true)] call FUNC(setSurrendered)); exceptions[] = {}; showDisabled = 0; priority = 0; @@ -90,7 +90,7 @@ class CfgVehicles { class ACE_StopSurrenderingSelf { displayName = "$STR_ACE_Captives_StopSurrendering"; condition = QUOTE([ARR_2(_player, false)] call FUNC(canSurrender)); - statement = QUOTE([ARR_2(_player, false)] call FUNC(surrender)); + statement = QUOTE([ARR_2(_player, false)] call FUNC(setSurrendered)); exceptions[] = {QGVAR(isNotSurrendering)}; showDisabled = 0; priority = 0; @@ -100,24 +100,27 @@ class CfgVehicles { #define MACRO_LOADUNLOADCAPTIVE \ class ACE_Actions { \ - class ACE_LoadCaptive { \ - displayName = "$STR_ACE_Captives_LoadCaptive"; \ - distance = 4; \ - condition = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(canLoadCaptive)); \ - statement = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(doLoadCaptive)); \ - exceptions[] = {QGVAR(isNotEscorting)}; \ - showDisabled = 0; \ - priority = 1.2; \ - hotkey = "L"; \ - }; \ - class ACE_UnloadCaptive { \ - displayName = "$STR_ACE_Captives_UnloadCaptive"; \ - distance = 4; \ - condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); \ - statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); \ - showDisabled = 0; \ - priority = 1.2; \ - hotkey = "C"; \ + class ACE_MainActions { \ + selection = ""; \ + class ACE_LoadCaptive { \ + displayName = "$STR_ACE_Captives_LoadCaptive"; \ + distance = 4; \ + condition = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(canLoadCaptive)); \ + statement = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(doLoadCaptive)); \ + exceptions[] = {QGVAR(isNotEscorting)}; \ + showDisabled = 0; \ + priority = 1.2; \ + hotkey = "L"; \ + }; \ + class ACE_UnloadCaptive { \ + displayName = "$STR_ACE_Captives_UnloadCaptive"; \ + distance = 4; \ + condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); \ + statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); \ + showDisabled = 0; \ + priority = 1.2; \ + hotkey = "C"; \ + }; \ }; \ }; @@ -151,15 +154,10 @@ class CfgVehicles { MACRO_LOADUNLOADCAPTIVE }; -#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ - }; - class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { class TransportItems { - MACRO_ADDITEM(ACE_CableTie,12) + MACRO_ADDITEM(ACE_CableTie,12); }; }; diff --git a/addons/captives/XEH_postInit.sqf b/addons/captives/XEH_postInit.sqf index 9d1a242d4d..651edbcf86 100644 --- a/addons/captives/XEH_postInit.sqf +++ b/addons/captives/XEH_postInit.sqf @@ -1,12 +1,9 @@ #include "script_component.hpp" -["playerChanged", {_this call FUNC(handlePlayerChanged)}] call EFUNC(common,addEventhandler); -["MoveInCaptive", {_this call FUNC(vehicleCaptiveMoveIn)}] call EFUNC(common,addEventHandler); -["MoveOutCaptive", {_this call FUNC(vehicleCaptiveMoveOut)}] call EFUNC(common,addEventHandler); -["SetHandcuffed", {_this call FUNC(setHandcuffed)}] call EFUNC(common,addEventHandler); //Handles when someone starts escorting and then disconnects, leaving the captive attached //This is normaly handled by the PFEH in doEscortCaptive, but that won't be running if they DC + if (isServer) then { addMissionEventHandler ["HandleDisconnect", { PARAMS_1(_disconnectedPlayer); @@ -21,12 +18,20 @@ if (isServer) then { }]; }; -//TODO: Medical Integration Events??? +["playerVehicleChanged", {_this call FUNC(handleVehicleChanged)}] call EFUNC(common,addEventHandler); +["zeusDisplayChanged", {_this call FUNC(handleZeusDisplayChanged)}] call EFUNC(common,addEventHandler); +["playerChanged", {_this call FUNC(handlePlayerChanged)}] call EFUNC(common,addEventhandler); +["MoveInCaptive", {_this call FUNC(vehicleCaptiveMoveIn)}] call EFUNC(common,addEventHandler); +["MoveOutCaptive", {_this call FUNC(vehicleCaptiveMoveOut)}] call EFUNC(common,addEventHandler); -// [_unit, "knockedOut", { -// if (local (_this select 0)) then {_this call ACE_Captives_fnc_handleKnockedOut}; -// }] call ACE_Core_fnc_addCustomEventhandler; +["SetHandcuffed", {_this call FUNC(setHandcuffed)}] call EFUNC(common,addEventHandler); +["SetSurrendered", {_this call FUNC(setSurrendered)}] call EFUNC(common,addEventHandler); -// [_unit, "wokeUp", { -// if (local (_this select 0)) then {_this call ACE_Captives_fnc_handleWokeUp}; -// }] call ACE_Core_fnc_addCustomEventhandler; +//Medical Integration Events??? +["medical_onUnconscious", {_this call ACE_Captives_fnc_handleOnUnconscious}] call EFUNC(common,addEventHandler); + +if (!hasInterface) exitWith {}; + +["isNotEscorting", {!(GETVAR(_this select 0,GVAR(isEscorting),false))}] call EFUNC(common,addCanInteractWithCondition); +["isNotHandcuffed", {!(GETVAR(_this select 0,GVAR(isHandcuffed),false))}] call EFUNC(common,addCanInteractWithCondition); +["isNotSurrendering", {!(GETVAR(_this select 0,GVAR(isSurrendering),false))}] call EFUNC(common,addCanInteractWithCondition); diff --git a/addons/captives/XEH_preInit.sqf b/addons/captives/XEH_preInit.sqf index 75ee77e9bc..c09f81e51b 100644 --- a/addons/captives/XEH_preInit.sqf +++ b/addons/captives/XEH_preInit.sqf @@ -19,13 +19,13 @@ PREP(doUnloadCaptive); PREP(handleGetIn); PREP(handleGetOut); PREP(handleKilled); -PREP(handleKnockedOut); +PREP(handleOnUnconscious); PREP(handlePlayerChanged); PREP(handleUnitInitPost); -PREP(handleWokeUp); +PREP(handleZeusDisplayChanged); PREP(moduleSurrender); PREP(setHandcuffed); -PREP(surrender); +PREP(setSurrendered); PREP(vehicleCaptiveMoveIn); PREP(vehicleCaptiveMoveOut); diff --git a/addons/captives/config.cpp b/addons/captives/config.cpp index 27b7c4ec60..57de6ee970 100644 --- a/addons/captives/config.cpp +++ b/addons/captives/config.cpp @@ -16,16 +16,3 @@ class CfgPatches { #include "CfgMoves.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" - - -class ACE_canInteractConditions { - class GVAR(isNotEscorting) { - condition = QUOTE(!(GETVAR(player,QGVAR(isEscorting),false))); - }; - class GVAR(isNotHandcuffed) { - condition = QUOTE(!(GETVAR(player,QGVAR(isHandcuffed),false))); - }; - class GVAR(isNotSurrendering) { - condition = QUOTE(!(GETVAR(player,QGVAR(isSurrendering),false))); - }; -}; diff --git a/addons/captives/functions/fnc_canStopEscorting.sqf b/addons/captives/functions/fnc_canStopEscorting.sqf index e6a5a0e568..56065a43fc 100644 --- a/addons/captives/functions/fnc_canStopEscorting.sqf +++ b/addons/captives/functions/fnc_canStopEscorting.sqf @@ -19,22 +19,10 @@ PARAMS_1(_unit); DEFAULT_PARAM(1,_target,objNull); -private ["_isAttached"]; - if (isNull _target) then { _target = _unit getVariable [QGVAR(escortedUnit), objNull]; }; -if (isNull _target) exitWith { - ERROR("Null Target (no ACE_escortedUnit)"); - false -}; +if (isNull _target) exitWith {false}; -_isAttached = _target in (attachedObjects _unit); - -if (_isAttached && (!(_target getVariable [QGVAR(isHandcuffed), false]))) exitWith { - ERROR("Attached But Not Captive"); - false -}; - -_isAttached +(_target in (attachedObjects _unit)) && {_target getVariable [QGVAR(isHandcuffed), false]} diff --git a/addons/captives/functions/fnc_canSurrender.sqf b/addons/captives/functions/fnc_canSurrender.sqf index 238087c62b..3ee687cfc1 100644 --- a/addons/captives/functions/fnc_canSurrender.sqf +++ b/addons/captives/functions/fnc_canSurrender.sqf @@ -18,5 +18,12 @@ PARAMS_2(_unit,_newSurrenderState); -//TODO: any other conditions?? -(!((_unit getVariable [QGVAR(isSurrendering), false]) isEqualTo _newSurrenderState)) +private "_returnValue"; + +_returnValue = if (_newSurrenderState) then { + !(_unit getVariable [QGVAR(isSurrendering), false]); //Not currently surrendering +} else { + (_unit getVariable [QGVAR(isSurrendering), false]); //is Surrendering +}; + +_returnValue diff --git a/addons/captives/functions/fnc_doEscortCaptive.sqf b/addons/captives/functions/fnc_doEscortCaptive.sqf index 299aa81631..08f44a1437 100644 --- a/addons/captives/functions/fnc_doEscortCaptive.sqf +++ b/addons/captives/functions/fnc_doEscortCaptive.sqf @@ -51,7 +51,7 @@ if (_state) then { _unit setVariable [QGVAR(escortedUnit), objNull, true]; }; }; - [_escortFnc, 0.2, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler; + [_escortFnc, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler; } else { _unit setVariable [QGVAR(isEscorting), false, true]; diff --git a/addons/captives/functions/fnc_handleGetIn.sqf b/addons/captives/functions/fnc_handleGetIn.sqf index 54133e2362..cf7d2c7271 100644 --- a/addons/captives/functions/fnc_handleGetIn.sqf +++ b/addons/captives/functions/fnc_handleGetIn.sqf @@ -19,6 +19,12 @@ PARAMS_3(_vehicle,_dontcare,_unit); -if ((local _unit) && (_unit getVariable [QGVAR(isEscorting), false])) then { - _unit setVariable [QGVAR(isEscorting), false, true]; +if (local _unit) then { + if (_unit getVariable [QGVAR(isEscorting), false]) then { + _unit setVariable [QGVAR(isEscorting), false, true]; + }; + + if (_unit getVariable [QGVAR(isSurrendering), false]) then { + [_unit, false] call FUNC(setSurrender); + }; }; diff --git a/addons/captives/functions/fnc_handleKnockedOut.sqf b/addons/captives/functions/fnc_handleKnockedOut.sqf deleted file mode 100644 index 3257d544ca..0000000000 --- a/addons/captives/functions/fnc_handleKnockedOut.sqf +++ /dev/null @@ -1,2 +0,0 @@ -// by commy2 - diff --git a/addons/captives/functions/fnc_handleOnUnconscious.sqf b/addons/captives/functions/fnc_handleOnUnconscious.sqf new file mode 100644 index 0000000000..9b73d34485 --- /dev/null +++ b/addons/captives/functions/fnc_handleOnUnconscious.sqf @@ -0,0 +1,36 @@ +/* + * Author: commy2, PabstMirror + * Handles the "medical_onUnconscious" event + * + * Arguments: + * 0: Unit + * 0: Is Unconsisisiouses + * + * Return Value: + * Nothing + * + * Example: + * [bob, true] call ACE_captives_fnc_handleOnUnconscious + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_unit,_isUnconc); + +if (!local _unit) exitWith {}; + +systemChat format ["med: %1", _this]; + +if (_isUnconc) then { + //Knocked out: If surrendering, stop + if (_unit getVariable [QGVAR(isSurrendering), false]) then { + [_unit, false] call FUNC(setSurrendered); + }; +} else { + //Woke up: if handcuffed, goto animation + if (_unit getVariable [QGVAR(isHandcuffed), false] && {vehicle _unit == _unit}) then { + [_unit] call EFUNC(common,fixLoweredRifleAnimation); + [_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation); + }; +}; diff --git a/addons/captives/functions/fnc_handlePlayerChanged.sqf b/addons/captives/functions/fnc_handlePlayerChanged.sqf index 13e284ef80..21fd1e1ec3 100644 --- a/addons/captives/functions/fnc_handlePlayerChanged.sqf +++ b/addons/captives/functions/fnc_handlePlayerChanged.sqf @@ -18,10 +18,16 @@ PARAMS_2(_newUnit,_oldUnit); +//set showHUD based on new unit status: if ((_newUnit getVariable [QGVAR(isHandcuffed), false]) || {_newUnit getVariable [QGVAR(isSurrendering), false]}) then { TRACE_1("Player Change (showHUD false)",_newUnit); - showHUD false; + showHUD false; } else { TRACE_1("Player Change (showHUD true)",_newUnit); showHUD true; }; + +//If old player was escorting, stop +if (_oldUnit getVariable [QGVAR(isEscorting), false]) then { + _oldUnit setVariable [QGVAR(isEscorting), false, true]; +}; diff --git a/addons/captives/functions/fnc_handleUnitInitPost.sqf b/addons/captives/functions/fnc_handleUnitInitPost.sqf index 1a5a8f2ecd..a8b601300a 100644 --- a/addons/captives/functions/fnc_handleUnitInitPost.sqf +++ b/addons/captives/functions/fnc_handleUnitInitPost.sqf @@ -29,6 +29,6 @@ if (local _unit) then { if (_unit getVariable [QGVAR(isSurrendering), false]) then { _unit setVariable [QGVAR(isSurrendering), false]; - [_unit, true] call FUNC(surrender); + [_unit, true] call FUNC(setSurrendered); }; }; diff --git a/addons/captives/functions/fnc_handleWokeUp.sqf b/addons/captives/functions/fnc_handleWokeUp.sqf deleted file mode 100644 index 9bf2e1a2bc..0000000000 --- a/addons/captives/functions/fnc_handleWokeUp.sqf +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Author: commy2 - * TODO - * - * Arguments: - * 0: _unit - * - * Return Value: - * The return value - * - * Example: - * [bob] call ACE_captives_fnc_handleWokeUp - * - * Public: No - */ -#include "script_component.hpp" - -PARAMS_1(_unit); - -if (_unit getVariable [QGVAR(isHandcuffed), false] && {vehicle _unit == _unit}) then { - [_unit] call EFUNC(common,fixLoweredRifleAnimation); - [_unit, "ACE_AmovPercMstpScapWnonDnon", 0] call EFUNC(common,doAnimation); -}; diff --git a/addons/captives/functions/fnc_handleZeusDisplayChanged.sqf b/addons/captives/functions/fnc_handleZeusDisplayChanged.sqf new file mode 100644 index 0000000000..84b90e78c2 --- /dev/null +++ b/addons/captives/functions/fnc_handleZeusDisplayChanged.sqf @@ -0,0 +1,31 @@ +/* + * Author: PabstMirror + * Handles ZeusDisplayChanged event + * Need to reset showHUD after closing zeus + * + * Arguments: + * 0: Unit + * 1: Display is now open + * + * Return Value: + * Nothing + * + * Example: + * [bob1, false] call ACE_captives_fnc_handleZeusDisplayChanged + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_unit,_zeusIsOpen); + +//set showHUD based on unit status: +if (!_zeusIsOpen) then { + if ((_unit getVariable [QGVAR(isHandcuffed), false]) || {_unit getVariable [QGVAR(isSurrendering), false]}) then { + TRACE_1("Player Change (showHUD false)",_unit); + showHUD false; + } else { + TRACE_1("Player Change (showHUD true)",_unit); + showHUD true; + }; +}; diff --git a/addons/captives/functions/fnc_moduleSurrender.sqf b/addons/captives/functions/fnc_moduleSurrender.sqf index 5cbf43aacc..1a335131a8 100644 --- a/addons/captives/functions/fnc_moduleSurrender.sqf +++ b/addons/captives/functions/fnc_moduleSurrender.sqf @@ -27,19 +27,31 @@ if (local _logic) then { if ((count _bisMouseOver) == 2) then {//check what mouse was over before the module was placed _mouseOverObject = _bisMouseOver select 1; if ((_mouseOverObject isKindOf "CAManBase") && {(vehicle _mouseOverObject) == _mouseOverObject}) then { - systemChat format ["Debug - module surrendering %1", (name _mouseOverObject)]; - [_mouseOverObject, true] call FUNC(surrender); + TRACE_2("Debug - module surrendering %1",_mouseOverObject,(name _mouseOverObject)); + if (alive _mouseOverObject) then { + if (!(_mouseOverObject getVariable [QGVAR(isSurrendering), false])) then { + ["SetSurrendered", [_mouseOverObject], [_mouseOverObject, true]] call EFUNC(common,targetEvent); + } else { + ["SetSurrendered", [_mouseOverObject], [_mouseOverObject, false]] call EFUNC(common,targetEvent); + }; + } else { + ["STR_ACE_Captives_Zeus_OnlyAlive"] call EFUNC(common,displayTextStructured); + }; } else { - systemChat format ["Only use on dismounted inf"]; + ["STR_ACE_Captives_Zeus_OnlyInfentry"] call EFUNC(common,displayTextStructured); }; } else { - systemChat format ["Nothing under mouse"]; + ["STR_ACE_Captives_Zeus_NothingSelected"] call EFUNC(common,displayTextStructured); }; - } else {//an editor module - { - systemChat format ["Debug - module surrendering %1", (name _x)]; - [_x, true] call FUNC(surrender); - } forEach _units; + } else { + //an editor module + //Modules run before postInit can instal the event handler, so we need to wait a little bit + [{ + PARAMS_1(_units); + { + ["SetSurrendered", [_x], [_x, true]] call EFUNC(common,targetEvent); + } forEach _units; + }, [_units], 0.05, 0.05]call EFUNC(common,waitAndExecute); }; deleteVehicle _logic; diff --git a/addons/captives/functions/fnc_setHandcuffed.sqf b/addons/captives/functions/fnc_setHandcuffed.sqf index 912b00662f..5917532874 100644 --- a/addons/captives/functions/fnc_setHandcuffed.sqf +++ b/addons/captives/functions/fnc_setHandcuffed.sqf @@ -18,19 +18,23 @@ PARAMS_2(_unit,_state); -// We only want this function to work on local machines -if (!local _unit) exitwith { - [_this, QUOTE(FUNC(setHandcuffed)), _unit] call EFUNC(common,execRemoteFnc); - TRACE_2("running setHandcuffed on remote unit",_unit,_state); -}; -if (_state isEqualTo (_unit getVariable [QGVAR(isHandcuffed), false])) then { - LOG("setHandcuffed: current state same as new"); +if (!local _unit) exitwith { + ERROR("running setHandcuffed on remote unit"); +}; +if ((_unit getVariable [QGVAR(isHandcuffed), false]) isEqualTo _state) exitWith { + ERROR("setHandcuffed: current state same as new"); }; if (_state) then { _unit setVariable [QGVAR(isHandcuffed), true, true]; [_unit, QGVAR(Handcuffed), true] call EFUNC(common,setCaptivityStatus); + + if (_unit getVariable [QGVAR(isSurrendering), false]) then { //If surrendering, stop + [_unit, false] call FUNC(setSurrendered); + }; + + //Set unit cargoIndex (will be -1 if dismounted) _unit setVariable [QGVAR(CargoIndex), ((vehicle _unit) getCargoIndex _unit), true]; if (_unit == ACE_player) then { @@ -43,13 +47,32 @@ if (_state) then { if (_unit getVariable [QGVAR(isHandcuffed), false] && {vehicle _unit == _unit}) then { [_unit] call EFUNC(common,fixLoweredRifleAnimation); [_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation); + + //Adds an animation changed eh + //If we get a change in animation then redo the animation (handles people vaulting to break the animation chain) + _animChangedEHID = _unit addEventHandler ["AnimChanged", { + PARAMS_2(_unit,_newAnimation); + if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { + ERROR("Handcuff animation interrupted"); + systemChat format ["debug %2: new %1", _newAnimation, time]; + [_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation); + }; + }]; + _unit setVariable [QGVAR(handcuffAnimEHID), _animChangedEHID]; + }; }, [_unit], 0.01, 0] call EFUNC(common,waitAndExecute); } else { _unit setVariable [QGVAR(isHandcuffed), false, true]; [_unit, QGVAR(Handcuffed), false] call EFUNC(common,setCaptivityStatus); - if ((vehicle _unit) == _unit) then { - //Break out of hands up animation loop (doAnimation handles Unconscious prioity) + + //remove AnimChanged EH + _animChangedEHID = _unit getVariable [QGVAR(handcuffAnimEHID), -1]; + _unit removeEventHandler ["AnimChanged", _animChangedEHID]; + _unit setVariable [QGVAR(handcuffAnimEHID), -1]; + + if (((vehicle _unit) == _unit) && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { + //Break out of hands up animation loop [_unit, "ACE_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon", 2] call EFUNC(common,doAnimation); }; diff --git a/addons/captives/functions/fnc_setSurrendered.sqf b/addons/captives/functions/fnc_setSurrendered.sqf new file mode 100644 index 0000000000..3a7436abc7 --- /dev/null +++ b/addons/captives/functions/fnc_setSurrendered.sqf @@ -0,0 +1,101 @@ +/* + * Author: commy2 PabstMirror + * Lets a unit surrender + * + * Arguments: + * 0: Unit + * 1: True to surrender, false to un-surrender + * + * Return Value: + * Nothing + * + * Example: + * [Pierre, true] call ACE_captives_fnc_setSurrendered; + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_unit,_state); + + +if (!local _unit) exitwith { + ERROR("running surrender on remote unit"); +}; + +if ((_unit getVariable [QGVAR(isSurrendering), false]) isEqualTo _state) exitWith { + ERROR("Surrender: current state same as new"); +}; + +if (_state) then { + if ((vehicle _unit) != _unit) exitWith {ERROR("Cannot surrender while mounted");}; + if (_unit getVariable [QGVAR(isHandcuffed), false]) exitWith {ERROR("Cannot surrender while handcuffed");}; + + _unit setVariable [QGVAR(isSurrendering), true, true]; + + [_unit, QGVAR(Surrendered), true] call EFUNC(common,setCaptivityStatus); + + if (_unit == ACE_player) then { + showHUD false; + }; + + [_unit] call EFUNC(common,fixLoweredRifleAnimation); + [_unit, "ACE_AmovPercMstpSsurWnonDnon", 1] call EFUNC(common,doAnimation); + + // fix anim on mission start (should work on dedicated servers) + [{ + PARAMS_1(_unit); + if (_unit getVariable [QGVAR(isSurrendering), false] && {(vehicle _unit) == _unit}) then { + //Adds an animation changed eh + //If we get a change in animation then redo the animation (handles people vaulting to break the animation chain) + _animChangedEHID = _unit addEventHandler ["AnimChanged", { + PARAMS_2(_unit,_newAnimation); + if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { + ERROR("Surrender animation interrupted"); + systemChat format ["debug %2: new %1", _newAnimation, time]; + [_unit, "ACE_AmovPercMstpSsurWnonDnon", 1] call EFUNC(common,doAnimation); + }; + }]; + _unit setVariable [QGVAR(surrenderAnimEHID), _animChangedEHID]; + }; + }, [_unit], 0.01, 0] call EFUNC(common,waitAndExecute); +} else { + _unit setVariable [QGVAR(isSurrendering), false, true]; + [_unit, QGVAR(Surrendered), false] call EFUNC(common,setCaptivityStatus); + + //remove AnimChanged EH + _animChangedEHID = _unit getVariable [QGVAR(surrenderAnimEHID), -1]; + _unit removeEventHandler ["AnimChanged", _animChangedEHID]; + _unit setVariable [QGVAR(surrenderAnimEHID), -1]; + + if (_unit == ACE_player) then { + //only re-enable HUD if not handcuffed + if (!(_unit getVariable [QGVAR(isHandcuffed), false])) then { + showHUD true; + }; + }; + + if (_unit getVariable ["ACE_isUnconscious", false]) exitWith {}; //don't touch animations if unconscious + + //if we are in "hands up" animationState, crack it now + if (((vehicle _unit) == _unit) && {(animationState _unit) == "ACE_AmovPercMstpSsurWnonDnon"}) then { + [_unit, "ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon", 2] call EFUNC(common,doAnimation); + } else { + //spin up a PFEH, to watching animationState for the next 20 seconds to make sure we don't enter "hands up" + //Handles long animation chains + [{ + PARAMS_2(_args,_pfID); + EXPLODE_2_PVT(_args,_unit,_maxTime); + //If waited long enough or they re-surrendered or they are unconscious, exit loop + if ((time > _maxTime) || {_unit getVariable [QGVAR(isSurrendering), false]} || {_unit getVariable ["ACE_isUnconscious", false]}) exitWith { + [_pfID] call CBA_fnc_removePerFrameHandler; + }; + //Only break animation if they are actualy the "hands up" animation (because we are using switchmove there won't be an transition) + if (((vehicle _unit) == _unit) && {(animationState _unit) == "ACE_AmovPercMstpSsurWnonDnon"}) exitWith { + [_pfID] call CBA_fnc_removePerFrameHandler; + //Break out of hands up animation loop + [_unit, "ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon", 2] call EFUNC(common,doAnimation); + }; + }, 0, [_unit, (time + 20)]] call CBA_fnc_addPerFrameHandler; + }; +}; diff --git a/addons/captives/functions/fnc_surrender.sqf b/addons/captives/functions/fnc_surrender.sqf deleted file mode 100644 index 1f0e232926..0000000000 --- a/addons/captives/functions/fnc_surrender.sqf +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Author: commy2 PabstMirror - * Lets a unit surrender - * - * Arguments: - * 0: Unit - * 1: State - * - * Return Value: - * Nothing - * - * Example: - * [Pierre, true] call ACE_captives_fnc_surrender; - * - * Public: No - */ -#include "script_component.hpp" - -PARAMS_2(_unit,_state); - -// We only want this function to work on local machines -if (!local _unit) exitwith { - [_this, QUOTE(FUNC(surrender)), _unit] call EFUNC(common,execRemoteFnc); - TRACE_2("running surrender on remote unit",_unit,_state); -}; - -if ((_unit getVariable [QGVAR(isSurrendering), false]) isEqualTo _state) then { - LOG("Surrender: current state same as new"); -}; - -if (_state) then { - _unit setVariable [QGVAR(isSurrendering), true, true]; - [_unit, QGVAR(Surrendered), true] call EFUNC(common,setCaptivityStatus); - - if (_unit == ACE_player) then { - showHUD false; - }; - - // fix anim on mission start (should work on dedicated servers) - [{ - PARAMS_1(_unit); - if (_unit getVariable [QGVAR(isSurrendering), false] && {vehicle _unit == _unit}) then { - [_unit] call EFUNC(common,fixLoweredRifleAnimation); - [_unit, "ACE_AmovPercMstpSsurWnonDnon", 1] call EFUNC(common,doAnimation); - }; - }, [_unit], 0.01, 0] call EFUNC(common,waitAndExecute); - - //PFEH - (TODO: move to event system?) - [{ - EXPLODE_1_PVT((_this select 0),_unit); - if (_unit getVariable [QGVAR(isSurrendering), false]) then { - //If unit dies, gets knocked out, or is handcuffed then end surrender - if ((!alive _unit) || {_unit getVariable ["ACE_isUnconscious", false]} || {_unit getVariable [QGVAR(isHandcuffed), false]}) then { - [_unit, false] call FUNC(surrender); - [(_this select 1)] call CBA_fnc_removePerFrameHandler; - }; - } else { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - }, 0.0, [_unit]] call CBA_fnc_addPerFrameHandler; -} else { - _unit setVariable [QGVAR(isSurrendering), false, true]; - [_unit, QGVAR(Surrendered), false] call EFUNC(common,setCaptivityStatus); - - if ((vehicle _unit) == _unit) then { - //Break out of hands up animation loop (doAnimation handles Unconscious prioity) - [_unit, "ACE_AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon", 2] call EFUNC(common,doAnimation); - }; - - if (_unit == ACE_player) then { - //only re-enable HUD if not handcuffed - if (!(_unit getVariable [QGVAR(isHandcuffed), false])) then { - showHUD true; - }; - }; -}; diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 7d8096b3e6..f03f30a113 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -136,5 +136,14 @@ Stop Surrendering + + Only use on alive units + + + Only use on dismounted inf + + + Nothing under mouse + \ No newline at end of file diff --git a/addons/common/CfgEventHandlers.hpp b/addons/common/CfgEventHandlers.hpp index b9c5d7e4ce..522df03d4f 100644 --- a/addons/common/CfgEventHandlers.hpp +++ b/addons/common/CfgEventHandlers.hpp @@ -38,7 +38,7 @@ class Extended_Respawn_EventHandlers { respawn = QUOTE(_this call FUNC(setName)); }; class GVAR(RESETDefaults) { - respawn = QUOTE(_this call FUNC(resetAllDefaults_F)); + respawn = QUOTE(_this call FUNC(resetAllDefaults)); }; }; }; diff --git a/addons/common/CfgWeapons.hpp b/addons/common/CfgWeapons.hpp index 5df5d75da8..5da1bff649 100644 --- a/addons/common/CfgWeapons.hpp +++ b/addons/common/CfgWeapons.hpp @@ -7,14 +7,22 @@ class CfgWeapons { simulation = "ItemMineDetector"; }; - class Rifle_Base_F; + class Rifle; + class Rifle_Base_F: Rifle { + class WeaponSlotsInfo; + }; + class ACE_FakePrimaryWeapon: Rifle_Base_F { + scope = 2; + displayName = ""; + model = ""; + picture = ""; + magazines[] = {"ACE_FakeMagazine"}; discreteDistance[] = {}; discreteDistanceInitIndex = 0; - displayName = ""; - picture = ""; - model = ""; - magazines[] = {"ACE_FakeMagazine"}; - scope = 2; + + class WeaponSlotsInfo: WeaponSlotsInfo { + mass = 0; + }; }; }; diff --git a/addons/common/HintConfig.hpp b/addons/common/HintConfig.hpp index 3e3493a8ba..5dc0e6384a 100644 --- a/addons/common/HintConfig.hpp +++ b/addons/common/HintConfig.hpp @@ -17,14 +17,15 @@ class RscTitles { class HintBox: RscStructuredText { idc = 1; text = ""; - size = "1 / 40 / (getResolution select 5)"; - sizeEx = 1; + //size = "1 / 40 / (getResolution select 5)"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0, 0, 0, 0.5}; x = safeZoneW + safeZoneX - 0 * safezoneW; //safeZoneW + safeZoneX - 0.2 * safezoneW; y = safeZoneY + 0.2 * safezoneH; w = 0.2 * safeZoneW; h = 0.1 * SafeZoneH; + font = "PuristaMedium"; }; }; }; @@ -36,13 +37,12 @@ class RscTitles { fadeIn = 0.2; fadeOut = 0.2; name = "ACE_RscErrorHint"; - class controls { class HintBox: RscStructuredText { idc = 1; text = ""; - size = "1 / 40 / (getResolution select 5)"; - sizeEx = 1; + //size = "1 / 40 / (getResolution select 5)"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0.8, 0, 0, 0.5}; x = 0.3 * safeZoneW + safeZoneX; @@ -52,6 +52,7 @@ class RscTitles { }; }; }; + class ACE_EventHandlerHelper: ACE_Rsc_Display_Base { idd = -1; class controls { diff --git a/addons/common/ProgressScreen.hpp b/addons/common/ProgressScreen.hpp index 31184f00f4..751d48af9f 100644 --- a/addons/common/ProgressScreen.hpp +++ b/addons/common/ProgressScreen.hpp @@ -1,6 +1,3 @@ -class ACE_gui_RscProgress; -class ACE_gui_staticBase; - class GVAR(ProgressBar_Dialog) { idd = -1; @@ -20,7 +17,7 @@ class GVAR(ProgressBar_Dialog) { type = 0; style = 0; size = 1; - colorBackground[] = {0, 0, 0, 0.1}; + colorBackground[] = {0, 0, 0, 0.0}; colorText[] = {0, 0, 0, 0}; x = "safezoneX"; y = "safezoneY"; @@ -34,7 +31,7 @@ class GVAR(ProgressBar_Dialog) { y = "0.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)"; h = ".8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - colorFrame[] = {0,0,0,0.025}; + colorFrame[] = {0,0,0,0.0}; colorBar[] = {0.27,0.5,0.31,0.8}; texture = "#(argb,8,8,3)color(1,1,1,0.7)"; }; diff --git a/addons/common/RscInfoType.hpp b/addons/common/RscInfoType.hpp index d0b08c50c2..fe21b05265 100644 --- a/addons/common/RscInfoType.hpp +++ b/addons/common/RscInfoType.hpp @@ -26,5 +26,5 @@ class RscDisplayInventory { }; class RscDisplayChannel { - onLoad = QUOTE(_this call GVAR(onLoadRscDisplayChannel)); + onLoad = QUOTE(_this call FUNC(onLoadRscDisplayChannel)); }; diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index dbb665d446..1d951c3ceb 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -20,6 +20,19 @@ if (hasInterface) then { }; }] call FUNC(addEventhandler); +["fixCollision", DFUNC(fixCollision)] call FUNC(addEventhandler); +["fixFloating", DFUNC(fixFloating)] call FUNC(addEventhandler); +["fixPosition", DFUNC(fixPosition)] call FUNC(addEventhandler); + +["lockVehicle", { + _this setVariable [QGVAR(lockStatus), locked _this]; + _this lock 2; +}] call FUNC(addEventhandler); + +["unlockVehicle", { + _this lock (_this getVariable [QGVAR(lockStatus), locked _this]); +}] call FUNC(addEventhandler); + // hack to get PFH to work in briefing [QGVAR(onBriefingPFH), "onEachFrame", { if (time > 0) exitWith { @@ -55,8 +68,6 @@ if (_currentVersion != _previousVersion) then { if (!hasInterface) exitWith {}; call COMPILE_FILE(scripts\assignedItemFix); - -call COMPILE_FILE(scripts\initCanInteractFunction); call COMPILE_FILE(scripts\initScrollWheel); 0 spawn { @@ -88,6 +99,7 @@ GVAR(OldZeusDisplayIsOpen) = !(isNull findDisplay 312); GVAR(OldCameraView) = cameraView; GVAR(OldPlayerVehicle) = vehicle ACE_player; GVAR(OldPlayerTurret) = [ACE_player] call FUNC(getTurretIndex); +GVAR(OldPlayerWeapon) = currentWeapon ACE_player; // PFH to raise varios events [{ @@ -148,6 +160,14 @@ GVAR(OldPlayerTurret) = [ACE_player] call FUNC(getTurretIndex); ["playerTurretChanged", [ACE_player, _newPlayerTurret]] call FUNC(localEvent); }; + // "playerWeaponChanged" event + _newPlayerWeapon = currentWeapon ACE_player; + if (_newPlayerWeapon != GVAR(OldPlayerWeapon)) then { + // Raise ACE event locally + GVAR(OldPlayerWeapon) = _newPlayerWeapon; + ["playerWeaponChanged", [ACE_player, _newPlayerWeapon]] call FUNC(localEvent); + }; + }, 0, []] call cba_fnc_addPerFrameHandler; [QGVAR(StateArrested),false,true,QUOTE(ADDON)] call FUNC(defineVariable); @@ -158,3 +178,8 @@ GVAR(OldPlayerTurret) = [ACE_player] call FUNC(getTurretIndex); PARAMS_2(_vehicle,_fuelLevel); _vehicle setFuel _fuelLevel; }] call FUNC(addEventhandler); + +["displayTextStructured", FUNC(displayTextStructured)] call FUNC(addEventhandler); +["displayTextPicture", FUNC(displayTextPicture)] call FUNC(addEventhandler); + +["notOnMap", {!visibleMap}] call FUNC(addCanInteractWithCondition); diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 64a06a0f8c..de848941fd 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -7,6 +7,7 @@ ADDON = false; PREP(addActionEventHandler); PREP(addActionMenuEventHandler); PREP(addCameraEventHandler); +PREP(addCanInteractWithCondition); PREP(addCustomEventHandler); PREP(addLineToDebugDraw); PREP(addMapMarkerCreatedEventHandler); @@ -15,12 +16,19 @@ PREP(addSetting); PREP(adminKick); PREP(ambientBrightness); PREP(applyForceWalkStatus); +PREP(ASLToPosition); +PREP(beingCarried); PREP(binarizeNumber); +PREP(blurScreen); +PREP(cachedCall); PREP(callCustomEventHandlers); PREP(callCustomEventHandlersGlobal); PREP(canGetInPosition); +PREP(canInteract); PREP(canInteractWith); PREP(canUseWeapon); +PREP(carriedByObj); +PREP(carryObj); PREP(changeProjectileDirection); PREP(checkPBOs); PREP(claim); @@ -30,24 +38,42 @@ PREP(codeToString); PREP(convertKeyCode); PREP(createOrthonormalReference); PREP(currentChannel); +PREP(debug); +PREP(debugModule); +PREP(defineVariable); +PREP(disableAI); PREP(disableUserInput); +PREP(displayIcon); PREP(displayText); PREP(displayTextPicture); PREP(displayTextStructured); PREP(doAnimation); PREP(endRadioTransmission); +PREP(eraseCache); PREP(execNextFrame); PREP(execPersistentFnc); PREP(execRemoteFnc); PREP(executePersistent); PREP(filter); +PREP(fixCollision); +PREP(fixFloating); PREP(fixLoweredRifleAnimation); +PREP(fixPosition); +PREP(getAllDefinedSetVariables); PREP(getAllGear); PREP(getCaptivityStatus); +PREP(getCarriedBy); +PREP(getCarriedObj); PREP(getConfigCommander); PREP(getConfigGunner); +PREP(getDeathAnim); PREP(getDefaultAnim); +PREP(getDefinedVariable); +PREP(getDefinedVariableDefault); +PREP(getDefinedVariableInfo); PREP(getDoorTurrets); +PREP(getFirstObjectIntersection); +PREP(getFirstTerrainIntersection); PREP(getForceWalkStatus); PREP(getGunner); PREP(getHitPoints); @@ -56,6 +82,7 @@ PREP(getInPosition); PREP(getMarkerType); PREP(getName); PREP(getNumberFromMissionSQM); +PREP(getNumberMagazinesIn); PREP(getPitchBankYaw); PREP(getSettingData); PREP(getStringFromMissionSQM); @@ -74,63 +101,101 @@ PREP(getUavControlPosition); PREP(getVehicleCargo); PREP(getVehicleCodriver); PREP(getVehicleCrew); +PREP(getVersion); PREP(getWeaponAzimuthAndInclination); PREP(getWeaponIndex); PREP(getWeaponType); PREP(getWindDirection); PREP(goKneeling); PREP(hadamardProduct); +PREP(hasItem); +PREP(hasMagazine); +PREP(inheritsFrom); +PREP(insertionSort); PREP(interpolateFromArray); PREP(inTransitionAnim); +PREP(inWater); +PREP(isAlive); +PREP(isArrested); PREP(isAutoWind); +PREP(isAwake); PREP(isEngineer); PREP(isEOD); PREP(isInBuilding); +PREP(isModLoaded); PREP(isPlayer); PREP(isTurnedOut); PREP(letterToCode); +PREP(limitMovementSpeed); +PREP(loadPerson); +PREP(loadPersonLocal); PREP(loadSettingsFromProfile); PREP(loadSettingsOnServer); PREP(map); PREP(moduleCheckPBOs); PREP(moduleLSDVehicles); +PREP(moveToTempGroup); PREP(muteUnit); PREP(numberToDigits); PREP(numberToDigitsString); +PREP(onAnswerRequest); PREP(onLoadRscDisplayChannel); PREP(owned); PREP(player); PREP(playerSide); +PREP(positionToASL); PREP(progressBar); PREP(queueAnimation); PREP(readSettingFromModule); +PREP(receiveRequest); PREP(removeActionEventHandler); PREP(removeActionMenuEventHandler); PREP(removeCameraEventHandler); +PREP(removeCanInteractWithCondition); PREP(removeCustomEventHandler); PREP(removeMapMarkerCreatedEventHandler); PREP(removeScrollWheelEventHandler); +PREP(removeSpecificMagazine); +PREP(requestCallback); +PREP(resetAllDefaults); PREP(restoreVariablesJIP); PREP(revertKeyCodeLocalized); PREP(sanitizeString); +PREP(sendRequest); PREP(serverLog); +PREP(setArrestState); +PREP(setCanInteract); PREP(setCaptivityStatus); +PREP(setCarriedBy); +PREP(setDefinedVariable); +PREP(setDisableUserInputStatus); PREP(setForceWalkStatus); +PREP(setHearingCapability); PREP(setName); PREP(setParameter); PREP(setPitchBankYaw); -PREP(setVariableJIP); -PREP(setVariablePublic); +PREP(setProne); PREP(setSetting); PREP(setSettingFromConfig); +PREP(setVariableJIP); +PREP(setVariablePublic); +PREP(setVolume); +PREP(sortAlphabeticallyBy); +PREP(stringCompare); PREP(stringToColoredText); +PREP(stringRemoveWhiteSpace); PREP(subString); +PREP(switchToGroupSide); +PREP(throttledPublicVariable); PREP(toBin); PREP(toBitmask); PREP(toHex); PREP(toNumber); -PREP(throttledPublicVariable); +PREP(uniqueElementsOnly); +PREP(unloadPerson); PREP(unmuteUnit); +PREP(useItem); +PREP(useMagazine); PREP(waitAndExecute); // ACE_Debug @@ -143,6 +208,9 @@ PREP(logDisplays); PREP(monitor); PREP(showUser); +PREP(dumpPerformanceCounters); +PREP(dumpArray); + // ACE_CuratorFix PREP(addCuratorUnloadEventhandler); PREP(fixCrateContent); @@ -171,6 +239,9 @@ PREP(hashListSelect); PREP(hashListSet); PREP(hashListPush); +//Debug +ACE_COUNTERS = []; + // Load settings if (isServer) then { call FUNC(loadSettingsOnServer); @@ -195,74 +266,6 @@ if (hasInterface) then { }, 0, []] call cba_fnc_addPerFrameHandler; }; -PREP(stringCompare); -PREP(string_removeWhiteSpace); -PREP(isHC); -PREP(sendRequest_f); -PREP(requestCallback); -PREP(receiveRequest); -PREP(onAnswerRequest); -PREP(debug); -PREP(debugModule); -PREP(defineVariable); -PREP(setDefinedVariable); -PREP(getDefinedVariable); -PREP(getAllDefinedSetVariables); -PREP(getDefinedVariableInfo); -PREP(getDefinedVariableDefault); -PREP(getDeathAnim); -PREP(insertionSort); -PREP(uniqueElementsOnly); -PREP(sortAlphabeticallyBy); -PREP(hasMagazine); -PREP(useMagazine); -PREP(findMagazine); -PREP(hasItem); -PREP(useItem); -PREP(findItem); -PREP(getNumberMagazinesIn); -PREP(setCanInteract); -PREP(getCanInteract); -PREP(canInteract); -PREP(resetAllDefaults_f); -PREP(broadcastSound3D_f); - -PREP(isAwake); -PREP(setProne); - -PREP(setDisableUserInputStatus); - -PREP(dropWeapon_f); -PREP(inWater_f); -PREP(setVolume_f); -PREP(closeAllDialogs_f); -PREP(disableAI_f); -PREP(switchToGroupSide_f); -PREP(getFirstObjectIntersection); -PREP(getFirstTerrainIntersection); -PREP(setHearingCapability); -PREP(revealObject_f); -PREP(getWeaponItems_f); -PREP(isModLoaded_f); -PREP(inheritsFrom); -PREP(getVersion); -PREP(carryObj); -PREP(carriedByObj); -PREP(getCarriedObj); -PREP(getCarriedBy); -PREP(beingCarried); -PREP(setCarriedBy); - - -PREP(moveToTempGroup); - - -PREP(limitMovementSpeed); -PREP(setArrestState); -PREP(isArrested); -PREP(loadPerson_F); -PREP(loadPersonLocal_F); -PREP(unloadPerson_F); - - ADDON = true; + +isHC = !(hasInterface || isDedicated); diff --git a/addons/common/config.cpp b/addons/common/config.cpp index 84052cbdfb..8081a05637 100644 --- a/addons/common/config.cpp +++ b/addons/common/config.cpp @@ -51,12 +51,6 @@ class ACE_Rsc_Control_Base { h = 0; }; -class ACE_canInteractConditions { - class GVAR(notOnMap) { - condition = "!visibleMap"; - }; -}; - class ACE_Settings { /* *class GVAR(sampleSetting) { @@ -94,8 +88,41 @@ class ACE_Settings { isClientSetable = 1; displayName = "$STR_ACE_Common_EnableNumberHotkeys"; }; + class GVAR(settingFeedbackIcons) { + value = 1; + typeName = "SCALAR"; + force = 0; + isClientSetable = 1; + displayName = "$STR_ACE_Common_SettingFeedbackIconsName"; + description = "$STR_ACE_Common_SettingFeedbackIconsDesc"; + values[] = {"Hide", "Top right, downwards", "Top right, to the left", "Top left, downwards", "Top left, to the right"}; + }; + class GVAR(SettingProgressBarLocation) { + value = 0; + typeName = "SCALAR"; + force = 0; + isClientSetable = 1; + displayName = "$STR_ACE_Common_SettingProgressbarLocationName"; + description = "$STR_ACE_Common_SettingProgressbarLocationDesc"; + values[] = {"Top", "Bottom"}; + }; + class GVAR(displayTextColor) { + value[] = {0,0,0,0.1}; + typeName = "COLOR"; + isClientSetable = 1; + displayName = "$STR_ACE_Common_SettingDisplayTextColorName"; + description = "$STR_ACE_Common_SettingDisplayTextColorDesc"; + }; + class GVAR(displayTextFontColor) { + value[] = {1,1,1,1}; + typeName = "COLOR"; + isClientSetable = 1; + displayName = "$STR_ACE_Common_SettingDisplayTextFontColorName"; + description = "$STR_ACE_Common_SettingDisplayTextFontColorDesc"; + }; }; +#include "define.hpp" #include #include #include @@ -103,3 +130,23 @@ class ACE_Settings { #include #include +class CfgUIGrids { + class IGUI { + class Presets { + class Arma3 { + class Variables { + grid_ACE_displayText[] = {{((safezoneX + safezoneW) - (10 *(((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 *(((safezoneW / safezoneH) min 1.2) / 40)),safeZoneY + 0.175 * safezoneH, (10 *(((safezoneW / safezoneH) min 1.2) / 40)), (2 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))}, "(((safezoneW / safezoneH) min 1.2) / 40)","((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"}; + }; + }; + }; + + class Variables { + class grid_ACE_displayText { + displayName = "ACE Hint"; + description = "Textual in game feedback to the player."; + preview = "\a3\Ui_f\data\GUI\Cfg\UIGrids\grid_hint_ca.paa"; + saveToProfile[] = {0,1}; + }; + }; + }; +}; diff --git a/addons/gui/UI/define.hpp b/addons/common/define.hpp similarity index 97% rename from addons/gui/UI/define.hpp rename to addons/common/define.hpp index 13ce7d8a3e..f1cc009864 100644 --- a/addons/gui/UI/define.hpp +++ b/addons/common/define.hpp @@ -182,12 +182,12 @@ class ACE_gui_buttonBase { bottom = 0.00; }; textureNoShortcut = ""; - animTextureNormal = QUOTE( PATHTOF(data\buttonNormal_gradient_top.paa) ); - animTextureDisabled = QUOTE( PATHTOF(data\buttonDisabled_gradient.paa)); - animTextureOver = QUOTE( PATHTOF(data\buttonNormal_gradient_top.paa)); - animTextureFocused = QUOTE( PATHTOF(data\buttonNormal_gradient_top.paa)); - animTexturePressed = QUOTE( PATHTOF(data\buttonNormal_gradient_top.paa)); - animTextureDefault = QUOTE( PATHTOF(data\buttonNormal_gradient_top.paa)); + animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)"; + animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.8)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; period = 0.5; font = FontCSE; soundClick[] = {"\A3\ui_f\data\sound\RscButton\soundClick",0.09,1}; diff --git a/addons/common/functions/fnc_ASLToPosition.sqf b/addons/common/functions/fnc_ASLToPosition.sqf new file mode 100644 index 0000000000..41e532d39b --- /dev/null +++ b/addons/common/functions/fnc_ASLToPosition.sqf @@ -0,0 +1,21 @@ +/* + * Author: CAA-Picard + * Converts ASL to Arma "Position" + * + * Arguments: + * 0: position x + * 1: position y + * 2: position z + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +if (surfaceIsWater _this) then { + _this +} else { + ASLtoATL _this +}; diff --git a/addons/common/functions/fnc_addCanInteractWithCondition.sqf b/addons/common/functions/fnc_addCanInteractWithCondition.sqf new file mode 100644 index 0000000000..99815a08a7 --- /dev/null +++ b/addons/common/functions/fnc_addCanInteractWithCondition.sqf @@ -0,0 +1,38 @@ +/* + * Author: commy2 + * + * Add a condition that gets checked by ace_common_fnc_canInteractWith. + * + * Arguments: + * 0: The conditions id. Used to remove later or as exception name. An already existing name overwrites. (String) + * 1: The condition to check. format of "_this" is "[_player, _target]". (Code) + * + * Return Value: + * Unit can interact? + * + */ +#include "script_component.hpp" + +private ["_conditionName", "_conditionFunc"]; + +_conditionName = toLower (_this select 0); +_conditionFunc = _this select 1; + +private ["_conditions", "_conditionNames", "_conditionFuncs"]; + +_conditions = missionNamespace getVariable [QGVAR(InteractionConditions), [[],[]]]; + +_conditionNames = _conditions select 0; +_conditionFuncs = _conditions select 1; + +private "_index"; +_index = _conditionNames find _conditionName; + +if (_index == -1) then { + _index = count _conditionNames; +}; + +_conditionNames set [_index, _conditionName]; +_conditionFuncs set [_index, _conditionFunc]; + +GVAR(InteractionConditions) = [_conditionNames, _conditionFuncs]; diff --git a/addons/common/functions/fnc_ambientBrightness.sqf b/addons/common/functions/fnc_ambientBrightness.sqf index 034129735a..f29ff9e8e5 100644 --- a/addons/common/functions/fnc_ambientBrightness.sqf +++ b/addons/common/functions/fnc_ambientBrightness.sqf @@ -11,4 +11,4 @@ */ #include "script_component.hpp" -sunOrMoon * sunOrMoon + moonIntensity/5 min 1 +sunOrMoon * sunOrMoon * (1 - overcast * 0.25) + (moonIntensity/5 min 1) * (1 - overcast) diff --git a/addons/gui/functions/fnc_blurScreen.sqf b/addons/common/functions/fnc_blurScreen.sqf similarity index 99% rename from addons/gui/functions/fnc_blurScreen.sqf rename to addons/common/functions/fnc_blurScreen.sqf index 1cde214587..c3d101a37e 100644 --- a/addons/gui/functions/fnc_blurScreen.sqf +++ b/addons/common/functions/fnc_blurScreen.sqf @@ -39,4 +39,4 @@ if (_show) then { GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) = nil; }; }; -}; \ No newline at end of file +}; diff --git a/addons/common/functions/fnc_broadcastSound3D_f.sqf b/addons/common/functions/fnc_broadcastSound3D_f.sqf deleted file mode 100644 index 93f95bb431..0000000000 --- a/addons/common/functions/fnc_broadcastSound3D_f.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/** - * fn_broadcastSound3D_f.sqf - * @Descr: Plays a sound in 3D - * @Author: Glowbal - * - * @Arguments: [unit OBJECT, sound STRING] - * @Return: void - * @PublicAPI: true - */ - -#include "script_component.hpp" - -if (isDedicated) exitwith{}; -_unit = [_this, 0, ObjNull,[ObjNull]] call BIS_fnc_Param; -_sound = [_this, 1, "",[""]] call BIS_fnc_Param; -_unit say3D _sound; \ No newline at end of file diff --git a/addons/common/functions/fnc_cachedCall.sqf b/addons/common/functions/fnc_cachedCall.sqf new file mode 100644 index 0000000000..0c9aafcfc8 --- /dev/null +++ b/addons/common/functions/fnc_cachedCall.sqf @@ -0,0 +1,30 @@ +/* + * Author: CAA-Picard and Jaynus + * Returns the result of the function and caches it up to a given time + * + * Arguments: + * 0: Parameters + * 1: Function + * 2: Namespace to store the cache on + * 3: Cache uid + * 4: Max duration of the cache + * + * Return Value: + * Result of the function + * + * Public: No + */ +#include "script_component.hpp" + +EXPLODE_5_PVT(_this,_params,_function,_namespace,_uid,_duration); + +if (((_namespace getVariable [_uid, [-99999]]) select 0) < diag_tickTime) then { + _namespace setVariable [_uid, [diag_tickTime + _duration, _params call _function]]; +#ifdef DEBUG_MODE_FULL + diag_log format ["Calculated result: %1 %2", _namespace, _uid]; +} else { + diag_log format ["Cached result : %1 %2", _namespace, _uid]; +#endif +}; + +(_namespace getVariable _uid) select 1 diff --git a/addons/common/functions/fnc_canInteractWith.sqf b/addons/common/functions/fnc_canInteractWith.sqf index 9c5405452e..b74f2092b4 100644 --- a/addons/common/functions/fnc_canInteractWith.sqf +++ b/addons/common/functions/fnc_canInteractWith.sqf @@ -1,11 +1,49 @@ -// by commy2 +/* + * Author: commy2 + * + * Check if the unit can interact. + * + * Arguments: + * 0: The player. (Object) + * 1: The interaction target. objNull to ignore. (Object) + * 2: Exceptions. What general conditions are to skip? (Array) + * + * Return Value: + * Unit can interact? + * + */ #include "script_component.hpp" -private ["_unit", "_target", "_owner"]; +private ["_unit", "_target", "_exceptions"]; _unit = _this select 0; _target = _this select 1; +_exceptions = _this select 2; -_owner = _target getVariable ["ACE_isUsedBy", objNull]; +_exceptions = [_exceptions, {toLower _this}] call FUNC(map); -isNull _owner || {_unit == _owner} || {!isPlayer _owner} +// exit if the target is not free to interact +private "_owner"; +_owner = _target getVariable [QGVAR(owner), objNull]; + +if (!isNull _owner && {_unit != _owner}) exitWith {false}; + +// check general conditions + +private ["_conditions", "_conditionNames", "_conditionFuncs"]; + +_conditions = missionNamespace getVariable [QGVAR(InteractionConditions), [[],[]]]; + +_conditionNames = _conditions select 0; +_conditionFuncs = _conditions select 1; + +private "_canInteract"; +_canInteract = true; + +{ + if (!(_x in _exceptions) && {!([_unit, _target] call (_conditionFuncs select _forEachIndex))}) exitWith { + _canInteract = false; + }; +} forEach _conditionNames; + +_canInteract diff --git a/addons/common/functions/fnc_claim.sqf b/addons/common/functions/fnc_claim.sqf index cf960ac462..73317ee876 100644 --- a/addons/common/functions/fnc_claim.sqf +++ b/addons/common/functions/fnc_claim.sqf @@ -1,7 +1,20 @@ -// by commy2 +/* + * Author: commy2 + * + * Unit claims the ownership over an object. This is used to prevent multiple players from draging the same ammo box or using up the same wheel when repairing etc. + * + * Arguments: + * 0: Unit that claims another object. ObjNull to remove claim. (Object) + * 1: The object that gets claimed. (Object) + * 2: Lock the claimed object aswell? (Bool) + * + * Return Value: + * NONE + * + */ #include "script_component.hpp" -private ["_unit", "_target", "_lockTarget", "_owner"]; +private ["_unit", "_target", "_lockTarget"]; _unit = _this select 0; _target = _this select 1; @@ -9,20 +22,26 @@ _lockTarget = _this select 2; if (isNil "_lockTarget") then {_lockTarget = false}; -_owner = _target getVariable ["ACE_isUsedBy", objNull]; +private "_owner"; +_owner = _target getVariable [QGVAR(owner), objNull]; if (!isNull _owner && {!isNull _unit} && {_unit != _owner}) then { diag_log text "[ACE] ERROR: Claiming already owned object."; }; -_target setVariable ["ACE_isUsedBy", _unit, true]; +// transfer this immediately +_target setVariable [QGVAR(owner), _unit, true]; +// lock target object if (_lockTarget) then { - if (!isNull _unit) then { - [_target, "{_locked = locked _this; _this setVariable ['ACE_lockStatus', _locked]; _this lock 2}", _target] call FUNC(execRemoteFnc); - } else { - [_target, "{_this lock (_this getVariable ['ACE_lockStatus', locked _this])}", _target] call FUNC(execRemoteFnc); - }; + if (!isNull _unit) then { + ["lockVehicle", _target, _target] call FUNC(targetEvent); + } else { + ["unlockVehicle", _target, _target] call FUNC(targetEvent); + }; }; -//systemChat str locked _target; systemChat str (_target getVariable ['ACE_lockStatus', locked _target]); +/* +systemChat str locked _target; +systemChat str (_target getVariable [QGVAR(lockStatus), locked _target]); +*/ diff --git a/addons/common/functions/fnc_closeAllDialogs_f.sqf b/addons/common/functions/fnc_closeAllDialogs_f.sqf deleted file mode 100644 index b5ce1bc280..0000000000 --- a/addons/common/functions/fnc_closeAllDialogs_f.sqf +++ /dev/null @@ -1,14 +0,0 @@ -/** - * fn_closeAllDialogs_f.sqf - * @Descr: Close all dialogs - * @Author: Glowbal - * - * @Arguments: [] - * @Return: void - * @PublicAPI: true - */ -#include "script_component.hpp" - -while {dialog} do { - closeDialog 0; -}; \ No newline at end of file diff --git a/addons/common/functions/fnc_currentChannel.sqf b/addons/common/functions/fnc_currentChannel.sqf index 115364fb24..a7ca8c1dd5 100644 --- a/addons/common/functions/fnc_currentChannel.sqf +++ b/addons/common/functions/fnc_currentChannel.sqf @@ -14,4 +14,4 @@ #define CHANNELS ["group", "side", "global", "command", "vehicle", "direct"] #define CHANNELS_LOCALIZED [localize "str_channel_group", localize "str_channel_side", localize "str_channel_global", localize "str_channel_command", localize "str_channel_vehicle", localize "str_channel_direct"] -CHANNELS select (CHANNELS_LOCALIZED find (uiNamespace getVariable ["ACE_currentChannel", ""])) max 0 +CHANNELS select (CHANNELS_LOCALIZED find (uiNamespace getVariable [QGVAR(currentChannel), ""])) max 0 diff --git a/addons/common/functions/fnc_disableAI_f.sqf b/addons/common/functions/fnc_disableAI.sqf similarity index 100% rename from addons/common/functions/fnc_disableAI_f.sqf rename to addons/common/functions/fnc_disableAI.sqf diff --git a/addons/common/functions/fnc_displayIcon.sqf b/addons/common/functions/fnc_displayIcon.sqf new file mode 100644 index 0000000000..1fbc4e89aa --- /dev/null +++ b/addons/common/functions/fnc_displayIcon.sqf @@ -0,0 +1,120 @@ +/* +* Author: Glowbal +* +* Draw progress bar and execute given function if succesful. +* Finish/Failure/Conditional are all passed [_args, _elapsedTime, _totalTime, _errorCode] +* +* Argument: +* 0: icon ID +* 1: show +* 2: Icon Path +* 3: Icon color +* 4: timeAlive. -1 = forever +* +* Return value: +* Nothing +* +* Example: +* ["myID", true, QUOTE(PATHTOF(data\icon_group.paa)), [1,1,1,1], 0] call ace_gui_fnc_displayIcon; +*/ + + +#include "script_component.hpp" + +// positions for the icon UI +#define RIGHT_SIDE (safezoneW + safezoneX) +#define LEFT_SIDE safezoneX +#define TOP_SIDE safeZoneY +#define BOTTOM_SIDE (safeZoneH + safezoneY) +#define ICON_WIDTH (2 * (((safezoneW / safezoneH) min 1.2) / 40)) +#define X_POS_ICONS (RIGHT_SIDE - (1.5 * ICON_WIDTH)) +#define Y_POS_ICONS (TOP_SIDE + (2.5 * ICON_WIDTH)) +#define DIFFERENCE_ICONS (1.1 * ICON_WIDTH) +#define X_POS_ICONS_SECOND (RIGHT_SIDE - (4.4 * ICON_WIDTH)) +#define Y_POS_ICONS_SECOND (TOP_SIDE + (1.1 * ICON_WIDTH)) + +// setting values +#define TOP_RIGHT_DOWN 1 +#define TOP_RIGHT_LEFT 2 +#define TOP_LEFT_DOWN 3 +#define TOP_LEFT_RIGHT 4 + +// other constants +#define DEFAULT_TIME 6 + +private ["_iconId", "_show", "_icon", "_allControls", "_refresh", "_timeAlive", "_list", "_color"]; +_iconId = _this select 0; +_show = _this select 1; +_icon = _this select 2; +_color = _this select 3; +_timeAlive = if (count _this > 4) then {_this select 4} else {DEFAULT_TIME}; + +disableSerialization; +_list = missionNamespace getvariable [QGVAR(displayIconList),[]]; + +_refresh = { + private ["_allControls"]; + // Refreshing of all icons.. + _allControls = missionNamespace getvariable [QGVAR(displayIconListControls), []]; + { + ctrlDelete _x; + }foreach _allControls; + + _allControls = []; + + private ["_ctrl", "_setting"]; + _setting = missionNamespace getvariable[QGVAR(settingFeedbackIcons), 0]; + if (_setting > 0) then { + { + // +19000 because we want to make certain we are using free IDCs.. + _ctrl = ((findDisplay 46) ctrlCreate ["RscPicture", _foreachIndex + 19000]); + _position = switch (_setting) do { + case TOP_RIGHT_DOWN: {[X_POS_ICONS, Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]}; + case TOP_RIGHT_LEFT: {[X_POS_ICONS_SECOND - ((_foreachIndex+3) * DIFFERENCE_ICONS), Y_POS_ICONS_SECOND - (ICON_WIDTH / 2), ICON_WIDTH, ICON_WIDTH]}; + case TOP_LEFT_DOWN: {[LEFT_SIDE + (0.5 * ICON_WIDTH), Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]}; + case TOP_LEFT_RIGHT: {[LEFT_SIDE + (0.5 * ICON_WIDTH) - ((_foreachIndex+3) * DIFFERENCE_ICONS), Y_POS_ICONS_SECOND, ICON_WIDTH, ICON_WIDTH]}; + default {[X_POS_ICONS, Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]}; + }; + _ctrl ctrlSetPosition _position; + _ctrl ctrlsetText (_x select 1); + _ctrl ctrlSetTextColor (_x select 2); + _ctrl ctrlCommit 0; + _allControls pushback _ctrl; + }foreach (missionNamespace getvariable [QGVAR(displayIconList),[]]); + }; + missionNamespace setvariable [QGVAR(displayIconListControls), _allControls]; +}; + +if (_show) then { + if ({(_x select 0 == _iconId)} count _list == 0) then { + _list pushback [_iconId, _icon, _color, time]; + } else { + { + if (_x select 0 == _iconId) exitwith { + _list set [_foreachIndex, [_iconId, _icon, _color, time]]; + }; + }foreach _list; + }; + missionNamespace setvariable [QGVAR(displayIconList), _list]; + call _refresh; + + if (_timeAlive >= 0) then { + [{ + [_this select 0, false, "", [0,0,0], 0] call FUNC(displayIcon); + }, [_iconId], _timeAlive, _timeAlive] call EFUNC(common,waitAndExecute); + }; + +} else { + if ({(_x select 0 == _iconId)} count _list == 1) then { + private "_newList"; + _newList = []; + { + if (_x select 0 != _iconId) then { + _newList pushback _x; + }; + }foreach _list; + + missionNamespace setvariable [QGVAR(displayIconList), _newList]; + call _refresh; + }; +}; diff --git a/addons/common/functions/fnc_displayText.sqf b/addons/common/functions/fnc_displayText.sqf index c6a68cbab2..7121ef6813 100644 --- a/addons/common/functions/fnc_displayText.sqf +++ b/addons/common/functions/fnc_displayText.sqf @@ -18,36 +18,32 @@ #define DEFAULT_DELAY 2 #define DEFAULT_PRIORITY 0 -if (isNil QGVAR(lastHint)) then { - GVAR(lastHint) = [0, 0]; -}; - _this resize 4; -_this spawn { - private ["_text", "_sound", "_delay", "_priority", "_lastHintTime", "_lastHintPriority", "_time"]; +private ["_text", "_sound", "_delay", "_priority", "_lastHintTime", "_lastHintPriority", "_time"]; +_text = _this select 0; +_sound = _this select 1; +_delay = _this select 2; +_priority = _this select 3; - _text = _this select 0; - _sound = _this select 1; - _delay = _this select 2; - _priority = _this select 3; +if (isNil QGVAR(lastHint)) then { + GVAR(lastHint) = [0, 0]; +}; - _lastHintTime = GVAR(lastHint) select 0; - _lastHintPriority = GVAR(lastHint) select 1; +_lastHintTime = GVAR(lastHint) select 0; +_lastHintPriority = GVAR(lastHint) select 1; - if !(typeName _text in ["STRING", "TEXT"]) then {_text = str _text}; - if (isNil "_sound") then {_sound = DEFAULT_PLAY_SOUND}; - if (isNil "_delay") then {_delay = DEFAULT_DELAY}; - if (isNil "_priority") then {_priority = DEFAULT_PRIORITY}; +if !(typeName _text in ["STRING", "TEXT"]) then {_text = str _text}; +if (isNil "_sound") then {_sound = DEFAULT_PLAY_SOUND}; +if (isNil "_delay") then {_delay = DEFAULT_DELAY}; +if (isNil "_priority") then {_priority = DEFAULT_PRIORITY}; - _time = time; - if (_time > _lastHintTime + _delay || {_priority >= _lastHintPriority}) then { +_time = time; +if (_time > _lastHintTime + _delay || {_priority >= _lastHintPriority}) then { hintSilent _text; if (_sound) then {playSound "ACE_Sound_Click"}; GVAR(lastHint) set [0, _time]; GVAR(lastHint) set [1, _priority]; - sleep _delay; - if (_time == GVAR(lastHint) select 0) then {hintSilent ""}; - }; + [{if ((_this select 0) == GVAR(lastHint) select 0) then {hintSilent ""};}, [_time], _delay, 0] call FUNC(waitAndExecute); }; diff --git a/addons/common/functions/fnc_displayTextPicture.sqf b/addons/common/functions/fnc_displayTextPicture.sqf index 8d46d8d38e..fadf28b480 100644 --- a/addons/common/functions/fnc_displayTextPicture.sqf +++ b/addons/common/functions/fnc_displayTextPicture.sqf @@ -1,30 +1,44 @@ /* - * Author: commy2 + * Author: commy2, Glowbal * * Display a structured text with image. * * Argument: - * 0: Text (Anything) - * 1: Image (String) + * 0: Text + * 1: Image + * 2: Image color + * 3: Target Unit. Will only display if target is the player controlled object * * Return value: * Nothing */ + #include "script_component.hpp" -private ["_text", "_image"]; - +private ["_text", "_image", "_imageColor", "_target"]; _text = _this select 0; _image = _this select 1; +_imageColor = if (count _this > 2) then {_this select 2} else {[1,1,1]}; +_imageColor resize 3; +_target = if (count _this > 3) then {_this select 3} else {ACE_player}; + +if (_target != ACE_player) exitWith {}; if (typeName _text != "TEXT") then { - _text = parseText format ["%1", _text]; + if (typeName _text == "ARRAY") then { + if (count _text > 0) then { + { + if (typeName _x == "STRING" && {isLocalized _x}) then { + _text set [_foreachIndex, localize _x]; + }; + }foreach _text; + _text = format _text; + }; + }; + if (typeName _text == "STRING" && {isLocalized _text}) then { + _text = localize _text; + }; + _text = parseText format ["%1", _text]; }; - -_text = composeText [ - parseText format ["", _image], - lineBreak, - _text -]; - -[_text] call FUNC(displayTextStructured); +_text = composeText [parseText format ["", _image, _imageColor call BIS_fnc_colorRGBtoHTML], lineBreak, _text]; +[_text, 2] call FUNC(displayTextStructured); diff --git a/addons/common/functions/fnc_displayTextStructured.sqf b/addons/common/functions/fnc_displayTextStructured.sqf index 62db6a829f..cfe2feb3cb 100644 --- a/addons/common/functions/fnc_displayTextStructured.sqf +++ b/addons/common/functions/fnc_displayTextStructured.sqf @@ -1,26 +1,41 @@ /* - * Author: commy2 + * Author: commy2, Glowbal * * Display a structured text. * * Argument: - * 0: Text (Anything) - * 1: Size of the textbox (Number, optional default: 1) + * 0: Text + * 1: Size of the textbox + * 2: Target Unit. Will only display if target is the player controlled object * * Return value: * Nothing */ + #include "script_component.hpp" -private ["_text", "_size", "_isShown", "_ctrlHint"]; - +private ["_text", "_size", "_isShown", "_ctrlHint", "_yPos", "_xPos", "_wPos", "_hPos", "_position", "_target"]; _text = _this select 0; -_size = _this select 1; +_size = if (count _this > 1) then {_this select 1} else {1.5;}; +_target = if (count _this > 2) then {_this select 2} else {ACE_player}; -if (isNil "_size") then {_size = 1}; +if (_target != ACE_player) exitWith {}; if (typeName _text != "TEXT") then { - _text = composeText [lineBreak, parseText format ["%1", _text]]; + if (typeName _text == "ARRAY") then { + if (count _text > 0) then { + { + if (typeName _x == "STRING" && {isLocalized _x}) then { + _text set [_foreachIndex, localize _x]; + }; + }foreach _text; + _text = format _text; + }; + }; + if (typeName _text == "STRING" && {isLocalized _text}) then { + _text = localize _text; + }; + _text = composeText [lineBreak, parseText format ["%1", _text]]; }; _isShown = ctrlShown (uiNamespace getVariable ["ACE_ctrlHint", controlNull]); @@ -30,19 +45,31 @@ _isShown = ctrlShown (uiNamespace getVariable ["ACE_ctrlHint", controlNull]); disableSerialization; _ctrlHint = uiNamespace getVariable "ACE_ctrlHint"; -_ctrlHint ctrlSetPosition [ - safeZoneW + safeZoneX - 0 * safezoneW, - safeZoneY + 0.2 * safezoneH, - 0.2 * safeZoneW, - _size * 0.1 * SafeZoneH -]; +_ctrlHint ctrlSetBackgroundColor GVAR(displayTextColor); +_ctrlHint ctrlSetTextColor GVAR(displayTextFontColor); +/* +// This does not function at the moment. Has been disabled until it fixed. +_xPos = profilenamespace getvariable ["IGUI_GRID_ACE_displayText_X", ((safezoneX + safezoneW) - (10 *(((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 *(((safezoneW / safezoneH) min 1.2) / 40))]; +_yPos = profilenamespace getvariable ["IGUI_GRID_ACE_displayText_Y", safeZoneY + 0.175 * safezoneH]; +_wPos = profilenamespace getvariable ["IGUI_GRID_ACE_displayText_W", (10 *(((safezoneW / safezoneH) min 1.2) / 40))]; +_hPos = profilenamespace getvariable ["IGUI_GRID_ACE_displayText_H", (2 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))]; +*/ + +_xPos = ((safezoneX + safezoneW) - (10 *(((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 *(((safezoneW / safezoneH) min 1.2) / 40)); +_yPos = safeZoneY + 0.175 * safezoneH; +_wPos = (10 *(((safezoneW / safezoneH) min 1.2) / 40)); +_hPos = (2 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)); + +//Zeus Interface Open and Display would be under the "CREATE" list +if (!isnull curatorCamera) then { + _xPos = _xPos min ((safezoneX + safezoneW - 12.5 * (((safezoneW / safezoneH) min 1.2) / 40)) - _wPos); +}; + +_position = [_xPos, _yPos, _wPos, _size * _hPos]; + +_ctrlHint ctrlSetPosition _position; _ctrlHint ctrlCommit 0; _ctrlHint ctrlSetStructuredText _text; -_ctrlHint ctrlSetPosition [ - safeZoneW + safeZoneX - 0.2 * safezoneW, - safeZoneY + 0.2 * safezoneH, - 0.2 * safeZoneW, - _size * 0.1 * SafeZoneH -]; -_ctrlHint ctrlCommit ([0.2, 0] select _isShown); +_ctrlHint ctrlSetPosition _position; +_ctrlHint ctrlCommit ([0.5, 0] select _isShown); diff --git a/addons/common/functions/fnc_dropWeapon_f.sqf b/addons/common/functions/fnc_dropWeapon_f.sqf deleted file mode 100644 index bf1358b5e7..0000000000 --- a/addons/common/functions/fnc_dropWeapon_f.sqf +++ /dev/null @@ -1,39 +0,0 @@ -/** - * fn_dropWeapon_f.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ -#include "script_component.hpp" -private ["_unit","_currentWeapon","_currentAnimation", "_WeaponHolder"]; -_unit = [_this, 0, ObjNull,[ObjNull]] call BIS_fnc_Param; - -_currentWeapon = currentWeapon _unit; -_currentAnimation = animationState _unit; -_WeaponHolder = "GroundWeaponHolder" createVehicle position _unit; - -_unit removeWeapon _currentWeapon; -_weaponHolder addWeaponCargoGlobal [_currentWeapon, 1]; -//_unit action [ "DropWeapon", _WeaponHolder, _currentWeapon ]; -_WeaponHolder setPos (getPos _unit); -//_unit switchMove _currentAnimation; - -_primairyWeapon = primaryWeapon _unit; -_secondairyWeapon = secondaryWeapon _unit; -_handGunWeapon = handgunWeapon _unit; - -switch (_currentWeapon) do { - case _primairyWeapon: { - - }; - case _secondairyWeapon: { - - }; - case _handGunWeapon: { - - }; - default {}; -}; \ No newline at end of file diff --git a/addons/common/functions/fnc_dumpArray.sqf b/addons/common/functions/fnc_dumpArray.sqf new file mode 100644 index 0000000000..a6f08cdd39 --- /dev/null +++ b/addons/common/functions/fnc_dumpArray.sqf @@ -0,0 +1,25 @@ +//fnc_dumpArray.sqf +#include "script_component.hpp" + +private ["_var", "_depth", "_pad", "_i", "_x"]; + +_var = _this select 0; +_depth = _this select 1; +_pad = ""; +for "_i" from 0 to _depth do { + _pad = _pad + toString [9]; +}; +_depth = _depth + 1; +if(IS_ARRAY(_var)) then { + if((count _var) > 0) then { + diag_log text format["%1[", _pad]; + { + [_x, _depth] call FUNC(dumpArray); + } forEach _var; + diag_log text format["%1],", _pad]; + } else { + diag_log text format["%1[],", _pad]; + }; +} else { + diag_log text format["%1%2", _pad, [_var] call FUNC(formatVar)]; +}; diff --git a/addons/common/functions/fnc_dumpPerformanceCounters.sqf b/addons/common/functions/fnc_dumpPerformanceCounters.sqf new file mode 100644 index 0000000000..ded6514c9a --- /dev/null +++ b/addons/common/functions/fnc_dumpPerformanceCounters.sqf @@ -0,0 +1,73 @@ +//fnc_dumpPerformanceCounters.sqf +#define DEBUG_MODE_FULL +#include "script_component.hpp" + +/* +diag_log text format["REGISTERED ACE PFH HANDLERS"]; +diag_log text format["-------------------------------------------"]; +if(!isNil "ACE_PFH") then { + { + private["_pfh"]; + _pfh = _x select 0; + diag_log text format["Registered PFH: id=%1, %1:%2", (_pfh select 0), (_pfh select 1), (_pfh select 2) ]; + } forEach ACE_PFH; +};*/ + +diag_log text format["ACE COUNTER RESULTS"]; +diag_log text format["-------------------------------------------"]; +{ + private["_counterEntry", "_iter", "_total", "_count", "_delta", "_averageResult"]; + _counterEntry = _x; + _iter = 0; + _total = 0; + _count = 0; + _averageResult = 0; + if( (count _counterEntry) > 3) then { + // calc + { + if(_iter > 2) then { + _count = _count + 1; + _delta = (_x select 1) - (_x select 0); + + _total = _total + _delta; + }; + _iter = _iter + 1; + } forEach _counterEntry; + + // results + _averageResult = (_total / _count) * 1000; + + // dump results + diag_log text format["%1: Average: %2s / %3 = %4ms", (_counterEntry select 0), _total, _count, _averageResult]; + } else { + diag_log text format["%1: No results", (_counterEntry select 0) ]; + }; +} forEach ACE_COUNTERS; + +/* +// Dump PFH Trackers +diag_log text format["ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER"]; +diag_log text format["-------------------------------------------"]; +{ + private["_delay"]; + _delay = _x select 2; + //if(_delay > 0) then { _delay = _delay / 1000; }; + + diag_log text format["%1: %2s, delay=%3, handle=%4",(_x select 0), _delay, (_x select 3), (_x select 4)]; +} forEach ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER; + +// Dump PFH Trackers +diag_log text format["ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER"]; +diag_log text format["-------------------------------------------"]; +{ + private["_delta"]; + _delta = _x select 1; + //if(_delta > 0) then { _delta = _delta / 1000; }; + diag_log text format[" DELTA: %1s", _delta]; +} forEach ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER; + +//{ +// +//} forEach ACRE_EXCESSIVE_FRAME_TRACKER; + +*/ \ No newline at end of file diff --git a/addons/common/functions/fnc_endRadioTransmission.sqf b/addons/common/functions/fnc_endRadioTransmission.sqf index 990d4e03d8..772a34a06b 100644 --- a/addons/common/functions/fnc_endRadioTransmission.sqf +++ b/addons/common/functions/fnc_endRadioTransmission.sqf @@ -14,17 +14,17 @@ // ACRE if (isClass (configFile >> "CfgPatches" >> "acre_main")) then { - [-1] call acre_core_fnc_handleMultiPttKeyPressUp; - [0] call acre_core_fnc_handleMultiPttKeyPressUp; - [1] call acre_core_fnc_handleMultiPttKeyPressUp; - [2] call acre_core_fnc_handleMultiPttKeyPressUp; + [-1] call acre_core_fnc_handleMultiPttKeyPressUp; + [0] call acre_core_fnc_handleMultiPttKeyPressUp; + [1] call acre_core_fnc_handleMultiPttKeyPressUp; + [2] call acre_core_fnc_handleMultiPttKeyPressUp; }; // TFAR if (isClass (configFile >> "CfgPatches" >> "task_force_radio")) then { - call TFAR_fnc_onSwTangentReleased; - call TFAR_fnc_onAdditionalSwTangentReleased; - call TFAR_fnc_onLRTangentReleased; - call TFAR_fnc_onAdditionalLRTangentReleased; - call TFAR_fnc_onDDTangentReleased; + call TFAR_fnc_onSwTangentReleased; + call TFAR_fnc_onAdditionalSwTangentReleased; + call TFAR_fnc_onLRTangentReleased; + call TFAR_fnc_onAdditionalLRTangentReleased; + call TFAR_fnc_onDDTangentReleased; }; diff --git a/addons/common/functions/fnc_eraseCache.sqf b/addons/common/functions/fnc_eraseCache.sqf new file mode 100644 index 0000000000..00f49f4833 --- /dev/null +++ b/addons/common/functions/fnc_eraseCache.sqf @@ -0,0 +1,18 @@ +/* + * Author: CAA-Picard + * Deletes a cached result + * + * Arguments: + * 0: Namespace to store the cache on + * 1: Cache uid + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +EXPLODE_2_PVT(_this,_namespace,_uid); + +_namespace setVariable [_uid, nil]; diff --git a/addons/common/functions/fnc_exportConfig.sqf b/addons/common/functions/fnc_exportConfig.sqf index 10c88d6bca..c298785c26 100644 --- a/addons/common/functions/fnc_exportConfig.sqf +++ b/addons/common/functions/fnc_exportConfig.sqf @@ -1,8 +1,8 @@ // by commy2 /* - usage: + usage: - (configFile >> "CfgAmmo") call FUNC(exportConfig); + (configFile >> "CfgAmmo") call FUNC(exportConfig); */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_findItem.sqf b/addons/common/functions/fnc_findItem.sqf deleted file mode 100644 index 5c4469ea7f..0000000000 --- a/addons/common/functions/fnc_findItem.sqf +++ /dev/null @@ -1,25 +0,0 @@ -/** - * fn_findItem.sqf - * @Descr: - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: true - */ -#include "script_component.hpp" -private ["_unit","_magazine","_return"]; -_unit = _this select 0; -_item = _this select 1; - -if (_item in (uniformItems _unit)) exitwith {1}; -if (_item in (vestItems _unit)) exitwith {2}; -if (_item in (backpackItems _unit)) exitwith {3}; -if (_item in (assignedItems _unit)) exitwith {4}; -if (_item in (primaryWeaponItems _unit)) exitwith {5}; -if (_item in (secondaryWeaponItems _unit)) exitwith {6}; -if (_item in (handgunItems _unit)) exitwith {7}; -if (_item in (items _unit)) exitwith {8}; // in case it is in items but cannot be found in any other container (should never reach this) - -// If we cannot find the item, return 0. -0; \ No newline at end of file diff --git a/addons/common/functions/fnc_findMagazine.sqf b/addons/common/functions/fnc_findMagazine.sqf deleted file mode 100644 index 549d016e8d..0000000000 --- a/addons/common/functions/fnc_findMagazine.sqf +++ /dev/null @@ -1,21 +0,0 @@ -/** - * fn_findMagazine.sqf - * @Descr: Find where the current magazines are. Order: uniform, vest, backpack, any. - * @Author: Glowbal - * - * @Arguments: [unit OBJECT, magazine STRING (Classname of magazine)] - * @Return: NUMBER 0 = none, 1 = in uniform, 2 = in vest, 3 = in backpack, 4 = found outside container - * @PublicAPI: true - */ -#include "script_component.hpp" -private ["_unit","_magazine"]; -_unit = _this select 0; -_magazine = _this select 1; - -if (_magazine in (getMagazineCargo uniformContainer _unit)) exitwith {1}; -if (_magazine in (getMagazineCargo vestContainer _unit)) exitwith {2}; -if (_magazine in (getMagazineCargo backpackContainer _unit)) exitwith {3}; -if (_magazine in (magazines _unit)) exitwith {4}; // in case it cannot be found in any other container. Most likely loaded in a weapon. - -// If we cannot find the item, return 0. -0; \ No newline at end of file diff --git a/addons/common/functions/fnc_fixCollision.sqf b/addons/common/functions/fnc_fixCollision.sqf new file mode 100644 index 0000000000..6b43cec469 --- /dev/null +++ b/addons/common/functions/fnc_fixCollision.sqf @@ -0,0 +1,21 @@ +/* + * Author: commy2 + * Attempt to fix physx collisions causing unreasonable impact forces and damage. + * + * Arguments: + * 0: Object + * + * Return Value: + * Nothing + * + */ +#include "script_component.hpp" + +// allowDamage requires local object +if (!local _this) exitWith {}; + +// prevent collision damage, @todo allowDamage API +_this allowDamage false; + +// re-allow damage after 2 seconds +[{_this allowDamage true}, _this, 2, 0] call EFUNC(common,waitAndExecute); diff --git a/addons/common/functions/fnc_fixFloating.sqf b/addons/common/functions/fnc_fixFloating.sqf new file mode 100644 index 0000000000..6f08af1482 --- /dev/null +++ b/addons/common/functions/fnc_fixFloating.sqf @@ -0,0 +1,32 @@ +/* + * Author: commy2 + * Attempt to fix floating physx with disabled damage after setPosXXX commands. + * + * Arguments: + * Physx object (Object) + * + * Return Value: + * Nothing + * + */ +#include "script_component.hpp" + +private "_object"; + +_object = _this; + +// setHitPointDamage requires local object +if (!local _object) exitWith {}; + +// save and restore hitpoints, see below why +private ["_hitPoints", "_hitPointDamages"]; + +_hitPoints = [_object] call FUNC(getHitpoints); +_hitPointDamages = [_hitPoints, {_object getHitPointDamage _this}] call FUNC(map); + +// this prevents physx objects from floating when near other physx objects with allowDamage false +_object setDamage damage _object; + +{ + _object setHitPointDamage [_x, _hitPointDamages select _forEachIndex]; +} forEach _hitPoints; diff --git a/addons/common/functions/fnc_fixPosition.sqf b/addons/common/functions/fnc_fixPosition.sqf new file mode 100644 index 0000000000..32cde87e52 --- /dev/null +++ b/addons/common/functions/fnc_fixPosition.sqf @@ -0,0 +1,29 @@ +/* + * Author: commy2 + * + * Fixes position of an object. E.g. moves object above ground and adjusts to terrain slope. Requires local object. + * + * Argument: + * Object (Object) + * + * Return value: + * NONE + */ +#include "script_component.hpp" + +// setVectorUp requires local object +if (!local _this) exitWith {}; + +private "_position"; +_position = getPos _this; + +// don't place the object below the ground +if (_position select 2 < -0.1) then { + _position set [2, -0.1]; + _this setPos _position; +}; + +// adjust position to sloped terrain, if placed on ground +if (getPosATL _this select 2 == _position select 2) then { + _this setVectorUp surfaceNormal _position; +}; diff --git a/addons/common/functions/fnc_getCanInteract.sqf b/addons/common/functions/fnc_getCanInteract.sqf deleted file mode 100644 index 87f572b93d..0000000000 --- a/addons/common/functions/fnc_getCanInteract.sqf +++ /dev/null @@ -1,12 +0,0 @@ -/** - * fn_getCanInteract.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ -#include "script_component.hpp" - -((_this select 0) getvariable [QGVAR(canInteract),0]) \ No newline at end of file diff --git a/addons/common/functions/fnc_getCustomResults_f.sqf b/addons/common/functions/fnc_getCustomResults_f.sqf deleted file mode 100644 index 4b68f85c9c..0000000000 --- a/addons/common/functions/fnc_getCustomResults_f.sqf +++ /dev/null @@ -1,45 +0,0 @@ -/** - * fn_getCustomResults_f.sqf - * @Descr: Executes custom results eventhandlers, collects their output and returns this. - * @Author: Glowbal - * - * @Arguments: [arguments ANY, handle STRING] - * @Return: ARRAY Collection of all return values of all executed CustomResult handlers - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private ["_arguments","_handle","_ehCfg","_eventHandlerCollection","_eventHandlerName","_cfg","_code","_classType", "_return"]; -_arguments = _this select 0; -_handle = _this select 1; - -_eventHandlerName = ("ace_f_custom_results_eventhandler_" + _handle); -_eventHandlerCollection = missionNamespace getvariable _eventHandlerName; -if (isnil "_eventHandlerCollection") then { - _eventHandlerCollection = []; - - // TODO Get a replacement for this - _cfg = (ConfigFile >> "Advanced_Combat_Environment" >> "CustomResults" >> _handle); - if (isClass _cfg) then { - _numberOfEH = count _cfg; - for [{_EHiterator=0}, {(_EHiterator< _numberOfEH)}, {_EHiterator=_EHiterator+1}] do { - _ehCfg = _cfg select _EHiterator; - if (isClass _ehCfg) then { - _classType = (ConfigName _ehCfg); - _code = (compile getText(_ehCfg >> "onCall")); - _eventHandlerCollection pushback [_classType, _code]; - true; - }; - }; - }; - missionNamespace setvariable [_eventHandlerName, _eventHandlerCollection]; -}; - -_return = []; -{ - _return pushback (_arguments call (_x select 1)); - false; -}count _eventHandlerCollection; - -_return diff --git a/addons/common/functions/fnc_getGunner.sqf b/addons/common/functions/fnc_getGunner.sqf index 0c82066e4b..71191083e0 100644 --- a/addons/common/functions/fnc_getGunner.sqf +++ b/addons/common/functions/fnc_getGunner.sqf @@ -20,9 +20,9 @@ private "_gunner"; _gunner = objNull; { - if (_weapon in (_vehicle weaponsTurret _x)) exitWith { - _gunner = _vehicle turretUnit _x; - }; + if (_weapon in (_vehicle weaponsTurret _x)) exitWith { + _gunner = _vehicle turretUnit _x; + }; } forEach allTurrets _vehicle; _gunner diff --git a/addons/common/functions/fnc_getHitPoints.sqf b/addons/common/functions/fnc_getHitPoints.sqf index a6d75e41b9..26b0b1b840 100644 --- a/addons/common/functions/fnc_getHitPoints.sqf +++ b/addons/common/functions/fnc_getHitPoints.sqf @@ -23,33 +23,33 @@ _hitpoints = []; private "_hitpointClasses"; _hitpointClasses = [_config >> "HitPoints"]; { - private "_class"; - _class = ([_config, _x] call FUNC(getTurretConfigPath)) >> "HitPoints"; + private "_class"; + _class = ([_config, _x] call FUNC(getTurretConfigPath)) >> "HitPoints"; - if (isClass _class) then { - _hitpointClasses pushBack _class; - }; + if (isClass _class) then { + _hitpointClasses pushBack _class; + }; } forEach allTurrets _vehicle; // iterate through all classes with hitpoints and their parents { - private "_class"; - _class = _x; + private "_class"; + _class = _x; - while {isClass _class} do { + while {isClass _class} do { - for "_i" from 0 to (count _class - 1) do { - private "_entry"; - _entry = configName (_class select _i); + for "_i" from 0 to (count _class - 1) do { + private "_entry"; + _entry = configName (_class select _i); - if (!(_entry in _hitpoints) && {!isNil {_vehicle getHitPointDamage _entry}}) then { - _hitpoints pushBack _entry; - }; - }; + if (!(_entry in _hitpoints) && {!isNil {_vehicle getHitPointDamage _entry}}) then { + _hitpoints pushBack _entry; + }; + }; - _class = inheritsFrom _class; - }; + _class = inheritsFrom _class; + }; } forEach _hitpointClasses; diff --git a/addons/common/functions/fnc_getHitPointsWithSelections.sqf b/addons/common/functions/fnc_getHitPointsWithSelections.sqf index e9a7a8fac5..f0c9801382 100644 --- a/addons/common/functions/fnc_getHitPointsWithSelections.sqf +++ b/addons/common/functions/fnc_getHitPointsWithSelections.sqf @@ -24,36 +24,36 @@ _selections = []; private "_hitpointClasses"; _hitpointClasses = [_config >> "HitPoints"]; { - private "_class"; - _class = ([_config, _x] call FUNC(getTurretConfigPath)) >> "HitPoints"; + private "_class"; + _class = ([_config, _x] call FUNC(getTurretConfigPath)) >> "HitPoints"; - if (isClass _class) then { - _hitpointClasses pushBack _class; - }; + if (isClass _class) then { + _hitpointClasses pushBack _class; + }; } forEach allTurrets _vehicle; // iterate through all classes with hitpoints and their parents { - private "_class"; - _class = _x; + private "_class"; + _class = _x; - while {isClass _class} do { + while {isClass _class} do { - for "_i" from 0 to (count _class - 1) do { - private ["_entry", "_selection"]; + for "_i" from 0 to (count _class - 1) do { + private ["_entry", "_selection"]; - _entry = configName (_class select _i); - _selection = getText (_class select _i >> "name"); + _entry = configName (_class select _i); + _selection = getText (_class select _i >> "name"); - if (!(_selection in _selections) && {!isNil {_vehicle getHit _selection}}) then { - _hitpoints pushBack _entry; - _selections pushBack _selection; - }; - }; + if (!(_selection in _selections) && {!isNil {_vehicle getHit _selection}}) then { + _hitpoints pushBack _entry; + _selections pushBack _selection; + }; + }; - _class = inheritsFrom _class; - }; + _class = inheritsFrom _class; + }; } forEach _hitpointClasses; diff --git a/addons/common/functions/fnc_getWeaponItems_f.sqf b/addons/common/functions/fnc_getWeaponItems_f.sqf deleted file mode 100644 index d18ce28a72..0000000000 --- a/addons/common/functions/fnc_getWeaponItems_f.sqf +++ /dev/null @@ -1,14 +0,0 @@ -/** - * fn_getWeaponItems_f.sqf - * @Descr: Get the weapon items from the unit. - * @Author: Glowbal - * - * @Arguments: [unit OBJECT] - * @Return: - * @PublicAPI: false - */ -#include "script_component.hpp" -private "_unit"; -_unit = _this select 0; - -[primaryWeaponItems _unit, secondaryWeaponItems _unit, handgunItems _unit]; \ No newline at end of file diff --git a/addons/common/functions/fnc_hashGet.sqf b/addons/common/functions/fnc_hashGet.sqf index 6147d06a73..7682b2f6a2 100644 --- a/addons/common/functions/fnc_hashGet.sqf +++ b/addons/common/functions/fnc_hashGet.sqf @@ -9,18 +9,18 @@ _key = _this select 1; ERRORDATA(2); _val = nil; try { - if(VALIDHASH(_hash)) then { - _index = (_hash select 0) find _key; - if(_index != -1) then { - _val = (_hash select 1) select _index; - if(IS_STRING(_val) && {_val == "ACREHASHREMOVEDONOTUSETHISVAL"}) then { - _val = nil; - }; - }; - } else { - ERROR("Input hash is not valid"); - }; + if(VALIDHASH(_hash)) then { + _index = (_hash select 0) find _key; + if(_index != -1) then { + _val = (_hash select 1) select _index; + if(IS_STRING(_val) && {_val == "ACREHASHREMOVEDONOTUSETHISVAL"}) then { + _val = nil; + }; + }; + } else { + ERROR("Input hash is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; _val diff --git a/addons/common/functions/fnc_hashHasKey.sqf b/addons/common/functions/fnc_hashHasKey.sqf index d69ad2f3e8..8011e987fb 100644 --- a/addons/common/functions/fnc_hashHasKey.sqf +++ b/addons/common/functions/fnc_hashHasKey.sqf @@ -9,15 +9,15 @@ _key = _this select 1; ERRORDATA(2); _val = false; try { - if(VALIDHASH(_hash)) then { - _index = (_hash select 0) find _key; - if(_index != -1) then { - _val = true; - }; - } else { - ERROR("Input hash is not valid"); - }; + if(VALIDHASH(_hash)) then { + _index = (_hash select 0) find _key; + if(_index != -1) then { + _val = true; + }; + } else { + ERROR("Input hash is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; _val diff --git a/addons/common/functions/fnc_hashListCreateHash.sqf b/addons/common/functions/fnc_hashListCreateHash.sqf index fef9c79b85..cdad5987cd 100644 --- a/addons/common/functions/fnc_hashListCreateHash.sqf +++ b/addons/common/functions/fnc_hashListCreateHash.sqf @@ -7,12 +7,12 @@ _hashList = _this select 0; ERRORDATA(1); _hashKeys = []; try { - if(VALIDHASH(_hashList)) then { - _hashKeys = (_hashList select 0); - } else { - ERROR("Input hashlist is not valid"); - }; + if(VALIDHASH(_hashList)) then { + _hashKeys = (_hashList select 0); + } else { + ERROR("Input hashlist is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; [_hashKeys, []]; diff --git a/addons/common/functions/fnc_hashListPush.sqf b/addons/common/functions/fnc_hashListPush.sqf index e783f7c324..afd092a1b9 100644 --- a/addons/common/functions/fnc_hashListPush.sqf +++ b/addons/common/functions/fnc_hashListPush.sqf @@ -7,11 +7,11 @@ _hashList = _this select 0; _value = _this select 1; ERRORDATA(2); try { - if(VALIDHASH(_hashList)) then { - [_hashList, (count (_hashList select 1)), _value] call FUNC(hashListSet); - } else { - ERROR("Input hashlist in push not valid"); - }; + if(VALIDHASH(_hashList)) then { + [_hashList, (count (_hashList select 1)), _value] call FUNC(hashListSet); + } else { + ERROR("Input hashlist in push not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; diff --git a/addons/common/functions/fnc_hashListSelect.sqf b/addons/common/functions/fnc_hashListSelect.sqf index e1ee0aae0f..0c552d072e 100644 --- a/addons/common/functions/fnc_hashListSelect.sqf +++ b/addons/common/functions/fnc_hashListSelect.sqf @@ -8,20 +8,20 @@ _index = _this select 1; ERRORDATA(2); _hash = nil; try { - if(VALIDHASH(_hashList)) then { - _keys = _hashList select 0; - _hashes = _hashList select 1; - if(_index < (count _hashes)) then { - _values = _hashes select _index; + if(VALIDHASH(_hashList)) then { + _keys = _hashList select 0; + _hashes = _hashList select 1; + if(_index < (count _hashes)) then { + _values = _hashes select _index; - _hash = [_keys, _values, 1]; - } else { - ERROR("Index of hashlist is out of range"); - }; - } else { - ERROR("Input hashlist is not valid"); - }; + _hash = [_keys, _values, 1]; + } else { + ERROR("Index of hashlist is out of range"); + }; + } else { + ERROR("Input hashlist is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; _hash; diff --git a/addons/common/functions/fnc_hashListSet.sqf b/addons/common/functions/fnc_hashListSet.sqf index 8b7239dffd..c384bc15c9 100644 --- a/addons/common/functions/fnc_hashListSet.sqf +++ b/addons/common/functions/fnc_hashListSet.sqf @@ -8,17 +8,17 @@ _index = _this select 1; _value = _this select 2; ERRORDATA(3); try { - if(VALIDHASH(_hashList)) then { - if(VALIDHASH(_value)) then { - _vals = _value select 1; - - (_hashList select 1) set[_index, _vals]; - } else { - ERROR("Set hash in hashlist is not valid"); - }; - } else { - ERROR("Input hashlist is not valid"); - }; + if(VALIDHASH(_hashList)) then { + if(VALIDHASH(_value)) then { + _vals = _value select 1; + + (_hashList select 1) set[_index, _vals]; + } else { + ERROR("Set hash in hashlist is not valid"); + }; + } else { + ERROR("Input hashlist is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; diff --git a/addons/common/functions/fnc_hashRem.sqf b/addons/common/functions/fnc_hashRem.sqf index 86898fb3df..000dbbefe0 100644 --- a/addons/common/functions/fnc_hashRem.sqf +++ b/addons/common/functions/fnc_hashRem.sqf @@ -8,23 +8,23 @@ _key = _this select 1; ERRORDATA(2); _val = nil; try { - if(VALIDHASH(_hash)) then { - _index = (_hash select 0) find _key; - if(_index != -1) then { - (_hash select 1) set[_index, "ACREHASHREMOVEDONOTUSETHISVAL"]; - // is this hash is not part of a hash list? - // if it is we need to leave the keys intact. - if((count _hash) == 2) then { - // if this is a standalone hash then we can clean it up - (_hash select 0) set[_index, "ACREHASHREMOVEDONOTUSETHISVAL"]; - _hash set[0, ((_hash select 0) - ["ACREHASHREMOVEDONOTUSETHISVAL"])]; - _hash set[1, ((_hash select 1) - ["ACREHASHREMOVEDONOTUSETHISVAL"])]; - }; - }; - } else { - ERROR("Input hash is not valid"); - }; + if(VALIDHASH(_hash)) then { + _index = (_hash select 0) find _key; + if(_index != -1) then { + (_hash select 1) set[_index, "ACREHASHREMOVEDONOTUSETHISVAL"]; + // is this hash is not part of a hash list? + // if it is we need to leave the keys intact. + if((count _hash) == 2) then { + // if this is a standalone hash then we can clean it up + (_hash select 0) set[_index, "ACREHASHREMOVEDONOTUSETHISVAL"]; + _hash set[0, ((_hash select 0) - ["ACREHASHREMOVEDONOTUSETHISVAL"])]; + _hash set[1, ((_hash select 1) - ["ACREHASHREMOVEDONOTUSETHISVAL"])]; + }; + }; + } else { + ERROR("Input hash is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; true diff --git a/addons/common/functions/fnc_hashSet.sqf b/addons/common/functions/fnc_hashSet.sqf index 23438eaf83..0e374d5f12 100644 --- a/addons/common/functions/fnc_hashSet.sqf +++ b/addons/common/functions/fnc_hashSet.sqf @@ -9,19 +9,19 @@ _key = _this select 1; _val = _this select 2; ERRORDATA(3); try { - if(VALIDHASH(_hash)) then { - _index = (_hash select 0) find _key; - if(_index == -1) then { - _index = (_hash select 0) find "ACREHASHREMOVEDONOTUSETHISVAL"; - if(_index == -1) then { - _index = (count (_hash select 0)); - }; - (_hash select 0) set[_index, _key]; - }; - (_hash select 1) set[_index, _val]; - } else { - ERROR("Input hash is not valid"); - }; + if(VALIDHASH(_hash)) then { + _index = (_hash select 0) find _key; + if(_index == -1) then { + _index = (_hash select 0) find "ACREHASHREMOVEDONOTUSETHISVAL"; + if(_index == -1) then { + _index = (count (_hash select 0)); + }; + (_hash select 0) set[_index, _key]; + }; + (_hash select 1) set[_index, _val]; + } else { + ERROR("Input hash is not valid"); + }; } catch { - HANDLECATCH; + HANDLECATCH; }; diff --git a/addons/common/functions/fnc_inWater_f.sqf b/addons/common/functions/fnc_inWater.sqf similarity index 100% rename from addons/common/functions/fnc_inWater_f.sqf rename to addons/common/functions/fnc_inWater.sqf diff --git a/addons/common/functions/fnc_isAlive.sqf b/addons/common/functions/fnc_isAlive.sqf new file mode 100644 index 0000000000..1d5a99ac6b --- /dev/null +++ b/addons/common/functions/fnc_isAlive.sqf @@ -0,0 +1,14 @@ +/* + * Author: commy2 + * + * Check if the object still exists and is alive. This function exists because 'alive objNull' actually returns true. + * + * Argument: + * 0: Any object (Object) + * + * Return value: + * The object exists and is alive (Bool). + */ +#include "script_component.hpp" + +!isNull (_this select 0) && {alive (_this select 0)} diff --git a/addons/common/functions/fnc_isHC.sqf b/addons/common/functions/fnc_isHC.sqf deleted file mode 100644 index 82a9d49ba2..0000000000 --- a/addons/common/functions/fnc_isHC.sqf +++ /dev/null @@ -1,24 +0,0 @@ -/** - * fn_isHC.sqf - * @Descr: Check if current locality is a headless client - * @Author: Glowbal - * - * @Arguments: [] - * @Return: BOOL True if locality is headless client OR is not in multiplayer - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private ["_return"]; - -if (!isMultiplayer) then { - _return = true; -} else { - if (isServer && !isDedicated) then { - _return = true; - } else { - _return = !(hasInterface || isDedicated); - }; -}; -_return \ No newline at end of file diff --git a/addons/common/functions/fnc_isModLoaded_f.sqf b/addons/common/functions/fnc_isModLoaded.sqf similarity index 100% rename from addons/common/functions/fnc_isModLoaded_f.sqf rename to addons/common/functions/fnc_isModLoaded.sqf diff --git a/addons/common/functions/fnc_loadPerson_f.sqf b/addons/common/functions/fnc_loadPerson.sqf similarity index 86% rename from addons/common/functions/fnc_loadPerson_f.sqf rename to addons/common/functions/fnc_loadPerson.sqf index 5944879c62..0d2995db1b 100644 --- a/addons/common/functions/fnc_loadPerson_f.sqf +++ b/addons/common/functions/fnc_loadPerson.sqf @@ -10,7 +10,7 @@ #include "script_component.hpp" -#define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson_F)) +#define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson)) private ["_caller", "_unit","_vehicle", "_loadcar", "_loadhelicopter", "_loadtank"]; _caller = [_this, 0, ObjNull,[ObjNull]] call BIS_fnc_Param; @@ -34,9 +34,9 @@ if (_unit distance _loadcar <= 10) then { }; }; if (!isNull _vehicle) then { - [_unit, true, GROUP_SWITCH_ID, side group _caller] call FUNC(switchToGroupSide_f); + [_unit, true, GROUP_SWITCH_ID, side group _caller] call FUNC(switchToGroupSide); [_caller,objNull] call FUNC(carryObj); [_unit,objNull] call FUNC(carryObj); - [[_unit, _vehicle,_caller], QUOTE(FUNC(loadPersonLocal_F)), _unit, false] call EFUNC(common,execRemoteFnc); + [[_unit, _vehicle,_caller], QUOTE(FUNC(loadPersonLocal)), _unit, false] call EFUNC(common,execRemoteFnc); }; _vehicle \ No newline at end of file diff --git a/addons/common/functions/fnc_loadPersonLocal_f.sqf b/addons/common/functions/fnc_loadPersonLocal.sqf similarity index 83% rename from addons/common/functions/fnc_loadPersonLocal_f.sqf rename to addons/common/functions/fnc_loadPersonLocal.sqf index dbba09111a..6e31050cf9 100644 --- a/addons/common/functions/fnc_loadPersonLocal_f.sqf +++ b/addons/common/functions/fnc_loadPersonLocal.sqf @@ -16,13 +16,13 @@ _vehicle = [_this, 1, ObjNull,[ObjNull]] call BIS_fnc_Param; _caller = [_this, 2, ObjNull,[ObjNull]] call BIS_fnc_Param; if (!alive _unit) then { - _unit = [_unit,_caller] call FUNC(makeCopyOfBody_F); + _unit = [_unit,_caller] call FUNC(makeCopyOfBody); }; _unit moveInCargo _vehicle; -_loaded = _vehicle getvariable [QGVAR(loaded_persons_F),[]]; +_loaded = _vehicle getvariable [QGVAR(loaded_persons),[]]; _loaded pushback _unit; -_vehicle setvariable [QGVAR(loaded_persons_F),_loaded,true]; +_vehicle setvariable [QGVAR(loaded_persons),_loaded,true]; if (!([_unit] call FUNC(isAwake))) then { _handle = [_unit,_vehicle] spawn { private ["_unit","_vehicle"]; diff --git a/addons/common/functions/fnc_moveToTempGroup.sqf b/addons/common/functions/fnc_moveToTempGroup.sqf index b146e67ef3..802bc2285d 100644 --- a/addons/common/functions/fnc_moveToTempGroup.sqf +++ b/addons/common/functions/fnc_moveToTempGroup.sqf @@ -18,12 +18,12 @@ if (_moveTo) then { _previousGroup = group _unit; _newGroup = createGroup (side _previousGroup); [_unit] joinSilent _newGroup; - _unit setvariable [QGVAR(previousGroup_F),_previousGroup]; + _unit setvariable [QGVAR(previousGroup),_previousGroup]; } else { - _previousGroup = _unit getvariable QGVAR(previousGroup_F); + _previousGroup = _unit getvariable QGVAR(previousGroup); if (!isnil "_previousGroup") then { _currentGroup = group _unit; - _unit setvariable [QGVAR(previousGroup_F),nil]; + _unit setvariable [QGVAR(previousGroup),nil]; [_unit] joinSilent _previousGroup; if (count units _currentGroup == 0) then { deleteGroup _currentGroup; diff --git a/addons/common/functions/fnc_onLoadRscDisplayChannel.sqf b/addons/common/functions/fnc_onLoadRscDisplayChannel.sqf index 2a2fbfc9a4..ae8113c1b8 100644 --- a/addons/common/functions/fnc_onLoadRscDisplayChannel.sqf +++ b/addons/common/functions/fnc_onLoadRscDisplayChannel.sqf @@ -1,24 +1,29 @@ /* - Name: FUNC(onLoadRscDisplayChannel) - - Author: Pabst Mirror, commy2 - - Description: - When the RscDisplayChannel is loaded, this will constantly uiNamespace variable "ACE_currentChannel" - with the raw localized text of CA_Channel (IDC=101). Only runs while the display is open. - - Parameters: - 0: DISPLAY - RscDisplayChannel - - Returns: - Nothing -*/ + * Author: Pabst Mirror, commy2 + * When the RscDisplayChannel is loaded, this will constantly uiNamespace variable ace_common_currentChannel + * with the raw localized text of CA_Channel (IDC=101). Only runs while the display is open. + * + * Arguments: + * 0: The RscDisplayChannel Display + * + * Return Value: + * Nothing + * + * Example: + * onLoad = QUOTE(_this call FUNC(onLoadRscDisplayChannel)); + * + * Public: No + */ #include "script_component.hpp" -uiNamespace setVariable ["ACE_ctrlChannel", (_this select 0) displayCtrl 101]; +uiNamespace setVariable [QGVAR(currentChannelControl), ((_this select 0) displayCtrl 101)]; ["ACE_currentChannel", "onEachFrame", { - if (ctrlText (uiNamespace getVariable ["ACE_ctrlChannel", controlNull]) != "") then { - uiNamespace setVariable ["ACE_currentChannel", ctrlText (uiNamespace getVariable ["ACE_ctrlChannel", controlNull])]; - }; + if (isNull (uiNamespace getVariable [QGVAR(currentChannelControl), controlNull])) then { + ["ACE_currentChannel", "onEachFrame"] call BIS_fnc_removeStackedEventHandler; + } else { + private "_localizedChannelText"; + _localizedChannelText = ctrlText (uiNamespace getVariable [QGVAR(currentChannelControl), controlNull]); + uiNamespace setVariable [QGVAR(currentChannel), _localizedChannelText]; + }; }] call BIS_fnc_addStackedEventhandler; diff --git a/addons/common/functions/fnc_owned.sqf b/addons/common/functions/fnc_owned.sqf index 4fa1dbeb98..5588c23781 100644 --- a/addons/common/functions/fnc_owned.sqf +++ b/addons/common/functions/fnc_owned.sqf @@ -1,8 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * Counterpart of ace_common_fnc_claim. Check if the given object is claimed by another unit. + * + * Arguments: + * 0: Any object. (Object) + * + * Return Value: + * Is this object claimed by someone? + * + */ #include "script_component.hpp" -private "_object"; +private "_target"; -_object = _this select 0; +_target = _this select 0; -!isNull (_object getVariable ["ACE_isUsedBy", objNull]) +!isNull (_target getVariable [QGVAR(owner), objNull]) diff --git a/addons/common/functions/fnc_positionToASL.sqf b/addons/common/functions/fnc_positionToASL.sqf new file mode 100644 index 0000000000..916184eb33 --- /dev/null +++ b/addons/common/functions/fnc_positionToASL.sqf @@ -0,0 +1,21 @@ +/* + * Author: CAA-Picard + * Converts Arma "Position" to ASL + * + * Arguments: + * 0: position x + * 1: position y + * 2: position z + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +if (surfaceIsWater _this) then { + _this +} else { + ATLtoASL _this +}; diff --git a/addons/common/functions/fnc_progressBar.sqf b/addons/common/functions/fnc_progressBar.sqf index ab4cb7b69c..15fbab1e24 100644 --- a/addons/common/functions/fnc_progressBar.sqf +++ b/addons/common/functions/fnc_progressBar.sqf @@ -11,10 +11,13 @@ * 3: CODE or STRING - On Failure: Code called or STRING raised as event. * 4: STRING - (Optional) Localized Title * 5: CODE - (Optional) Code to check each frame -* 6: ARRAY - (Optional) Exceptions for checking EGVAR(common,canInteract) +* 6: ARRAY - (Optional) Exceptions for checking EGVAR(common,canInteractWith) * * Return value: * Nothing +* +* Example: +* [5, [], {Hint "Finished!"}, {hint "Failure!"}, "My Title"] call ace_common_fnc_progressBar */ #include "script_component.hpp" @@ -32,14 +35,24 @@ closeDialog 0; createDialog QGVAR(ProgressBar_Dialog); (uiNamespace getVariable QGVAR(ctrlProgressBarTitle)) ctrlSetText _localizedTitle; +if (GVAR(SettingProgressBarLocation) == 1) then { + private "_ctrlPos"; + _ctrlPos = [1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2), 29 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2), 38 * (((safezoneW / safezoneH) min 1.2) / 40), 0.8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)]; + (uiNamespace getVariable QGVAR(ctrlProgressBar)) ctrlSetPosition _ctrlPos; + (uiNamespace getVariable QGVAR(ctrlProgressBarTitle)) ctrlSetPosition _ctrlPos; + (uiNamespace getVariable QGVAR(ctrlProgressBar)) ctrlCommit 0; + (uiNamespace getVariable QGVAR(ctrlProgressBarTitle)) ctrlCommit 0; +}; + + _perFrameFunction = { PARAMS_2(_parameters,_pfhID); EXPLODE_8_PVT(_parameters,_args,_onFinish,_onFail,_condition,_player,_startTime,_totalTime,_exceptions); private ["_elapsedTime", "_errorCode"]; - + _elapsedTime = time - _startTime; _errorCode = -1; - + if (isNull (uiNamespace getVariable [QGVAR(ctrlProgressBar), controlNull])) then { _errorCode = 1; } else { @@ -49,7 +62,7 @@ _perFrameFunction = { if (!([_args, _elapsedTime, _totalTime, _errorCode] call _condition)) then { _errorCode = 3; } else { - if (!(_exceptions call EGVAR(common,canInteract))) then { + if (!([_player, objNull, _exceptions] call EGVAR(common,canInteractWith))) then { _errorCode = 4; } else { if (_elapsedTime >= _totalTime) then { diff --git a/addons/common/functions/fnc_queueAnimation.sqf b/addons/common/functions/fnc_queueAnimation.sqf index a489a46174..73f3dca109 100644 --- a/addons/common/functions/fnc_queueAnimation.sqf +++ b/addons/common/functions/fnc_queueAnimation.sqf @@ -4,7 +4,7 @@ terminate (missionNamespace getVariable [QGVAR(waitForAnimationHandle), scriptNull]); GVAR(waitForAnimationHandle) = _this spawn { - waitUntil {!([_this select 0] call FUNC(inTransitionAnim))}; + waitUntil {!([_this select 0] call FUNC(inTransitionAnim))}; - _this call FUNC(doAnimation); + _this call FUNC(doAnimation); }; diff --git a/addons/common/functions/fnc_removeCanInteractWithCondition.sqf b/addons/common/functions/fnc_removeCanInteractWithCondition.sqf new file mode 100644 index 0000000000..6cfd751c4c --- /dev/null +++ b/addons/common/functions/fnc_removeCanInteractWithCondition.sqf @@ -0,0 +1,34 @@ +/* + * Author: commy2 + * + * Remove a condition that gets checked by ace_common_fnc_canInteractWith. + * + * Arguments: + * 0: The conditions id. (String) + * + * Return Value: + * Unit can interact? + * + */ +#include "script_component.hpp" + +private "_conditionName"; + +_conditionName = toLower (_this select 0); + +private ["_conditions", "_conditionNames", "_conditionFuncs"]; + +_conditions = missionNamespace getVariable [QGVAR(InteractionConditions), [[],[]]]; + +_conditionNames = _conditions select 0; +_conditionFuncs = _conditions select 1; + +private "_index"; +_index = _conditionNames find _conditionName; + +if (_index == -1) exitWith {}; + +_conditionNames deleteAt _index; +_conditionFuncs deleteAt _index; + +GVAR(InteractionConditions) = [_conditionNames, _conditionFuncs]; diff --git a/addons/common/functions/fnc_removeSpecificMagazine.sqf b/addons/common/functions/fnc_removeSpecificMagazine.sqf new file mode 100644 index 0000000000..7f29cf979c --- /dev/null +++ b/addons/common/functions/fnc_removeSpecificMagazine.sqf @@ -0,0 +1,69 @@ +/* + * Author: CAA-Picard + * Removes a magazine from the unit that has an specific ammo count + * + * Argument: + * 0: Player + * 1: Magazine + * 2: Ammo count + * + * Return value: + * None + */ +#include "script_component.hpp" + +EXPLODE_3_PVT(_this,_player,_magazineType,_ammoCount); + +private ["_magazines","_index","_isRemoved"]; +_isRemoved = false; + +// Check uniform +_magazines = [magazinesAmmoCargo uniformContainer _player, {_this select 0 == _magazineType}] call FUNC(filter); +_index = _magazines find [_magazineType,_ammoCount]; +if (_index > -1) exitWith { + { + _player removeItemFromUniform (_x select 0); + } forEach _magazines; + + { + if (!_isRemoved && (_x isEqualTo [_magazineType,_ammoCount])) then { + _isRemoved = true; + } else { + (uniformContainer _player) addMagazineAmmoCargo [_x select 0, 1, _x select 1]; + }; + } forEach _magazines; +}; + +// Check vest +_magazines = [magazinesAmmoCargo vestContainer _player, {_this select 0 == _magazineType}] call FUNC(filter); +_index = _magazines find [_magazineType,_ammoCount]; +if (_index > -1) exitWith { + { + _player removeItemFromVest (_x select 0); + } forEach _magazines; + + { + if (!_isRemoved && (_x isEqualTo [_magazineType,_ammoCount])) then { + _isRemoved = true; + } else { + (vestContainer _player) addMagazineAmmoCargo [_x select 0, 1, _x select 1]; + }; + } forEach _magazines; +}; + +// Check backpack +_magazines = [magazinesAmmoCargo backpackContainer _player, {_this select 0 == _magazineType}] call FUNC(filter); +_index = _magazines find [_magazineType,_ammoCount]; +if (_index > -1) exitWith { + { + _player removeItemFromBackpack (_x select 0); + } forEach _magazines; + + { + if (!_isRemoved && (_x isEqualTo [_magazineType,_ammoCount])) then { + _isRemoved = true; + } else { + (backpackContainer _player) addMagazineAmmoCargo [_x select 0, 1, _x select 1]; + }; + } forEach _magazines; +}; diff --git a/addons/common/functions/fnc_resetAllDefaults_f.sqf b/addons/common/functions/fnc_resetAllDefaults.sqf similarity index 74% rename from addons/common/functions/fnc_resetAllDefaults_f.sqf rename to addons/common/functions/fnc_resetAllDefaults.sqf index c415b5b32c..63e6764d01 100644 --- a/addons/common/functions/fnc_resetAllDefaults_f.sqf +++ b/addons/common/functions/fnc_resetAllDefaults.sqf @@ -17,17 +17,17 @@ _unit setvariable ["ACE_isDead",nil,true]; _unit setvariable ["ACE_isUnconscious", nil, true]; if (isPlayer _unit) then { - [true] call FUNC(setVolume_f); - [false] call FUNC(disableKeyInput_f); - if (["ace_medical"] call FUNC(isModLoader_f)) then { + [true] call FUNC(setVolume); + [false] call FUNC(disableKeyInput); + if (["ace_medical"] call FUNC(isModLoader)) then { [false] call EFUNC(medical,effectBlackOut); }; - if !(isnil QGVAR(DISABLE_USER_INPUT_COLLECTION_F)) then { + if !(isnil QGVAR(DISABLE_USER_INPUT_COLLECTION)) then { // clear all disable user input { [_X, false] call FUNC(setDisableUserInputStatus); - }foreach GVAR(DISABLE_USER_INPUT_COLLECTION_F); + }foreach GVAR(DISABLE_USER_INPUT_COLLECTION); }; }; diff --git a/addons/common/functions/fnc_revealObject_f.sqf b/addons/common/functions/fnc_revealObject_f.sqf deleted file mode 100644 index 9c5a34f59a..0000000000 --- a/addons/common/functions/fnc_revealObject_f.sqf +++ /dev/null @@ -1,15 +0,0 @@ -/** - * fnc_revealObject_f.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -if (hasInterface) then { - player reveal (_this select 0); -}; \ No newline at end of file diff --git a/addons/gui/functions/fnc_sendDisplayInformationTo.sqf b/addons/common/functions/fnc_sendDisplayInformationTo.sqf similarity index 95% rename from addons/gui/functions/fnc_sendDisplayInformationTo.sqf rename to addons/common/functions/fnc_sendDisplayInformationTo.sqf index ae4012b5fe..f22894e057 100644 --- a/addons/gui/functions/fnc_sendDisplayInformationTo.sqf +++ b/addons/common/functions/fnc_sendDisplayInformationTo.sqf @@ -42,6 +42,6 @@ if (isPlayer _reciever) then { }foreach _content; - [_title,_content,_type] call EFUNC(gui,displayInformation); + [_title,_content,_type] call EFUNC(common,displayInformation); }; }; \ No newline at end of file diff --git a/addons/gui/functions/fnc_sendDisplayMessageTo.sqf b/addons/common/functions/fnc_sendDisplayMessageTo.sqf similarity index 95% rename from addons/gui/functions/fnc_sendDisplayMessageTo.sqf rename to addons/common/functions/fnc_sendDisplayMessageTo.sqf index c66af97266..3c5b399659 100644 --- a/addons/gui/functions/fnc_sendDisplayMessageTo.sqf +++ b/addons/common/functions/fnc_sendDisplayMessageTo.sqf @@ -41,6 +41,6 @@ if (isPlayer _reciever) then { }foreach _parameters; _content = format _localizationArray; - [_title,_content,_type] call EFUNC(gui,displayMessage); + [_title,_content,_type] call EFUNC(common,displayMessage); }; }; \ No newline at end of file diff --git a/addons/common/functions/fnc_sendRequest_f.sqf b/addons/common/functions/fnc_sendRequest.sqf similarity index 100% rename from addons/common/functions/fnc_sendRequest_f.sqf rename to addons/common/functions/fnc_sendRequest.sqf diff --git a/addons/common/functions/fnc_setDisableUserInputStatus.sqf b/addons/common/functions/fnc_setDisableUserInputStatus.sqf index 2451cbe90f..2cf25b827a 100644 --- a/addons/common/functions/fnc_setDisableUserInputStatus.sqf +++ b/addons/common/functions/fnc_setDisableUserInputStatus.sqf @@ -13,16 +13,16 @@ _id = _this select 0; _disable = _this select 1; -if (isnil QGVAR(DISABLE_USER_INPUT_COLLECTION_F)) then { - GVAR(DISABLE_USER_INPUT_COLLECTION_F) = []; +if (isnil QGVAR(DISABLE_USER_INPUT_COLLECTION)) then { + GVAR(DISABLE_USER_INPUT_COLLECTION) = []; }; if (_disable) then { - GVAR(DISABLE_USER_INPUT_COLLECTION_F) pushback _id; + GVAR(DISABLE_USER_INPUT_COLLECTION) pushback _id; [true] call FUNC(disableUserInput); } else { - GVAR(DISABLE_USER_INPUT_COLLECTION_F) = GVAR(DISABLE_USER_INPUT_COLLECTION_F) - [_id]; - if (GVAR(DISABLE_USER_INPUT_COLLECTION_F) isEqualTo []) then { + GVAR(DISABLE_USER_INPUT_COLLECTION) = GVAR(DISABLE_USER_INPUT_COLLECTION) - [_id]; + if (GVAR(DISABLE_USER_INPUT_COLLECTION) isEqualTo []) then { [false] call FUNC(disableUserInput); }; }; \ No newline at end of file diff --git a/addons/common/functions/fnc_setSettingFromConfig.sqf b/addons/common/functions/fnc_setSettingFromConfig.sqf index 4151f3e0e4..27c727acab 100644 --- a/addons/common/functions/fnc_setSettingFromConfig.sqf +++ b/addons/common/functions/fnc_setSettingFromConfig.sqf @@ -17,7 +17,8 @@ EXPLODE_1_PVT(_this,_optionEntry); _fnc_getValueWithType = { EXPLODE_2_PVT(_this,_optionEntry,_typeName); - _value = getNumber (_optionEntry >> "value"); + _valueConfig = (_optionEntry >> "value"); + _value = if (isNumber (_optionEntry >> "value")) then {getNumber (_optionEntry >> "value")} else {0}; TRACE_3("_fnc_getValueWithType:", configName _optionEntry, _typeName, _value); if (_typeName == "BOOL") exitWith { _value > 0 diff --git a/addons/common/functions/fnc_setVolume_f.sqf b/addons/common/functions/fnc_setVolume.sqf similarity index 100% rename from addons/common/functions/fnc_setVolume_f.sqf rename to addons/common/functions/fnc_setVolume.sqf diff --git a/addons/common/functions/fnc_string_removeWhiteSpace.sqf b/addons/common/functions/fnc_stringRemoveWhiteSpace.sqf similarity index 100% rename from addons/common/functions/fnc_string_removeWhiteSpace.sqf rename to addons/common/functions/fnc_stringRemoveWhiteSpace.sqf diff --git a/addons/common/functions/fnc_switchToGroupSide_f.sqf b/addons/common/functions/fnc_switchToGroupSide.sqf similarity index 92% rename from addons/common/functions/fnc_switchToGroupSide_f.sqf rename to addons/common/functions/fnc_switchToGroupSide.sqf index 97b043adbe..528d32853c 100644 --- a/addons/common/functions/fnc_switchToGroupSide_f.sqf +++ b/addons/common/functions/fnc_switchToGroupSide.sqf @@ -16,7 +16,7 @@ _switch = [_this, 1, false,[false]] call BIS_fnc_Param; _id = [_this, 2, "", [""]] call BIS_fnc_Param; _side = [_this, 3, side _unit,[west]] call BIS_fnc_Param; -_previousGroupsList = _unit getvariable [QGVAR(previousGroupSwitchTo_F),[]]; +_previousGroupsList = _unit getvariable [QGVAR(previousGroupSwitchTo),[]]; if (_switch) then { // go forward _previousGroup = group _unit; @@ -30,7 +30,7 @@ if (_switch) then { [_unit] joinSilent _newGroup; _previousGroupsList pushback [_previousGroup, _originalSide, _id, true]; - _unit setvariable [QGVAR(previousGroupSwitchTo_F), _previousGroupsList, true]; + _unit setvariable [QGVAR(previousGroupSwitchTo), _previousGroupsList, true]; } else { // go one back { @@ -60,5 +60,5 @@ if (_switch) then { }foreach _previousGroupsList; _previousGroupsList = _previousGroupsList - [objNull]; reverse _previousGroupsList; // we have to reverse again, to ensure the list is in the right order. - _unit setvariable [QGVAR(previousGroupSwitchTo_F), _previousGroupsList, true]; + _unit setvariable [QGVAR(previousGroupSwitchTo), _previousGroupsList, true]; }; diff --git a/addons/common/functions/fnc_unloadPerson_f.sqf b/addons/common/functions/fnc_unloadPerson.sqf similarity index 89% rename from addons/common/functions/fnc_unloadPerson_f.sqf rename to addons/common/functions/fnc_unloadPerson.sqf index 1aaaee84a1..33c0e9c0c2 100644 --- a/addons/common/functions/fnc_unloadPerson_f.sqf +++ b/addons/common/functions/fnc_unloadPerson.sqf @@ -10,7 +10,7 @@ #include "script_component.hpp" -#define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson_F)) +#define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson)) private ["_caller", "_unit","_vehicle", "_loaded"]; _caller = [_this, 0, ObjNull,[ObjNull]] call BIS_fnc_Param; @@ -27,11 +27,11 @@ if (!alive _unit) then { _unit action ["Eject", vehicle _unit]; }; -[_unit, false, GROUP_SWITCH_ID, side group _caller] call FUNC(switchToGroupSide_f); +[_unit, false, GROUP_SWITCH_ID, side group _caller] call FUNC(switchToGroupSide); -_loaded = _vehicle getvariable [QGVAR(loaded_persons_F),[]]; +_loaded = _vehicle getvariable [QGVAR(loaded_persons),[]]; _loaded = _loaded - [_unit]; -_vehicle setvariable [QGVAR(loaded_persons_F),_loaded,true]; +_vehicle setvariable [QGVAR(loaded_persons),_loaded,true]; if (!([_unit] call FUNC(isAwake))) then { _handle = [_unit,_vehicle] spawn { diff --git a/addons/common/scripts/initCanInteractFunction.sqf b/addons/common/scripts/initCanInteractFunction.sqf deleted file mode 100644 index a0a6eb787f..0000000000 --- a/addons/common/scripts/initCanInteractFunction.sqf +++ /dev/null @@ -1,20 +0,0 @@ -// by commy2 -#include "script_component.hpp" - -private ["_function", "_configFile", "_count", "_index", "_config", "_configName", "_condition"]; - -_function = "private '_exceptions'; _exceptions = _this; alive ACE_player"; - -_configFile = configFile >> "ACE_canInteractConditions"; -_count = count _configFile; - -for "_index" from 0 to (_count -1) do { - _config = _configFile select _index; - _configName = configName _config; - - _condition = getText (_config >> "condition"); - - _function = _function + format ["&& {%1 || {'%2' in _exceptions}}", _condition, _configName]; -}; - -GVAR(canInteract) = compileFinal _function; diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index f2d944eb7a..d1462c1214 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -315,6 +315,30 @@ Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. + + Feedback icons + + + Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. + + + Progress bar location + + + Set the desired location of the progress bar on your screen. + + + Hint Background color + + + The color of the background from the ACE hints. + + + Hint text font color + + + The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. + \ No newline at end of file diff --git a/addons/dragging/$PBOPREFIX$ b/addons/dragging/$PBOPREFIX$ new file mode 100644 index 0000000000..4090738414 --- /dev/null +++ b/addons/dragging/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\dragging \ No newline at end of file diff --git a/addons/dragging/CfgEventHandlers.hpp b/addons/dragging/CfgEventHandlers.hpp new file mode 100644 index 0000000000..6a6aa440f7 --- /dev/null +++ b/addons/dragging/CfgEventHandlers.hpp @@ -0,0 +1,47 @@ + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + clientInit = QUOTE(call COMPILE_FILE(XEH_clientInit)); + serverInit = QUOTE(call COMPILE_FILE(XEH_serverInit)); + }; +}; + +class Extended_Init_EventHandlers { + class StaticWeapon { + class ADDON { + init = QUOTE(_this call DFUNC(initObject)); + }; + }; + class StaticMortar { + class ADDON { + init = QUOTE(_this call DFUNC(initObject)); + }; + }; + class ReammoBox_F { + class ADDON { + init = QUOTE(_this call DFUNC(initObject)); + }; + }; +}; + +class Extended_Killed_EventHandlers { + class CAManBase { + class ADDON { + killed = QUOTE(_this call DFUNC(handleKilled)); + }; + }; +}; + +class Extended_AnimChanged_EventHandlers { + class CAManBase { + class ADDON { + animChanged = QUOTE(_this call DFUNC(handleAnimChanged)); + }; + }; +}; diff --git a/addons/dragging/CfgVehicles.hpp b/addons/dragging/CfgVehicles.hpp new file mode 100644 index 0000000000..5ac84b7038 --- /dev/null +++ b/addons/dragging/CfgVehicles.hpp @@ -0,0 +1,86 @@ + +class CfgVehicles { + // Static weapons + class LandVehicle; + class StaticWeapon: LandVehicle { + GVAR(canCarry) = 1; + GVAR(carryPosition[]) = {0,1.2,0}; + GVAR(carryDirection) = 0; + + GVAR(canDrag) = 1; + GVAR(dragPosition[]) = {0,1.2,0}; + GVAR(dragDirection) = 0; + }; + + //remove actions from Taru Pods + class Pod_Heli_Transport_04_base_F: StaticWeapon { + GVAR(canCarry) = 0; + GVAR(canDrag) = 0; + }; + + class StaticMortar; + class Mortar_01_base_F: StaticMortar { + GVAR(canCarry) = 1; + GVAR(carryPosition[]) = {0,1.2,0}; + GVAR(carryDirection) = 0; + + GVAR(canDrag) = 1; + GVAR(dragPosition[]) = {0,1.2,0}; + GVAR(dragDirection) = 0; + }; + + // ammo boxes + class ThingX; + class ReammoBox_F: ThingX { + XEH_ENABLED; + GVAR(canCarry) = 0; + GVAR(carryPosition[]) = {0,1,1}; + GVAR(carryDirection) = 0; + + GVAR(canDrag) = 0; + GVAR(dragPosition[]) = {0,1.2,0}; + GVAR(dragDirection) = 0; + }; + + class Slingload_base_F: ReammoBox_F { + GVAR(canCarry) = 0; + GVAR(canDrag) = 0; + }; + + class EAST_Box_Base: ReammoBox_F { + GVAR(canCarry) = 1; + GVAR(canDrag) = 1; + }; + class IND_Box_Base: ReammoBox_F { + GVAR(canCarry) = 1; + GVAR(canDrag) = 1; + }; + /*class FIA_Box_Base_F: ReammoBox_F { + GVAR(canCarry) = 1; + GVAR(canDrag) = 1; + };*/ + class NATO_Box_Base: ReammoBox_F { + GVAR(canCarry) = 1; + GVAR(canDrag) = 1; + }; + + // Remove Larger crate dragging support. + // Would be better to allow some sort of joint push/drag functionality + // Requiring 2 units to access the larger crates and attaching them together (a crappy method of doing it) + // in order to move the bigger ones. Currently simply remove support. + // I believe these crates are currently broken (hitbox doesn't work or something) in 1.22 (2014-07-04) + class Box_East_AmmoVeh_F: EAST_Box_Base { + GVAR(canCarry) = 0; + GVAR(canDrag) = 0; + }; + + class Box_NATO_AmmoVeh_F: NATO_Box_Base { + GVAR(canCarry) = 0; + GVAR(canDrag) = 0; + }; + + class Box_IND_AmmoVeh_F: IND_Box_Base { + GVAR(canCarry) = 0; + GVAR(canDrag) = 0; + }; +}; diff --git a/addons/dragging/XEH_clientInit.sqf b/addons/dragging/XEH_clientInit.sqf new file mode 100644 index 0000000000..da9c6eefd6 --- /dev/null +++ b/addons/dragging/XEH_clientInit.sqf @@ -0,0 +1,19 @@ +// by PabstMirror, commy2 +#include "script_component.hpp" + +[{_this call DFUNC(handleScrollWheel)}] call EFUNC(common,addScrollWheelEventHandler); + +if (isNil "ACE_maxWeightDrag") then { + ACE_maxWeightDrag = 800; +}; + +if (isNil "ACE_maxWeightCarry") then { + ACE_maxWeightCarry = 600; +}; + +["isNotDragging", {!((_this select 0) getVariable [QGVAR(isDragging), false])}] call EFUNC(common,addCanInteractWithCondition); +["isNotCarrying", {!((_this select 0) getVariable [QGVAR(isCarrying), false])}] call EFUNC(common,addCanInteractWithCondition); + +// release object on player change. This does work when returning to lobby, but not when hard disconnecting. +["playerChanged", {_this call DFUNC(handlePlayerChanged)}] call EFUNC(common,addEventhandler); +["playerWeaponChanged", {_this call DFUNC(handlePlayerWeaponChanged)}] call EFUNC(common,addEventhandler); diff --git a/addons/dragging/XEH_preInit.sqf b/addons/dragging/XEH_preInit.sqf new file mode 100644 index 0000000000..7a0be053ad --- /dev/null +++ b/addons/dragging/XEH_preInit.sqf @@ -0,0 +1,28 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP(canCarry); +PREP(canDrag); +PREP(canDrop); +PREP(canDrop_carry); +PREP(carryObject); +PREP(carryObjectPFH); +PREP(dragObject); +PREP(dragObjectPFH); +PREP(dropObject); +PREP(dropObject_carry); +PREP(getWeight); +PREP(handleAnimChanged); +PREP(handleKilled); +PREP(handlePlayerChanged); +PREP(handlePlayerWeaponChanged); +PREP(handleScrollWheel); +PREP(initObject); +PREP(isObjectOnObject); +PREP(setCarryable); +PREP(setDraggable); +PREP(startDrag); +PREP(startDragPFH); + +ADDON = true; diff --git a/addons/dragging/XEH_serverInit.sqf b/addons/dragging/XEH_serverInit.sqf new file mode 100644 index 0000000000..f6c231d275 --- /dev/null +++ b/addons/dragging/XEH_serverInit.sqf @@ -0,0 +1,5 @@ +// by commy2 +#include "script_component.hpp" + +// release object on hard disconnection. Function is identical to killed +addMissionEventHandler ["HandleDisconnect", {_this call DFUNC(handleKilled)}]; diff --git a/addons/dragging/config.cpp b/addons/dragging/config.cpp new file mode 100644 index 0000000000..2d5854d86f --- /dev/null +++ b/addons/dragging/config.cpp @@ -0,0 +1,16 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common","ace_interaction","ace_interact_menu"}; + author[] = {"Garth 'L-H' de Wet","commy2"}; + authorUrl = "https://github.com/commy2/"; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/dragging/functions/fnc_canCarry.sqf b/addons/dragging/functions/fnc_canCarry.sqf new file mode 100644 index 0000000000..13402b53b5 --- /dev/null +++ b/addons/dragging/functions/fnc_canCarry.sqf @@ -0,0 +1,25 @@ +/* + * Author: commy2 + * + * Check if unit can carry the object. Doesn't check weight. + * + * Argument: + * 0: Unit that should do the carrying (Object) + * 1: Object to carry (Object) + * + * Return value: + * Can the unit carry the object? (Bool) + */ +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +if !([_unit, _target, []] call EFUNC(common,canInteractWith)) exitWith {false}; + +// a static weapon has to be empty for dragging +if ((typeOf _target) isKindOf "StaticWeapon" && {count crew _target > 0}) exitWith {false}; + +alive _target && {_target getVariable [QGVAR(canCarry), false]} diff --git a/addons/dragging/functions/fnc_canDrag.sqf b/addons/dragging/functions/fnc_canDrag.sqf new file mode 100644 index 0000000000..9771496aa2 --- /dev/null +++ b/addons/dragging/functions/fnc_canDrag.sqf @@ -0,0 +1,25 @@ +/* + * Author: commy2 + * + * Check if unit can drag the object. Doesn't check weight. + * + * Argument: + * 0: Unit that should do the dragging (Object) + * 1: Object to drag (Object) + * + * Return value: + * Can the unit drag the object? (Bool) + */ +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +if !([_unit, _target, []] call EFUNC(common,canInteractWith)) exitWith {false}; + +// a static weapon has to be empty for dragging +if ((typeOf _target) isKindOf "StaticWeapon" && {count crew _target > 0}) exitWith {false}; + +alive _target && {_target getVariable [QGVAR(canDrag), false]} diff --git a/addons/dragging/functions/fnc_canDrop.sqf b/addons/dragging/functions/fnc_canDrop.sqf new file mode 100644 index 0000000000..df75b9540f --- /dev/null +++ b/addons/dragging/functions/fnc_canDrop.sqf @@ -0,0 +1,22 @@ +/* + * Author: commy2 + * + * Check if unit can drop the object. + * + * Argument: + * 0: Unit that currently drags a object (Object) + * 1: Object that is dragged (Object) + * + * Return value: + * Can the unit drop the object? (Bool) + */ +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +if !([_unit, _target, ["isNotDragging"]] call EFUNC(common,canInteractWith)) exitWith {false}; + +_unit getVariable [QGVAR(draggedObject), objNull] == _target diff --git a/addons/dragging/functions/fnc_canDrop_carry.sqf b/addons/dragging/functions/fnc_canDrop_carry.sqf new file mode 100644 index 0000000000..9efbbe9b0f --- /dev/null +++ b/addons/dragging/functions/fnc_canDrop_carry.sqf @@ -0,0 +1,22 @@ +/* + * Author: commy2 + * + * Check if unit can drop the carried object. + * + * Argument: + * 0: Unit that currently carries a object (Object) + * 1: Object that is carried (Object) + * + * Return value: + * Can the unit drop the object? (Bool) + */ +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +if !([_unit, _target, ["isNotCarrying"]] call EFUNC(common,canInteractWith)) exitWith {false}; + +_unit getVariable [QGVAR(carriedObject), objNull] == _target diff --git a/addons/dragging/functions/fnc_carryObject.sqf b/addons/dragging/functions/fnc_carryObject.sqf new file mode 100644 index 0000000000..5fe3f36ccb --- /dev/null +++ b/addons/dragging/functions/fnc_carryObject.sqf @@ -0,0 +1,80 @@ +/* + * Author: commy2 + * + * Carry an object. + * + * Argument: + * 0: Unit that should do the carrying (Object) + * 1: Object to carry (Object) + * + * Return value: + * NONE. + */ +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +// check weight +private "_weight"; +_weight = [_target] call FUNC(getWeight); + +if (_weight > GETMVAR(ACE_maxWeightCarry,1E11)) exitWith { + [localize "STR_ACE_Dragging_UnableToDrag"] call EFUNC(common,displayTextStructured); +}; + +// select no weapon and stop sprinting +_unit action ["SwitchWeapon", _unit, _unit, 99]; + +[_unit, "isDragging", true] call EFUNC(common,setforceWalkStatus); + +// prevent multiple players from accessing the same object +[_unit, _target, true] call EFUNC(common,claim); + +// get attachTo offset and direction. +private ["_position", "_direction"]; + +_position = _target getVariable [QGVAR(carryPosition), [0, 0, 0]]; +_direction = _target getVariable [QGVAR(carryDirection), 0]; + +// add height offset of model +private "_offset"; +_offset = (_target modelToWorld [0, 0, 0] select 2) - (_unit modelToWorld [0, 0, 0] select 2); + +_position = _position vectorAdd [0, 0, _offset]; + +// attach object +_target attachTo [_unit, _position]; +_target setDir _direction; + +_unit setVariable [QGVAR(isCarrying), true, true]; +_unit setVariable [QGVAR(carriedObject), _target, true]; + +// add scrollwheel action to release object +private "_actionID"; +_actionID = _unit getVariable [QGVAR(ReleaseActionID), -1]; + +if (_actionID != -1) then { + _unit removeAction _actionID; +}; + +_actionID = _unit addAction [ + format ["%1", localize "STR_ACE_Dragging_Drop"], + QUOTE([ARR_2(_this select 0, (_this select 0) getVariable [ARR_2(QUOTE(QGVAR(carriedObject)),objNull)])] call FUNC(dropObject_carry)), + nil, + 20, + false, + true, + "", + QUOTE(!isNull (_this getVariable [ARR_2(QUOTE(QGVAR(carriedObject)),objNull)])) +]; + +_unit setVariable [QGVAR(ReleaseActionID), _actionID]; + +// check everything +[FUNC(carryObjectPFH), 0, [_unit, _target]] call CBA_fnc_addPerFrameHandler; + +// reset current dragging height. +GVAR(currentHeightChange) = 0; diff --git a/addons/dragging/functions/fnc_carryObjectPFH.sqf b/addons/dragging/functions/fnc_carryObjectPFH.sqf new file mode 100644 index 0000000000..81b2369624 --- /dev/null +++ b/addons/dragging/functions/fnc_carryObjectPFH.sqf @@ -0,0 +1,13 @@ +// by commy2 +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0 select 0; +_target = _this select 0 select 1; + +// drop if the crate is destroyed +if !([_target] call EFUNC(common,isAlive)) then { + [_unit, _target] call FUNC(dropObject_carry); + [_this select 1] call CBA_fnc_removePerFrameHandler; +}; diff --git a/addons/dragging/functions/fnc_dragObject.sqf b/addons/dragging/functions/fnc_dragObject.sqf new file mode 100644 index 0000000000..2f04e0e599 --- /dev/null +++ b/addons/dragging/functions/fnc_dragObject.sqf @@ -0,0 +1,64 @@ +/* + * Author: commy2 + * + * Drag an object. Called from ace_dragging_fnc_startDrag + * + * Argument: + * 0: Unit that should do the dragging (Object) + * 1: Object to drag (Object) + * + * Return value: + * NONE. + */ +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +// get attachTo offset and direction. +private ["_position", "_direction"]; + +_position = _target getVariable [QGVAR(dragPosition), [0, 0, 0]]; +_direction = _target getVariable [QGVAR(dragDirection), 0]; + +// add height offset of model +private "_offset"; +_offset = (_target modelToWorld [0, 0, 0] select 2) - (_unit modelToWorld [0, 0, 0] select 2); + +_position = _position vectorAdd [0, 0, _offset]; + +// attach object +_target attachTo [_unit, _position]; +_target setDir _direction; + +_unit setVariable [QGVAR(isDragging), true, true]; +_unit setVariable [QGVAR(draggedObject), _target, true]; + +// add scrollwheel action to release object +private "_actionID"; +_actionID = _unit getVariable [QGVAR(ReleaseActionID), -1]; + +if (_actionID != -1) then { + _unit removeAction _actionID; +}; + +_actionID = _unit addAction [ + format ["%1", localize "STR_ACE_Dragging_Drop"], + QUOTE([ARR_2(_this select 0, (_this select 0) getVariable [ARR_2(QUOTE(QGVAR(draggedObject)),objNull)])] call FUNC(dropObject)), + nil, + 20, + false, + true, + "", + QUOTE(!isNull (_this getVariable [ARR_2(QUOTE(QGVAR(draggedObject)),objNull)])) +]; + +_unit setVariable [QGVAR(ReleaseActionID), _actionID]; + +// check everything +[FUNC(dragObjectPFH), 0, [_unit, _target]] call CBA_fnc_addPerFrameHandler; + +// reset current dragging height. +GVAR(currentHeightChange) = 0; diff --git a/addons/dragging/functions/fnc_dragObjectPFH.sqf b/addons/dragging/functions/fnc_dragObjectPFH.sqf new file mode 100644 index 0000000000..e741b01f17 --- /dev/null +++ b/addons/dragging/functions/fnc_dragObjectPFH.sqf @@ -0,0 +1,13 @@ +// by commy2 +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0 select 0; +_target = _this select 0 select 1; + +// drop if the crate is destroyed +if !([_target] call EFUNC(common,isAlive)) then { + [_unit, _target] call FUNC(dropObject); + [_this select 1] call CBA_fnc_removePerFrameHandler; +}; diff --git a/addons/dragging/functions/fnc_dropObject.sqf b/addons/dragging/functions/fnc_dropObject.sqf new file mode 100644 index 0000000000..00aa7a6bca --- /dev/null +++ b/addons/dragging/functions/fnc_dropObject.sqf @@ -0,0 +1,50 @@ +/* + * Author: commy2 + * + * Drop a dragged object. + * + * Argument: + * 0: Unit that drags the other object (Object) + * 1: Dragged object to drop (Object) + * + * Return value: + * NONE. + */ +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +// remove scroll wheel action +_unit removeAction (_unit getVariable [QGVAR(ReleaseActionID), -1]); + +private "_inBuilding"; +_inBuilding = [_unit] call FUNC(isObjectOnObject); + +// play release animation +_unit playAction "released"; + +// prevent collision damage +["fixCollision", _unit, _unit] call EFUNC(common,targetEvent); +["fixCollision", _target, _target] call EFUNC(common,targetEvent); + +// release object +detach _target; + +_unit removeWeapon "ACE_FakePrimaryWeapon"; + +// prevent object from flipping inside buildings +if (_inBuilding) then { + _target setPosASL (getPosASL _target vectorAdd [0, 0, 0.05]); +}; + +_unit setVariable [QGVAR(isDragging), false, true]; +_unit setVariable [QGVAR(draggedObject), objNull, true]; + +// make object accesable for other units +[objNull, _target, true] call EFUNC(common,claim); + +["fixPosition", _target, _target] call EFUNC(common,targetEvent); +["fixFloating", _target, _target] call EFUNC(common,targetEvent); diff --git a/addons/dragging/functions/fnc_dropObject_carry.sqf b/addons/dragging/functions/fnc_dropObject_carry.sqf new file mode 100644 index 0000000000..497b96b95c --- /dev/null +++ b/addons/dragging/functions/fnc_dropObject_carry.sqf @@ -0,0 +1,50 @@ +/* + * Author: commy2 + * + * Drop a carried object. + * + * Argument: + * 0: Unit that carries the other object (Object) + * 1: Carried object to drop (Object) + * + * Return value: + * NONE. + */ +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +// remove scroll wheel action +_unit removeAction (_unit getVariable [QGVAR(ReleaseActionID), -1]); + +private "_inBuilding"; +_inBuilding = [_unit] call FUNC(isObjectOnObject); + +// prevent collision damage +["fixCollision", _unit, _unit] call EFUNC(common,targetEvent); +["fixCollision", _target, _target] call EFUNC(common,targetEvent); + +// release object +detach _target; + +// reselect weapon and re-enable sprint +_unit selectWeapon primaryWeapon _unit; + +[_unit, "isDragging", false] call EFUNC(common,setforceWalkStatus); + +// prevent object from flipping inside buildings +if (_inBuilding) then { + _target setPosASL (getPosASL _target vectorAdd [0, 0, 0.05]); +}; + +_unit setVariable [QGVAR(isCarrying), false, true]; +_unit setVariable [QGVAR(carriedObject), objNull, true]; + +// make object accesable for other units +[objNull, _target, true] call EFUNC(common,claim); + +["fixPosition", _target, _target] call EFUNC(common,targetEvent); +["fixFloating", _target, _target] call EFUNC(common,targetEvent); diff --git a/addons/dragging/functions/fnc_getWeight.sqf b/addons/dragging/functions/fnc_getWeight.sqf new file mode 100644 index 0000000000..2b44bf90d9 --- /dev/null +++ b/addons/dragging/functions/fnc_getWeight.sqf @@ -0,0 +1,54 @@ +/* + Name: AGM_Drag_fnc_GetWeight + + Author(s): + L-H, edited by commy2 + + Description: + Returns the weight of a crate. + + Parameters: + 0: OBJECT - Crate to get weight of + + Returns: + NUMBER - Weight + + Example: + _weight = Crate1 call AGM_Drag_fnc_GetWeight; +*/ +#include "script_component.hpp" + +private "_object"; + +_object = _this select 0; + +private ["_totalWeight", "_fnc","_fnc_Extra"]; +_totalWeight = 0; +_fnc_Extra = { + private ["_weight", "_items"]; + _items = _this select 0; + _weight = 0; + { + _weight = _weight + (getNumber (ConfigFile >> (_this select 1) >> _x >> (_this select 2) >> "mass") * ((_items select 1) select _foreachIndex)); + } foreach (_items select 0); + + _weight +}; +_fnc = { + private ["_weight", "_items"]; + _items = _this select 0; + _weight = 0; + { + _weight = _weight + (getNumber (ConfigFile >> (_this select 1) >> _x >> "mass") * ((_items select 1) select _foreachIndex)); + } foreach (_items select 0); + + _weight +}; +_totalWeight = ([getMagazineCargo _object, "CfgMagazines"] call _fnc); +_totalWeight = _totalWeight + ([getItemCargo _object, "CfgWeapons", "ItemInfo"] call _fnc_Extra); +_totalWeight = _totalWeight + ([getWeaponCargo _object, "CfgWeapons", "WeaponSlotsInfo"] call _fnc_Extra); +_totalWeight = _totalWeight + ([getBackpackCargo _object, "CfgVehicles"] call _fnc); + +_totalWeight = _totalWeight * 0.5; // Mass in Arma isn't an exact amount but rather a volume/weight value. This attempts to work around that by making it a usable value. (sort of). + +_totalWeight diff --git a/addons/dragging/functions/fnc_handleAnimChanged.sqf b/addons/dragging/functions/fnc_handleAnimChanged.sqf new file mode 100644 index 0000000000..b5eb4d4d8f --- /dev/null +++ b/addons/dragging/functions/fnc_handleAnimChanged.sqf @@ -0,0 +1,31 @@ +// by commy2 +#include "script_component.hpp" + +private ["_unit", "_anim"]; + +_unit = _this select 0; +_anim = _this select 1; + +if (_unit getVariable [QGVAR(isDragging), false]) then { + + // drop dragged object when not in valid animation + if !(_anim in DRAG_ANIMATIONS) then { + private "_draggedObject"; + _draggedObject = _unit getVariable [QGVAR(draggedObject), objNull]; + + [_unit, _draggedObject] call FUNC(dropObject); + }; + +}; + +if (_unit getVariable [QGVAR(isCarrying), false]) then { + + // drop carried object when not standing + if (stance _unit != "STAND") then { + private "_carriedObject"; + _carriedObject = _unit getVariable [QGVAR(carriedObject), objNull]; + + [_unit, _carriedObject] call FUNC(dropObject_carry); + }; + +}; diff --git a/addons/dragging/functions/fnc_handleKilled.sqf b/addons/dragging/functions/fnc_handleKilled.sqf new file mode 100644 index 0000000000..4dcfc77fcd --- /dev/null +++ b/addons/dragging/functions/fnc_handleKilled.sqf @@ -0,0 +1,20 @@ +// by commy2 +#include "script_component.hpp" + +private "_unit"; + +_unit = _this select 0; + +if (_unit getVariable [QGVAR(isDragging), false]) then { + private "_draggedObject"; + _draggedObject = _unit getVariable [QGVAR(draggedObject), objNull]; + + [_unit, _draggedObject] call FUNC(dropObject); +}; + +if (_unit getVariable [QGVAR(isCarrying), false]) then { + private "_carriedObject"; + _carriedObject = _unit getVariable [QGVAR(carriedObject), objNull]; + + [_unit, _carriedObject] call FUNC(dropObject_carry); +}; diff --git a/addons/dragging/functions/fnc_handlePlayerChanged.sqf b/addons/dragging/functions/fnc_handlePlayerChanged.sqf new file mode 100644 index 0000000000..e2dd41021b --- /dev/null +++ b/addons/dragging/functions/fnc_handlePlayerChanged.sqf @@ -0,0 +1,17 @@ +// by commy2 +#include "script_component.hpp" + +private ["_newPlayer", "_oldPlayer"]; + +_newPlayer = _this select 0; +_oldPlayer = _this select 1; + +{ + if (_x getVariable [QGVAR(isDragging), false]) then { + [_x, _x getVariable [QGVAR(draggedObject), objNull]] call FUNC(dropObject); + }; + + if (_x getVariable [QGVAR(isCarrying), false]) then { + [_x, _x getVariable [QGVAR(carriedObject), objNull]] call FUNC(dropObject_carry); + }; +} forEach [_newPlayer, _oldPlayer]; diff --git a/addons/dragging/functions/fnc_handlePlayerWeaponChanged.sqf b/addons/dragging/functions/fnc_handlePlayerWeaponChanged.sqf new file mode 100644 index 0000000000..44160b54c1 --- /dev/null +++ b/addons/dragging/functions/fnc_handlePlayerWeaponChanged.sqf @@ -0,0 +1,31 @@ +// by commy2 +#include "script_component.hpp" + +private ["_unit", "_weapon"]; + +_unit = _this select 0; +_weapon = _this select 1; + +if (_unit getVariable [QGVAR(isDragging), false]) then { + + // drop dragged object when selecting a non-primary weapon + if (_weapon != primaryWeapon _unit) then { + private "_draggedObject"; + _draggedObject = _unit getVariable [QGVAR(draggedObject), objNull]; + + [_unit, _draggedObject] call FUNC(dropObject); + }; + +}; + +if (_unit getVariable [QGVAR(isCarrying), false]) then { + + // drop carried object when selecting any weapon + if (_weapon != "") then { + private "_carriedObject"; + _carriedObject = _unit getVariable [QGVAR(carriedObject), objNull]; + + [_unit, _carriedObject] call FUNC(dropObject_carry); + }; + +}; diff --git a/addons/dragging/functions/fnc_handleScrollWheel.sqf b/addons/dragging/functions/fnc_handleScrollWheel.sqf new file mode 100644 index 0000000000..ce100abf50 --- /dev/null +++ b/addons/dragging/functions/fnc_handleScrollWheel.sqf @@ -0,0 +1,45 @@ +/* + * Author: L-H, commy2 + * + * Handles raising and lowering the dragged weapon to be able to place it on top of objects. + * + * Argument: + * 0: Scroll amount (Number) + * + * Return value: + * Handled or not. (Bool) + */ +#include "script_component.hpp" + +// requires modifier key to be hold down +if (GETMVAR(ACE_Modifier,0) == 0) exitWith {false}; + +private "_unit"; +_unit = ACE_player; + +// EH is always assigned. Exit and don't overwrite input if not carrying +if !(_unit getVariable [QGVAR(isCarrying), false]) exitWith {false}; + +private "_scrollAmount"; + +_scrollAmount = _this select 0; + +// move carried item 15 cm per scroll interval +_scrollAmount = _scrollAmount * 0.15; + +private "_carriedItem"; +_carriedItem = _unit getVariable [QGVAR(carriedObject),objNull]; + +private ["_position", "_maxHeight"]; + +_position = getPosATL _carriedItem; +_maxHeight = (_unit ModelToWorld [0,0,0]) select 2; + +_position set [2, ((_position select 2) + _scrollAmount min (_maxHeight + 1.5)) max _maxHeight]; + +// move up/down object and reattach at current position +detach _carriedItem; +_carriedItem setPosATL _position; +_carriedItem attachTo [_unit]; + +true diff --git a/addons/dragging/functions/fnc_initObject.sqf b/addons/dragging/functions/fnc_initObject.sqf new file mode 100644 index 0000000000..65866bd028 --- /dev/null +++ b/addons/dragging/functions/fnc_initObject.sqf @@ -0,0 +1,37 @@ +/* + * Author: commy2 + * + * Initialize variables for drag or carryable objects. Called from init EH. + * + * Argument: + * 0: Any object (Object) + * + * Return value: + * NONE. + */ +#include "script_component.hpp" + +private "_object"; + +_object = _this select 0; + +private "_config"; +_config = configFile >> "CfgVehicles" >> typeOf _object; + +if (getNumber (_config >> QGVAR(canDrag)) == 1) then { + private ["_position", "_direction"]; + + _position = getArray (_config >> QGVAR(dragPosition)); + _direction = getNumber (_config >> QGVAR(dragDirection)); + + [_object, true, _position, _direction] call FUNC(setDraggable); +}; + +if (getNumber (_config >> QGVAR(canCarry)) == 1) then { + private ["_position", "_direction"]; + + _position = getArray (_config >> QGVAR(carryPosition)); + _direction = getNumber (_config >> QGVAR(carryDirection)); + + [_object, true, _position, _direction] call FUNC(setCarryable); +}; diff --git a/addons/dragging/functions/fnc_isObjectOnObject.sqf b/addons/dragging/functions/fnc_isObjectOnObject.sqf new file mode 100644 index 0000000000..0a8624820e --- /dev/null +++ b/addons/dragging/functions/fnc_isObjectOnObject.sqf @@ -0,0 +1,6 @@ +// by commy2 + +private "_object"; +_object = _this select 0; + +(getPosATL _object select 2) - (getPos _object select 2) > 1E-5 diff --git a/addons/dragging/functions/fnc_setCarryable.sqf b/addons/dragging/functions/fnc_setCarryable.sqf new file mode 100644 index 0000000000..d1dd9cf1a9 --- /dev/null +++ b/addons/dragging/functions/fnc_setCarryable.sqf @@ -0,0 +1,52 @@ +/* + * Author: commy2 + * + * Enable the object to be carried. + * + * Argument: + * 0: Any object (Object) + * 1: true to enable carrying, false to disable (Bool) + * 2: Position offset for attachTo command (Array, optinal; default: [0,1,1]) + * 3: Direction in degree to rotate the object after attachTo (Number, optional; default: 0) + * + * Return value: + * NONE. + */ +#include "script_component.hpp" + +private ["_object", "_enableCarry", "_position", "_direction"]; + +_this resize 4; + +_object = _this select 0; +_enableCarry = _this select 1; +_position = _this select 2; +_direction = _this select 3; + +if (isNil "_position") then { + _position = _object getVariable [QGVAR(carryPosition), [0,1,1]]; +}; + +if (isNil "_direction") then { + _direction = _object getVariable [QGVAR(carryDirection), 0]; +}; + +// update variables +_object setVariable [QGVAR(canCarry), _enableCarry]; +_object setVariable [QGVAR(carryPosition), _position]; +_object setVariable [QGVAR(carryDirection), _direction]; + +// add action to class if it is not already present +private ["_type", "_initializedClasses"]; + +_type = typeOf _object; +_initializedClasses = GETGVAR(initializedClasses_carry,[]); + +// do nothing if the class is already initialized +if (_type in _initializedClasses) exitWith {}; + +_initializedClasses pushBack _type; +GVAR(initializedClasses_carry) = _initializedClasses; + +[_type, 0, ["ACE_MainActions", QGVAR(carry)], localize "STR_ACE_Dragging_Carry", "", "", {[_player, _target] call FUNC(carryObject)}, {[_player, _target] call FUNC(canCarry)}, 2] call EFUNC(interact_menu,addClassAction); +[_type, 0, ["ACE_MainActions", QGVAR(drop_carry)], localize "STR_ACE_Dragging_Drop", "", "", {[_player, _target] call FUNC(dropObject_carry)}, {[_player, _target] call FUNC(canDrop_carry)}, 2] call EFUNC(interact_menu,addClassAction); diff --git a/addons/dragging/functions/fnc_setDraggable.sqf b/addons/dragging/functions/fnc_setDraggable.sqf new file mode 100644 index 0000000000..82ebc201e2 --- /dev/null +++ b/addons/dragging/functions/fnc_setDraggable.sqf @@ -0,0 +1,52 @@ +/* + * Author: commy2 + * + * Enable the object to be dragged. + * + * Argument: + * 0: Any object (Object) + * 1: true to enable dragging, false to disable (Bool) + * 2: Position offset for attachTo command (Array, optinal; default: [0,0,0]) + * 3: Direction in degree to rotate the object after attachTo (Number, optional; default: 0) + * + * Return value: + * NONE. + */ +#include "script_component.hpp" + +private ["_object", "_enableDrag", "_position", "_direction"]; + +_this resize 4; + +_object = _this select 0; +_enableDrag = _this select 1; +_position = _this select 2; +_direction = _this select 3; + +if (isNil "_position") then { + _position = _object getVariable [QGVAR(dragPosition), [0,0,0]]; +}; + +if (isNil "_direction") then { + _direction = _object getVariable [QGVAR(dragDirection), 0]; +}; + +// update variables +_object setVariable [QGVAR(canDrag), _enableDrag]; +_object setVariable [QGVAR(dragPosition), _position]; +_object setVariable [QGVAR(dragDirection), _direction]; + +// add action to class if it is not already present +private ["_type", "_initializedClasses"]; + +_type = typeOf _object; +_initializedClasses = GETGVAR(initializedClasses,[]); + +// do nothing if the class is already initialized +if (_type in _initializedClasses) exitWith {}; + +_initializedClasses pushBack _type; +GVAR(initializedClasses) = _initializedClasses; + +[_type, 0, ["ACE_MainActions", QGVAR(drag)], localize "STR_ACE_Dragging_Drag", "", "", {[_player, _target] call FUNC(startDrag)}, {[_player, _target] call FUNC(canDrag)}, 2] call EFUNC(interact_menu,addClassAction); +[_type, 0, ["ACE_MainActions", QGVAR(drop)], localize "STR_ACE_Dragging_Drop", "", "", {[_player, _target] call FUNC(dropObject)}, {[_player, _target] call FUNC(canDrop)}, 2] call EFUNC(interact_menu,addClassAction); diff --git a/addons/dragging/functions/fnc_startDrag.sqf b/addons/dragging/functions/fnc_startDrag.sqf new file mode 100644 index 0000000000..1e286fb4a4 --- /dev/null +++ b/addons/dragging/functions/fnc_startDrag.sqf @@ -0,0 +1,43 @@ +/* + * Author: commy2 + * + * Start the dragging process. + * + * Argument: + * 0: Unit that should do the dragging (Object) + * 1: Object to drag (Object) + * + * Return value: + * NONE. + */ +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +// check weight +private "_weight"; +_weight = [_target] call FUNC(getWeight); + +if (_weight > GETMVAR(ACE_maxWeightDrag,1E11)) exitWith { + [localize "STR_ACE_Dragging_UnableToDrag"] call EFUNC(common,displayTextStructured); +}; + +// add a primary weapon if the unit has none. +// @todo prevent opening inventory when equipped with a fake weapon +if (primaryWeapon _unit == "") then { + _unit addWeapon "ACE_FakePrimaryWeapon"; +}; + +// select primary, otherwise the drag animation actions don't work. +_unit selectWeapon primaryWeapon _unit; + +// prevent multiple players from accessing the same object +[_unit, _target, true] call EFUNC(common,claim); + +// can't play action that depends on weapon if it was added the same frame +[{_this playActionNow "grabDrag";}, _unit] call EFUNC(common,execNextFrame); + +[FUNC(startDragPFH), 0.2, [_unit, _target, time + 5]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/dragging/functions/fnc_startDragPFH.sqf b/addons/dragging/functions/fnc_startDragPFH.sqf new file mode 100644 index 0000000000..b6515aa2d9 --- /dev/null +++ b/addons/dragging/functions/fnc_startDragPFH.sqf @@ -0,0 +1,20 @@ +// by commy2 +#include "script_component.hpp" + +private ["_unit", "_target", "_timeOut"]; + +_unit = _this select 0 select 0; +_target = _this select 0 select 1; +_timeOut = _this select 0 select 2; + +// timeout. Do nothing. Quit. time, because anim length is linked to ingame time. +if (time > _timeOut) exitWith { + [_this select 1] call CBA_fnc_removePerFrameHandler; +}; + +// unit is ready to start dragging +if (animationState _unit in DRAG_ANIMATIONS) exitWith { + [_unit, _target] call FUNC(dragObject); + + [_this select 1] call CBA_fnc_removePerFrameHandler; +}; diff --git a/addons/dragging/functions/script_component.hpp b/addons/dragging/functions/script_component.hpp new file mode 100644 index 0000000000..9d257a69d3 --- /dev/null +++ b/addons/dragging/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\dragging\script_component.hpp" \ No newline at end of file diff --git a/addons/dragging/script_component.hpp b/addons/dragging/script_component.hpp new file mode 100644 index 0000000000..0f601ae8d9 --- /dev/null +++ b/addons/dragging/script_component.hpp @@ -0,0 +1,14 @@ +#define COMPONENT dragging +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_DRAGGING + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_ENABLED_DRAGGING + #define DEBUG_SETTINGS DEBUG_ENABLED_DRAGGING +#endif + +#include "\z\ace\addons\main\script_macros.hpp" + +#define DRAG_ANIMATIONS ["amovpercmstpslowwrfldnon_acinpknlmwlkslowwrfldb_2", "amovpercmstpsraswpstdnon_acinpknlmwlksnonwpstdb_2", "amovpercmstpsnonwnondnon_acinpknlmwlksnonwnondb_2", "acinpknlmstpsraswrfldnon", "acinpknlmstpsnonwpstdnon", "acinpknlmstpsnonwnondnon", "acinpknlmwlksraswrfldb", "acinpknlmwlksnonwnondb"] diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml new file mode 100644 index 0000000000..1fca04fee1 --- /dev/null +++ b/addons/dragging/stringtable.xml @@ -0,0 +1,56 @@ + + + + + + Drag + Тащить + Arrastrar + Ciągnij + Táhnout + Tracter + Ziehen + Arrastar + Trascina + Húzás + + + Release + Отпустить + Soltar + Puść + Položit + Lâcher + Loslassen + Largar + Lascia + Elengedés + + + Item to heavy + Gegenstand zu schwer + + + + Carry + Tragen + Portar + Nieś + Porter + Nést + Carregar + Trascina + Felvesz + Нести + + + diff --git a/addons/explosives/CfgACE_Triggers.hpp b/addons/explosives/CfgACE_Triggers.hpp index 1b686d6092..789786bb4f 100644 --- a/addons/explosives/CfgACE_Triggers.hpp +++ b/addons/explosives/CfgACE_Triggers.hpp @@ -24,6 +24,12 @@ class CfgACE_Triggers { picture = PATHTOF(Data\UI\DeadmanSwitch.paa); requires[] = {"ACE_DeadManSwitch"}; }; + class Cellphone:Command { + displayName = $STR_ACE_Explosives_cellphone_displayName; + picture = PATHTOF(Data\UI\Cellphone_UI.paa); + onPlace = QUOTE(_this call FUNC(addCellphoneIED);false); + requires[] = {"ACE_Cellphone"}; + }; class PressurePlate { displayName = $STR_ACE_Explosives_PressurePlate; picture = PATHTOF(Data\UI\PressurePlate.paa); diff --git a/addons/explosives/CfgMagazines.hpp b/addons/explosives/CfgMagazines.hpp index 7cc1c8a8bd..51c85e607f 100644 --- a/addons/explosives/CfgMagazines.hpp +++ b/addons/explosives/CfgMagazines.hpp @@ -95,4 +95,33 @@ class CfgMagazines { }; }; }; + + class IEDUrbanBig_Remote_Mag: DemoCharge_Remote_Mag { + ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanBig"; + class ACE_Triggers { + SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; + class Command { + FuseTime = 0.5; + }; + class DeadmanSwitch:Command{}; + class Cellphone:Command{}; + }; + }; + class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_IEDLandBig"; + }; + class IEDUrbanSmall_Remote_Mag: DemoCharge_Remote_Mag { + ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanSmall"; + class ACE_Triggers { + SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; + class Command { + FuseTime = 0.5; + }; + class DeadmanSwitch:Command{}; + class Cellphone:Command{}; + }; + }; + class IEDLandSmall_Remote_Mag: IEDUrbanSmall_Remote_Mag { + ACE_SetupObject = "ACE_Explosives_Place_IEDLandSmall"; + }; }; diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index 73477ddce5..e62b31aa56 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -1,8 +1,3 @@ -#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ -}; - class CfgVehicles { class Man; @@ -16,7 +11,6 @@ class CfgVehicles { showDisabled = 1; priority = 4; icon = PATHTOF(UI\Explosives_Menu_ca.paa); - subMenu[] = {"ACE_Explosives", 1}; hotkey = "X"; //Sub-menu items class ACE_Detonate { @@ -49,6 +43,15 @@ class CfgVehicles { priority = 0.8; hotkey = "F"; }; + class ACE_Cellphone { + displayName = $STR_ACE_Explosives_cellphone_displayName; + condition = "('ACE_Cellphone' in (items ace_player))"; + statement = "closeDialog 0;createDialog 'Rsc_ACE_PhoneInterface';"; + exceptions[] = {"ACE_Interaction_isNotSwimming"}; + showDisabled = 0; + icon = PATHTOF(Data\UI\Cellphone_UI.paa); + priority = 0.8; + }; }; }; }; @@ -105,6 +108,27 @@ class CfgVehicles { model = "\A3\Weapons_F\Explosives\mine_SLAM_directional"; }; + // IEDs + class ACE_Explosives_Place_IEDUrbanBig:ACE_Explosives_Place { + displayName = "IED Urban Big"; + model = "\A3\Weapons_F\Explosives\IED_urban_big"; + }; + + class ACE_Explosives_Place_IEDLandBig:ACE_Explosives_Place { + displayName = "IED Land Big"; + model = "\A3\Weapons_F\Explosives\IED_land_big"; + }; + + class ACE_Explosives_Place_IEDUrbanSmall:ACE_Explosives_Place { + displayName = "IED Urban Small"; + model = "\A3\Weapons_F\Explosives\IED_urban_small"; + }; + + class ACE_Explosives_Place_IEDLandSmall:ACE_Explosives_Place { + displayName = "IED Land Small"; + model = "\A3\Weapons_F\Explosives\IED_land_small"; + }; + class NATO_Box_Base; class EAST_Box_Base; class IND_Box_Base; @@ -113,44 +137,47 @@ class CfgVehicles { class Box_NATO_AmmoOrd_F: NATO_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_Clacker,12) - MACRO_ADDITEM(ACE_M26_Clacker,6) - MACRO_ADDITEM(ACE_DefusalKit,12) + MACRO_ADDITEM(ACE_Clacker,12); + MACRO_ADDITEM(ACE_M26_Clacker,6); + MACRO_ADDITEM(ACE_DefusalKit,12); }; }; class Box_East_AmmoOrd_F: EAST_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_Clacker,12) - MACRO_ADDITEM(ACE_M26_Clacker,6) - MACRO_ADDITEM(ACE_DefusalKit,12) + MACRO_ADDITEM(ACE_Clacker,12); + MACRO_ADDITEM(ACE_M26_Clacker,6); + MACRO_ADDITEM(ACE_DefusalKit,12); }; }; class Box_IND_AmmoOrd_F: IND_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_Clacker,12) - MACRO_ADDITEM(ACE_M26_Clacker,6) - MACRO_ADDITEM(ACE_DefusalKit,12) - MACRO_ADDITEM(ACE_Deadmanswitch,2) + MACRO_ADDITEM(ACE_Clacker,12); + MACRO_ADDITEM(ACE_M26_Clacker,6); + MACRO_ADDITEM(ACE_DefusalKit,12); + MACRO_ADDITEM(ACE_Deadmanswitch,2); + MACRO_ADDITEM(ACE_Cellphone,3); }; }; class Box_FIA_Ammo_F: FIA_Box_Base_F { class TransportItems { - MACRO_ADDITEM(ACE_Clacker,2) - MACRO_ADDITEM(ACE_M26_Clacker,2) - MACRO_ADDITEM(ACE_DefusalKit,2) - MACRO_ADDITEM(ACE_Deadmanswitch,1) + MACRO_ADDITEM(ACE_Clacker,2); + MACRO_ADDITEM(ACE_M26_Clacker,2); + MACRO_ADDITEM(ACE_DefusalKit,2); + MACRO_ADDITEM(ACE_Deadmanswitch,1); + MACRO_ADDITEM(ACE_Cellphone,2); }; }; class ACE_Box_Misc: Box_NATO_Support_F { class TransportItems { - MACRO_ADDITEM(ACE_Clacker,12) - MACRO_ADDITEM(ACE_M26_Clacker,6) - MACRO_ADDITEM(ACE_DefusalKit,12) - MACRO_ADDITEM(ACE_Deadmanswitch,6) + MACRO_ADDITEM(ACE_Clacker,12); + MACRO_ADDITEM(ACE_M26_Clacker,6); + MACRO_ADDITEM(ACE_DefusalKit,12); + MACRO_ADDITEM(ACE_Deadmanswitch,6); + MACRO_ADDITEM(ACE_Cellphone,10); }; }; diff --git a/addons/explosives/CfgWeapons.hpp b/addons/explosives/CfgWeapons.hpp index e239ed8841..fd142019e8 100644 --- a/addons/explosives/CfgWeapons.hpp +++ b/addons/explosives/CfgWeapons.hpp @@ -47,6 +47,20 @@ class CfgWeapons { ACE_Range = 100; ACE_Detonator = 1; + class ItemInfo: ACE_ExplosiveItem { + mass = 2; + uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; + }; + }; + class ACE_Cellphone: ACE_ItemCore { + scope = 2; + displayName = $STR_ACE_Explosives_cellphone_displayName; + descriptionShort = $STR_ACE_Explosives_cellphone_description; + picture = PATHTOF(Data\UI\Cellphone_UI.paa); + model = "\A3\weapons_F\ammo\mag_univ.p3d"; + ACE_Range = 15000; + ACE_Detonator = 1; + class ItemInfo: ACE_ExplosiveItem { mass = 2; uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; diff --git a/addons/explosives/Data/Audio/Cellphone_Ring.wss b/addons/explosives/Data/Audio/Cellphone_Ring.wss new file mode 100644 index 0000000000..bafdf7596a Binary files /dev/null and b/addons/explosives/Data/Audio/Cellphone_Ring.wss differ diff --git a/addons/explosives/Data/Audio/DialTone.wss b/addons/explosives/Data/Audio/DialTone.wss new file mode 100644 index 0000000000..4ac52b1acf Binary files /dev/null and b/addons/explosives/Data/Audio/DialTone.wss differ diff --git a/addons/explosives/Data/UI/Cellphone_Background.paa b/addons/explosives/Data/UI/Cellphone_Background.paa new file mode 100644 index 0000000000..9cafe97af8 Binary files /dev/null and b/addons/explosives/Data/UI/Cellphone_Background.paa differ diff --git a/addons/explosives/Data/UI/Cellphone_UI.paa b/addons/explosives/Data/UI/Cellphone_UI.paa new file mode 100644 index 0000000000..38360ee4da Binary files /dev/null and b/addons/explosives/Data/UI/Cellphone_UI.paa differ diff --git a/addons/explosives/ExplosivesUI.hpp b/addons/explosives/ExplosivesUI.hpp index c6c76e573c..769b3dc167 100644 --- a/addons/explosives/ExplosivesUI.hpp +++ b/addons/explosives/ExplosivesUI.hpp @@ -4,16 +4,49 @@ #define GUI_GRID_H (0.04) #define ST_CENTER 0x02 +#define X_OFFSET 0.25 class RscText; class RscButton; - -#define X_OFFSET 0.25 - class RscXSliderH; class IGUIBack; +class RscPicture; +class RscEdit; -class Rsc_ACE_Timer_Slider:RscXSliderH{ +class Rsc_ACE_CallScreen_Edit:RscEdit { + canModify = 1; + colorBackground[] = {0,0,0,1}; + colorText[] = {0,0,0,1}; + colorDisabled[] = {1,1,1,0.25}; + colorSelection[] = { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 1 + }; + text = ""; + style = "0x00 + 0x40 + 0x200"; + shadow = 1; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) * 1)"; + x = 0.288594 * safezoneW + safezoneX; + w = 0.0825 * safezoneW; + h = 0.044 * safezoneH; +}; +class Rsc_ACE_HiddenButton:RscButton { + colorText[] = {0, 0, 0, 0}; + colorDisabled[] = {0, 0, 0, 0}; + colorBackground[] = {0, 0, 0, 0}; + colorBackgroundDisabled[] = {0, 0, 0, 0}; + colorBackgroundActive[] = {0, 0, 0, 0}; + colorFocused[] = {0, 0, 0, 0}; + colorShadow[] = {0, 0, 0, 0}; + colorBorder[] = {0, 0, 0, 0}; + w = 0.095589; + h = 0.039216; + shadow = 0; +}; + +class Rsc_ACE_Timer_Slider:RscXSliderH { x = 0.4; y = 0.2; w = 0.3; @@ -21,8 +54,7 @@ class Rsc_ACE_Timer_Slider:RscXSliderH{ colorBackground[] = {0,0,0,0.5}; }; -class RscACE_SelectTimeUI -{ +class RscACE_SelectTimeUI { idd = 8854; movingEnable = 0; class controls { @@ -72,3 +104,185 @@ class RscACE_SelectTimeUI }; }; }; + +class Rsc_ACE_NumKeyButton: Rsc_ACE_HiddenButton{}; +class Rsc_ACE_PhoneInterface { + idd = 8855; + movingEnable = 1; + onLoad = QUOTE(GVAR(IED_CurrentSpeedDial) = -1); + class controls { + class RscPicture_1200: RscPicture { + idc = 1200; + text = PATHTOF(Data\UI\Cellphone_Background.paa); + x = 0.231875 * safezoneW + safezoneX; + y = 0.104 * safezoneH + safezoneY; + w = 0.195937 * safezoneW; + h = 0.704 * safezoneH; + }; + class numkey_1: Rsc_ACE_NumKeyButton { + idc = 1600; + x = 0.278281 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "1"; + action = "ctrlSetText [1400,((ctrlText 1400) + '1')];"; + }; + class numkey_2: Rsc_ACE_NumKeyButton { + idc = 1601; + x = 0.314375 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "2"; + action = "ctrlSetText [1400,((ctrlText 1400) + '2')];"; + }; + class numkey_3: Rsc_ACE_NumKeyButton { + idc = 1602; + x = 0.350469 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "3"; + action = "ctrlSetText [1400,((ctrlText 1400) + '3')];"; + }; + class numkey_4: Rsc_ACE_NumKeyButton { + idc = 1603; + x = 0.278281 * safezoneW + safezoneX; + y = 0.577 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "4"; + action = "ctrlSetText [1400,((ctrlText 1400) + '4')];"; + }; + class numkey_5: Rsc_ACE_NumKeyButton { + idc = 1604; + x = 0.314375 * safezoneW + safezoneX; + y = 0.577 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "5"; + action = "ctrlSetText [1400,((ctrlText 1400) + '5')];"; + }; + class numkey_6: Rsc_ACE_NumKeyButton { + idc = 1605; + x = 0.350469 * safezoneW + safezoneX; + y = 0.577 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "6"; + action = "ctrlSetText [1400,((ctrlText 1400) + '6')];"; + }; + class numkey_7: Rsc_ACE_NumKeyButton { + idc = 1606; + x = 0.278281 * safezoneW + safezoneX; + y = 0.621 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "7"; + action = "ctrlSetText [1400,((ctrlText 1400) + '7')];"; + }; + class numkey_8: Rsc_ACE_NumKeyButton { + idc = 1607; + x = 0.314375 * safezoneW + safezoneX; + y = 0.621 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "8"; + action = "ctrlSetText [1400,((ctrlText 1400) + '8')];"; + }; + class numkey_9: Rsc_ACE_NumKeyButton { + idc = 1608; + x = 0.350469 * safezoneW + safezoneX; + y = 0.621 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "9"; + action = "ctrlSetText [1400,((ctrlText 1400) + '9')];"; + }; + class numkey_0: Rsc_ACE_NumKeyButton { + idc = 1609; + x = 0.314375 * safezoneW + safezoneX; + y = 0.676 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "0"; + action = "ctrlSetText [1400,((ctrlText 1400) + '0')];"; + }; + class speedDialAdd: Rsc_ACE_NumKeyButton { + idc = 1610; + x = 0.278281 * safezoneW + safezoneX; + y = 0.676 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_AddToSpeedDial"; + action = QUOTE([ARR_2(ctrlText 1401,ctrlText 1400)] call FUNC(addToSpeedDial);); + }; + class clear: Rsc_ACE_HiddenButton { + idc = 1610; + x = 0.278281 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.020625 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Clear"; + action = QUOTE(ctrlSetText [ARR_2(1400,'')];[ctrlText 1401] call FUNC(removeFromSpeedDial);ctrlSetText [ARR_2(1401,'')];); + }; + class dial: Rsc_ACE_HiddenButton { + idc = 1611; + x = 0.309219 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.04125 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_Dial"; + action = QUOTE([ARR_2(ace_player,ctrlText 1400)] call FUNC(dialPhone);); + }; + class up: Rsc_ACE_HiddenButton { + idc = 1612; + x = 0.360781 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.020625 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_Up"; + action = QUOTE([true] call FUNC(setSpeedDial)); + }; + class down: Rsc_ACE_HiddenButton { + idc = 1613; + x = 0.345312 * safezoneW + safezoneX; + y = 0.485 * safezoneH + safezoneY; + w = 0.020625 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_Down"; + action = QUOTE([false] call FUNC(setSpeedDial)); + }; + class speedDial_Text: RscText { + idc = 1405; + y = 0.302 * safezoneH + safezoneY; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)"; + x = 0.288594 * safezoneW + safezoneX; + w = 0.0825 * safezoneW; + h = 0.044 * safezoneH; + text = "Name"; + }; + class speedDial_edit: Rsc_ACE_CallScreen_Edit { + idc = 1401; + y = 0.302 * safezoneH + safezoneY; + x = 0.318 * safezoneW + safezoneX; + w = 0.1; + }; + class numberEdit_Text: RscText { + idc = 1406; + y = 0.348 * safezoneH + safezoneY; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)"; + x = 0.288594 * safezoneW + safezoneX; + w = 0.0825 * safezoneW; + h = 0.044 * safezoneH; + text = "#"; + }; + class number_edit: Rsc_ACE_CallScreen_Edit { + canModify = 0; + idc = 1400; + y = 0.348 * safezoneH + safezoneY; + x = 0.3 * safezoneW + safezoneX; + }; + }; +}; diff --git a/addons/explosives/XEH_postInit.sqf b/addons/explosives/XEH_postInit.sqf index 2ede878a37..e3b40308c3 100644 --- a/addons/explosives/XEH_postInit.sqf +++ b/addons/explosives/XEH_postInit.sqf @@ -18,6 +18,7 @@ if !(hasInterface) exitWith {}; GVAR(PlacedCount) = 0; GVAR(Setup) = objNull; GVAR(pfeh_running) = false; +GVAR(CurrentSpeedDial) = 0; [{(_this select 0) call FUNC(handleScrollWheel);}] call EFUNC(Common,addScrollWheelEventHandler); player addEventHandler ["Killed", { diff --git a/addons/explosives/XEH_preInit.sqf b/addons/explosives/XEH_preInit.sqf index 801ded6615..3747151d16 100644 --- a/addons/explosives/XEH_preInit.sqf +++ b/addons/explosives/XEH_preInit.sqf @@ -17,11 +17,15 @@ ADDON = false; +PREP(addCellphoneIED); PREP(addClacker); +PREP(addToSpeedDial); PREP(canDefuse); PREP(canDetonate); PREP(defuseExplosive); PREP(detonateExplosive); +PREP(dialPhone); +PREP(dialingPhone); PREP(handleScrollWheel); @@ -30,6 +34,7 @@ PREP(hasPlacedExplosives); PREP(getDetonators); PREP(getPlacedExplosives); +PREP(getSpeedDialExplosive); PREP(openDetonateUI); PREP(openPlaceUI); @@ -41,10 +46,12 @@ PREP(place_Approve); PREP(place_Cancel); PREP(placeExplosive); +PREP(removeFromSpeedDial); PREP(selectTrigger); PREP(setupExplosive); PREP(setPosition); +PREP(setSpeedDial); PREP(startDefuse); PREP(startTimer); PREP(triggerType); diff --git a/addons/explosives/config.cpp b/addons/explosives/config.cpp index e4a079f107..da95d45e7e 100644 --- a/addons/explosives/config.cpp +++ b/addons/explosives/config.cpp @@ -3,7 +3,7 @@ class CfgPatches { class ADDON { units[] = {}; - weapons[] = {"ACE_Clacker", "ACE_DefusalKit", "ACE_M26_Clacker", "ACE_DeadManSwitch"}; + weapons[] = {"ACE_Clacker", "ACE_DefusalKit", "ACE_M26_Clacker", "ACE_DeadManSwitch", "ACE_Cellphone"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common", "ace_interaction"}; author[] = {"Garth 'L-H' de Wet"}; diff --git a/addons/explosives/functions/fnc_addCellphoneIED.sqf b/addons/explosives/functions/fnc_addCellphoneIED.sqf new file mode 100644 index 0000000000..84cb57cf4e --- /dev/null +++ b/addons/explosives/functions/fnc_addCellphoneIED.sqf @@ -0,0 +1,51 @@ +/* + * Author: Garth 'L-H' de Wet + * Adds an IED to the cellphone list + * + * Arguments: + * 0: Unit + * 1: Explosive + * 2: Magazine classname + * 3: Extra variables + * + * Return Value: + * None + * + * Example: + * Handled by PlaceExplosive. + * + * Public: No + */ +#include "script_component.hpp" +EXPLODE_4_PVT(_this,_unit,_explosive,_magazineClass,_extra); +// Config is the last item in the list of passed in items. +_config = (_this select 3) select (count (_this select 3) - 1); + +_requiredItems = getArray(_config >> "requires"); +_hasRequired = true; +_detonators = [_unit] call FUNC(getDetonators); +{ + if !(_x in _detonators) exitWith{ + _hasRequired = false; + }; +} count _requiredItems; +private ["_code", "_count", "_codeSet"]; +_codeSet = false; +while {!_codeSet} do { + _code = str(round (random 9999)); + _count = 4 - count (toArray _code); + while {_count > 0} do { + _code = "0" + _code; + _count = _count - 1; + }; + _codeSet = (count ([_code] call FUNC(getSpeedDialExplosive))) == 0; +}; +if (isNil QGVAR(CellphoneIEDs)) then { + GVAR(CellphoneIEDs) = []; +}; +_count = GVAR(CellphoneIEDs) pushBack [_explosive,_code,GetNumber(ConfigFile >> "CfgMagazines" >> _magazineClass >> "ACE_Triggers" >> "Cellphone" >> "FuseTime")]; +_count = _count + 1; +publicVariable QGVAR(CellphoneIEDs); +_unit sideChat format ["IED %1 code: %2", _count,_code]; +if !(_hasRequired) exitWith {}; +[format ["IED %1", _count],_code] call FUNC(addToSpeedDial); diff --git a/addons/explosives/functions/fnc_addToSpeedDial.sqf b/addons/explosives/functions/fnc_addToSpeedDial.sqf new file mode 100644 index 0000000000..142996e4c3 --- /dev/null +++ b/addons/explosives/functions/fnc_addToSpeedDial.sqf @@ -0,0 +1,37 @@ +/* + * Author: Garth 'L-H' de Wet + * Sets the speed dial for the UI. + * + * Arguments: + * 0: Name of speed dial + * 1: Code to add to speed dial + * + * Return Value: + * None + * + * Example: + * ["My Speed Dial","2131"] call ACE_explosives_fnc_addToSpeedDial; + * + * Public: Yes + */ +#include "script_component.hpp" +private ["_speedDial", "_found"]; +_speedDial = ace_player getVariable [QGVAR(SpeedDial), []]; +_found = false; + +EXPLODE_2_PVT(_this,_name,_code); + +if ((_code) == "") ExitWith { + [_name] call FUNC(removeFromSpeedDial); +}; +{ + if ((_x select 0) == _name) exitWith { + _speedDial set [_foreachindex, _this]; + _found = true; + }; +} foreach _speedDial; +if (!_found) then { + _speedDial pushBack _this; +}; + +ace_player setVariable [QGVAR(SpeedDial), _speedDial]; diff --git a/addons/explosives/functions/fnc_dialPhone.sqf b/addons/explosives/functions/fnc_dialPhone.sqf new file mode 100644 index 0000000000..41b2a4a4f7 --- /dev/null +++ b/addons/explosives/functions/fnc_dialPhone.sqf @@ -0,0 +1,42 @@ +/* + * Author: Garth 'L-H' de Wet + * Dials the number passed and detonates the explosive. + * + * Arguments: + * 0: Unit to do dialing + * 1: Code to dial + * + * Return Value: + * None + * + * Example: + * [ace_player,"2131"] call ACE_explosives_fnc_dialPhone; + * + * Public: Yes + */ +#include "script_component.hpp" +private ["_arr", "_ran", "_i","_speedDial"]; +EXPLODE_2_PVT(_this,_unit,_code); +if (_unit getVariable [QGVAR(Dialing),false]) exitWith {}; +if !(alive _unit) exitWith {}; +_unit setVariable [QGVAR(Dialing), true, true]; + +_ran = (ceil(random 8)) + 1; +_arr = []; +for [{_i=0}, {_i<_ran}, {_i=_i+1}] do { + _arr = _arr + ['.','..','...','']; +}; +if (_unit == ace_player) then { + ctrlSetText [1400,"Calling"]; + [FUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler); +} else { + private ["_explosive"]; + _explosive = [_code] call FUNC(getSpeedDialExplosive); + if ((count _explosive) > 0) then { + [{ + playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_this select 1),3.16228,1,75]; + (_this select 0) setVariable [QGVAR(Dialing), false, true]; + }, [_unit,_explosive select 0], 0.25 * (count _arr - 4), 0] call EFUNC(common,waitAndExecute); + [_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2)] call FUNC(startTimer); + }; +}; diff --git a/addons/explosives/functions/fnc_dialingPhone.sqf b/addons/explosives/functions/fnc_dialingPhone.sqf new file mode 100644 index 0000000000..d3c429c9fc --- /dev/null +++ b/addons/explosives/functions/fnc_dialingPhone.sqf @@ -0,0 +1,44 @@ +/* + * Author: Garth 'L-H' de Wet + * Performs the dial tones and detonation of explosive. + * + * Arguments: + * 0: Unit to do dialing + * 1: Index + * 2: Dialing points + * 3: IED code + * + * Return Value: + * None + * + * Example: + * [FUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler); + * + * Public: No + */ +#include "script_component.hpp" +EXPLODE_4_PVT(_this select 0,_unit,_i,_arr,_code); +if ((_i mod 4) == 0) then { + playSound3D [QUOTE(PATHTO_R(Data\Audio\DialTone.wss)), objNull, false, (_unit ModelToWorld [0,0.2,2]), 15,1,2.5]; +}; +ctrlSetText [1400,format["Calling%1",_arr select (_i - 4)]]; + +private "_explosive"; +_explosive = [_code] call FUNC(getSpeedDialExplosive); + +if (_i >= (count _arr + 2)) then { + [_this select 1] call CALLSTACK(cba_fnc_removePerFrameHandler); + if ((count _explosive) > 0) then { + [_unit, -1, [_explosive select 0, _explosive select 2]] call FUNC(detonateExplosive); + }; + _unit setVariable [QGVAR(Dialing), false, true]; + if (_unit == ace_player) then { + ctrlSetText [1400,"Call Ended!"]; + }; +}; +if (_i == (count _arr)) then { + if ((count _explosive) > 0) then { + playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_explosive select 0),3.16228,1,75]; + }; +}; +(_this select 0) set [1, _i + 1]; diff --git a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf new file mode 100644 index 0000000000..d6d5b57b3b --- /dev/null +++ b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf @@ -0,0 +1,27 @@ +/* + * Author: Garth 'L-H' de Wet + * Gets the explosive from the speed dial entry. + * + * Arguments: + * 0: Speed dial entry + * + * Return Value: + * Associated explosive (or ObjNull) + * + * Example: + * ["2113"] call ace_explosives_fnc_getSpeedDialExplosive; + * + * Public: Yes + */ +#include "script_component.hpp" +EXPLODE_1_PVT(_this,_code); +private ["_explosive"]; +if (isNil QGVAR(CellphoneIEDs)) exitWith {[]}; +_explosive = []; +{ + if ((_x select 1) == _code) exitWith { + _explosive = _x; + }; + false +} count GVAR(CellphoneIEDs); +_explosive diff --git a/addons/explosives/functions/fnc_openPlaceUI.sqf b/addons/explosives/functions/fnc_openPlaceUI.sqf index 1bb78248d2..6eb2d478bf 100644 --- a/addons/explosives/functions/fnc_openPlaceUI.sqf +++ b/addons/explosives/functions/fnc_openPlaceUI.sqf @@ -51,8 +51,5 @@ _actions = [localize "STR_ACE_Explosives_PlaceMenu", localize "STR_ACE_Explosive }, { call EFUNC(interaction,hideMenu); - if !(profileNamespace getVariable [EGVAR(interaction,AutoCloseMenu), false]) then { - "ACE_Explosives" call EFUNC(interaction,openMenuSelf); - }; } ] call EFUNC(interaction,openSelectMenu); diff --git a/addons/explosives/functions/fnc_openTransmitterUI.sqf b/addons/explosives/functions/fnc_openTransmitterUI.sqf index b87673c214..f90636474e 100644 --- a/addons/explosives/functions/fnc_openTransmitterUI.sqf +++ b/addons/explosives/functions/fnc_openTransmitterUI.sqf @@ -43,9 +43,6 @@ if (count _detonators == 0) then { }, { call EFUNC(interaction,hideMenu); - if !(profileNamespace getVariable [QUOTE(EGVAR(interaction,AutoCloseMenu)), false]) then { - "ACE_Explosives" call EFUNC(interaction,openMenuSelf); - }; } ] call EFUNC(interaction,openSelectMenu); }; diff --git a/addons/explosives/functions/fnc_place_Approve.sqf b/addons/explosives/functions/fnc_place_Approve.sqf index 97528cb8f6..77cfbb92a1 100644 --- a/addons/explosives/functions/fnc_place_Approve.sqf +++ b/addons/explosives/functions/fnc_place_Approve.sqf @@ -28,79 +28,78 @@ _player = ACE_player; [_player, "DefaultAction", _player getVariable [QGVAR(Place), -1]] call EFUNC(Common,removeActionEventHandler); [_player, "MenuBack", _player getVariable [QGVAR(Cancel), -1]] call EFUNC(Common,removeActionEventHandler); call EFUNC(interaction,hideMouseHint); -if ((_setup getVariable [QGVAR(Class), ""]) != "") then { - _dir = (getDir _setup); - if (_dir > 180) then { - _dir = _dir - 180; - } else { - _dir = 180 + _dir; - }; - _setup setVariable [QGVAR(Direction), _dir]; - _player setVariable [QGVAR(PlantingExplosive), true]; - _setup addEventHandler ["EpeContactStart", { - if (!((_this select 0) getVariable [QGVAR(Handled), false])) then { - private ["_player", "_pos", "_attachTo"]; +if ((_setup getVariable [QGVAR(Class), ""]) == "") exitWith { + deleteVehicle _setup; +}; +_dir = (getDir _setup); +if (_dir > 180) then { + _dir = _dir - 180; +} else { + _dir = 180 + _dir; +}; +_setup setVariable [QGVAR(Direction), _dir]; +_player setVariable [QGVAR(PlantingExplosive), true]; +_setup addEventHandler ["EpeContactStart", { + if (!((_this select 0) getVariable [QGVAR(Handled), false])) then { + private ["_player", "_pos", "_attachTo"]; + _player = ACE_player; + _player setVariable [QGVAR(PlantingExplosive), false]; + _pos = getPosATL (_this select 0); + (_this select 0) enableSimulationGlobal false; + if (surfaceIsWater _pos) then { + _pos = getPosASL (_this select 0); + (_this select 0) setPosASL _pos; + }else{ + (_this select 0) setPosATL _pos; + }; + (_this select 0) setVariable [QGVAR(Handled), true]; + _attachTo = objNull; + if (!isNull (_this select 1) && {(_this select 1) isKindOf "AllVehicles"}) then { + _attachTo = (_this select 1); + }; + [(_this select 0),_attachTo, _pos] spawn { // TODO: Change to scheduled delay execution + private ["_mag", "_setup", "_dir", "_player"]; + _setup = _this select 0; _player = ACE_player; - _pos = getPosATL (_this select 0); - (_this select 0) enableSimulationGlobal false; - if (surfaceIsWater _pos) then { - _pos = getPosASL (_this select 0); - (_this select 0) setPosASL _pos; - }else{ - (_this select 0) setPosATL _pos; - }; - (_this select 0) setVariable [QGVAR(Handled), true]; - _player setVariable [QGVAR(PlantingExplosive), false]; - _attachTo = objNull; - if (!isNull (_this select 1) && {(_this select 1) isKindOf "AllVehicles"}) then { - _attachTo = (_this select 1); - }; - [(_this select 0),_attachTo, _pos] spawn { // TODO: Change to scheduled delay execution - private ["_mag", "_setup", "_dir", "_player"]; - _setup = _this select 0; - _player = ACE_player; - _mag = _setup getVariable [QGVAR(Class), ""]; - _dir = _setup getVariable [QGVAR(Direction), 0]; + _mag = _setup getVariable [QGVAR(Class), ""]; + _dir = _setup getVariable [QGVAR(Direction), 0]; - sleep getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime"); - _explosive = [_player, _this select 2, _dir, _mag, _setup getVariable QGVAR(Trigger), - [_setup getVariable QGVAR(Timer)], isNull (_this select 1)] call FUNC(placeExplosive); - deleteVehicle _setup; - if (!isNull(_explosive)) then { - _player RemoveMagazine _mag; - if (!isNull (_this select 1)) then { - _explosive attachTo [(_this select 1)]; - _dir = _dir - (getDir (_this select 1)); - [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); - }; + sleep getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime"); + _explosive = [_player, _this select 2, _dir, _mag, _setup getVariable QGVAR(Trigger), + [_setup getVariable QGVAR(Timer)], isNull (_this select 1)] call FUNC(placeExplosive); + deleteVehicle _setup; + if (!isNull(_explosive)) then { + _player RemoveMagazine _mag; + if (!isNull (_this select 1)) then { + _explosive attachTo [(_this select 1)]; + _dir = _dir - (getDir (_this select 1)); + [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); }; }; }; - }]; - _setup enableSimulationGlobal true; - _player playActionNow "MedicOther"; - [_setup] spawn { // TODO: Change to scheduled delay execution - private ["_setup", "_player"]; - _setup = _this select 0; - _player = ACE_player; - sleep 5; + }; +}]; +_setup enableSimulationGlobal true; +_player playActionNow "MedicOther"; +[_setup] spawn { // TODO: Change to scheduled delay execution + private ["_setup", "_player"]; + _setup = _this select 0; + _player = ACE_player; + sleep 5; + _player setVariable [QGVAR(PlantingExplosive), false]; + if (!isNull _setup) then { + private ["_mag", "_dir", "_delayTime"]; + _mag = _setup getVariable [QGVAR(Class), ""]; + _dir = _setup getVariable [QGVAR(Direction), 0]; + _delayTime = (getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime")) - 5; + if (_delayTime > 0) then { + sleep _delayTime; + }; if (!isNull _setup) then { - private ["_mag", "_dir", "_delayTime"]; - _mag = _setup getVariable [QGVAR(Class), ""]; - _dir = _setup getVariable [QGVAR(Direction), 0]; - _delayTime = (getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime")) - 5; - if (_delayTime > 0) then { - sleep _delayTime; - }; - if (!isNull _setup) then { - [_player, GetPosATL _setup, _dir, _mag, _setup getVariable QGVAR(Trigger), - [_setup getVariable QGVAR(Timer)], true] call FUNC(placeExplosive); - deleteVehicle _setup; - _player RemoveMagazine _mag; - _player setVariable [QGVAR(PlantingExplosive), false]; - }; + [_player, GetPosATL _setup, _dir, _mag, _setup getVariable QGVAR(Trigger), + [_setup getVariable QGVAR(Timer)], true] call FUNC(placeExplosive); + deleteVehicle _setup; + _player RemoveMagazine _mag; }; }; -}else{ - deleteVehicle _setup; }; diff --git a/addons/explosives/functions/fnc_removeFromSpeedDial.sqf b/addons/explosives/functions/fnc_removeFromSpeedDial.sqf new file mode 100644 index 0000000000..c0a467e6f1 --- /dev/null +++ b/addons/explosives/functions/fnc_removeFromSpeedDial.sqf @@ -0,0 +1,26 @@ +/* + * Author: Garth 'L-H' de Wet + * Removes the specified speed dial from unit's speed dial. + * + * Arguments: + * 0: Speed dial name + * + * Return Value: + * None + * + * Example: + * ["IED 1"] call ACE_explosives_fnc_removeFromSpeedDial; + * + * Public: Yes + */ +#include "script_component.hpp" +private "_speedDial"; +_speedDial = ace_player getVariable [QGVAR(SpeedDial), []]; +if (count _speedDial == 0) exitWith {}; +{ + if ((_x select 0) == (_this select 0)) exitWith { + _speedDial set [_foreachIndex, "x"]; + _speedDial = _speedDial - ["x"]; + ace_player setVariable [QGVAR(SpeedDial),_speedDial]; + }; +} foreach _speedDial; diff --git a/addons/explosives/functions/fnc_setSpeedDial.sqf b/addons/explosives/functions/fnc_setSpeedDial.sqf new file mode 100644 index 0000000000..adb2e6af03 --- /dev/null +++ b/addons/explosives/functions/fnc_setSpeedDial.sqf @@ -0,0 +1,26 @@ +/* + * Author: Garth 'L-H' de Wet + * Sets the speed dial for the UI. + * + * Arguments: + * 0: Whether to increase or decrease speed dial index + * + * Return Value: + * None + * + * Example: + * [true] call ACE_explosives_fnc_setSpeedDial; // increase + * [false] call ACE_explosives_fnc_setSpeedDial; // decrease + * + * Public: No + */ + #include "script_component.hpp" +private ["_speedDial", "_amount"]; +_speedDial = ace_player getVariable [QGVAR(SpeedDial), []]; +if (count _speedDial == 0) exitWith {}; +_amount = if((_this select 0))then{1}else{-1}; + +GVAR(CurrentSpeedDial) = (GVAR(CurrentSpeedDial) + _amount + count _speedDial) mod (count _speedDial); + +ctrlSetText [1400,(_speedDial select GVAR(CurrentSpeedDial)) select 1]; +ctrlSetText [1401,(_speedDial select GVAR(CurrentSpeedDial)) select 0]; diff --git a/addons/fcs/CfgVehicles.hpp b/addons/fcs/CfgVehicles.hpp index 4cc010f917..45f07ddbda 100644 --- a/addons/fcs/CfgVehicles.hpp +++ b/addons/fcs/CfgVehicles.hpp @@ -28,7 +28,7 @@ class CfgVehicles { displayName = $STR_ACE_FCS_ResetFCS; enableInside = 1; condition = QUOTE(call FUNC(canResetFCS)); - statement = QUOTE([ARR_2(_vehicle,[_player] call DEFUNC(common,getTurretIndex))] call DFUNC(reset);); + statement = QUOTE([ARR_2(vehicle _player,[_player] call DEFUNC(common,getTurretIndex))] call DFUNC(reset);); showDisabled = 0; priority = 1; icon = ""; @@ -42,7 +42,7 @@ class CfgVehicles { displayName = $STR_ACE_FCS_ResetFCS; enableInside = 1; condition = QUOTE(call FUNC(canResetFCS)); - statement = QUOTE([ARR_2(_vehicle,[_player] call DEFUNC(common,getTurretIndex))] call DFUNC(reset);); + statement = QUOTE([ARR_2(vehicle _player,[_player] call DEFUNC(common,getTurretIndex))] call DFUNC(reset);); showDisabled = 0; priority = 1; icon = ""; @@ -492,13 +492,13 @@ class CfgVehicles { };*/ }; - class I_Heli_light_03_base_F: Helicopter_Base_F { + class Heli_light_03_base_F; + class I_Heli_light_03_base_F: Heli_light_03_base_F { /*class Turrets: Turrets { class MainTurret: MainTurret {}; };*/ }; - - class I_Heli_light_03_F: I_Heli_light_03_base_F { + class I_Heli_light_03_F: Heli_light_03_base_F { /*class Turrets: Turrets { class MainTurret: MainTurret {}; };*/ diff --git a/addons/fcs/functions/fnc_firedEH.sqf b/addons/fcs/functions/fnc_firedEH.sqf index f17693d33e..67c7e1d301 100644 --- a/addons/fcs/functions/fnc_firedEH.sqf +++ b/addons/fcs/functions/fnc_firedEH.sqf @@ -12,7 +12,7 @@ #include "script_component.hpp" -private ["_vehicle", "_weapon", "_ammo", "_magazine", "_projectile"]; +private ["_vehicle", "_weapon", "_ammo", "_magazine", "_projectile","_velocityCorrection"]; _vehicle = _this select 0; _weapon = _this select 1; @@ -30,7 +30,7 @@ if !([_gunner] call EFUNC(common,isPlayer)) exitWith {}; private ["_FCSMagazines", "_FCSElevation", "_offset"]; -_FCSMagazines = _vehicle getVariable format ["%1_%2", QGVAR(Magazines), _turret]; +_FCSMagazines = _vehicle getVariable [(format ["%1_%2", QGVAR(Magazines), _turret]), []]; _FCSElevation = _vehicle getVariable format ["%1_%2", QGVAR(Elevation), _turret]; if !(_magazine in _FCSMagazines) exitWith {}; @@ -43,8 +43,12 @@ _offset = 0; }; } forEach _FCSMagazines; -[_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, 0] call EFUNC(common,changeProjectileDirection); +// Correct velocity for weapons that have initVelocity +// @todo: Take into account negative initVelocities +_velocityCorrection = (vectorMagnitude velocity _projectile) - + getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed"); +[_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, _velocityCorrection] call EFUNC(common,changeProjectileDirection); // Air burst missile // handle locally only diff --git a/addons/fcs/functions/fnc_keyDown.sqf b/addons/fcs/functions/fnc_keyDown.sqf index 24e4a7611d..7699b82a20 100644 --- a/addons/fcs/functions/fnc_keyDown.sqf +++ b/addons/fcs/functions/fnc_keyDown.sqf @@ -19,8 +19,7 @@ _turret = _this select 1; _distance = call FUNC(getRange); -if (GVAR(Enabled)) exitWith {}; -if !([] call FUNC(canUseFCS)) exitWith {}; +if !(!GVAR(enabled) && FUNC(canUseFCS)) exitWith {}; GVAR(Enabled) = true; GVAR(Time) = time; diff --git a/addons/fcs/functions/fnc_keyUp.sqf b/addons/fcs/functions/fnc_keyUp.sqf index b893262e88..1e5878f0b5 100644 --- a/addons/fcs/functions/fnc_keyUp.sqf +++ b/addons/fcs/functions/fnc_keyUp.sqf @@ -19,22 +19,18 @@ _turret = _this select 1; _turretConfig = [configFile >> "CfgVehicles" >> typeOf _vehicle, _turret] call EFUNC(common,getTurretConfigPath); -_distance = 0; -if (count _this > 2) then { - _distance = _this select 2; -} else { - _distance = call FUNC(getRange); - if (_distance == 0) then { - _distance = [ - getNumber (_turretConfig >> QGVAR(DistanceInterval)), - getNumber (_turretConfig >> QGVAR(MaxDistance)), - getNumber (_turretConfig >> QGVAR(MinDistance)) - ] call EFUNC(common,getTargetDistance); // maximum distance: 5000m, 5m precision - }; -}; +_distance = call FUNC(getRange); _magazines = _vehicle magazinesTurret _turret; +if (_distance == 0) then { + _distance = [ + getNumber (_turretConfig >> QGVAR(DistanceInterval)), + getNumber (_turretConfig >> QGVAR(MaxDistance)), + getNumber (_turretConfig >> QGVAR(MinDistance)) + ] call EFUNC(common,getTargetDistance); // maximum distance: 5000m, 5m precision +}; + private ["_weaponDirection", "_angleTarget"]; _weaponDirection = _vehicle weaponDirection (_vehicle currentWeaponTurret _turret); // @todo doesn't work for sub turrets @@ -49,6 +45,10 @@ if (_weaponDirection isEqualTo [0,0,0]) then { // dummy value for non main turr _angleTarget = asin (_weaponDirection select 2); +if (count _this > 2) then { + _distance = _this select 2; +}; + if (!(isNil QGVAR(backgroundCalculation)) and {!(scriptDone GVAR(backgroundCalculation))}) then { terminate GVAR(backgroundCalculation); }; diff --git a/addons/fcs/initKeybinds.sqf b/addons/fcs/initKeybinds.sqf index b9ca0a927a..c30e93dba0 100644 --- a/addons/fcs/initKeybinds.sqf +++ b/addons/fcs/initKeybinds.sqf @@ -1,74 +1,59 @@ // by commy2 -["ACE3", - localize "STR_ACE_FCS_LaseTarget", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !((!GVAR(enabled) && [] call FUNC(canUseFCS)) || [] call FUNC(canUseRangefinder)) exitWith {false}; +["ACE3", QGVAR(lazeTarget), localize "STR_ACE_FCS_LaseTarget", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !((!GVAR(enabled) && FUNC(canUseFCS)) || FUNC(canUseRangefinder)) exitWith {false}; - // Statement - [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex)] call FUNC(keyDown); - // Return false so it doesn't block the rest weapon action - false - }, - [15, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + if (GETGVAR(isDownStateKey1,false)) exitWith {false}; + GVAR(isDownStateKey1) = true; -["ACE3", - localize "STR_ACE_FCS_LaseTarget", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(GVAR(enabled) && [] call FUNC(canUseFCS)) exitWith {false}; + // Statement + [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex)] call FUNC(keyDown); + // Return false so it doesn't block the rest weapon action + false +}, +{ + // prevent holding down + GVAR(isDownStateKey1) = false; - // Statement - [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex)] call FUNC(keyUp); - false - }, - [15, [false, false, false]], - false, - "keyup" -] call cba_fnc_registerKeybind; + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !(GVAR(enabled) && FUNC(canUseFCS)) exitWith {false}; -["ACE3", - localize "STR_ACE_FCS_AdjustRangeUp", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([] call FUNC(canUseFCS)) exitWith {false}; + // Statement + [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex)] call FUNC(keyUp); + false +}, +[15, [false, false, false]], false] call cba_fnc_addKeybind; //Tab Key - // Statement - [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), 50] call FUNC(adjustRange); - true - }, - [201, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; +["ACE3", QGVAR(adjustRangeUp), localize "STR_ACE_FCS_AdjustRangeUp", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !(call FUNC(canUseRangefinder) || FUNC(canUseFCS)) exitWith {false}; -["ACE3", - localize "STR_ACE_FCS_AdjustRangeDown", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([] call FUNC(canUseFCS)) exitWith {false}; + // Statement + [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), 50] call FUNC(adjustRange); + true +}, +{false}, +[201, [false, false, false]], false] call cba_fnc_addKeybind; //PageUp Key - // Statement - [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -50] call FUNC(adjustRange); - true - }, - [209, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; +["ACE3", QGVAR(adjustRangDown), localize "STR_ACE_FCS_AdjustRangeDown", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !(call FUNC(canUseRangefinder) || FUNC(canUseFCS)) exitWith {false}; + + // Statement + [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -50] call FUNC(adjustRange); + true +}, +{false}, +[209, [false, false, false]], false] call cba_fnc_addKeybind; //PageDown Key diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index 4c7160bdb3..ee62dfdd66 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -17,17 +17,19 @@ #include "script_component.hpp" if (!hasInterface) exitWith {}; -["ACE3", localize "STR_ACE_Goggles_WipeGlasses", +["ACE3", QGVAR(wipeGlasses), localize "STR_ACE_Goggles_WipeGlasses", { - if (!(GETVAR(ace_player,ACE_isUnconscious,false))) exitWith { - call FUNC(clearGlasses); - true - }; - false -}, [20, true, true, false], false, "keydown"] call CALLSTACK(cba_fnc_registerKeybind); + if (!(GETVAR(ace_player,ACE_isUnconscious,false))) exitWith { + call FUNC(clearGlasses); + true + }; + false +}, +{false}, +[20, [true, true, false]], false] call cba_fnc_addKeybind; if isNil(QGVAR(UsePP)) then { - GVAR(UsePP) = true; + GVAR(UsePP) = true; }; GVAR(PostProcess) = ppEffectCreate ["ColorCorrections", 1995]; @@ -47,78 +49,78 @@ GVAR(RainActive) = false; GVAR(RainLastLevel) = 0; FUNC(CheckGlasses) = { - if (GVAR(Current) != (goggles ace_player)) then { - GVAR(Current) = (goggles ace_player); - ["GlassesChanged",[GVAR(Current)]] call EFUNC(common,localEvent); - }; + if (GVAR(Current) != (goggles ace_player)) then { + GVAR(Current) = (goggles ace_player); + ["GlassesChanged",[GVAR(Current)]] call EFUNC(common,localEvent); + }; }; player addEventHandler ["Explosion", { - if (alive ace_player) then { - call FUNC(ApplyDirtEffect); - if (GETBROKEN) exitWith {}; - if (((_this select 1) call FUNC(GetExplosionIndex)) < getNumber(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_Resistance")) exitWith {}; - if !([ace_player] call FUNC(isGogglesVisible)) exitWith {["GlassesCracked",[ace_player]] call EFUNC(common,localEvent);}; - _effects = GETGLASSES(ace_player); - _effects set [BROKEN, true]; - SETGLASSES(ace_player,_effects); - if (getText(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_OverlayCracked") != "" && {cameraOn == ace_player}) then { - if (call FUNC(ExternalCamera)) exitWith {}; - if (isNull(GLASSDISPLAY)) then { - 150 cutRsc["RscACE_Goggles", "PLAIN",1, false]; - }; - (GLASSDISPLAY displayCtrl 10650) ctrlSetText getText(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_OverlayCracked"); + if (alive ace_player) then { + call FUNC(ApplyDirtEffect); + if (GETBROKEN) exitWith {}; + if (((_this select 1) call FUNC(GetExplosionIndex)) < getNumber(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_Resistance")) exitWith {}; + if !([ace_player] call FUNC(isGogglesVisible)) exitWith {["GlassesCracked",[ace_player]] call EFUNC(common,localEvent);}; + _effects = GETGLASSES(ace_player); + _effects set [BROKEN, true]; + SETGLASSES(ace_player,_effects); + if (getText(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_OverlayCracked") != "" && {cameraOn == ace_player}) then { + if (call FUNC(ExternalCamera)) exitWith {}; + if (isNull(GLASSDISPLAY)) then { + 150 cutRsc["RscACE_Goggles", "PLAIN",1, false]; + }; + (GLASSDISPLAY displayCtrl 10650) ctrlSetText getText(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_OverlayCracked"); + }; + ["GlassesCracked",[ace_player]] call EFUNC(common,localEvent); }; - ["GlassesCracked",[ace_player]] call EFUNC(common,localEvent); - }; }]; player addEventHandler ["Killed",{ - GVAR(PostProcessEyes) ppEffectEnable false; - SETGLASSES(ace_player,GLASSESDEFAULT); - call FUNC(removeGlassesEffect); - GVAR(EffectsActive)=false; - ace_player setVariable ["ACE_EyesDamaged", false]; - if (GVAR(EyesDamageScript) != -1) then { - [GVAR(EyesDamageScript)] call CALLSTACK(cba_fnc_removePreFrameHandler); - }; - if (GVAR(DustHandler) != -1) then { - [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); - GVAR(DustHandler) = -1; - }; + GVAR(PostProcessEyes) ppEffectEnable false; + SETGLASSES(ace_player,GLASSESDEFAULT); + call FUNC(removeGlassesEffect); + GVAR(EffectsActive)=false; + ace_player setVariable ["ACE_EyesDamaged", false]; + if (GVAR(EyesDamageScript) != -1) then { + [GVAR(EyesDamageScript)] call CALLSTACK(cba_fnc_removePreFrameHandler); + }; + if (GVAR(DustHandler) != -1) then { + [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); + GVAR(DustHandler) = -1; + }; }]; player addEventHandler ["Fired",{[_this select 0, _this select 1] call FUNC(dustHandler);}]; player AddEventHandler ["Take",{call FUNC(checkGlasses);}]; player AddEventHandler ["Put", {call FUNC(checkGlasses);}]; ["GlassesChanged",{ - SETGLASSES(ace_player,GLASSESDEFAULT); + SETGLASSES(ace_player,GLASSESDEFAULT); - if (call FUNC(ExternalCamera)) exitWith {call FUNC(RemoveGlassesEffect)}; + if (call FUNC(ExternalCamera)) exitWith {call FUNC(RemoveGlassesEffect)}; - if ([ace_player] call FUNC(isGogglesVisible)) then { - [_this select 0] call FUNC(applyGlassesEffect); - } else { - call FUNC(removeGlassesEffect); - }; + if ([ace_player] call FUNC(isGogglesVisible)) then { + [_this select 0] call FUNC(applyGlassesEffect); + } else { + call FUNC(removeGlassesEffect); + }; }] call EFUNC(common,addEventHandler); ["GlassesCracked",{ - if (_this select 0 != ace_player) exitWith {}; - ace_player setVariable ["ACE_EyesDamaged", true]; - if (GVAR(EyesDamageScript) != -1) then { - [GVAR(EyesDamageScript)] call CALLSTACK(cba_fnc_removePreFrameHandler); - }; - GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [0.5,0.5,0.5,0.5],[1,1,1,0]]; - GVAR(PostProcessEyes) ppEffectCommit 0; - GVAR(PostProcessEyes) ppEffectEnable true; - GVAR(EyesDamageScript) = [{ - GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [1,1,1,1],[1,1,1,0]]; - GVAR(PostProcessEyes) ppEffectCommit 5; + if (_this select 0 != ace_player) exitWith {}; + ace_player setVariable ["ACE_EyesDamaged", true]; + if (GVAR(EyesDamageScript) != -1) then { + [GVAR(EyesDamageScript)] call CALLSTACK(cba_fnc_removePreFrameHandler); + }; + GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [0.5,0.5,0.5,0.5],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 0; + GVAR(PostProcessEyes) ppEffectEnable true; GVAR(EyesDamageScript) = [{ - GVAR(PostProcessEyes) ppEffectEnable false; - ace_player setVariable ["ACE_EyesDamaged", false]; - GVAR(EyesDamageScript) = -1; - }, [], 5, 1] call EFUNC(common,waitAndExecute); - }, [], 25, 5] call EFUNC(common,waitAndExecute); + GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [1,1,1,1],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 5; + GVAR(EyesDamageScript) = [{ + GVAR(PostProcessEyes) ppEffectEnable false; + ace_player setVariable ["ACE_EyesDamaged", false]; + GVAR(EyesDamageScript) = -1; + }, [], 5, 1] call EFUNC(common,waitAndExecute); + }, [], 25, 5] call EFUNC(common,waitAndExecute); }] call EFUNC(common,addEventHandler); call FUNC(checkGlasses); [FUNC(CheckGoggles), 1, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/grenades/CfgVehicles.hpp b/addons/grenades/CfgVehicles.hpp index d4ff039bf7..7cf2085193 100644 --- a/addons/grenades/CfgVehicles.hpp +++ b/addons/grenades/CfgVehicles.hpp @@ -1,8 +1,3 @@ -#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ - }; - class CfgVehicles { class NATO_Box_Base; class EAST_Box_Base; @@ -11,35 +6,35 @@ class CfgVehicles { class Box_NATO_Grenades_F: NATO_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_HandFlare_White,12) - MACRO_ADDITEM(ACE_HandFlare_Green,12) - MACRO_ADDITEM(ACE_M84,12) + MACRO_ADDITEM(ACE_HandFlare_White,12); + MACRO_ADDITEM(ACE_HandFlare_Green,12); + MACRO_ADDITEM(ACE_M84,12); }; }; class Box_East_Grenades_F: EAST_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_HandFlare_Yellow,12) - MACRO_ADDITEM(ACE_HandFlare_Red,12) - MACRO_ADDITEM(ACE_M84,12) + MACRO_ADDITEM(ACE_HandFlare_Yellow,12); + MACRO_ADDITEM(ACE_HandFlare_Red,12); + MACRO_ADDITEM(ACE_M84,12); }; }; class Box_IND_Grenades_F: IND_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_HandFlare_Yellow,12) - MACRO_ADDITEM(ACE_HandFlare_Green,12) - MACRO_ADDITEM(ACE_M84,12) + MACRO_ADDITEM(ACE_HandFlare_Yellow,12); + MACRO_ADDITEM(ACE_HandFlare_Green,12); + MACRO_ADDITEM(ACE_M84,12); }; }; class ACE_Box_Misc: Box_NATO_Support_F { class TransportItems { - MACRO_ADDITEM(ACE_HandFlare_White,12) - MACRO_ADDITEM(ACE_HandFlare_Red,12) - MACRO_ADDITEM(ACE_HandFlare_Green,12) - MACRO_ADDITEM(ACE_HandFlare_Yellow,12) - MACRO_ADDITEM(ACE_M84,12) + MACRO_ADDITEM(ACE_HandFlare_White,12); + MACRO_ADDITEM(ACE_HandFlare_Red,12); + MACRO_ADDITEM(ACE_HandFlare_Green,12); + MACRO_ADDITEM(ACE_HandFlare_Yellow,12); + MACRO_ADDITEM(ACE_M84,12); }; }; }; diff --git a/addons/grenades/XEH_postInit.sqf b/addons/grenades/XEH_postInit.sqf index 0b6bb16ffb..6229871679 100644 --- a/addons/grenades/XEH_postInit.sqf +++ b/addons/grenades/XEH_postInit.sqf @@ -10,19 +10,15 @@ GVAR(flashbangPPEffectCC) = ppEffectCreate ["ColorCorrections", 4265]; GVAR(flashbangPPEffectCC) ppEffectForceInNVG true; // Add keybinds -["ACE3", - localize "STR_ACE_Grenades_SwitchGrenadeMode", - { - // Conditions: canInteract - _exceptions = [QEGVAR(captives,isNotEscorting)]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if (!([ACE_player] call EFUNC(common,canUseWeapon))) exitWith {false}; +["ACE3", QGVAR(switchGrenadeMode), localize "STR_ACE_Grenades_SwitchGrenadeMode", +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotEscorting"]] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (!([ACE_player] call EFUNC(common,canUseWeapon))) exitWith {false}; - // Statement - [] call FUNC(nextMode); - }, - [9, [false, false, false]], //8 key - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [] call FUNC(nextMode); +}, +{false}, +[9, [false, false, false]], false] call cba_fnc_addKeybind; //8 Key diff --git a/addons/gui/CfgEventHandlers.hpp b/addons/gui/CfgEventHandlers.hpp deleted file mode 100644 index c9142e676b..0000000000 --- a/addons/gui/CfgEventHandlers.hpp +++ /dev/null @@ -1,11 +0,0 @@ -class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE( call compile preprocessFileLineNumbers QUOTE(QUOTE(PATHTOF(XEH_preInit.sqf))) ); - }; -}; - -class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE( call compile preprocessFileLineNumbers QUOTE(QUOTE(PATHTOF(XEH_postInit.sqf))) ); - }; -}; \ No newline at end of file diff --git a/addons/gui/GUI.hpp b/addons/gui/GUI.hpp deleted file mode 100644 index 71e8dc0090..0000000000 --- a/addons/gui/GUI.hpp +++ /dev/null @@ -1,2 +0,0 @@ -#include "UI\define.hpp" -#include "UI\RscTitles.hpp" diff --git a/addons/gui/README.md b/addons/gui/README.md deleted file mode 100644 index a6fe74f6c2..0000000000 --- a/addons/gui/README.md +++ /dev/null @@ -1,11 +0,0 @@ -ace_gui -======= - -to be scrapped. - - -## Maintainers - -The people responsible for merging changes to this component or answering potential questions. - -- [Glowbal](https://github.com/Glowbal) diff --git a/addons/gui/UI/RscTitles.hpp b/addons/gui/UI/RscTitles.hpp deleted file mode 100644 index 02e68e8d32..0000000000 --- a/addons/gui/UI/RscTitles.hpp +++ /dev/null @@ -1,179 +0,0 @@ - -#define RIGHT_SIDE (safezoneW + safezoneX) -#define LEFT_SIDE safezoneX -#define TOP_SIDE safeZoneY -#define BOTTOM_SIDE (safeZoneH + safezoneY) - -#define ICON_WIDTH (1.75 * (((safezoneW / safezoneH) min 1.2) / 40)) -#define X_POS_ICONS RIGHT_SIDE - (1.1 * ICON_WIDTH) -#define Y_POS_ICONS TOP_SIDE + (2.2 * ICON_WIDTH) -#define DIFFERENCE_ICONS (1.1 * ICON_WIDTH) - -class RscTitles { - class GVAR(iconsDisplay) { - duration = 1e+011; - idd = 1111; - movingenable = 0; - onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(iconsDisplay)), _this select 0)]); - class controlsBackground { - class icon_1: ACE_gui_backgroundBase { - text = ""; - colorText[] = {0.0,1.0,0.0,0.4}; - idc = 10501; - x = X_POS_ICONS; - y = Y_POS_ICONS + (0 * DIFFERENCE_ICONS); - w = ICON_WIDTH; - h = ICON_WIDTH; - }; - class icon_2: icon_1 { - idc = 10502; - y = Y_POS_ICONS + (1 * DIFFERENCE_ICONS); - }; - class icon_3: icon_1 { - idc = 10503; - y = Y_POS_ICONS + (2 * DIFFERENCE_ICONS); - }; - class icon_4: icon_1 { - idc = 10504; - y = Y_POS_ICONS + (3 * DIFFERENCE_ICONS); - }; - class icon_5: icon_1 { - idc = 10505; - y = Y_POS_ICONS + (4 * DIFFERENCE_ICONS); - }; - class icon_6: icon_1 { - idc = 10506; - y = Y_POS_ICONS + (5 * DIFFERENCE_ICONS); - }; - }; - }; - - class GVAR(RSC_PROGRESSBAR_LOADING) { - idd = -1; - onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(RSC_PROGRESSBAR_LOADING)), _this select 0)]); - fadein = 0; - fadeout = 0; - duration = 10e10; - class Controls { - class background: ACE_gui_backgroundBase { - idc = -1; - colorBackground[] = {0,0,0,1}; - colorText[] = {1, 1, 1, 1}; - x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "29 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "0.4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - text = "#(argb,8,8,3)color(0,0,0,0.4)"; - }; - - class Progress: ACE_gui_RscProgress { - idc = 6; - x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "29 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "0.4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - colorFrame[] = {0,0,0,0}; - colorBar[] = {0.27,0.5,0.31,0.6}; - texture = "#(argb,8,8,3)color(1,1,1,0.7)"; - }; - }; - }; - - - class GVAR(RSC_DISPLAY_MESSAGE) { - duration = 7; - idd = 86411; - movingenable = 0; - onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(RSC_DISPLAY_MESSAGE)), _this select 0)]); - fadein = 0; - class controlsBackground { - class header: ACE_gui_staticBase { - idc = 1; - type = CT_STATIC; - x = "safezoneX + (safezoneW / 10)"; - y = "safezoneY + (30 * (safeZoneH / 40))"; - w = "(safeZoneW / 10)"; - h = "(safeZoneH / 40)"; - style = ST_LEFT; - font = FontCSE; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - colorText[] = {0.85, 0.85, 0.85, 1.0}; - colorBackground[] = {0, 0, 0, 0.9}; - text = ""; - }; - class text: header { - idc = 2; - y = "safezoneY + (31 * (safeZoneH / 40))"; - w = "(safeZoneW / 10) * 1.3"; - colorText[] = {0.0, 0.0, 0.0, 1.0}; - colorBackground[] = {1, 1, 1, 0.9}; - text = ""; - }; - }; - }; - - class GVAR(RSC_DISPLAY_INFORMATION) { - duration = 15; - idd = 86412; - movingenable = 0; - onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(RSC_DISPLAY_INFORMATION)), _this select 0)]); - fadein = 0; - class controlsBackground { - class header: ACE_gui_staticBase { - idc = 1; - type = CT_STATIC; - x = "safezoneX + (safezoneW / 10)"; - y = "safezoneY + (6 * (safeZoneH / 40))"; - w = "(safeZoneW / 10)"; - h = "(safeZoneH / 40)"; - style = ST_LEFT; - font = FontCSE; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - colorText[] = {0.85, 0.85, 0.85, 1.0}; - colorBackground[] = {0, 0, 0, 0.9}; - text = ""; - }; - class text: header { - idc = 2; - y = "safezoneY + (7.1 * (safeZoneH / 40))"; - w = "(safeZoneW / 10) * 1.3"; - colorText[] = {0.0, 0.0, 0.0, 1.0}; - colorBackground[] = {1, 1, 1, 0.9}; - text = ""; - }; - class text2: text { - idc = 3; - y = "safezoneY + (8.2 * (safeZoneH / 40))"; - }; - class text3: text { - idc = 4; - y = "safezoneY + (9.3 * (safeZoneH / 40))"; - }; - class text4: text { - idc = 5; - y = "safezoneY + (10.4 * (safeZoneH / 40))"; - }; - class text5: text { - idc = 6; - y = "safezoneY + (11.5 * (safeZoneH / 40))"; - }; - - - class icon: ACE_gui_backgroundBase { - type = CT_STATIC; - idc = 10; - style = ST_PICTURE; - colorBackground[] = {0,0,0,1}; - colorText[] = {1, 1, 1, 1}; - font = FontCSE; - text = ""; - sizeEx = 0.032; - x = "safezoneX + (safezoneW / 10)"; - y = "safezoneY + (4 * (safeZoneH / 40))"; - w = "(safeZoneH / 40)*2"; - h = "(safeZoneH / 40)*2"; - }; - }; - }; - -}; \ No newline at end of file diff --git a/addons/gui/XEH_postInit.sqf b/addons/gui/XEH_postInit.sqf deleted file mode 100644 index 4172145202..0000000000 --- a/addons/gui/XEH_postInit.sqf +++ /dev/null @@ -1,11 +0,0 @@ -/** - * XEH_postInit.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" diff --git a/addons/gui/XEH_preInit.sqf b/addons/gui/XEH_preInit.sqf deleted file mode 100644 index b5cc064d18..0000000000 --- a/addons/gui/XEH_preInit.sqf +++ /dev/null @@ -1,25 +0,0 @@ -/** - * XEH_preInit.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -ADDON = false; - -PREP(loadingBar); -PREP(displayInformation); -PREP(displayMessage); -PREP(blurScreen); -PREP(displayIcon); -PREP(sendHintTo); -PREP(sendMessageTo); -PREP(sendDisplayInformationTo); -PREP(sendDisplayMessageTo); - -ADDON = true; diff --git a/addons/gui/config.cpp b/addons/gui/config.cpp deleted file mode 100644 index 2f7666be13..0000000000 --- a/addons/gui/config.cpp +++ /dev/null @@ -1,27 +0,0 @@ - -#include "script_component.hpp" - -class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ACE_main"}; - version = VERSION; - author[] = {$STR_ACE_Common_ACETeam}; - authorUrl = "http://csemod.com"; // TODO website link? - }; -}; -class CfgAddons { - class PreloadAddons { - class ADDON { - list[] = {QUOTE(ADDON)}; - }; - }; -}; - -#include "CfgEventHandlers.hpp" - -// TODO Port over the UI defines -#include "GUI.hpp" -#include "empty.hpp" diff --git a/addons/gui/data/buttonDisabled.paa b/addons/gui/data/buttonDisabled.paa deleted file mode 100644 index 2c2a10856b..0000000000 Binary files a/addons/gui/data/buttonDisabled.paa and /dev/null differ diff --git a/addons/gui/data/buttonDisabled_gradient.paa b/addons/gui/data/buttonDisabled_gradient.paa deleted file mode 100644 index 43b1b8d100..0000000000 Binary files a/addons/gui/data/buttonDisabled_gradient.paa and /dev/null differ diff --git a/addons/gui/data/buttonNormal.paa b/addons/gui/data/buttonNormal.paa deleted file mode 100644 index 84936d8356..0000000000 Binary files a/addons/gui/data/buttonNormal.paa and /dev/null differ diff --git a/addons/gui/data/buttonNormal_gradient.paa b/addons/gui/data/buttonNormal_gradient.paa deleted file mode 100644 index 2210f98741..0000000000 Binary files a/addons/gui/data/buttonNormal_gradient.paa and /dev/null differ diff --git a/addons/gui/data/buttonNormal_gradient2.paa b/addons/gui/data/buttonNormal_gradient2.paa deleted file mode 100644 index cabe6c7fed..0000000000 Binary files a/addons/gui/data/buttonNormal_gradient2.paa and /dev/null differ diff --git a/addons/gui/data/buttonNormal_gradient3.paa b/addons/gui/data/buttonNormal_gradient3.paa deleted file mode 100644 index 7da9fbcf8a..0000000000 Binary files a/addons/gui/data/buttonNormal_gradient3.paa and /dev/null differ diff --git a/addons/gui/data/buttonNormal_gradient_top.paa b/addons/gui/data/buttonNormal_gradient_top.paa deleted file mode 100644 index 904e1a62f7..0000000000 Binary files a/addons/gui/data/buttonNormal_gradient_top.paa and /dev/null differ diff --git a/addons/gui/data/buttonNormal_gradient_top_w.paa b/addons/gui/data/buttonNormal_gradient_top_w.paa deleted file mode 100644 index 23dd190afc..0000000000 Binary files a/addons/gui/data/buttonNormal_gradient_top_w.paa and /dev/null differ diff --git a/addons/gui/empty.hpp b/addons/gui/empty.hpp deleted file mode 100644 index 698784e2c6..0000000000 --- a/addons/gui/empty.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "\z\ace\addons\gui\UI\define.hpp" - -class ACE_common_empty_screen { - idd = 679123; - onLoad = "uiNamespace setVariable [""ACE_common_empty_screen"", _this select 0]"; - onUnload = "if (missionNamespace getvariable [""ACE_common_DISABLE_USER_INPUT_SCREEN"", false)]) then { createDialog ""ACE_common_empty_screen""; }"; - class controlsBackground { - class background : ACE_gui_backgroundBase { - idc = 1; - x = safezoneX; - y = safezoneY; - w = safezoneW; - h = safezoneH; - text = ""; - moving = 0; - }; - }; - - class controls { - }; -}; diff --git a/addons/gui/functions/fnc_displayIcon.sqf b/addons/gui/functions/fnc_displayIcon.sqf deleted file mode 100644 index 98895c6346..0000000000 --- a/addons/gui/functions/fnc_displayIcon.sqf +++ /dev/null @@ -1,79 +0,0 @@ -/** - * fn_gui_displayIcon.sqf - * @Descr: - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: true - * - * @Example ["myID", true, QUOTE(PATHTOF(data\icon_group.paa)), [1,1,1,1]] call ace_gui_fnc_displayIcon; - */ - -#include "script_component.hpp" - -#define MAX_N_ICONS 6 - -private ["_iconId", "_show", "_icon", "_spot", "_idc", "_display","_next_IDC", "_nextText"]; -_iconId = _this select 0; -_show = _this select 1; -_icon = _this select 2; -_color = _this select 3; - -disableSerialization; -_list = missionNamespace getvariable [QGVAR(displayIconList),[]]; -_display = uiNamespace getvariable QGVAR(iconsDisplay); - -if (isNil "_display") then { - // Display the icons - 11401 cutRsc [QGVAR(iconsDisplay),"PLAIN"]; - _display = uiNamespace getvariable QGVAR(iconsDisplay); -}; - -if (_show) then { - if ({(_x select 0 == _iconId)} count _list == 0) then { - _list pushback [_iconId, _icon, _color]; - } else { - { - if (_x select 0 == _iconId) exitwith { - _list set [_foreachIndex, [_iconId, _icon, _color]]; - }; - }foreach _list; - }; - - missionNamespace setvariable [QGVAR(displayIconList), _list]; - - { - if (_x select 0 == _iconId) exitwith { - _idc = 10501 + _foreachIndex; - _ctrl = _display displayCtrl _idc; - _ctrl ctrlsetText _icon; - _ctrl ctrlSetTextColor _color; - }; - }foreach _list; -} else { - if ({(_x select 0 == _iconId)} count _list == 1) then { - _newList = []; - { - if (_x select 0 != _iconId) then { - _newList pushback _x; - }; - }foreach _list; - - missionNamespace setvariable [QGVAR(displayIconList), _newList]; - - for "_i" from 0 to (MAX_N_ICONS - 1) /* step +1 */ do { - _idc = 10501 + _i; - _ctrl = _display displayCtrl _idc; - _ctrl ctrlsetText ""; - _ctrl ctrlSetTextColor [1,1,1,1]; - }; - - { - _idc = 10501 + _foreachIndex; - _ctrl = _display displayCtrl _idc; - _ctrl ctrlsetText (_x select 1); - _ctrl ctrlSetTextColor (_x select 2); - }foreach _newList; - }; -}; diff --git a/addons/gui/functions/fnc_displayInformation.sqf b/addons/gui/functions/fnc_displayInformation.sqf deleted file mode 100644 index c4eb96984b..0000000000 --- a/addons/gui/functions/fnc_displayInformation.sqf +++ /dev/null @@ -1,67 +0,0 @@ -/** - * fn_gui_displayInformation.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -#define DISPLAY_LAYER 32547 - -private["_title", "_content","_type","_display","_headerCtrl","_contentCtrl","_contentAmountOfChars","_pos","_icon","_iconCtrl"]; -_title = [_this, 0, "",[""]] call BIS_fnc_Param; -_content = [_this, 1, [""],[[""]]] call BIS_fnc_Param; -_type = [_this, 2, 0, [0]] call BIS_fnc_Param; -_icon = [_this, 3, "",[""]] call BIS_fnc_Param; - -if (_title != "") then { - DISPLAY_LAYER cutRsc [QGVAR(RSC_DISPLAY_INFORMATION),"PLAIN"]; - - disableSerialization; - _display = uiNamespace getvariable QGVAR(RSC_DISPLAY_INFORMATION); - if (!isnil "_display") then { - _headerCtrl = _display displayCtrl 1; - _headerCtrl ctrlSetText _title; - _iconCtrl = _display displayCtrl 10; - _iconCtrl ctrlSetText _icon; - - _idc = 2; - { - _text = _x; - if (_text != "") then { - _contentCtrl = _display displayCtrl _idc; - _contentCtrl ctrlSetText _text; - - _contentAmountOfChars = count (toArray _text); - _pos = ctrlPosition _contentCtrl; - _pos set [2, _contentAmountOfChars * ((((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)/ 3.3) max (safeZoneW / 11)]; - _contentCtrl ctrlSetPosition _pos; - _contentCtrl ctrlCommit 0; - - - if (_type >0) then { - if (_type == 1) then { - _contentCtrl ctrlSetBackgroundColor [0.7,0.2,0.2,0.8]; - _contentCtrl ctrlSetTextColor [1,1,1,0.9]; - }; - }; - _idc = _idc + 1; - }; - }foreach _content; - - while {(_idc < 7)} do { - _contentCtrl = _display displayCtrl _idc; - _contentCtrl ctrlSetPosition [0,0,0,0]; - _contentCtrl ctrlCommit 0; - - _idc = _idc + 1; - }; - }; -} else { - - DISPLAY_LAYER cutText ["","PLAIN"]; -}; \ No newline at end of file diff --git a/addons/gui/functions/fnc_displayMessage.sqf b/addons/gui/functions/fnc_displayMessage.sqf deleted file mode 100644 index 3dceab2638..0000000000 --- a/addons/gui/functions/fnc_displayMessage.sqf +++ /dev/null @@ -1,45 +0,0 @@ -/** - * fn_gui_displayMessage.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -#define DISPLAY_LAYER 546 - -private["_title", "_content","_type","_display","_headerCtrl","_contentCtrl","_contentAmountOfChars","_pos"]; -_title = [_this, 0, "",[""]] call BIS_fnc_Param; -_content = [_this, 1, "",[""]] call BIS_fnc_Param; -_type = [_this, 2, 0, [0]] call BIS_fnc_Param; - -if (_title != "" && _content != "") then { - DISPLAY_LAYER cutRsc [QGVAR(RSC_DISPLAY_MESSAGE),"PLAIN"]; - - disableSerialization; - _display = uiNamespace getvariable QGVAR(RSC_DISPLAY_MESSAGE); - if (!isnil "_display") then { - _headerCtrl = _display displayCtrl 1; - _contentCtrl = _display displayCtrl 2; - - _headerCtrl ctrlSetText _title; - _contentCtrl ctrlSetText _content; - - _contentAmountOfChars = count (toArray _content); - _pos = ctrlPosition _contentCtrl; - _pos set [2, _contentAmountOfChars * ((((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)/ 3.3) max (safeZoneW / 11)]; - _contentCtrl ctrlSetPosition _pos; - _contentCtrl ctrlCommit 0; - - if (_type >0) then { - if (_type == 1) then { - _contentCtrl ctrlSetBackgroundColor [0.7,0.2,0.2,0.8]; - _contentCtrl ctrlSetTextColor [1,1,1,0.9]; - }; - }; - }; -}; \ No newline at end of file diff --git a/addons/gui/functions/fnc_loadingbar.sqf b/addons/gui/functions/fnc_loadingbar.sqf deleted file mode 100644 index 4aba751235..0000000000 --- a/addons/gui/functions/fnc_loadingbar.sqf +++ /dev/null @@ -1,64 +0,0 @@ -/** - * fn_gui_loadingbar.sqf - * @Descr: Displays a loading bar and halts script until loading bar has finished - * @Author: Glowbal - * - * @Arguments: [timeToWait NUMBER, condition CODE (Optional), onSuccess CODE (Optional), onFailure CODE (Optional), arguments ARRAY (Optional)] - * @Return: BOOl Returns true if loading bar has fully finished. Otherwise false - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private ["_timeToWait","_cond","_onfailure","_onSuccess","_args"]; -_timeToWait = _this select 0; -_cond = [_this, 1, {true}, [{true}]] call BIS_fnc_Param; -_onSuccess = [_this, 2, {}, [{}]] call BIS_fnc_Param; -_onfailure = [_this, 3, {}, [{}]] call BIS_fnc_Param; -_args = [_this, 4, [], [[]]] call BIS_fnc_Param; - - -if (_timeToWait > 0) exitwith { - GVAR(LOADING_BAR_STATUS) = 0; - disableSerialization; - 1534 cutRsc [QGVAR(RSC_PROGRESSBAR_LOADING),"plain"]; - [{ - private ["_args","_timeToWait","_start","_cond","_onSuccess","_onfailure","_params"]; - _args = _this select 0; - - _start = _args select 0; - _timeToWait = _args select 1; - _cond = _args select 2; - _onSuccess = _args select 3; - _onfailure = _args select 4; - _params = _args select 5; - - if !(_params call _cond) exitwith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - 1534 cutText ["","plain"]; - _params call _onfailure; - }; - - if (GVAR(LOADING_BAR_STATUS) >= 1) exitwith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - 1534 cutText ["","plain"]; - _params call _onSuccess; - }; - private "_dialog"; - disableSerialization; - _dialog = uiNamespace getvariable QGVAR(RSC_PROGRESSBAR_LOADING); - - GVAR(LOADING_BAR_STATUS) = (diag_tickTime - _start) / _timeToWait; - (_dialog displayCtrl 6) progressSetPosition GVAR(LOADING_BAR_STATUS); - - }, 0, [diag_tickTime, _timeToWait, _cond, _onSuccess, _onfailure, _args]] call CBA_fnc_addPerFrameHandler; - true; -}; - -if (_args call _cond) exitwith { - _args call _onSuccess; - true; -}; - -_args call _onfailure; -false; \ No newline at end of file diff --git a/addons/gui/functions/fnc_sendHintTo.sqf b/addons/gui/functions/fnc_sendHintTo.sqf deleted file mode 100644 index 0454cc5691..0000000000 --- a/addons/gui/functions/fnc_sendHintTo.sqf +++ /dev/null @@ -1,26 +0,0 @@ -/** - * fn_sendHintTo.sqf - * @Descr: Sends a hint to player unit across network - * @Author: Glowbal - * - * @Arguments: [reciever OBJECT, message STRING] - * @Return: void - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private ["_reciever","_message"]; -_reciever = _this select 0; -_message = _this select 1; - -if (isPlayer _reciever) then { - if (!local _reciever) then { - [_this, QUOTE(FUNC(sendHintTo)), _reciever, false] call EFUNC(common,execRemoteFnc); - } else { - if (isLocalized _message) then { - _message = localize _message; - }; - hintsilent format ["%1",_message]; - }; -}; \ No newline at end of file diff --git a/addons/gui/functions/fnc_sendMessageTo.sqf b/addons/gui/functions/fnc_sendMessageTo.sqf deleted file mode 100644 index a4e0e4ccd5..0000000000 --- a/addons/gui/functions/fnc_sendMessageTo.sqf +++ /dev/null @@ -1,31 +0,0 @@ -/** - * fn_sendMessageTo.sqf - * @Descr: Sends a chat message to player unit across the network - * @Author: Glowbal - * - * @Arguments: [reciever OBJECT, message STRING] - * @Return: void - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private ["_reciever","_message"]; -_reciever = _this select 0; -_message = _this select 1; - - -if (isPlayer _reciever) then { - if (!local _reciever) then { - [_this, QUOTE(FUNC(sendMessageTo)), _reciever, false] call EFUNC(common,execRemoteFnc); - } else { - if (isnil QGVAR(LOGIC_OBJECT)) exitwith { - // need to create an object instead - }; - - if (isLocalized _message) then { - _message = localize _message; - }; - GVAR(LOGIC_OBJECT) globalChat format ["%1",_message]; - }; -}; diff --git a/addons/gui/functions/script_component.hpp b/addons/gui/functions/script_component.hpp deleted file mode 100644 index e9276928ad..0000000000 --- a/addons/gui/functions/script_component.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#define COMPONENT GUI -#include "\z\ace\addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_GUI - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_GUI - #define DEBUG_SETTINGS DEBUG_SETTINGS_GUI -#endif - -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/gui/script_component.hpp b/addons/gui/script_component.hpp deleted file mode 100644 index e9276928ad..0000000000 --- a/addons/gui/script_component.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#define COMPONENT GUI -#include "\z\ace\addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_GUI - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_GUI - #define DEBUG_SETTINGS DEBUG_SETTINGS_GUI -#endif - -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/gui/stringtable.xml b/addons/gui/stringtable.xml deleted file mode 100644 index 6a7807c925..0000000000 --- a/addons/gui/stringtable.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/addons/hearing/CfgAmmo.hpp b/addons/hearing/CfgAmmo.hpp index dea7901434..ddc2bf3297 100644 --- a/addons/hearing/CfgAmmo.hpp +++ b/addons/hearing/CfgAmmo.hpp @@ -4,4 +4,4 @@ class CfgAmmo { class B_127x108_Ball: BulletBase { audibleFire = 15; }; -}; \ No newline at end of file +}; diff --git a/addons/hearing/CfgEventHandlers.hpp b/addons/hearing/CfgEventHandlers.hpp index 9f0acc6c7c..94b1ab0703 100644 --- a/addons/hearing/CfgEventHandlers.hpp +++ b/addons/hearing/CfgEventHandlers.hpp @@ -22,7 +22,7 @@ class Extended_Init_EventHandlers { class Extended_FiredNear_EventHandlers { class CAManBase { class GVAR(FiredNear) { - clientFiredNear = QUOTE( if (_this select 0 == ACE_player) then {_this call FUNC(firedNear)}; ); + clientFiredNear = QUOTE( if (GVAR(enableCombatDeafness) && {_this select 0 == ACE_player}) then {_this call FUNC(firedNear)}; ); }; }; }; @@ -30,7 +30,7 @@ class Extended_FiredNear_EventHandlers { class Extended_Explosion_EventHandlers { class CAManBase { class GVAR(ExplosionNear) { - clientExplosion = QUOTE( if (_this select 0 == ACE_player) then {_this call FUNC(explosionNear)}; ); + clientExplosion = QUOTE( if (GVAR(enableCombatDeafness) && {_this select 0 == ACE_player}) then {_this call FUNC(explosionNear)}; ); }; }; -}; \ No newline at end of file +}; diff --git a/addons/hearing/CfgSounds.hpp b/addons/hearing/CfgSounds.hpp index 17436088c3..ac64f42c4e 100644 --- a/addons/hearing/CfgSounds.hpp +++ b/addons/hearing/CfgSounds.hpp @@ -11,4 +11,4 @@ class CfgSounds { sound[] = {QUOTE(PATHTOF(sounds\ACE_earringing_heavy.wav)),8,1.7}; titles[] = {}; }; -}; \ No newline at end of file +}; diff --git a/addons/hearing/CfgVehicles.hpp b/addons/hearing/CfgVehicles.hpp index 11eb55ef7f..c4ea1f2349 100644 --- a/addons/hearing/CfgVehicles.hpp +++ b/addons/hearing/CfgVehicles.hpp @@ -1,17 +1,11 @@ - -#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ -}; - class CfgVehicles { class Man; class CAManBase: Man { class ACE_SelfActions { class ACE_Equipment { class ACE_PutInEarplugs { - displayName = "$STR_ACE_Hearing_Earbuds_On"; - condition = QUOTE( !([_player] call FUNC(hasEarPlugsIn)) && {'ACE_EarBuds' in items _player} ); + displayName = "$STR_ACE_Hearing_EarPlugs_On"; + condition = QUOTE( !([_player] call FUNC(hasEarPlugsIn)) && {'ACE_EarPlugs' in items _player} ); statement = QUOTE( [_player] call FUNC(putInEarPlugs) ); showDisabled = 0; priority = 2.5; @@ -20,7 +14,7 @@ class CfgVehicles { enableInside = 1; }; class ACE_RemoveEarplugs { - displayName = "$STR_ACE_Hearing_Earbuds_Off"; + displayName = "$STR_ACE_Hearing_EarPlugs_Off"; condition = QUOTE( [_player] call FUNC(hasEarPlugsIn) ); statement = QUOTE( [_player] call FUNC(removeEarPlugs) ); showDisabled = 0; @@ -41,61 +35,84 @@ class CfgVehicles { class Box_NATO_Support_F: NATO_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_EarBuds,12) + MACRO_ADDITEM(ACE_EarPlugs,12); }; }; class B_supplyCrate_F: ReammoBox_F { class TransportItems { - MACRO_ADDITEM(ACE_EarBuds,12) + MACRO_ADDITEM(ACE_EarPlugs,12); }; }; class Box_East_Support_F: EAST_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_EarBuds,12) + MACRO_ADDITEM(ACE_EarPlugs,12); }; }; class O_supplyCrate_F: B_supplyCrate_F { class TransportItems { - MACRO_ADDITEM(ACE_EarBuds,12) + MACRO_ADDITEM(ACE_EarPlugs,12); }; }; class Box_IND_Support_F: IND_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_EarBuds,12) + MACRO_ADDITEM(ACE_EarPlugs,12); }; }; class Box_FIA_Support_F: FIA_Box_Base_F { class TransportItems { - MACRO_ADDITEM(ACE_EarBuds,12) + MACRO_ADDITEM(ACE_EarPlugs,12); }; }; class I_supplyCrate_F: B_supplyCrate_F { class TransportItems { - MACRO_ADDITEM(ACE_EarBuds,12) + MACRO_ADDITEM(ACE_EarPlugs,12); }; }; class IG_supplyCrate_F: ReammoBox_F { class TransportItems { - MACRO_ADDITEM(ACE_EarBuds,12) + MACRO_ADDITEM(ACE_EarPlugs,12); }; }; class C_supplyCrate_F: ReammoBox_F { class TransportItems { - MACRO_ADDITEM(ACE_EarBuds,12) + MACRO_ADDITEM(ACE_EarPlugs,12); }; }; class ACE_Box_Misc: Box_NATO_Support_F { class TransportItems { - MACRO_ADDITEM(ACE_EarBuds,12) + MACRO_ADDITEM(ACE_EarPlugs,12); + }; + }; + + + class Module_F; + class ACE_ModuleHearing: Module_F { + author = "$STR_ACE_Common_ACETeam"; + category = "ACE"; + displayName = "Hearing"; + function = QFUNC(moduleHearing); + scope = 2; + isGlobal = 1; + icon = PATHTOF(UI\IconHearing_ca.paa); + class Arguments { + class EnableCombatDeafness { + displayName = "Enable combat deafness?"; + description = "Enable combat deafness?"; + typeName = "BOOL"; + class values { + class Yes { name = "Yes"; value = 1; default = 1; }; + class No { name = "No"; value = 0; }; + }; + }; }; }; }; diff --git a/addons/hearing/CfgWeapons.hpp b/addons/hearing/CfgWeapons.hpp index 15fa2097a3..e70cc62c25 100644 --- a/addons/hearing/CfgWeapons.hpp +++ b/addons/hearing/CfgWeapons.hpp @@ -2,9 +2,9 @@ class CfgWeapons { class ACE_ItemCore; class InventoryItem_Base_F; - class ACE_EarBuds: ACE_ItemCore { - displayName = "$STR_ACE_Hearing_Earbuds_Name"; - descriptionShort = "$STR_ACE_Hearing_Earbuds_Description"; + class ACE_EarPlugs: ACE_ItemCore { + displayName = "$STR_ACE_Hearing_EarPlugs_Name"; + descriptionShort = "$STR_ACE_Hearing_EarPlugs_Description"; model = PATHTOF(ACE_earplugs.p3d); picture = PATHTOF(UI\ACE_earplugs_x_ca.paa); scope = 2; @@ -12,4 +12,4 @@ class CfgWeapons { mass = 1; }; }; -}; \ No newline at end of file +}; diff --git a/addons/hearing/UI/IconHearing_ca.paa b/addons/hearing/UI/IconHearing_ca.paa new file mode 100644 index 0000000000..128f08f6f0 Binary files /dev/null and b/addons/hearing/UI/IconHearing_ca.paa differ diff --git a/addons/hearing/XEH_preInit.sqf b/addons/hearing/XEH_preInit.sqf index 95d317b4b1..0785a32aff 100644 --- a/addons/hearing/XEH_preInit.sqf +++ b/addons/hearing/XEH_preInit.sqf @@ -7,6 +7,7 @@ PREP(earRinging); PREP(explosionNear); PREP(firedNear); PREP(hasEarPlugsIn); +PREP(moduleHearing); PREP(putInEarPlugs); PREP(removeEarPlugs); PREP(updateVolume); diff --git a/addons/hearing/config.cpp b/addons/hearing/config.cpp index 4499e647f6..0616ffa0e1 100644 --- a/addons/hearing/config.cpp +++ b/addons/hearing/config.cpp @@ -3,7 +3,7 @@ class CfgPatches { class ADDON { units[] = {}; - weapons[] = {"ACE_EarBuds"}; + weapons[] = {"ACE_EarPlugs"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common", "ace_interaction"}; author[] = {"KoffeinFlummi", "CAA-Picard", "HopeJ", "commy2"}; @@ -23,10 +23,22 @@ class CfgPatches { #include "CfgAmmo.hpp" class ACE_Settings { + class GVAR(EnableCombatDeafness) { + value = 1; + typeName = "BOOL"; + }; + class GVAR(EarplugsVolume) { + value = 0.5; + typeName = "SCALAR"; + }; + class GVAR(UnconsciousnessVolume) { + value = 0.4; + typeName = "SCALAR"; + }; class GVAR(DisableEarRinging) { - default = 1; + value = 0; typeName = "BOOL"; isClientSetable = 1; displayName = "$STR_ACE_Hearing_DisableEarRinging"; }; -}; \ No newline at end of file +}; diff --git a/addons/hearing/functions/fnc_addEarPlugs.sqf b/addons/hearing/functions/fnc_addEarPlugs.sqf index 9253717c11..455de07fd9 100644 --- a/addons/hearing/functions/fnc_addEarPlugs.sqf +++ b/addons/hearing/functions/fnc_addEarPlugs.sqf @@ -1,13 +1,17 @@ /* * Author: commy2 - * * Called on unit initialization. Adds earplugs if the unit is equipped with either a really loud primary weapon or a rocket launcher. * - * Argument: - * 0: A Soldier (Object) + * Arguments: + * 0: A Soldier * - * Return value: - * Nothing + * Return Value: + * None + * + * Example: + * [guy] call ace_hearing_fnc_addEarPlugs + * + * Public: No */ #include "script_component.hpp" @@ -19,7 +23,7 @@ _unit = _this select 0; _launcher = secondaryWeapon _unit; if (_launcher != "") exitWith { - _unit addItem "ACE_EarBuds"; + _unit addItem "ACE_EarPlugs"; }; // otherwise add earplugs if the soldier has a big rifle @@ -32,5 +36,5 @@ if (isNil "_magazine") exitWith {}; _ammo = getText (configFile >> "CfgMagazines" >> _magazine >> "ammo"); if (getNumber (configFile >> "CfgAmmo" >> _ammo >> "audiblefire") > 8) then { - _unit addItem "ACE_EarBuds"; + _unit addItem "ACE_EarPlugs"; }; diff --git a/addons/hearing/functions/fnc_earRinging.sqf b/addons/hearing/functions/fnc_earRinging.sqf index 4581a6fdd9..2460e0fd5c 100644 --- a/addons/hearing/functions/fnc_earRinging.sqf +++ b/addons/hearing/functions/fnc_earRinging.sqf @@ -1,13 +1,18 @@ /* * Author: KoffeinFlummi, commy2 - * * Creates ear ringing effect with set strength. * * Arguments: - * 0: strength of ear ringing (Number between 0 and 1) + * 0: Unit (player) + * 1: strength of ear ringing (Number between 0 and 1) * * Return Value: - * none + * None + * + * Example: + * [clientExplosionEvent] call ace_hearing_fnc_earRinging + * + * Public: No */ #include "script_component.hpp" @@ -17,7 +22,7 @@ _unit = _this select 0; _strength = _this select 1; if (_unit getVariable ["ACE_hasEarPlugsin", false]) then { - _strength = _strength / 4; + _strength = _strength / 4; }; GVAR(newStrength) = GVAR(newStrength) max _strength; @@ -28,24 +33,24 @@ if (missionNamespace getVariable [QGVAR(isEarRingingPlaying), false]) exitWith { if (GVAR(DisableEarRinging)) exitWith {}; if (_strength > 0.75) exitWith { - playSound "ACE_EarRinging_Heavy"; - GVAR(isEarRingingPlaying) = true; - [ + playSound "ACE_EarRinging_Heavy"; + GVAR(isEarRingingPlaying) = true; + [ {GVAR(isEarRingingPlaying) = false;}, [], 7.0, 0.25 - ] call EFUNC(common,waitAndExecute); + ] call EFUNC(common,waitAndExecute); }; if (_strength > 0.5) exitWith { - playSound "ACE_EarRinging_Medium"; - GVAR(isEarRingingPlaying) = true; - [ + playSound "ACE_EarRinging_Medium"; + GVAR(isEarRingingPlaying) = true; + [ {GVAR(isEarRingingPlaying) = false;}, [], 5.0, 0.25 - ] call EFUNC(common,waitAndExecute); + ] call EFUNC(common,waitAndExecute); }; if (_strength > 0.2) exitWith { - playSound "ACE_EarRinging_Weak"; - GVAR(isEarRingingPlaying) = true; + playSound "ACE_EarRinging_Weak"; GVAR(isEarRingingPlaying) = true; - [ + GVAR(isEarRingingPlaying) = true; + [ {GVAR(isEarRingingPlaying) = false;}, [], 3.0, 0.25 - ] call EFUNC(common,waitAndExecute); + ] call EFUNC(common,waitAndExecute); }; diff --git a/addons/hearing/functions/fnc_explosionNear.sqf b/addons/hearing/functions/fnc_explosionNear.sqf index 8c7b477da0..b213a1304a 100644 --- a/addons/hearing/functions/fnc_explosionNear.sqf +++ b/addons/hearing/functions/fnc_explosionNear.sqf @@ -1,13 +1,18 @@ /* * Author: KoffeinFlummi, commy2 - * * Handles deafness due to explosions going off near the player. * * Arguments: - * -> Explosion Event Handler + * 0: vehicle - Object the event handler is assigned to (player) + * 1: damage - Damage inflicted to the object * * Return Value: - * none + * None + * + * Example: + * [clientExplosionEvent] call ace_hearing_fnc_explosionNear + * + * Public: No */ #include "script_component.hpp" @@ -19,7 +24,4 @@ _damage = _this select 1; _strength = (_damage * 2) min 1; if (_strength < 0.01) exitWith {}; -[_unit, _strength] spawn { - sleep 0.2; - _this call FUNC(earRinging); -}; +[{_this call FUNC(earRinging)}, [_unit, _strength], 0.2, 0] call EFUNC(common,waitAndExecute); diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index 10e8508617..c66361801e 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -1,13 +1,23 @@ /* * Author: KoffeinFlummi, commy2 - * * Handles deafness due to large-caliber weapons going off near the player. * * Arguments: - * -> FiredNear Event Handler + * 0: Unit - Object the event handler is assigned to + * 1: Firer: Object - Object which fires a weapon near the unit + * 2: Distance - Distance in meters between the unit and firer + * 3: weapon - Fired weapon + * 4: muzzle - Muzzle that was used + * 5: mod - Current mode of the fired weapon + * 6: ammo - Ammo used * * Return Value: - * none + * None + * + * Example: + * [clientFiredNearEvent] call ace_hearing_fnc_firedNear + * + * Public: No */ #include "script_component.hpp" @@ -25,17 +35,17 @@ if (_weapon in ["Throw", "Put"]) exitWith {}; if (_unit != vehicle _unit && {!([_unit] call EFUNC(common,isTurnedOut))}) exitWith {}; _silencer = switch (_weapon) do { - case (primaryWeapon _unit) : {primaryWeaponItems _unit select 0}; - case (secondaryWeapon _unit) : {secondaryWeaponItems _unit select 0}; - case (handgunWeapon _unit) : {handgunItems _unit select 0}; - default {""}; + case (primaryWeapon _firer) : {(primaryWeaponItems _firer) select 0}; + case (secondaryWeapon _firer) : {(secondaryWeaponItems _firer) select 0}; + case (handgunWeapon _firer) : {(handgunItems _firer) select 0}; + default {""}; }; _audibleFireCoef = 1; //_audibleFireTimeCoef = 1; if (_silencer != "") then { - _audibleFireCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFire"); - //_audibleFireTimeCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFireTime"); + _audibleFireCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFire"); + //_audibleFireTimeCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFireTime"); }; _audibleFire = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFire"); @@ -46,7 +56,4 @@ _strength = _loudness - (_loudness/50 * _distance); // linear drop off if (_strength < 0.01) exitWith {}; -[_unit, _strength] spawn { - sleep 0.2; - _this call FUNC(earRinging); -}; +[{_this call FUNC(earRinging)}, [_unit, _strength], 0.2, 0] call EFUNC(common,waitAndExecute); diff --git a/addons/hearing/functions/fnc_hasEarPlugsIn.sqf b/addons/hearing/functions/fnc_hasEarPlugsIn.sqf index 8fcfe1eeb1..58dc302888 100644 --- a/addons/hearing/functions/fnc_hasEarPlugsIn.sqf +++ b/addons/hearing/functions/fnc_hasEarPlugsIn.sqf @@ -1,18 +1,20 @@ /* * Author: commy2 - * * Check if the unit has earplugs put in. * - * Argument: - * A soldier (Object) + * Arguments: + * 0:Unit (player) * - * Return value: - * Boolean (Bool) + * Return Value: + * Have Earplugs in + * + * Example: + * [ace_player] call ace_hearing_fnc_hasEarPlugsIn + * + * Public: No */ #include "script_component.hpp" -private "_unit"; - -_unit = _this select 0; +PARAMS_1(_unit); _unit getVariable ["ACE_hasEarPlugsin", false] diff --git a/addons/hearing/functions/fnc_moduleHearing.sqf b/addons/hearing/functions/fnc_moduleHearing.sqf new file mode 100644 index 0000000000..78e79d971e --- /dev/null +++ b/addons/hearing/functions/fnc_moduleHearing.sqf @@ -0,0 +1,20 @@ +/* + * Author: CAA-Picard + * Initializes the Map module. + * + * Arguments: + * Whatever the module provides. (I dunno.) + * + * Return Value: + * None + */ +#include "script_component.hpp" + +_logic = _this select 0; +_activated = _this select 2; + +if !(_activated) exitWith {}; + +[_logic, QGVAR(enableCombatDeafness), "EnableCombatDeafness"] call EFUNC(common,readSettingFromModule); + +diag_log text "[ACE]: Interaction Module Initialized."; diff --git a/addons/hearing/functions/fnc_putInEarplugs.sqf b/addons/hearing/functions/fnc_putInEarplugs.sqf index 767ec9c698..b02a19d5bc 100644 --- a/addons/hearing/functions/fnc_putInEarplugs.sqf +++ b/addons/hearing/functions/fnc_putInEarplugs.sqf @@ -1,27 +1,28 @@ /* - * Author: Hope Johnson - * Edited by commy2 - * - * Puts in / takes out earplugs. + * Author: Hope Johnson and commy2 + * Puts in earplugs. * * Arguments: - * none + * 0:Unit (player) * * Return Value: - * none + * None + * + * Example: + * [ace_player] call ace_hearing_fnc_putInEarplugs + * + * Public: No */ #include "script_component.hpp" -private "_player"; +PARAMS_1(_player); -_player = _this select 0; - -// Buds in inventory, putting them in -_player removeItem "ACE_EarBuds"; +// Plugs in inventory, putting them in +_player removeItem "ACE_EarPlugs"; _player setVariable ["ACE_hasEarPlugsIn", true, true]; -[localize "STR_ACE_Hearing_Earbuds_Are_On"] call EFUNC(common,displayTextStructured); +[localize "STR_ACE_Hearing_EarPlugs_Are_On"] call EFUNC(common,displayTextStructured); -/*// No Ear Buds in inventory, telling user -[localize "STR_ACE_Hearing_NoBuds"] call EFUNC(common,displayTextStructured);*/ +/*// No Ear Plugs in inventory, telling user +[localize "STR_ACE_Hearing_NoPlugs"] call EFUNC(common,displayTextStructured);*/ diff --git a/addons/hearing/functions/fnc_removeEarplugs.sqf b/addons/hearing/functions/fnc_removeEarplugs.sqf index 9436807a46..e2d0b68d51 100644 --- a/addons/hearing/functions/fnc_removeEarplugs.sqf +++ b/addons/hearing/functions/fnc_removeEarplugs.sqf @@ -1,28 +1,29 @@ /* - * Author: Hope Johnson - * Edited by commy2 - * - * Puts in / takes out earplugs. + * Author: Hope Johnson and commy2 + * Takes out earplugs. * * Arguments: - * none + * 0:Unit (player) * * Return Value: - * none + * None + * + * Example: + * [ace_player] call ace_hearing_fnc_removeEarplugs + * + * Public: No */ #include "script_component.hpp" -private "_player"; +PARAMS_1(_player); -_player = _this select 0; - -if !(_player canAdd "ACE_EarBuds") exitWith { // inventory full - [localize "STR_ACE_Hearing_Inventory_Full"] call EFUNC(common,displayTextStructured); +if !(_player canAdd "ACE_EarPlugs") exitWith { // inventory full + [localize "STR_ACE_Hearing_Inventory_Full"] call EFUNC(common,displayTextStructured); }; -// Buds already in and removing them. -_player addItem "ACE_EarBuds"; +// Plugs already in and removing them. +_player addItem "ACE_EarPlugs"; _player setVariable ["ACE_hasEarPlugsIn", false, true]; -[localize "STR_ACE_Hearing_Earbuds_Are_Off"] call EFUNC(common,displayTextStructured); +[localize "STR_ACE_Hearing_EarPlugs_Are_Off"] call EFUNC(common,displayTextStructured); diff --git a/addons/hearing/functions/fnc_updateVolume.sqf b/addons/hearing/functions/fnc_updateVolume.sqf index 187d4ce116..634537922c 100644 --- a/addons/hearing/functions/fnc_updateVolume.sqf +++ b/addons/hearing/functions/fnc_updateVolume.sqf @@ -1,22 +1,39 @@ -// by commy2 and CAA-Picard +/* + * Author: commy2 and CAA-Picard + * Updates and applys the current deafness. Called every 0.1 sec from a PFEH. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_hearing_fnc_updateVolume + * + * Public: No + */ #include "script_component.hpp" #define STRENGHTODEAFNESS 3 #define MAXDEAFNESS 1.1 +// Exit if combat deafness is disabled +if !(GVAR(enableCombatDeafness)) exitWith {}; + // Check if new noises increase deafness if (GVAR(newStrength) * STRENGHTODEAFNESS > GVAR(currentDeafness)) then { - GVAR(currentDeafness) = GVAR(newStrength) * STRENGHTODEAFNESS min MAXDEAFNESS; + GVAR(currentDeafness) = GVAR(newStrength) * STRENGHTODEAFNESS min MAXDEAFNESS; }; GVAR(newStrength) = 0; // Recover rate is slower if deafness is severe _recoverRate = 0.01; if (GVAR(currentDeafness) > 0.7) then { - _recoverRate = 0.005; - if (GVAR(currentDeafness) > 0.9) then { - _recoverRate = 0.002; - }; + _recoverRate = 0.005; + if (GVAR(currentDeafness) > 0.9) then { + _recoverRate = 0.002; + }; }; // Deafness recovers with time @@ -27,19 +44,19 @@ _volume = (1 - GVAR(currentDeafness) max 0)^2 max 0.04; // Earplugs reduce hearing 50% if ([ACE_player] call FUNC(hasEarPlugsIn)) then { - _volume = _volume min 0.5; + _volume = _volume min GVAR(EarplugsVolume); }; // Reduce volume if player is unconscious if (ACE_player getVariable ["ACE_isUnconscious", false]) then { - _volume = _volume min 0.4; + _volume = _volume min GVAR(UnconsciousnessVolume); }; if (!(missionNameSpace getVariable [QGVAR(disableVolumeUpdate), false])) then { - 0.1 fadeSound _volume; - 0.1 fadeSpeech _volume; - ACE_player setVariable ["tf_globalVolume", _volume]; - ACE_player setVariable ["acre_sys_core_globalVolume", _volume]; + 0.1 fadeSound _volume; + 0.1 fadeSpeech _volume; + ACE_player setVariable ["tf_globalVolume", _volume]; + if (!isNil "acre_api_fnc_setGlobalVolume") then {[_volume] call acre_api_fnc_setGlobalVolume;}; }; //hintSilent format ["GVAR(currentDeafness), _Volume = %1, %2", GVAR(currentDeafness), _volume]; diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 385bf35936..7f6110915a 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -2,7 +2,7 @@ - + Ear Plugs Ohrenstöpsel Tapones para los oídos @@ -14,8 +14,8 @@ Protetor auricular Tappi auricolari - - Protective Ear Buds allow the wearer to be near loud weaponry without damage to his hearing. + + Protective Ear Plugs allow the wearer to be near loud weaponry without damage to his hearing. Schützende Ohrenstöpsel, die es dem Träger ermöglichen, sich in der Nähe lauter Waffen aufzuhalten. Los tapones para los oídos permiten al usuario operar armamento ruidoso sin sufrir pérdida de audición. Stopery do uszu umożliwiają użytkownikowi przebywać w pobliżu głośnej broni bez poniesienia konsekwencji jaką jest utrata słuchu. @@ -26,7 +26,7 @@ Protetor para ouvidos permitem que o usuário esteja próximo a ruídos sem danificar sua audição. Proteggono l'apparato uditivo, permettendo a chi li indossa di resistere ai suoni particolarmente forti senza alcun danno. - + Earplugs in Ohrenstöpsel drinnen Poner tapones @@ -38,7 +38,7 @@ Protetores colocados Indossa i tappi auricolari - + Earplugs out Ohrenstöpsel raus Quitar tapones @@ -50,7 +50,7 @@ Protetores retirados Levati i tappi auricolari - + Earplugs in Ohrenstöpsel drinnen Tapones puestos @@ -62,7 +62,7 @@ Protetores colocados Indossa i tappi auricolari - + Earplugs out Ohrenstöpsel raus Tapones quitados @@ -74,7 +74,7 @@ Protetores retirados Levati i tappi auricolari - + You have no ear plugs Keine Ohrenstöpsel im Inventar No tienes tapones para los oídos diff --git a/addons/interact_menu/CfgEventHandlers.hpp b/addons/interact_menu/CfgEventHandlers.hpp index ae9c93b32e..1301f022d3 100644 --- a/addons/interact_menu/CfgEventHandlers.hpp +++ b/addons/interact_menu/CfgEventHandlers.hpp @@ -13,7 +13,7 @@ class Extended_PostInit_EventHandlers { class Extended_InitPost_EventHandlers { class All { class GVAR(compileMenu) { - init = QUOTE(_this call FUNC(compileMenu)); + init = QUOTE(_this call FUNC(compileMenu);_this call FUNC(compileMenuSelfAction)); }; }; }; \ No newline at end of file diff --git a/addons/interact_menu/CursorMenus.hpp b/addons/interact_menu/CursorMenus.hpp new file mode 100644 index 0000000000..d13813b92e --- /dev/null +++ b/addons/interact_menu/CursorMenus.hpp @@ -0,0 +1,47 @@ +class GVAR(cursorMenu) { + idd = 91919; + movingEnable = false; + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(dlgCursorMenu)),_this select 0)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(cursorMenuOpened)),true)]); + onUnload = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(cursorMenuOpened)),false)]); + objects[] = {}; + /*class controlsBackground { + class Background { + idc = 91920; + moving = 0; + font = "TahomaB"; + text = ""; + sizeEx = 0; + lineSpacing = 0; + access = 0; + type = 0; + style = 0; + size = 1; + colorBackground[] = {0, 0, 0, 0.5}; + colorText[] = {0, 0, 0, 0}; + x = "safezoneX"; + y = "safezoneY"; + w = "safezoneW"; + h = "safezoneH"; + }; + };*/ + class controls { + class Canvas { + idc = 91921; + moving = 0; + font = "TahomaB"; + text = ""; + sizeEx = 0; + lineSpacing = 0; + access = 0; + type = 0; + style = 0; + size = 1; + colorBackground[] = {0, 0, 0, 0}; + colorText[] = {0, 0, 0, 0}; + x = "safezoneX"; + y = "safezoneY"; + w = "safezoneW"; + h = "safezoneH"; + }; + }; +}; diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index a02bf4d558..b804ea970f 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -4,24 +4,14 @@ _fnc = { _this call FUNC(render); }; -// [_fnc, 0, []] call cba_fnc_addPerFrameHandler; addMissionEventHandler ["Draw3D", _fnc]; -_fnc = { - _this call FUNC(probe); -}; -[_fnc, 0.5, []] call cba_fnc_addPerFrameHandler; - -["ACE3", -"Interact Key", +["ACE3", QGVAR(InteractKey), "Interact Key", {_this call FUNC(keyDown)}, -[15, [false, false, false]], -false, -"keydown"] call cba_fnc_registerKeybind; - -["ACE3", -"Interact Key", {_this call FUNC(keyUp)}, -[15, [false, false, false]], -false, -"keyUp"] call cba_fnc_registerKeybind; \ No newline at end of file +[219, [false, false, false]], false] call cba_fnc_addKeybind; //Left Windows Key + +["ACE3", QGVAR(SelfInteractKey), "Self Actions Key", +{_this call FUNC(keyDownSelfAction)}, +{_this call FUNC(keyUpSelfAction)}, +[219, [false, true, false]], false] call cba_fnc_addKeybind; //Left Windows Key + Ctrl/Strg diff --git a/addons/interact_menu/XEH_preInit.sqf b/addons/interact_menu/XEH_preInit.sqf index 42795d6c75..487f1c017f 100644 --- a/addons/interact_menu/XEH_preInit.sqf +++ b/addons/interact_menu/XEH_preInit.sqf @@ -2,37 +2,35 @@ ADDON = false; -PREP(setToRender); +PREP(addAction); +PREP(addClassAction); +PREP(compileMenu); +PREP(compileMenuSelfAction); +PREP(collectActiveActionTree); +PREP(keyDown); +PREP(keyDownSelfAction); +PREP(keyUp); +PREP(keyUpSelfAction); +PREP(removeAction); +PREP(removeClassAction); PREP(render); PREP(renderIcon); +PREP(renderBaseMenu); PREP(renderMenu); -PREP(probe); -PREP(rotateVectLineGetMap); -PREP(rotateVectLine); -PREP(keyDown); -PREP(keyUp); -PREP(compileMenu); -PREP(addAction); -PREP(removeAction); - -GVAR(toRender) = []; GVAR(keyDown) = false; +GVAR(keyDownSelfAction) = false; GVAR(keyDownTime) = 0; GVAR(lastTime) = diag_tickTime; GVAR(rotationAngle) = 0; -GVAR(selectedAction) = {}; +GVAR(selectedAction) = [[],[]]; +GVAR(selectedStatement) = {}; GVAR(actionSelected) = false; GVAR(selectedTarget) = objNull; -GVAR(filter) = []; - GVAR(menuDepthPath) = []; -GVAR(renderDepth) = 0; -GVAR(lastRenderDepth) = 0; -GVAR(vecLineMap) = []; GVAR(lastPos) = [0,0,0]; GVAR(currentOptions) = []; @@ -41,13 +39,8 @@ GVAR(lastPath) = []; GVAR(expanded) = false; -GVAR(maxRenderDepth) = 0; GVAR(startHoverTime) = diag_tickTime; GVAR(iconCtrls) = []; GVAR(iconCount) = 0; -GVAR(objectActionsHash) = HASH_CREATE; - -GVAR(uidCounter) = 0; - ADDON = true; diff --git a/addons/interact_menu/config.cpp b/addons/interact_menu/config.cpp index a7b7bae6df..20fc30805e 100644 --- a/addons/interact_menu/config.cpp +++ b/addons/interact_menu/config.cpp @@ -6,10 +6,21 @@ class CfgPatches { weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; - author[] = {""}; + author[] = {"NouberNou", "CAA-Picard"}; authorUrl = ""; VERSION_CONFIG; }; }; #include "CfgEventHandlers.hpp" + +#include "CursorMenus.hpp" + +class ACE_Settings { + class GVAR(AlwaysUseCursorSelfInteraction) { + value = 0; + typeName = "BOOL"; + isClientSetable = 1; + displayName = "$STR_ACE_Interact_Menu_AlwaysUseCursorSelfInteraction"; + }; +}; diff --git a/addons/interact_menu/functions/fnc_addAction.sqf b/addons/interact_menu/functions/fnc_addAction.sqf index 4b9243cfac..c7dd6ecab3 100644 --- a/addons/interact_menu/functions/fnc_addAction.sqf +++ b/addons/interact_menu/functions/fnc_addAction.sqf @@ -1,53 +1,59 @@ /* - * Author: commy2 - * - * Add an ACE action to an object. Note: This function is NOT global. + * Author: commy2, NouberNou and CAA-Picard + * Add an ACE action to an object, under a certain config path + * Note: This function is NOT global. * * Argument: - * 0: Object the action should be assigned to (Object) - * 1: Name of the action shown in the menu (String) - * 2: Icon (String) - * 3: Position (Position or Selection Name) - * 4: Statement (Code) - * 5: Condition (Code) - * 6: Distance (Number) + * 0: Object the action should be assigned to + * 1: Type of action, 0 for actions, 1 for self-actions + * 2: Full path of the new action + * 3: Name of the action shown in the menu + * 4: Icon + * 5: Position (Position or Selection Name) or + * 6: Statement + * 7: Condition + * 8: Distance + * 9: Other parameters (Optional) * * Return value: - * The entry array, which can be used to remove the entry, or add children entries. + * The entry full path, which can be used to remove the entry, or add children entries . + * + * Example: + * [cursorTarget,0,["ACE_TapShoulderRight","VulcanPinch"],"Vulcan Pinch","",[0,0,0],{_target setDamage 1;},{true},100] call ace_interact_menu_fnc_addAction; + * + * Public: No */ #include "script_component.hpp" -private ["_object", "_displayName", "_icon", "_position", "_statement", "_condition", "_distance", "_actions", "_entry"]; -_object = _this select 0; -_displayName = _this select 1; -_icon = _this select 2; -_position = _this select 3; -_statement = _this select 4; -_condition = _this select 5; -_distance = _this select 6; +EXPLODE_9_PVT(_this,_object,_typeNum,_fullPath,_displayName,_icon,_position,_statement,_condition,_distance); -_actions = []; -if(IS_OBJECT(_object)) then { - _actions = _object getVariable [QUOTE(GVAR(actionData)), []]; - if((count _actions) == 0) then { - _object setVariable [QUOTE(GVAR(actionData)), _actions] - }; -} else { - if(IS_ARRAY(_object)) then { - _actions = _object select 6; - }; +private ["_varName","_actions","_params","_entry"]; + +_varName = [QGVAR(actions),QGVAR(selfActions)] select _typeNum; +_actions = _object getVariable [_varName, []]; +if((count _actions) == 0) then { + _object setVariable [_varName, _actions]; +}; + +_params = [false,false,false,false]; +if (count _this > 9) then { + _params = _this select 9; }; _entry = [ - _displayName, - _icon, - _position, - _statement, - _condition, - _distance, - [], - GVAR(uidCounter) + [ + _displayName, + _icon, + _position, + _statement, + _condition, + _distance, + _params, + + _fullPath + ], + [] ]; -GVAR(uidCounter) = GVAR(uidCounter) + 1; + _actions pushBack _entry; -_entry; \ No newline at end of file + +_fullPath diff --git a/addons/interact_menu/functions/fnc_addClassAction.sqf b/addons/interact_menu/functions/fnc_addClassAction.sqf new file mode 100644 index 0000000000..4931328af2 --- /dev/null +++ b/addons/interact_menu/functions/fnc_addClassAction.sqf @@ -0,0 +1,94 @@ +/* + * Author: CAA-Picard + * Add an ACE action to a class, under a certain path + * Note: This function is NOT global. + * + * Argument: + * 0: TypeOf of the class + * 1: Type of action, 0 for actions, 1 for self-actions + * 2: Full path of the new action + * 3: Name of the action shown in the menu + * 4: Icon + * 5: Position (Position or Selection Name) or + * 6: Statement + * 7: Condition + * 8: Distance + * 9: Other parameters (Optional) + * + * Return value: + * The entry full path, which can be used to remove the entry, or add children entries . + * + * Example: + * [typeOf cursorTarget, 0,["ACE_TapShoulderRight","VulcanPinch"],"Vulcan Pinch","",[0,0,0],{_target setDamage 1;},{true},100] call ace_interact_menu_fnc_addClassAction; + * + * Public: No + */ +#include "script_component.hpp" + +EXPLODE_9_PVT(_this,_objectType,_typeNum,_fullPath,_displayName,_icon,_position,_statement,_condition,_distance); + +// Ensure the config menu was compiled first +if (_typeNum == 0) then { + [_objectType] call FUNC(compileMenu); +} else { + [_objectType] call FUNC(compileMenuSelfAction); +}; + +private ["_varName","_actions","_params","_entry", "_parentLevel", "_foundParentLevel", "_fnc_findFolder"]; + +_varName = format [[QGVAR(Act_%1), QGVAR(SelfAct_%1)] select _typeNum, _objectType]; +_actions = missionNamespace getVariable [_varName, []]; +if((count _actions) == 0) then { + missionNamespace setVariable [_varName, _actions]; +}; + +_params = [false,false,false,false]; +if (count _this > 9) then { + _params = _this select 9; +}; + +// Search the class action trees and find where to insert the entry +_parentLevel = _actions; +_foundParentLevel = false; + +_fnc_findFolder = { + EXPLODE_3_PVT(_this,_fullPath,_level,_classActions); + + if (count _fullPath == _level + 1) then { + _parentLevel = _classActions; + _foundParentLevel = true; + }; + + if (_foundParentLevel) exitWith {}; + + { + EXPLODE_2_PVT(_x,_actionData,_actionChildren); + if (((_actionData select 7) select _level) isEqualTo (_fullPath select _level)) exitWith { + // The action should go somewhere in here + [_fullPath, _level + 1, _actionChildren] call _fnc_findFolder; + }; + } forEach _classActions; +}; + +[_fullPath, 0, _actions] call _fnc_findFolder; + +// Exit if there's no entry point to insert this action +if (!_foundParentLevel) exitWith {}; + +_entry = [ + [ + _displayName, + _icon, + _position, + _statement, + _condition, + _distance, + _params, + + _fullPath + ], + [] + ]; + +_parentLevel pushBack _entry; + +_fullPath diff --git a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf new file mode 100644 index 0000000000..42f762de3f --- /dev/null +++ b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf @@ -0,0 +1,72 @@ +/* + * Author: CAA-Picard + * Collect a entire tree of active actions + * + * Argument: + * 0: Object + * 1: Original action tree + * + * Return value: + * Active children + * + * Public: No + */ +#include "script_component.hpp" + +EXPLODE_2_PVT(_this,_object,_origAction); +EXPLODE_2_PVT(_origAction,_origActionData,_origActionChildren); + +private ["_resultingAction","_target","_player","_activeChildren","_action","_actionData","_x"]; + +_target = _object; +_player = ACE_player; + +// Return nothing if the action itself is not active +if !([_target, ACE_player] call (_origActionData select 4)) exitWith { + [] +}; + +_activeChildren = []; + +// Collect children class actions +{ + _action = [_object, _x] call FUNC(collectActiveActionTree); + if ((count _action) > 0) then { + _activeChildren pushBack _action; + }; +} forEach _origActionChildren; + +// Collect children object actions +{ + _action = _x; + _actionData = _action select 0; + + // Check if the action is children of the original action + if ((count (_actionData select 7)) == (count (_origActionData select 7) + 1)) then { + + // Compare parent path to see if it's a suitable child + private "_isChild"; + _isChild = true; + { + if !(_x isEqualTo ((_actionData select 7) select _forEachIndex)) exitWith { + _isChild = false; + }; + } forEach (_origActionData select 7); + + if (_isChild) then { + _action = [_object, _action] call FUNC(collectActiveActionTree); + if ((count _action) > 0) then { + _activeChildren pushBack _action; + }; + }; + }; +} forEach GVAR(objectActions); + + +// If the original action has no statement, and no children, don't display it +if ((count _activeChildren) == 0 && ((_origActionData select 3) isEqualTo {})) exitWith { + // @todo: Account for showDisabled? + [] +}; + +[_origActionData, _activeChildren] diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index 1b5e803ad6..e6a2744f03 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -1,102 +1,102 @@ -//fnc_compileMenu.sqf +/* + * Author: NouberNou and CAA-Picard + * Compile the action menu from config for an object's class + * + * Argument: + * 0: Object or class name or + * + * Return value: + * None + * + * Public: No + */ #include "script_component.hpp"; -// diag_log text format["COMPILE ACTIONS: %1", _this]; -_object = _this select 0; -_objectType = typeOf _object; +EXPLODE_1_PVT(_this,_target); +private ["_objectType","_actionsVarName"]; +_objectType = _target; +if (typeName _target == "OBJECT") then { + _objectType = typeOf _target; +}; +_actionsVarName = format [QGVAR(Act_%1), _objectType]; -/* -displayName = "$STR_ACE_Interaction_TeamManagement"; -distance = 4; -condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)}); -statement = ""; -showDisabled = 0; -priority = 3.2; -icon = PATHTOF(UI\team\team_management_ca.paa); -subMenu[] = {"ACE_TeamManagement", 0}; -hotkey = "M"; -enableInside = 1; -*/ - -/* -[ - [ - "Launch", - "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa", - [0,0,0], - { (_this select 0) setVelocity [0,0,10]; }, - { true }, - 1, - [] - ] -] -*/ - -_actionsCfg = configFile >> "CfgVehicles" >> _objectType >> "ACE_Actions"; - +// Exit if the action menu is already compiled for this class +if !(isNil {missionNamespace getVariable [_actionsVarName, nil]}) exitWith {}; +private "_recurseFnc"; _recurseFnc = { - private ["_actions", "_displayName", "_distance", "_icon", "_statement", "_condition", "_showDisabled", - "_enableInside", "_children", "_entry", "_actionsCfg"]; + private ["_actions", "_displayName", "_distance", "_icon", "_statement", "_selection", "_condition", "_showDisabled", + "_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_fullPath"]; + EXPLODE_2_PVT(_this,_actionsCfg,_parentPath); _actions = []; - _actionsCfg = _this select 0; - for "_i" from 0 to (count _actionsCfg)-1 do { + + for "_i" from 0 to (count _actionsCfg) - 1 do { _entryCfg = _actionsCfg select _i; if(isClass _entryCfg) then { _displayName = getText (_entryCfg >> "displayName"); _distance = getNumber (_entryCfg >> "distance"); _icon = getText (_entryCfg >> "icon"); _statement = compile (getText (_entryCfg >> "statement")); - + _selection = getText (_entryCfg >> "selection"); + if (_selection == "") then { + _selection = [0,0,0]; + }; _condition = getText (_entryCfg >> "condition"); if (_condition == "") then {_condition = "true"}; // Add canInteract (including exceptions) and canInteractWith to condition - _condition = _condition + format [QUOTE( && {%1 call EGVAR(common,canInteract)} && {[ARR_2(ACE_player, _target)] call EFUNC(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")]; + _condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, _target, %1)] call EGVAR(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")]; - _showDisabled = getNumber (_entryCfg >> "showDisabled"); - _enableInside = getNumber (_entryCfg >> "enableInside"); + _showDisabled = (getNumber (_entryCfg >> "showDisabled")) > 0; + _enableInside = (getNumber (_entryCfg >> "enableInside")) > 0; + _canCollapse = (getNumber (_entryCfg >> "canCollapse")) > 0; + _runOnHover = (getNumber (_entryCfg >> "runOnHover")) > 0; + + _fullPath = (+ _parentPath); + _fullPath pushBack (configName _entryCfg); _condition = compile _condition; - // diag_log text format["_condition: %1", _condition]; - _children = []; - if(isArray (_entryCfg >> "subMenu")) then { - _subMenuDef = getArray (_entryCfg >> "subMenu"); - _childMenuName = _subMenuDef select 0; - _childMenuCfg = configFile >> "CfgVehicles" >> _objectType >> "ACE_Actions" >> _childMenuName; - _children = [_childMenuCfg] call _recurseFnc; - }; + _children = [_entryCfg, _fullPath] call _recurseFnc; + _entry = [ - _displayName, - _icon, - [0,0,0], - _statement, - _condition, - _distance, - _children, - GVAR(uidCounter) + [ + _displayName, + _icon, + _selection, + _statement, + _condition, + _distance, + [_showDisabled,_enableInside,_canCollapse,_runOnHover], + _fullPath + ], + _children ]; - GVAR(uidCounter) = GVAR(uidCounter) + 1; _actions pushBack _entry; }; }; _actions }; -_actions = [_actionsCfg] call _recurseFnc; +private "_actionsCfg"; +_actionsCfg = configFile >> "CfgVehicles" >> _objectType >> "ACE_Actions"; -_actions = [[ - "TEST!", - "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa", - "Spine3", - { true }, - { true }, - 5, - _actions, - GVAR(uidCounter) +missionNamespace setVariable [_actionsVarName, [_actionsCfg, []] call _recurseFnc]; + +/* +[ + [ + [ + "My Action", + "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa", + [0,0,0], + { (_this select 0) setVelocity [0,0,10]; }, + { true }, + 1, + [false,false,false] + ["ACE_MainActions","TeamManagement","MyAction"] + ], + [children actions] + ] ] -]; -GVAR(uidCounter) = GVAR(uidCounter) + 1; - -_object setVariable [QUOTE(GVAR(actionData)), _actions]; \ No newline at end of file +*/ diff --git a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf new file mode 100644 index 0000000000..81f4a25ef1 --- /dev/null +++ b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf @@ -0,0 +1,98 @@ +/* + * Author: NouberNou and CAA-Picard + * Compile the self action menu from config for an object's class + * + * Argument: + * 0: Object or class name or + * + * Return value: + * None + * + * Public: No + */ +#include "script_component.hpp"; + +EXPLODE_1_PVT(_this,_target); + +private ["_objectType","_actionsVarName"]; +_objectType = _target; +if (typeName _target == "OBJECT") then { + _objectType = typeOf _target; +}; +_actionsVarName = format [QGVAR(SelfAct_%1), _objectType]; + +// Exit if the action menu is already compiled for this class +if !(isNil {missionNamespace getVariable [_actionsVarName, nil]}) exitWith {}; + +private "_recurseFnc"; +_recurseFnc = { + private ["_actions", "_displayName", "_distance", "_icon", "_statement", "_selection", "_condition", "_showDisabled", + "_enableInside", "_canCollapse", "_runOnHover", "_children", "_entry", "_entryCfg", "_fullPath"]; + EXPLODE_2_PVT(_this,_actionsCfg,_parentPath); + _actions = []; + + for "_i" from 0 to (count _actionsCfg) - 1 do { + _entryCfg = _actionsCfg select _i; + if(isClass _entryCfg) then { + _displayName = getText (_entryCfg >> "displayName"); + + _icon = getText (_entryCfg >> "icon"); + _statement = compile (getText (_entryCfg >> "statement")); + + _condition = getText (_entryCfg >> "condition"); + if (_condition == "") then {_condition = "true"}; + + // Add canInteract (including exceptions) and canInteractWith to condition + _condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, objNull, %1)] call EGVAR(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")]; + + _showDisabled = (getNumber (_entryCfg >> "showDisabled")) > 0; + _enableInside = (getNumber (_entryCfg >> "enableInside")) > 0; + _canCollapse = (getNumber (_entryCfg >> "canCollapse")) > 0; + _runOnHover = (getNumber (_entryCfg >> "runOnHover")) > 0; + + _fullPath = (+ _parentPath); + _fullPath pushBack (configName _entryCfg); + + _condition = compile _condition; + _children = [_entryCfg, _fullPath] call _recurseFnc; + + _entry = [ + [ + _displayName, + _icon, + [0,0,0], + _statement, + _condition, + 10, //distace + [_showDisabled,_enableInside,_canCollapse,_runOnHover], + _fullPath + ], + _children + ]; + _actions pushBack _entry; + }; + }; + _actions +}; + +private "_actionsCfg"; +_actionsCfg = configFile >> "CfgVehicles" >> _objectType >> "ACE_SelfActions"; + +// Create a master action to base on self action +_actions = [ + [ + [ + "Self Actions", + "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa", + "Spine3", + { true }, + { true }, + 10, + [false,true,false], + ["ACE_SelfActions"] + ], + [_actionsCfg, ["ACE_SelfActions"]] call _recurseFnc + ] +]; + +missionNamespace setVariable [_actionsVarName, _actions]; diff --git a/addons/interact_menu/functions/fnc_keyDown.sqf b/addons/interact_menu/functions/fnc_keyDown.sqf index e18ec69ae8..4c8ffd8b3a 100644 --- a/addons/interact_menu/functions/fnc_keyDown.sqf +++ b/addons/interact_menu/functions/fnc_keyDown.sqf @@ -1,8 +1,25 @@ -//fnc_keyDown.sqf +/* + * Author: NouberNou + * Handle interaction key down + * + * Argument: + * None + * + * Return value: + * true + * + * Public: No + */ #include "script_component.hpp" if(!GVAR(keyDown)) then { - GVAR(keyDown) = true; - GVAR(keyDownTime) = diag_tickTime; + + // Only interact with others if on foot + if (vehicle ACE_player != ACE_player) exitWith {}; + + GVAR(keyDown) = true; + GVAR(keyDownTime) = diag_tickTime; + + ["interactMenuOpened", [0]] call EFUNC(common,localEvent); }; true diff --git a/addons/interact_menu/functions/fnc_keyDownSelfAction.sqf b/addons/interact_menu/functions/fnc_keyDownSelfAction.sqf new file mode 100644 index 0000000000..63c81b58bc --- /dev/null +++ b/addons/interact_menu/functions/fnc_keyDownSelfAction.sqf @@ -0,0 +1,41 @@ +/* + * Author: NouberNou + * Handle self action key down + * + * Argument: + * None + * + * Return value: + * true + * + * Public: No + */ +#include "script_component.hpp" + +if(!GVAR(keyDownSelfAction)) then { + GVAR(keyDownSelfAction) = true; + GVAR(keyDown) = false; + GVAR(keyDownTime) = diag_tickTime; + + ["interactMenuOpened", [1]] call EFUNC(common,localEvent); + + GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) || GVAR(AlwaysUseCursorSelfInteraction) || visibleMap; + + if (GVAR(useCursorMenu)) then { + closeDialog 0; + createDialog QGVAR(cursorMenu); + // The dialog sets: + // uiNamespace getVariable QGVAR(dlgCursorMenu); + // uiNamespace getVariable QGVAR(cursorMenuOpened); + ctrlEnable [91921, true]; + ((finddisplay 91919) displayctrl 91921) ctrlAddEventHandler ["MouseMoving", { + GVAR(cursorPos) = [_this select 1, _this select 2, 0]; + }]; + setMousePosition [0.5, 0.5]; + + }; + + GVAR(selfMenuOffset) = ((positionCameraToWorld [0, 0, 2]) call EFUNC(common,positionToASL)) vectorDiff + ((positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL)); +}; +true diff --git a/addons/interact_menu/functions/fnc_keyUp.sqf b/addons/interact_menu/functions/fnc_keyUp.sqf index 8f91b1322d..716d6dafd8 100644 --- a/addons/interact_menu/functions/fnc_keyUp.sqf +++ b/addons/interact_menu/functions/fnc_keyUp.sqf @@ -1,15 +1,30 @@ -//fnc_keyUp.sqf +/* + * Author: NouberNou + * Handle interaction key up + * + * Argument: + * None + * + * Return value: + * true + * + * Public: No + */ #include "script_component.hpp" -GVAR(keyDown) = false; if(GVAR(actionSelected)) then { - this = GVAR(selectedTarget); + this = GVAR(selectedTarget); _player = ACE_Player; _target = GVAR(selectedTarget); - [GVAR(selectedTarget), player] call GVAR(selectedAction); + [GVAR(selectedTarget), ACE_player] call GVAR(selectedStatement); }; + +if (GVAR(keyDown)) then { + GVAR(keyDown) = false; + ["interactMenuClosed", [0]] call EFUNC(common,localEvent); +}; + GVAR(expanded) = false; GVAR(lastPath) = []; GVAR(menuDepthPath) = []; -GVAR(vecLineMap) = []; true diff --git a/addons/interact_menu/functions/fnc_keyUpSelfAction.sqf b/addons/interact_menu/functions/fnc_keyUpSelfAction.sqf new file mode 100644 index 0000000000..6346696d53 --- /dev/null +++ b/addons/interact_menu/functions/fnc_keyUpSelfAction.sqf @@ -0,0 +1,34 @@ +/* + * Author: NouberNou + * Handle self action key up + * + * Argument: + * None + * + * Return value: + * true + * + * Public: No + */ +#include "script_component.hpp" + +if (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]) then { + closeDialog 0; +}; + +if(GVAR(actionSelected)) then { + this = GVAR(selectedTarget); + _player = ACE_Player; + _target = GVAR(selectedTarget); + [GVAR(selectedTarget), ACE_player] call GVAR(selectedStatement); +}; + +if (GVAR(keyDownSelfAction)) then { + GVAR(keyDownSelfAction) = false; + ["interactMenuClosed", [1]] call EFUNC(common,localEvent); +}; + +GVAR(expanded) = false; +GVAR(lastPath) = []; +GVAR(menuDepthPath) = []; +true diff --git a/addons/interact_menu/functions/fnc_probe.sqf b/addons/interact_menu/functions/fnc_probe.sqf deleted file mode 100644 index 1f178180be..0000000000 --- a/addons/interact_menu/functions/fnc_probe.sqf +++ /dev/null @@ -1,42 +0,0 @@ -//fnc_probe.sqf -#include "script_component.hpp" - -private ["_nearestObjects", "_actionObject", "_x", "_actionData", "_renderData", "_actionItem", "_active", "_renderItem", "_object", "_forEachIndex"]; -if(!GVAR(keyDown)) then { - _nearestObjects = nearestObjects [(getPos player), ["All"], 100]; - - GVAR(toRender) = []; - { - _actionObject = _x; - _actionData = _actionObject getVariable [QUOTE(GVAR(actionData)), []]; - - if((count _actionData) > 0) then { - _renderData = []; - { - _actionItem = _x; - this = _actionObject; - _target = _actionObject; - _player = ACE_player; - _active = [_target, ACE_player] call (_actionItem select 4); - // player sideChat format["_active: %1 %2", _actionItem select 0, _active]; - if(_active) then { - _renderItem = +_actionItem; - _renderItem set[4, true]; - _renderData set[(count _renderData), _renderItem]; - }; - } forEach _actionData; - if((count _renderData) > 0) then { - GVAR(toRender) set[(count GVAR(toRender)), [_actionObject, _renderData]]; - }; - }; - } forEach _nearestObjects; - // player sideChat format["p: %1", count GVAR(toRender)]; -} else { - GVAR(filter) = []; - { - _object = _x select 0; - if(_object distance player > 100) then { - GVAR(filter) set[(count GVAR(filter)), _forEachIndex]; - }; - } forEach GVAR(toRender); -}; diff --git a/addons/interact_menu/functions/fnc_removeAction.sqf b/addons/interact_menu/functions/fnc_removeAction.sqf index 3b32f4d012..3c6988971d 100644 --- a/addons/interact_menu/functions/fnc_removeAction.sqf +++ b/addons/interact_menu/functions/fnc_removeAction.sqf @@ -1,53 +1,30 @@ /* - * Author: commy2 - * - * Add an ACE action to an object. Note: This function is global. + * Author: commy2, NouberNou and CAA-Picard + * Remove an action from an object * * Argument: - * 0: Object the action should be assigned to (Object) - * 1: Entry to remove (Array or Number) + * 0: Object the action is assigned to + * 1: Type of action, 0 for actions, 1 for self-actions + * 2: Full path of the action to remove * * Return value: - * ID of the action (used to remove it later). + * None + * + * Example: + * [cursorTarget,0,["ACE_TapShoulderRight","VulcanPinch"]] call ace_interact_menu_fnc_removeAction; + * + * Public: No */ - #include "script_component.hpp" -private ["_object", "_entry", "_found", "_actions", "_searchFnc"]; -_object = _this select 0; -_entry = _this select 1; +EXPLODE_3_PVT(_this,_object,_typeNum,_fullPath); +private ["_varName","_actions"]; +_varName = [QGVAR(actions),QGVAR(selfActions)] select _typeNum; +_actions = _object getVariable [_varName, []]; - - - -if(!IS_OBJECT(_object)) exitWith {false}; - -_actions = _object getVariable [QUOTE(GVAR(actionData)), []]; -if(IS_ARRAY(_entry)) then { - _entry = _entry select 7; -}; - -_found = false; -_searchFnc = { - private ["_actions", "_entry", "_childActions"]; - _actions = _this select 0; - _entry = _this select 1; - { - if((_x select 7) == _entry) then { - _actions set[_forEachIndex, "aceactiondelete"]; - _actions = _actions - ["aceactiondelete"]; - _found = true; - } else { - if(!_found && {count (_x select 6) > 0}) then { - _childActions = [(_x select 6), _entry] call _searchFnc; - _x set[6, _childActions]; - }; - }; - } forEach _actions; - _actions; -}; -_actions = [_actions, _entry] call _searchFnc; -_object setVariable [QUOTE(GVAR(actionData)), _actions]; - -_found; \ No newline at end of file +{ + if (((_x select 0) select 7) isEqualTo _fullPath) exitWith { + _actions deleteAt _forEachIndex; + }; +} forEach _actions; diff --git a/addons/interact_menu/functions/fnc_removeClassAction.sqf b/addons/interact_menu/functions/fnc_removeClassAction.sqf new file mode 100644 index 0000000000..9ba29cd357 --- /dev/null +++ b/addons/interact_menu/functions/fnc_removeClassAction.sqf @@ -0,0 +1,72 @@ +/* + * Author: CAA-Picard + * Removes a class action from a class + * Note: This function is NOT global. + * + * Argument: + * 0: TypeOf of the class + * 1: Type of action, 0 for actions, 1 for self-actions + * 2: Full path of the new action + * + * Return value: + * None + * + * Example: + * [typeOf cursorTarget, 0,["ACE_TapShoulderRight","VulcanPinch"]] call ace_interact_menu_fnc_removeClassAction; + * + * Public: No + */ +#include "script_component.hpp" + +EXPLODE_3_PVT(_this,_objectType,_typeNum,_fullPath); + +private ["_varName","_actions","_parentLevel", "_actionIndex", "_foundAction", "_fnc_findFolder"]; + +_varName = format [[QGVAR(Act_%1), QGVAR(SelfAct_%1)] select _typeNum, _objectType]; +_actions = missionNamespace getVariable [_varName, []]; + +// Search the class action trees and find where to insert the entry +_parentLevel = _actions; +_actionIndex = -1; +_foundAction = false; + +_fnc_findFolder = { + EXPLODE_3_PVT(_this,_fullPath,_level,_classActions); + + if (count _fullPath == _level + 1) then { + _parentLevel = _classActions; + }; + + { + EXPLODE_2_PVT(_x,_actionData,_actionChildren); + if (((_actionData select 7) select _level) isEqualTo (_fullPath select _level)) exitWith { + if (_level + 1 == count _fullPath) exitWith { + _actionIndex = _forEachIndex; + _foundAction = true; + }; + [_fullPath, _level + 1, _actionChildren] call _fnc_findFolder; + }; + if (_foundAction) exitWith {}; + } forEach _classActions; +}; + +[_fullPath, 0, _actions] call _fnc_findFolder; + +// Exit if the action was not found +if (!_foundAction) exitWith {}; + +_entry = [ + [ + _displayName, + _icon, + _position, + _statement, + _condition, + _distance, + _params, + + _fullPath + ], + [] + ]; + +_parentLevel deleteAt _actionIndex; diff --git a/addons/interact_menu/functions/fnc_render.sqf b/addons/interact_menu/functions/fnc_render.sqf index 29033e3407..3930068c25 100644 --- a/addons/interact_menu/functions/fnc_render.sqf +++ b/addons/interact_menu/functions/fnc_render.sqf @@ -1,104 +1,193 @@ -//fnc_render.sqf +/* + * Author: NouberNou and CAA-Picard + * Render all available nearby interactions + * + * Argument: + * None + * + * Return value: + * None + * + * Public: No + */ #include "script_component.hpp" private ["_cursorPos1", "_cursorPos2", "_cursorVec", "_p1", "_p2", "_p", "_v", "_cp", "_forEachIndex", "_renderTargets", "_x", "_cursorScreenPos", "_closestDistance", "_closestSelection", "_pos", "_sPos", "_disSq", "_closest", "_cTime", "_delta", "_foundTarget", "_misMatch", "_hoverPath", "_i"]; _foundTarget = false; _cursorPos1 = positionCameraToWorld [0, 0, 0]; _cursorPos2 = positionCameraToWorld [0, 0, 2]; + +GVAR(selfMenuScale) = (((worldToScreen (positionCameraToWorld [1,0,2])) select 0) - + ((worldToScreen (positionCameraToWorld [0,0,2])) select 0)) / 0.6; +//systemChat format ["selfMenuScale: %1", GVAR(selfMenuScale)]; GVAR(currentOptions) = []; -if((count GVAR(toRender)) > 0 && GVAR(keyDown)) then { - if((count GVAR(vecLineMap)) == 0 || ((count GVAR(menuDepthPath)) > 0 && (getPosASL player) distance GVAR(lastPos) > 0.01)) then { - GVAR(lastPos) = getPosASL player; - _cursorVec = [_cursorPos2, _cursorPos1] call BIS_fnc_vectorFromXtoY; - _p1 = [0,0,0]; - _p2 = +_cursorVec; - _p = (_cursorVec call CBA_fnc_vect2polar); - _v = [(_p select 0), (_p select 1), (_p select 2)+90] call CBA_fnc_polar2vect; - _cp = [_cursorVec, _v] call BIS_fnc_crossProduct; - - GVAR(vecLineMap) = [_cp, _p1, _p2] call FUNC(rotateVectLineGetMap); - }; - { - if(!(_forEachIndex in GVAR(filter))) then { - GVAR(renderDepth) = 0; - _renderTargets = _x; - { - [_renderTargets select 0, _x, 0] call FUNC(renderMenu); - } forEach (_renderTargets select 1); - }; - } forEach GVAR(toRender); - // player sideChat format["c: %1", count GVAR(toRender)]; + +private ["_actionsVarName","_classActions","_objectActions","_target","_player","_action","_actionData","_active"]; +_player = ACE_player; +if (GVAR(keyDown)) then { + + // Render all nearby interaction menus + #define MAXINTERACTOBJECTS 3 + private ["_numInteractObjects","_numInteractions"]; + _numInteractObjects = 0; + + _nearestObjects = nearestObjects [(getPos ACE_player), ["All"], 15]; + { + _target = _x; + + _numInteractions = 0; + // Prevent interacting with yourself or your own vehicle + if (_target != ACE_player && {_target != vehicle ACE_player}) then { + + // Iterate through object actions, find base level actions and render them if appropiate + _actionsVarName = format [QGVAR(Act_%1), typeOf _target]; + GVAR(objectActions) = _target getVariable [QGVAR(actions), []]; + { + _action = _x; + // Only render them directly if they are base level actions + if (count ((_action select 0) select 7) == 1) then { + // Try to render the menu + if ([_target, _action] call FUNC(renderBaseMenu)) then { + _numInteractions = _numInteractions + 1; + }; + }; + } forEach GVAR(objectActions); + + // Iterate through base level class actions and render them if appropiate + _classActions = missionNamespace getVariable [_actionsVarName, []]; + { + _action = _x; + // Try to render the menu + if ([_target, _action] call FUNC(renderBaseMenu)) then { + _numInteractions = _numInteractions + 1; + }; + } forEach _classActions; + + // Limit the amount of objects the player can interact with + if (_numInteractions > 0) then { + _numInteractObjects = _numInteractObjects + 1; + }; + }; + if (_numInteractObjects >= MAXINTERACTOBJECTS) exitWith {}; + + } forEach _nearestObjects; + +} else { + if (GVAR(keyDownSelfAction)) then { + + // Render only the self action menu + _target = vehicle ACE_player; + + // Iterate through object actions, find base level actions and render them if appropiate + _actionsVarName = format [QGVAR(SelfAct_%1), typeOf _target]; + GVAR(objectActions) = _target getVariable [QGVAR(selfActions), []]; + /* + { + _action = _x; + // Only render them directly if they are base level actions + if (count (_action select 7) == 1) then { + [_target, _action, 0, [180, 360]] call FUNC(renderMenu); + }; + } forEach GVAR(objectActions); + */ + + // Iterate through base level class actions and render them if appropiate + _actionsVarName = format [QGVAR(SelfAct_%1), typeOf _target]; + _classActions = missionNamespace getVariable [_actionsVarName, []]; + { + _action = _x; + + _pos = (((positionCameraToWorld [0, 0, 0]) call EFUNC(common,positionToASL)) vectorAdd GVAR(selfMenuOffset)) call EFUNC(common,ASLToPosition); + [_target, _action, _pos] call FUNC(renderBaseMenu); + } forEach _classActions; + }; }; -if(GVAR(keyDown)) then { - - _cursorScreenPos = worldToScreen _cursorPos2; - _closestDistance = 1000000; - _closestSelection = -1; - { - _pos = _x select 1; - _sPos = worldToScreen _pos; - if(count _sPos > 0) then { - _disSq = (((_cursorScreenPos select 0) - (_sPos select 0))^2 + ((_cursorScreenPos select 1) - (_sPos select 1))^2); - if(_disSq < 0.0125 && _disSq < _closestDistance) then { - _closestDistance = _disSq; - _closestSelection = _forEachIndex; - }; - }; - } forEach GVAR(currentOptions); - - if(_closestSelection != -1) then { - - _closest = GVAR(currentOptions) select _closestSelection; - - _pos = _closest select 1; - _cTime = diag_tickTime; - _delta = _cTime - GVAR(lastTime); - GVAR(lastTime) = _cTime; - GVAR(rotationAngle) = GVAR(rotationAngle) + (180*_delta); - if(GVAR(rotationAngle) > 360) then { - GVAR(rotationAngle) = GVAR(rotationAngle) - 360; - }; - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,.75], _pos, 0.6*SafeZoneW, 0.6*SafeZoneW, GVAR(rotationAngle), "", 0.5, 0.025, "TahomaB"]; - _foundTarget = true; - GVAR(actionSelected) = true; - GVAR(selectedTarget) = (_closest select 0) select 0; - GVAR(selectedAction) = ((_closest select 0) select 1) select 3; - _misMatch = false; - _hoverPath = (_closest select 2); - if((count GVAR(lastPath)) != (count _hoverPath)) then { - _misMatch = true; - } else { - { - if(_x != (_hoverPath select _forEachIndex)) exitWith { - _misMatch = true; - }; - } forEach GVAR(lastPath); - }; - - if(_misMatch) then { - GVAR(lastPath) = _hoverPath; - GVAR(startHoverTime) = diag_tickTime; - GVAR(expanded) = false; - } else { - if(!GVAR(expanded) && diag_tickTime-GVAR(startHoverTime) > 0.25) then { - GVAR(expanded) = true; - GVAR(menuDepthPath) = +GVAR(lastPath); - }; - }; - }; - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selected_ca.paa", [1,0,0,1], _cursorPos2, 1, 1, 0, "", 0.5, 0.025, "TahomaB"]; + +if(GVAR(keyDown) || GVAR(keyDownSelfAction)) then { + // Draw the red selector only when there's no cursor + if !(uiNamespace getVariable [QGVAR(cursorMenuOpened),false]) then { + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selected_ca.paa", [1,0,0,1], _cursorPos2, 1, 1, 0, "", 0.5, 0.025, "TahomaB"]; + }; + + _cursorScreenPos = [worldToScreen _cursorPos2, GVAR(cursorPos)] select (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]); + + _closestDistance = 1000000; + _closestSelection = -1; + { + _pos = _x select 1; + _sPos = worldToScreen _pos; + if(count _sPos > 0) then { + _disSq = (((_cursorScreenPos select 0) - (_sPos select 0))^2 + ((_cursorScreenPos select 1) - (_sPos select 1))^2); + if(_disSq < 0.0125 && _disSq < _closestDistance) then { + _closestDistance = _disSq; + _closestSelection = _forEachIndex; + }; + }; + } forEach GVAR(currentOptions); + + + if(_closestSelection == -1) exitWith {}; + + _closest = GVAR(currentOptions) select _closestSelection; + + _pos = _closest select 1; + _cTime = diag_tickTime; + _delta = _cTime - GVAR(lastTime); + GVAR(lastTime) = _cTime; + GVAR(rotationAngle) = GVAR(rotationAngle) + (180*_delta); + if(GVAR(rotationAngle) > 360) then { + GVAR(rotationAngle) = GVAR(rotationAngle) - 360; + }; + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,.75], _pos, 0.6*SafeZoneW, 0.6*SafeZoneW, GVAR(rotationAngle), "", 0.5, 0.025, "TahomaB"]; + _foundTarget = true; + GVAR(actionSelected) = true; + GVAR(selectedTarget) = (_closest select 0) select 0; + GVAR(selectedAction) = (_closest select 0) select 1; + GVAR(selectedStatement) = ((GVAR(selectedAction)) select 0) select 3; + + _misMatch = false; + _hoverPath = (_closest select 2); + + if((count GVAR(lastPath)) != (count _hoverPath)) then { + _misMatch = true; + } else { + { + if(_x != (_hoverPath select _forEachIndex)) exitWith { + _misMatch = true; + }; + } forEach GVAR(lastPath); + }; + + if(_misMatch) then { + GVAR(lastPath) = _hoverPath; + GVAR(startHoverTime) = diag_tickTime; + GVAR(expanded) = false; + } else { + if(!GVAR(expanded) && diag_tickTime-GVAR(startHoverTime) > 0.25) then { + GVAR(expanded) = true; + GVAR(menuDepthPath) = +GVAR(lastPath); + + // Execute the current action if it's run on hover + private "_runOnHover"; + _runOnHover = ((GVAR(selectedAction) select 0) select 6) select 3; + if (_runOnHover) then { + this = GVAR(selectedTarget); + _player = ACE_Player; + _target = GVAR(selectedTarget); + [GVAR(selectedTarget), ACE_player] call GVAR(selectedStatement); + }; + }; + }; }; + if(!_foundTarget && GVAR(actionSelected)) then { - GVAR(actionSelected) = false; - GVAR(expanded) = false; - GVAR(lastPath) = []; - if(!GVAR(keyDown)) then { - GVAR(vecLineMap) = []; - }; + GVAR(actionSelected) = false; + GVAR(expanded) = false; + GVAR(lastPath) = []; }; for "_i" from GVAR(iconCount) to (count GVAR(iconCtrls))-1 do { - ctrlDelete (GVAR(iconCtrls) select _i); + ctrlDelete (GVAR(iconCtrls) select _i); }; GVAR(iconCtrls) resize GVAR(iconCount); GVAR(iconCount) = 0; diff --git a/addons/interact_menu/functions/fnc_renderBaseMenu.sqf b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf new file mode 100644 index 0000000000..e3a8a0c9a4 --- /dev/null +++ b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf @@ -0,0 +1,77 @@ +/* + * Author: NouberNou and CAA-Picard + * Render the interaction menu for a base action + * + * Argument: + * 0: Object + * 1: Action data + * 2: 3D position (Optional) + * + * Return value: + * Was the menu rendered + * + * Public: No + */ +#include "script_component.hpp" + +private ["_distance","_pos","_weaponDir","_ref","_cameraPos","_sPos","_activeActionTree"]; + +EXPLODE_2_PVT(_this,_object,_baseAction); +EXPLODE_1_PVT(_baseAction,_actionData); + +_distance = _actionData select 5; + +// Obtain a 3D position for the action +if((count _this) > 2) then { + _pos = _this select 2; +} else { + if(typeName (_actionData select 2) == "ARRAY") then { + _pos = _object modelToWorld (_actionData select 2); + } else { + if ((_actionData select 2) == "weapon") then { + // Craft a suitable position for weapon interaction + _weaponDir = _object weaponDirection currentWeapon _object; + _ref = _weaponDir call EFUNC(common,createOrthonormalReference); + _pos = (_object modelToWorld (_object selectionPosition "righthand")) vectorAdd ((_ref select 2) vectorMultiply 0.1); + } else { + _pos = _object modelToWorld (_object selectionPosition (_actionData select 2)); + }; + }; + // Compensate for movement during the frame to get rid of jittering + _pos = _pos vectorAdd ((visiblePositionASL _object) vectorDiff (getPosASL _object)); +}; + +_cameraToActionVec = (_pos call EFUNC(common,positionToASL)) vectorDiff ((positionCameraToWorld [0,0,0]) call EFUNC(common,positionToASL)); +GVAR(refSystem) = _cameraToActionVec call EFUNC(common,createOrthonormalReference); + +// For non-self actions, exit if the action is too far away +if (GVAR(keyDown) && + {(ACE_player modelToWorld (ACE_player selectionPosition "pilot")) distance _pos >= _distance}) exitWith {false}; + +// Exit if the action is behind you +_sPos = worldToScreen _pos; +if(count _sPos == 0) exitWith {false}; + +// Exit if the action is off screen +if ((_sPos select 0) < safeZoneXAbs || (_sPos select 0) > safeZoneXAbs + safeZoneWAbs) exitWith {false}; +if ((_sPos select 1) < safeZoneY || (_sPos select 1) > safeZoneY + safeZoneH) exitWith {false}; + + +// Collect active tree +private "_uid"; +_uid = format [QGVAR(ATCache_%1), (_actionData select 7) select 0]; +_activeActionTree = [ + [_object, _baseAction], + DFUNC(collectActiveActionTree), + _object, _uid, 0.2 + ] call EFUNC(common,cachedCall); + + +// Check if there's something left for rendering +if (count _activeActionTree == 0) exitWith {false}; + +//EXPLODE_2_PVT(_activeActionTree,_actionData,_actionChildren); + +[_object, _activeActionTree, _pos, [180,360]] call FUNC(renderMenu); + +true diff --git a/addons/interact_menu/functions/fnc_renderIcon.sqf b/addons/interact_menu/functions/fnc_renderIcon.sqf index 39b4b120b9..9d845eab3f 100644 --- a/addons/interact_menu/functions/fnc_renderIcon.sqf +++ b/addons/interact_menu/functions/fnc_renderIcon.sqf @@ -1,4 +1,21 @@ -//fnc_renderIcon.sqf +/* + * Author: NouberNou and CAA-Picard + * Render a single interaction icon + * + * Argument: + * 0: Text + * 1: Color + * 2: 3d position ASL + * 3: ? + * 4: ? + * 5: ? + * 6: Icon + * + * Return value: + * None + * + * Public: No + */ #include "script_component.hpp" #define DEFAULT_ICON QUOTE(\z\ace\addons\interaction\ui\dot_ca.paa) private ["_color", "_pos", "_sPos", "_ctrl", "_icon"]; @@ -6,24 +23,27 @@ _text = _this select 0; _color = _this select 1; _pos = _this select 2; _icon = _this select 6; + +//systemChat format ["Icon %1 - %2,%3,%4", _text, _pos select 0, _pos select 1, _pos select 2]; + _sPos = worldToScreen _pos; // _sPos = _pos; if(count _sPos > 0) then { - // player sideChat format["render!"]; - if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then { - GVAR(iconCtrls) pushBack ((findDisplay 46) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]); - }; - _ctrl = GVAR(iconCtrls) select GVAR(iconCount); - GVAR(iconCount) = GVAR(iconCount) + 1; + + if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then { + _displayNum = [46,91919] select (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]); + //systemChat format ["Displaynum: %1", _displayNum]; + GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]); + }; + _ctrl = GVAR(iconCtrls) select GVAR(iconCount); + GVAR(iconCount) = GVAR(iconCount) + 1; if(_icon == "") then { _icon = DEFAULT_ICON; }; - _text = "" + _text; - _ctrl ctrlSetStructuredText (parseText _text); - _ctrl ctrlSetPosition [(_sPos select 0)-(0.011*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.4*SafeZoneW, 0.025*SafeZoneW]; - _ctrl ctrlSetForegroundColor _color; - _opacity = _color select 3; - _control ctrlSetTextColor _color; - // _ctrl ctrlSetBackgroundColor [1,0,0,1]; - _ctrl ctrlCommit 0; + _text = format ["
%4", _icon, _color, _color, _text]; + _ctrl ctrlSetStructuredText (parseText _text); + _ctrl ctrlSetPosition [(_sPos select 0)-(0.2*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.4*SafeZoneW, 0.035*SafeZoneW]; + //_ctrl ctrlSetBackgroundColor [1, 0, 0, 0.1]; + //_ctrl ctrlSetBackgroundColor [1,0,0,1]; + _ctrl ctrlCommit 0; }; diff --git a/addons/interact_menu/functions/fnc_renderMenu.sqf b/addons/interact_menu/functions/fnc_renderMenu.sqf index 0337d4e8c9..ad604b9fa5 100644 --- a/addons/interact_menu/functions/fnc_renderMenu.sqf +++ b/addons/interact_menu/functions/fnc_renderMenu.sqf @@ -1,64 +1,86 @@ -//fnc_renderMenu.sqf +/* + * Author: NouberNou and CAA-Picard + * Render an interaction menu and it's children recursively + * + * Argument: + * 0: Object + * 1: Action data + * 2: 3D position + * 3: Angle range available for rendering + * + * Return value: + * None + * + * Public: No + */ #include "script_component.hpp" -private ["_object", "_actionData", "_distance", "_index", "_pos", "_cursorScreenPos", "_path", "_menuDepth", "_opacity", "_currentRenderDepth", "_radialOffset", "_active", "_x", "_offset", "_newPos", "_forEachIndex"]; +private ["_menuInSelectedPath", "_path", "_menuDepth", "_currentRenderDepth", "_x", "_offset", "_newPos", "_forEachIndex"]; -_object = _this select 0; -_actionData = _this select 1; -_distance = _actionData select 5; -_index = _this select 2; +EXPLODE_4_PVT(_this,_object,_action,_pos,_angles); +EXPLODE_2_PVT(_action,_actionData,_activeChildren); +EXPLODE_2_PVT(_angles,_centerAngle,_maxAngleSpan); -if((count _this) > 3) then { - _pos = _this select 3; -} else { - if(typeName (_actionData select 2) == "ARRAY") then { - _pos = _object modelToWorld (_actionData select 2); - } else { - _pos = _object modelToWorld (_object selectionPosition (_actionData select 2)); - }; +_menuDepth = (count GVAR(menuDepthPath)) - 1; + +// Store path to action +_path = [_object] + (_actionData select 7); + +// Check if the menu is on the selected path +_menuInSelectedPath = true; +{ + if (_forEachIndex >= (count GVAR(menuDepthPath))) exitWith { + _menuInSelectedPath = false; + }; + if (_x != (GVAR(menuDepthPath) select _forEachIndex)) exitWith { + _menuInSelectedPath = false; + }; +} forEach _path; + +// Render icon +// ARGB Color (First Hex Pair is transparancy) +_color = "#FFFFFFFF"; +if(!_menuInSelectedPath) then { //_menuDepth > 0 && + if (_menuDepth > 0) then { + _color = format ["#%1FFFFFF", [255 * ((((count _path) - 2)/_menuDepth) max 0.25)] call EFUNC(common,toHex)]; + } else { + _color = format ["#%1FFFFFF", [255 * 0.75] call EFUNC(common,toHex)]; + }; }; -_cursorScreenPos = (positionCameraToWorld [0, 0, 0]); -if(_cursorScreenPos distance _pos <= _distance) then { - _path = []; - if((count _this) > 4) then { - _path = +(_this select 4); - }; - _menuDepth = (count GVAR(menuDepthPath)); +[_actionData select 0, _color, _pos, 1, 1, 0, _actionData select 1, 0.5, 0.025, "TahomaB"] call FUNC(renderIcon); - _opacity = 1; - if(_menuDepth > 0 && _index != (GVAR(menuDepthPath) select (GVAR(renderDepth)))) then { - _opacity = ((GVAR(renderDepth)/_menuDepth)) max 0.25; - }; - _path set[(count _path), _index]; - // player sideChat format["r: %1", _actionData select 2]; - [_actionData select 0, [1,1,1,_opacity], _pos, 1, 1, 0, _actionData select 1, 0.5, 0.025, "TahomaB"] call FUNC(renderIcon); - GVAR(currentOptions) set[(count GVAR(currentOptions)), [_this, _pos, _path]]; - _currentRenderDepth = -1; - _currentRenderDepth = GVAR(renderDepth); - GVAR(renderDepth) = GVAR(renderDepth) + 1; - if(_index == (GVAR(menuDepthPath) select (GVAR(renderDepth)-1))) then { - _radialOffset = 0; - { - // if(_index != (GVAR(menuDepthPath) select (GVAR(renderDepth)))) then { - this = _object; - _target = _object; - _player = ACE_player; - _active = [_object, ACE_player] call (_x select 4); - // diag_log text format["_active: %1: %2", (_x select 0), _active]; - if(_active) then { - _offset = [GVAR(vecLineMap), (270*(GVAR(renderDepth)%2))-(_radialOffset*45)] call FUNC(rotateVectLine); - _mod = 0.1*_distance; - _newPos = [ - (_pos select 0) + ((_offset select 0)*_mod), - (_pos select 1) + ((_offset select 1)*_mod), - (_pos select 2) + ((_offset select 2)*_mod) - ]; - // drawLine3D [_pos, _newPos, [1,0,0,1]]; - [_object, _x, _forEachIndex, _newPos, _path] call FUNC(renderMenu); - _radialOffset = _radialOffset + 1; - }; - // }; - } forEach (_actionData select 6); - }; - GVAR(renderDepth) = GVAR(renderDepth) - 1; +// Add the action to current options +GVAR(currentOptions) pushBack [_this, _pos, _path]; + +// Exit without rendering children if it isn't +if !(_menuInSelectedPath) exitWith {true}; + +private ["_angleSpan","_angle"]; +_angleSpan = _maxAngleSpan min (55 * ((count _activeChildren) - 1)); +if (_angleSpan >= 305) then { + _angleSpan = 360; }; + +_angle = _centerAngle - _angleSpan / 2; +{ + _target = _object; + _player = ACE_player; + + _mod = (0.15 max (0.15 * ((positionCameraToWorld [0, 0, 0]) distance _pos))) / GVAR(selfMenuScale); + + _offset = ((GVAR(refSystem) select 1) vectorMultiply (-_mod * cos _angle)) vectorAdd + ((GVAR(refSystem) select 2) vectorMultiply (-_mod * sin _angle)); + _newPos = ((_pos call EFUNC(common,positionToASL)) vectorAdd _offset) call EFUNC(common,ASLToPosition); + + //drawLine3D [_pos, _newPos, [1,0,0,0.5]]; + + [_object, _x, _newPos, [_angle, 140]] call FUNC(renderMenu); + + if (_angleSpan == 360) then { + _angle = _angle + _angleSpan / (count _activeChildren); + } else { + _angle = _angle + _angleSpan / (((count _activeChildren)-1) max 1); + }; +} forEach _activeChildren; + +true diff --git a/addons/interact_menu/functions/fnc_rotateVectLine.sqf b/addons/interact_menu/functions/fnc_rotateVectLine.sqf deleted file mode 100644 index d411ffbf84..0000000000 --- a/addons/interact_menu/functions/fnc_rotateVectLine.sqf +++ /dev/null @@ -1,40 +0,0 @@ -//fnc_rotateVectLine.sqf -#include "script_component.hpp" - -private ["_theta", "_p", "_map", "_p1", "_p2", "_q1", "_q2", "_u", "_d"]; -_map = _this select 0; -_theta = _this select 1; - -_p = _map select 0; -_p1 = _map select 1; -_p2 = _map select 2; - -_q1 = +(_map select 3); -_q2 = +(_map select 4); -_u = _map select 5; -_d = _map select 6; - -/* Step 4 */ -_q2 set[0, (_q1 select 0) * cos(_theta) - (_q1 select 1) * sin(_theta)]; -_q2 set[1, (_q1 select 0) * sin(_theta) + (_q1 select 1) * cos(_theta)]; -_q2 set[2, (_q1 select 2)]; - -/* Inverse of step 3 */ -_q1 set[0, (_q2 select 0) * _d + (_q2 select 2) * (_u select 0)]; -_q1 set[1, (_q2 select 1)]; -_q1 set[2, - (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; - -/* Inverse of step 2 */ -if (_d != 0) then { - _q2 set[0, (_q1 select 0)]; - _q2 set[1, (_q1 select 1) * (_u select 2) / _d + (_q1 select 2) * (_u select 1) / _d]; - _q2 set[2, - (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; -} else { - _q2 = _q1; -}; - -/* Inverse of step 1 */ -_q1 set[0, (_q2 select 0) + (_p1 select 0)]; -_q1 set[1, (_q2 select 1) + (_p1 select 1)]; -_q1 set[2, (_q2 select 2) + (_p1 select 2)]; -_q1; diff --git a/addons/interact_menu/functions/fnc_rotateVectLineGetMap.sqf b/addons/interact_menu/functions/fnc_rotateVectLineGetMap.sqf deleted file mode 100644 index 40a1d0ca0c..0000000000 --- a/addons/interact_menu/functions/fnc_rotateVectLineGetMap.sqf +++ /dev/null @@ -1,39 +0,0 @@ -//fnc_rotateVectLineGetMap.sqf -#include "script_component.hpp" - -private ["_p", "_p1", "_p2", "_q1", "_q2", "_u", "_d"]; - -_p = _this select 0; -_p1 = _this select 1; -_p2 = _this select 2; - -_q1 = []; -_q2 = []; -_u = []; - -/* Step 1 */ -_q1 set[0, (_p select 0) - (_p1 select 0)]; -_q1 set[1, (_p select 1) - (_p1 select 1)]; -_q1 set[2, (_p select 2) - (_p1 select 2)]; - -_u set[0, (_p2 select 0) - (_p1 select 0)]; -_u set[1, (_p2 select 1) - (_p1 select 1)]; -_u set[2, (_p2 select 2) - (_p1 select 2)]; -_u = _u call BIS_fnc_unitVector; -_d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2)); - -/* Step 2 */ -if (_d != 0) then { - _q2 set[0, (_q1 select 0)]; - _q2 set[1, (_q1 select 1) * (_u select 2) / _d - (_q1 select 2) * (_u select 1) / _d]; - _q2 set[2, (_q1 select 1) * (_u select 1) / _d + (_q1 select 2) * (_u select 2) / _d]; -} else { - _q2 = _q1; -}; - -/* Step 3 */ -_q1 set[0, (_q2 select 0) * _d - (_q2 select 2) * (_u select 0)]; -_q1 set[1, (_q2 select 1)]; -_q1 set[2, (_q2 select 0) * (_u select 0) + (_q2 select 2) * _d]; - -[_p, _p1, _p2, _q1, _q2, _u, _d] diff --git a/addons/interact_menu/functions/fnc_setToRender.sqf b/addons/interact_menu/functions/fnc_setToRender.sqf deleted file mode 100644 index 4cc7cfd68f..0000000000 --- a/addons/interact_menu/functions/fnc_setToRender.sqf +++ /dev/null @@ -1,6 +0,0 @@ -//fnc_setToRender.sqf -#include "script_component.hpp" -// No idea what this function was for, it was autogenerated out of my WIP file... -private ["_options"]; -_object = _this select 0; -_options = _this select 1; diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml new file mode 100644 index 0000000000..cecb24fee2 --- /dev/null +++ b/addons/interact_menu/stringtable.xml @@ -0,0 +1,7 @@ + + + + + Always display cursor for self interaction + + diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index ce1a98abc5..1bd1e81be2 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -1,8 +1,3 @@ -#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ -}; - class CfgVehicles { class Module_F; @@ -30,122 +25,177 @@ class CfgVehicles { class Man; class CAManBase: Man { class ACE_Actions { - class ACE_TeamManagement { - displayName = "$STR_ACE_Interaction_TeamManagement"; - distance = 4; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)}); + class ACE_MainActions { + displayName = "$STR_ACE_Interaction_MainAction"; + distance = 5; + condition = QUOTE(true); statement = ""; - showDisabled = 0; - priority = 3.2; - icon = PATHTOF(UI\team\team_management_ca.paa); - subMenu[] = {"ACE_TeamManagement", 0}; - hotkey = "M"; - enableInside = 1; + icon = "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa"; + selection = "spine3"; - class ACE_JoinTeamRed { - displayName = "$STR_ACE_Interaction_JoinTeamRed"; - distance = 4; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); - statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam)); - showDisabled = 1; - icon = PATHTOF(UI\team\team_red_ca.paa); - priority = 2.4; - hotkey = "R"; + class ACE_TeamManagement { + displayName = "$STR_ACE_Interaction_TeamManagement"; + distance = 5; + condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)}); + statement = ""; + showDisabled = 0; + priority = 3.2; + icon = PATHTOF(UI\team\team_management_ca.paa); + hotkey = "M"; + enableInside = 1; + + class ACE_JoinTeamRed { + displayName = "$STR_ACE_Interaction_JoinTeamRed"; + distance = 5; + condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam)); + showDisabled = 1; + icon = PATHTOF(UI\team\team_red_ca.paa); + priority = 2.4; + hotkey = "R"; + enableInside = 1; + }; + class ACE_JoinTeamGreen { + displayName = "$STR_ACE_Interaction_JoinTeamGreen"; + distance = 5; + condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam)); + showDisabled = 1; + icon = PATHTOF(UI\team\team_green_ca.paa); + priority = 2.3; + hotkey = "G"; + enableInside = 1; + }; + class ACE_JoinTeamBlue { + displayName = "$STR_ACE_Interaction_JoinTeamBlue"; + distance = 5; + condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam)); + showDisabled = 1; + icon = PATHTOF(UI\team\team_blue_ca.paa); + priority = 2.2; + hotkey = "B"; + enableInside = 1; + }; + class ACE_JoinTeamYellow { + displayName = "$STR_ACE_Interaction_JoinTeamYellow"; + distance = 5; + condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam)); + showDisabled = 1; + icon = PATHTOF(UI\team\team_yellow_ca.paa); + priority = 2.1; + hotkey = "Y"; + enableInside = 1; + }; + + class ACE_LeaveTeam { + displayName = "$STR_ACE_Interaction_LeaveTeam"; + distance = 5; + condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'}); + statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam)); + showDisabled = 1; + icon = PATHTOF(UI\team\team_white_ca.paa); + priority = 2.5; + hotkey = "N"; + enableInside = 1; + }; + }; + + class ACE_JoinGroup { + displayName = "$STR_ACE_Interaction_JoinGroup"; + distance = 5; + condition = QUOTE(side group _player == side group _target && {group _player != group _target}); + statement = QUOTE([_player] joinSilent group _target;); + showDisabled = 0; + priority = 2.6; + icon = PATHTOF(UI\team\team_management_ca.paa); + hotkey = "J"; enableInside = 1; }; - class ACE_JoinTeamGreen { - displayName = "$STR_ACE_Interaction_JoinTeamGreen"; - distance = 4; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); - statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam)); - showDisabled = 1; - icon = PATHTOF(UI\team\team_green_ca.paa); - priority = 2.3; - hotkey = "G"; - enableInside = 1; - }; - class ACE_JoinTeamBlue { - displayName = "$STR_ACE_Interaction_JoinTeamBlue"; - distance = 4; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); - statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam)); - showDisabled = 1; - icon = PATHTOF(UI\team\team_blue_ca.paa); + + class ACE_GetDown { + displayName = "$STR_ACE_Interaction_GetDown"; + distance = 5; + condition = QUOTE([_target] call DFUNC(canInteractWithCivilian)); + statement = QUOTE([_target] call DFUNC(getDown)); + showDisabled = 0; priority = 2.2; - hotkey = "B"; - enableInside = 1; }; - class ACE_JoinTeamYellow { - displayName = "$STR_ACE_Interaction_JoinTeamYellow"; - distance = 4; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); - statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam)); - showDisabled = 1; - icon = PATHTOF(UI\team\team_yellow_ca.paa); - priority = 2.1; - hotkey = "Y"; - enableInside = 1; + class ACE_SendAway { + displayName = "$STR_ACE_Interaction_SendAway"; + distance = 5; + condition = QUOTE([_target] call DFUNC(canInteractWithCivilian)); + statement = QUOTE([_target] call DFUNC(sendAway)); + showDisabled = 0; + priority = 2.0; }; - - class ACE_LeaveTeam { - displayName = "$STR_ACE_Interaction_LeaveTeam"; - distance = 4; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'}); - statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam)); - showDisabled = 1; - icon = PATHTOF(UI\team\team_white_ca.paa); + class ACE_Pardon { + displayName = "$STR_ACE_Interaction_Pardon"; + distance = 5; + condition = QUOTE(rating _target < -2000 && {alive _target} && {side group _player == side group _target}); + statement = QUOTE([ARR_3(_target,'{_this addRating -rating _this}',_target)] call DEFUNC(common,execRemoteFnc)); + showDisabled = 0; priority = 2.5; - hotkey = "N"; enableInside = 1; }; }; + class ACE_Head { + displayName = "$STR_ACE_Interaction_Head"; + selection = "pilot"; + distance = 2.0; + condition = ""; + statement = ""; + }; + class ACE_ArmLeft { + displayName = "$STR_ACE_Interaction_ArmLeft"; + selection = "LeftForeArm"; + distance = 2.0; + condition = ""; + statement = ""; + }; + class ACE_ArmRight { + displayName = "$STR_ACE_Interaction_ArmRight"; + selection = "RightForeArm"; + distance = 2.0; + condition = ""; + statement = ""; + }; + class ACE_LegLeft { + displayName = "$STR_ACE_Interaction_LegLeft"; + selection = "LKnee"; + distance = 2.0; + condition = ""; + statement = ""; + }; + class ACE_LegRight { + displayName = "$STR_ACE_Interaction_LegRight"; + selection = "RKnee"; + distance = 2.0; + condition = ""; + statement = ""; + }; + class ACE_Weapon { + displayName = "$STR_ACE_Interaction_Weapon"; + selection = "weapon"; + distance = 2.0; + condition = ""; + statement = ""; + }; - class ACE_TapShoulder { + class ACE_TapShoulderRight { displayName = "$STR_ACE_Interaction_TapShoulder"; - distance = 4; + selection = "rightshoulder"; + distance = 2.0; condition = QUOTE([ARR_2(_player, _target)] call DFUNC(canTapShoulder)); - statement = QUOTE([ARR_2(_player, _target)] call DFUNC(tapShoulder)); - showDisabled = 1; - priority = 2.8; - hotkey = "Q"; - enableInside = 1; + statement = QUOTE([ARR_3(_player, _target, 0)] call DFUNC(tapShoulder)); }; - class ACE_JoinGroup { - displayName = "$STR_ACE_Interaction_JoinGroup"; - distance = 4; - condition = QUOTE(side group _player == side group _target && {group _player != group _target}); - statement = QUOTE([_player] joinSilent group _target;); - showDisabled = 0; - priority = 2.6; - icon = PATHTOF(UI\team\team_management_ca.paa); - hotkey = "J"; - enableInside = 1; - }; - - class ACE_GetDown { - displayName = "$STR_ACE_Interaction_GetDown"; - distance = 4; - condition = QUOTE([_target] call DFUNC(canInteractWith)); - statement = QUOTE([_target] call DFUNC(getDown)); - showDisabled = 0; - priority = 2.2; - }; - class ACE_SendAway { - displayName = "$STR_ACE_Interaction_SendAway"; - distance = 4; - condition = QUOTE([_target] call DFUNC(canInteractWith)); - statement = QUOTE([_target] call DFUNC(sendAway)); - showDisabled = 0; - priority = 2.0; - }; - class ACE_Pardon { - displayName = "$STR_ACE_Interaction_Pardon"; - distance = 4; - condition = QUOTE(rating _target < -2000 && {alive _target} && {side group _player == side group _target}); - statement = QUOTE([ARR_3(_target,'{_this addRating -rating _this}',_target)] call DEFUNC(common,execRemoteFnc)); - showDisabled = 0; - priority = 2.5; - enableInside = 1; + class ACE_TapShoulderLeft { + displayName = "$STR_ACE_Interaction_TapShoulder"; + selection = "leftshoulder"; + distance = 2.0; + condition = QUOTE([ARR_2(_player, _target)] call DFUNC(canTapShoulder)); + statement = QUOTE([ARR_3(_player, _target, 1)] call DFUNC(tapShoulder)); }; }; @@ -157,7 +207,6 @@ class CfgVehicles { showDisabled = 1; priority = 3.2; icon = PATHTOF(UI\team\team_management_ca.paa); - subMenu[] = {"ACE_TeamManagement", 1}; enableInside = 1; hotkey = "M"; @@ -235,30 +284,12 @@ class CfgVehicles { }; }; - /* DANCE ANIMATION DOESN'T WORK :( - class ACE_Dance { - displayName = "$STR_ACE_Interaction_Dance"; - condition = "isClass (configFile >> 'CfgPatches' >> 'ACE_Movement') and !ACE_Dancing"; - statement = "ACE_Dancing = true; [-2, {_this switchMove 'TestDance';}, player] call CBA_fnc_globalExecute;"; - showDisabled = 0; - priority = -1.2; - }; - class ACE_StopDancing { - displayName = "$STR_ACE_Interaction_StopDancing"; - condition = "ACE_Dancing"; - statement = "ACE_Dancing = false; [-2, {_this switchMove '';}, player] call CBA_fnc_globalExecute;"; - showDisabled = 0; - priority = -1.2; - }; - */ - class ACE_Gestures { displayName = "$STR_ACE_Interaction_Gestures"; condition = "canStand _target"; statement = ""; showDisabled = 1; priority = 3.5; - subMenu[] = {"ACE_Gestures", 1}; icon = PATHTOF(UI\gestures_ca.paa); hotkey = "G"; @@ -365,67 +396,118 @@ class CfgVehicles { showDisabled = 1; priority = 4.5; icon = ""; // @todo - subMenu[] = {"ACE_Equipment", 1}; enableInside = 1; hotkey = "E"; - - class ACE_Dummy { - displayName = ""; - condition = QUOTE(false); - statement = ""; - showDisabled = 1; - priority = -99; - icon = PATHTOEF(common,UI\blank_CO.paa); - enableInside = 1; - }; }; }; }; class LandVehicle; class Car: LandVehicle { - class ACE_Actions {}; + class ACE_Actions { + class ACE_MainActions { + displayName = "$STR_ACE_Interaction_MainAction"; + selection = ""; + distance = 10; + condition = "true"; + }; + }; class ACE_SelfActions {}; }; class Tank: LandVehicle { - class ACE_Actions {}; + class ACE_Actions { + class ACE_MainActions { + displayName = "$STR_ACE_Interaction_MainAction"; + selection = ""; + distance = 10; + condition = "true"; + }; + }; class ACE_SelfActions {}; }; class Air; class Helicopter: Air { - class ACE_Actions {}; + class ACE_Actions { + class ACE_MainActions { + displayName = "$STR_ACE_Interaction_MainAction"; + selection = ""; + distance = 10; + condition = "true"; + }; + }; class ACE_SelfActions {}; }; class Plane: Air { - class ACE_Actions {}; + class ACE_Actions { + class ACE_MainActions { + displayName = "$STR_ACE_Interaction_MainAction"; + selection = ""; + distance = 10; + condition = "true"; + }; + }; class ACE_SelfActions {}; }; class Ship; class Ship_F: Ship { class ACE_Actions { - class ACE_Push { - displayName = "$STR_ACE_Interaction_Push"; - distance = 4; - condition = QUOTE(getMass _target < 1000 && {alive _target}); - statement = QUOTE([ARR_2(_target, [ARR_3(2 * (vectorDir _player select 0), 2 * (vectorDir _player select 1), 0.5)])] call FUNC(push);); - showDisabled = 0; - priority = -1; + class ACE_MainActions { + displayName = "$STR_ACE_Interaction_MainAction"; + selection = ""; + distance = 10; + condition = "true"; + + class ACE_Push { + displayName = "$STR_ACE_Interaction_Push"; + distance = 6; + condition = QUOTE(getMass _target < 1000 && {alive _target}); + statement = QUOTE([ARR_2(_target, [ARR_3(2 * (vectorDir _player select 0), 2 * (vectorDir _player select 1), 0.5)])] call FUNC(push);); + showDisabled = 0; + priority = -1; + }; }; }; class ACE_SelfActions {}; }; class StaticWeapon: LandVehicle { - class ACE_Actions {}; + class ACE_Actions { + class ACE_MainActions { + displayName = "$STR_ACE_Interaction_MainAction"; + selection = "gunnerview"; + distance = 2; + condition = "true"; + }; + }; class ACE_SelfActions {}; }; class StaticMortar; class Mortar_01_base_F: StaticMortar { - class ACE_Actions {}; + class ACE_Actions { + class ACE_MainActions { + displayName = "$STR_ACE_Interaction_MainAction"; + selection = "gunnerview"; + distance = 2; + condition = "true"; + }; + }; class ACE_SelfActions {}; }; -}; \ No newline at end of file + class thingX; + class ReammoBox_F: thingX { + class ACE_Actions { + class ACE_MainActions { + displayName = "$STR_ACE_Interaction_MainAction"; + selection = ""; + distance = 2; + condition = "true"; + }; + }; + class ACE_SelfActions {}; + }; + +}; diff --git a/addons/interaction/Menu_Config.hpp b/addons/interaction/Menu_Config.hpp index ccd0f7d414..38f12066e0 100644 --- a/addons/interaction/Menu_Config.hpp +++ b/addons/interaction/Menu_Config.hpp @@ -43,370 +43,6 @@ class ACE_Interaction_Button_Base { soundEscape[] = {"\A3\ui_f\data\sound\RscButton\soundEscape",0.09,1}; }; -#define ICON_BORDER 0.05 - -// Old command rose -class ACE_Interaction_Dialog { - idd = 1713999; - enableSimulation = 1; - movingEnable = 0; - onLoad = "_dlgInteractionDialog = _this select 0; for '_a' from 10 to 19 do {(_dlgInteractionDialog displayCtrl _a) ctrlShow false}; uiNamespace setVariable ['ACE_Interaction_Dialog', _dlgInteractionDialog];"; - objects[] = {}; - class controls { - class Interaction_BackgroundMain: ACE_Interaction_Button_Base { - type = 0; - style = 2; - idc = 2; - colorBackground[] = {0,0,0,0.5}; - colorBackgroundDisabled[] = {0,0,0,0.5}; - x = "(0.5-1.8/16/2 + 0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.55/9/2 + 0 * 0.04) * safezoneH + safezoneY"; - w = "1.8 / 16 * safezoneW"; - h = "0.55 / 9 * safezoneH"; - }; - - class Interaction_ButtonMain: ACE_Interaction_Button_Base { - action = "-1 call ACE_Interaction_fnc_onClick;"; - style = 2; - tooltip = ""; - text = "Interaction Menu"; - idc = 3; - sizeEx = "0.6 / 40 / (getResolution select 5)"; - colorBackground[] = {0,0,0,0}; - colorBackgroundDisabled[] = {0,0,0,0}; - colorBackgroundActive[] = {1,1,1,0.2}; - colorFocused[] = {0,0,0,0}; - x = "(0.5-1.8/16/2 + 0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.55/9/2 + 0 * 0.04) * safezoneH + safezoneY"; - w = "1.8 / 16 * safezoneW"; - h = "0.55 / 9 * safezoneH"; - }; - - class Interaction_Background0: ACE_Interaction_Button_Base { - type = 0; - style = 2; - idc = 40; - colorBackground[] = {0,0,0,0.5}; - colorBackgroundDisabled[] = {0,0,0,0.5}; - x = "(0.5-2.0/16/2 + 0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 2.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Background1: Interaction_Background0 { - idc = 41; - x = "(0.5-2.0/16/2 + 1.0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 1.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Background2: Interaction_Background0 { - idc = 42; - x = "(0.5-2.0/16/2 + 1.25 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 0.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Background3: Interaction_Background0 { - idc = 43; - x = "(0.5-2.0/16/2 + 1.25 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 0.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Background4: Interaction_Background0 { - idc = 44; - x = "(0.5-2.0/16/2 + 1.0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 1.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Background5: Interaction_Background0 { - idc = 45; - x = "(0.5-2.0/16/2 + 0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 2.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Background6: Interaction_Background0 { - idc = 46; - x = "(0.5-2.0/16/2 - 1.0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 1.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Background7: Interaction_Background0 { - idc = 47; - x = "(0.5-2.0/16/2 - 1.25 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 0.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Background8: Interaction_Background0 { - idc = 48; - x = "(0.5-2.0/16/2 - 1.25 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 0.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Background9: Interaction_Background0 { - idc = 49; - x = "(0.5-2.0/16/2 - 1.0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 1.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - - class Interaction_Icon0: ACE_Interaction_Button_Base { - tooltip = ""; - text = ""; - idc = 20; - type = 0; - style = 48; - colorBackground[] = {0,0,0,0}; - x = (0.5-(2.0-ICON_BORDER)/16/2 + 0 * 0.1) * safezoneW + safezoneX; - y = (0.5-(0.3-ICON_BORDER)/9/2 - 2.5 * 0.04) * safezoneH + safezoneY; - w = (0.3-ICON_BORDER) / 16 * safezoneW; - h = (0.3-ICON_BORDER) / 9 * safezoneH; - }; - class Interaction_Icon1: Interaction_Icon0 { - idc = 21; - x = (0.5-(2.0-ICON_BORDER)/16/2 + 1.0 * 0.1) * safezoneW + safezoneX; - y = (0.5-(0.3-ICON_BORDER)/9/2 - 1.5 * 0.04) * safezoneH + safezoneY; - w = (0.3-ICON_BORDER) / 16 * safezoneW; - h = (0.3-ICON_BORDER) / 9 * safezoneH; - }; - class Interaction_Icon2: Interaction_Icon0 { - idc = 22; - x = (0.5-(2.0-ICON_BORDER)/16/2 + 1.25 * 0.1) * safezoneW + safezoneX; - y = (0.5-(0.3-ICON_BORDER)/9/2 - 0.5 * 0.04) * safezoneH + safezoneY; - w = (0.3-ICON_BORDER) / 16 * safezoneW; - h = (0.3-ICON_BORDER) / 9 * safezoneH; - }; - class Interaction_Icon3: Interaction_Icon0 { - idc = 23; - x = (0.5-(2.0-ICON_BORDER)/16/2 + 1.25 * 0.1) * safezoneW + safezoneX; - y = (0.5-(0.3-ICON_BORDER)/9/2 + 0.5 * 0.04) * safezoneH + safezoneY; - w = (0.3-ICON_BORDER) / 16 * safezoneW; - h = (0.3-ICON_BORDER) / 9 * safezoneH; - }; - class Interaction_Icon4: Interaction_Icon0 { - idc = 24; - x = (0.5-(2.0-ICON_BORDER)/16/2 + 1.0 * 0.1) * safezoneW + safezoneX; - y = (0.5-(0.3-ICON_BORDER)/9/2 + 1.5 * 0.04) * safezoneH + safezoneY; - w = (0.3-ICON_BORDER) / 16 * safezoneW; - h = (0.3-ICON_BORDER) / 9 * safezoneH; - }; - class Interaction_Icon5 : Interaction_Icon0 { - idc = 25; - x = (0.5-(2.0-ICON_BORDER)/16/2 + 0 * 0.1) * safezoneW + safezoneX; - y = (0.5-(0.3-ICON_BORDER)/9/2 + 2.5 * 0.04) * safezoneH + safezoneY; - w = (0.3-ICON_BORDER) / 16 * safezoneW; - h = (0.3-ICON_BORDER) / 9 * safezoneH; - }; - class Interaction_Icon6: Interaction_Icon0 { - idc = 26; - x = (0.5-(2.0-ICON_BORDER)/16/2 - 1.0 * 0.1) * safezoneW + safezoneX; - y = (0.5-(0.3-ICON_BORDER)/9/2 + 1.5 * 0.04) * safezoneH + safezoneY; - w = (0.3-ICON_BORDER) / 16 * safezoneW; - h = (0.3-ICON_BORDER) / 9 * safezoneH; - }; - class Interaction_Icon7: Interaction_Icon0 { - idc = 27; - x = (0.5-(2.0-ICON_BORDER)/16/2 - 1.25 * 0.1) * safezoneW + safezoneX; - y = (0.5-(0.3-ICON_BORDER)/9/2 + 0.5 * 0.04) * safezoneH + safezoneY; - w = (0.3-ICON_BORDER) / 16 * safezoneW; - h = (0.3-ICON_BORDER) / 9 * safezoneH; - }; - class Interaction_Icon8: Interaction_Icon0 { - idc = 28; - x = (0.5-(2.0-ICON_BORDER)/16/2 - 1.25 * 0.1) * safezoneW + safezoneX; - y = (0.5-(0.3-ICON_BORDER)/9/2 - 0.5 * 0.04) * safezoneH + safezoneY; - w = (0.3-ICON_BORDER) / 16 * safezoneW; - h = (0.3-ICON_BORDER) / 9 * safezoneH; - }; - class Interaction_Icon9: Interaction_Icon0 { - idc = 29; - x = (0.5-(2.0-ICON_BORDER)/16/2 - 1.0 * 0.1) * safezoneW + safezoneX; - y = (0.5-(0.3-ICON_BORDER)/9/2 - 1.5 * 0.04) * safezoneH + safezoneY; - w = (0.3-ICON_BORDER) / 16 * safezoneW; - h = (0.3-ICON_BORDER) / 9 * safezoneH; - }; - - class Interaction_Shortcut0: ACE_Interaction_Button_Base { - tooltip = ""; - text = ""; - idc = 30; - style = 2; - colorBackground[] = {0,0,0,0}; - x = "(0.5+2.0/16/2-0.3/16 + 0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 2.5 * 0.04) * safezoneH + safezoneY"; - w = "0.3 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Shortcut1: Interaction_Shortcut0 { - idc = 31; - type = 0; - x = "(0.5+2.0/16/2-0.3/16 + 1.0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 1.5 * 0.04) * safezoneH + safezoneY"; - w = "0.3 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Shortcut2: Interaction_Shortcut0 { - idc = 32; - type = 0; - x = "(0.5+2.0/16/2-0.3/16 + 1.25 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 0.5 * 0.04) * safezoneH + safezoneY"; - w = "0.3 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Shortcut3: Interaction_Shortcut0 { - idc = 33; - type = 0; - x = "(0.5+2.0/16/2-0.3/16 + 1.25 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 0.5 * 0.04) * safezoneH + safezoneY"; - w = "0.3 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Shortcut4: Interaction_Shortcut0 { - idc = 34; - type = 0; - x = "(0.5+2.0/16/2-0.3/16 + 1.0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 1.5 * 0.04) * safezoneH + safezoneY"; - w = "0.3 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Shortcut5 : Interaction_Shortcut0 { - idc = 35; - type = 0; - x = "(0.5+2.0/16/2-0.3/16 + 0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 2.5 * 0.04) * safezoneH + safezoneY"; - w = "0.3 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Shortcut6: Interaction_Shortcut0 { - idc = 36; - type = 0; - x = "(0.5+2.0/16/2-0.3/16 - 1.0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 1.5 * 0.04) * safezoneH + safezoneY"; - w = "0.3 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Shortcut7: Interaction_Shortcut0 { - idc = 37; - type = 0; - x = "(0.5+2.0/16/2-0.3/16 - 1.25 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 0.5 * 0.04) * safezoneH + safezoneY"; - w = "0.3 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Shortcut8: Interaction_Shortcut0 { - idc = 38; - type = 0; - x = "(0.5+2.0/16/2-0.3/16 - 1.25 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 0.5 * 0.04) * safezoneH + safezoneY"; - w = "0.3 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Shortcut9: Interaction_Shortcut0 { - idc = 39; - type = 0; - x = "(0.5+2.0/16/2-0.3/16 - 1.0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 1.5 * 0.04) * safezoneH + safezoneY"; - w = "0.3 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - - class Interaction_Button0: ACE_Interaction_Button_Base { - action = "0 call ACE_Interaction_fnc_onClick;"; - style = 2; - tooltip = ""; - text = ""; - idc = 10; - colorBackground[] = {0,0,0,0}; - colorBackgroundDisabled[] = {0,0,0,0}; - colorBackgroundActive[] = {1,1,1,0.2}; - colorFocused[] = {0,0,0,0}; - x = "(0.5-2.0/16/2 + 0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 2.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Button1: Interaction_Button0 { - action = "1 call ACE_Interaction_fnc_onClick;"; - idc = 11; - x = "(0.5-2.0/16/2 + 1.0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 1.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Button2: Interaction_Button0 { - action = "2 call ACE_Interaction_fnc_onClick;"; - idc = 12; - x = "(0.5-2.0/16/2 + 1.25 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 0.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Button3: Interaction_Button0 { - action = "3 call ACE_Interaction_fnc_onClick;"; - idc = 13; - x = "(0.5-2.0/16/2 + 1.25 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 0.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Button4: Interaction_Button0 { - action = "4 call ACE_Interaction_fnc_onClick;"; - idc = 14; - x = "(0.5-2.0/16/2 + 1.0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 1.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Button5: Interaction_Button0 { - action = "5 call ACE_Interaction_fnc_onClick;"; - idc = 15; - x = "(0.5-2.0/16/2 + 0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 2.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Button6: Interaction_Button0 { - action = "6 call ACE_Interaction_fnc_onClick;"; - idc = 16; - x = "(0.5-2.0/16/2 - 1.0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 1.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Button7: Interaction_Button0 { - action = "7 call ACE_Interaction_fnc_onClick;"; - idc = 17; - x = "(0.5-2.0/16/2 - 1.25 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 + 0.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Button8: Interaction_Button0 { - action = "8 call ACE_Interaction_fnc_onClick;"; - idc = 18; - x = "(0.5-2.0/16/2 - 1.25 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 0.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - class Interaction_Button9: Interaction_Button0 { - action = "9 call ACE_Interaction_fnc_onClick;"; - idc = 19; - x = "(0.5-2.0/16/2 - 1.0 * 0.1) * safezoneW + safezoneX"; - y = "(0.5-0.3/9/2 - 1.5 * 0.04) * safezoneH + safezoneY"; - w = "2.0 / 16 * safezoneW"; - h = "0.3 / 9 * safezoneH"; - }; - }; -}; - class RscListbox; class IGUIBack; class RscText; @@ -518,75 +154,6 @@ class RscInteractionText: RscText{ h = 1.5 * GUI_GRID_H; }; class RscTitles { - class ACE_FlowMenu { - idd = 9920; - enableSimulation = 1; - movingEnable = 0; - fadeIn=0.5; - fadeOut=0.5; - duration = 10e10; - onLoad = "uiNamespace setVariable ['ACE_Flow_Display', _this select 0];"; - - class controls { - class RearIcon: RscInteractionIcon{ - idc = 999; - text = PATHTOF(UI\CenterIcon_ca.paa); - x = 17.9 * GUI_GRID_W; - y = 10 * GUI_GRID_H; - w = 3.7 * GUI_GRID_H; - h = 5.75 * GUI_GRID_H; - }; - class TopIcon: RscInteractionIcon{ - idc = 1200; - h = 1 * GUI_GRID_H; - y = 9 * GUI_GRID_H; - }; - class FirstIcon: RscInteractionIcon{ - idc = 1201; - y = 10.25 * GUI_GRID_H; - h = 1.5 * GUI_GRID_H; - }; - class SelectedItemIcon: RscInteractionIcon{ - idc = 1202; - y = 12 * GUI_GRID_H; - }; - class ThirdIcon: RscInteractionIcon{ - idc = 1203; - y = 14.25 * GUI_GRID_H; - h = 1.5 * GUI_GRID_H; - }; - class BottomIcon: TopIcon{ - idc = 1204; - y = 16 * GUI_GRID_H; - }; - class ItemName: RscText{ - idc = 1000; - style = 0x01; - x = 5.25 * GUI_GRID_W; - y = 12.15 * GUI_GRID_H; - w = 13 * GUI_GRID_W; - h = 1.5 * GUI_GRID_H; - colorBackground[] = {0.3, 0.3, 0.3, 0.8}; - }; - class BackIcon: RscInteractionIcon{ - idc = 1210; - text = PATHTOF(UI\backArrow_ca.paa); - x = 18.25 * GUI_GRID_W; - y = 12.69 * GUI_GRID_H; - w = 0.5 * GUI_GRID_W; - h = 0.5 * GUI_GRID_H; - }; - class ItemDetails: RscStructuredText{ - idc = 1100; - style = 0x0c; - x = 23.5 * GUI_GRID_W; - y = 11 * GUI_GRID_H; - w = 13 * GUI_GRID_W; - h = 3.9 * GUI_GRID_H; - colorBackground[] = {0, 0, 0, 0.4}; - }; - }; - }; class GVAR(InteractionHelper) { idd = 9930; enableSimulation = 1; diff --git a/addons/interaction/XEH_clientInit.sqf b/addons/interaction/XEH_clientInit.sqf index 047e528ad6..e303fae857 100644 --- a/addons/interaction/XEH_clientInit.sqf +++ b/addons/interaction/XEH_clientInit.sqf @@ -16,164 +16,55 @@ GVAR(isOpeningDoor) = false; // Add keybinds -["ACE3", - localize "STR_ACE_Interaction_InteractionMenu", - { - // Conditions: canInteract - _exceptions = ["ACE_Drag_isNotDragging", "ACE_Medical_canTreat", QEGVAR(captives,isNotEscorting), "ACE_Interaction_isNotSwimming"]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(isNull (findDisplay 1713999)) exitWith {false}; +["ACE3", QGVAR(openDoor), localize "STR_ACE_Interaction_OpenDoor", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (GVAR(isOpeningDoor) || {[2] call FUNC(getDoor) select 1 == ''}) exitWith {false}; - // Statement - call FUNC(onButtonDown); - true - }, - [219, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + call EFUNC(interaction,openDoor); + true +}, +{ + //Probably don't want any condidtions here, so variable never gets locked down + // Statement + GVAR(isOpeningDoor) = false; + true +}, +[57, [false, true, false]], false] call cba_fnc_addKeybind; //Key CTRL+Space -["ACE3", - localize "STR_ACE_Interaction_InteractionMenu", - { - // Conditions: canInteract - _exceptions = ["ACE_Drag_isNotDragging", "ACE_Medical_canTreat", QEGVAR(captives,isNotEscorting), "ACE_Interaction_isNotSwimming"]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(!isNull (findDisplay 1713999) && {QGVAR(AutoCloseMenu)}) exitWith {false}; - // Statement - if (GVAR(MenuType) mod 2 == 0) then {call FUNC(onButtonUp)}; - true - }, - [219, [false, false, false]], - false, - "keyup" -] call cba_fnc_registerKeybind; +["ACE3", QGVAR(tapShoulder), localize "STR_ACE_Interaction_TapShoulder", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player, cursorTarget] call FUNC(canTapShoulder)) exitWith {false}; -["ACE3", - localize "STR_ACE_Interaction_InteractionMenuSelf", - { - // Conditions: canInteract - _exceptions = ["ACE_Drag_isNotDragging", "ACE_Medical_canTreat", QEGVAR(captives,isNotEscorting), QEGVAR(captives,isNotSurrendering), "ACE_Interaction_isNotSwimming", "ACE_Common_notOnMap"]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(isNull (findDisplay 1713999)) exitWith {false}; + // Statement + [ACE_player, cursorTarget] call FUNC(tapShoulder); + true +}, +{false}, +[20, [true, false, false]], false] call cba_fnc_addKeybind; - // Statement - call FUNC(onButtonDownSelf); - true - }, - [219, [false, true, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; +["ACE3", QGVAR(modifierKey), localize "STR_ACE_Interaction_ModifierKey", +{ + // Conditions: canInteract + //if !([ACE_player, objNull, ["isNotDragging"]] call EGVAR(common,canInteractWith)) exitWith {false}; // not needed -["ACE3", - localize "STR_ACE_Interaction_InteractionMenuSelf", - { - // Conditions: canInteract - _exceptions = ["ACE_Drag_isNotDragging", "ACE_Medical_canTreat", QEGVAR(captives,isNotEscorting), QEGVAR(captives,isNotSurrendering), "ACE_Interaction_isNotSwimming"]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(!isNull (findDisplay 1713999) && {QGVAR(AutoCloseMenu)}) exitWith {false}; + // Statement + ACE_Modifier = 1; + // Return false so it doesn't block other actions + false +}, +{ + //Probably don't want any condidtions here, so variable never gets locked down + ACE_Modifier = 0; + false; +}, +[29, [false, false, false]], false] call cba_fnc_addKeybind; - // Statement - if (GVAR(MenuType) mod 2 == 1) then {call FUNC(onButtonUp)}; - true - }, - [219, [false, true, false]], - false, - "keyup" -] call cba_fnc_registerKeybind; - -["ACE3", - localize "STR_ACE_Interaction_OpenDoor", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(!GVAR(isOpeningDoor) && - {[2] call FUNC(getDoor) select 1 != ''} - ) exitWith {false}; - - // Statement - call EFUNC(interaction,openDoor); - true - }, - [57, [false, true, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; - -["ACE3", - localize "STR_ACE_Interaction_OpenDoor", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(GVAR(isOpeningDoor)) exitWith {false}; - - // Statement - GVAR(isOpeningDoor) = false; - true - }, - [57, [false, true, false]], - false, - "keyup" -] call cba_fnc_registerKeybind; - -["ACE3", - localize "STR_ACE_Interaction_TapShoulder", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([ACE_player, cursorTarget] call FUNC(canTapShoulder)) exitWith {false}; - - // Statement - [ACE_player, cursorTarget] call FUNC(tapShoulder); - true - }, - [20, [true, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; - -["ACE3", - localize "STR_ACE_Interaction_ModifierKey", - { - // Conditions: canInteract - _exceptions = ["ACE_Drag_isNotDragging"]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - - // Statement - ACE_Modifier = 1; - // Return false so it doesn't block other actions - false - }, - [29, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; - -["ACE3", - localize "STR_ACE_Interaction_ModifierKey", - { - // Conditions: canInteract - _exceptions = ["ACE_Drag_isNotDragging"]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - - // Statement - ACE_Modifier = 0; - // Return false so it doesn't block other actions - false - }, - [29, [false, false, false]], - false, - "keyup" -] call cba_fnc_registerKeybind; +["isNotSwimming", {!underwater (_this select 0)}] call EFUNC(common,addCanInteractWithCondition); diff --git a/addons/interaction/XEH_preInit.sqf b/addons/interaction/XEH_preInit.sqf index bcb8103ea2..6efa72778e 100644 --- a/addons/interaction/XEH_preInit.sqf +++ b/addons/interaction/XEH_preInit.sqf @@ -2,49 +2,30 @@ ADDON = false; -PREP(addInteraction); -PREP(addInteractionSelf); PREP(addSelectableItem); -PREP(addToTooltip); PREP(applyButtons); -PREP(canInteractWith); +PREP(canInteractWithCivilian); PREP(canTapShoulder); -PREP(getActions); -PREP(getActions2); PREP(getDoor); PREP(getDoorAnimations); PREP(getDown); PREP(getSelectedButton); PREP(hideMenu); PREP(hideMouseHint); -PREP(initialiseInteraction); PREP(isInRange); PREP(joinTeam); -PREP(menuKeyInput); PREP(moduleInteraction); PREP(moveDown); -PREP(onButtonDown); -PREP(onButtonDownSelf); -PREP(onButtonUp); -PREP(onClick); PREP(onSelectMenuDblClick); PREP(openDoor); -PREP(openMenu); PREP(openMenuSelectUI); -PREP(openMenuSelf); PREP(openSelectMenu); -PREP(openSubMenu); -PREP(openSubMenuSelf); PREP(prepareSelectMenu); PREP(push); -PREP(removeInteraction); -PREP(removeInteractionSelf); PREP(removeTag); PREP(sendAway); -PREP(showMenu); PREP(showMouseHint); PREP(sortOptionsByPriority); PREP(tapShoulder); -PREP(updateTooltipPosition); ADDON = true; diff --git a/addons/interaction/config.cpp b/addons/interaction/config.cpp index 90db08e9e2..a39e8f8bf5 100644 --- a/addons/interaction/config.cpp +++ b/addons/interaction/config.cpp @@ -19,32 +19,8 @@ class CfgPatches { #include class ACE_Settings { - class GVAR(FlowMenu) { - value = 0; - typeName = "BOOL"; - isClientSetable = 1; - displayName = "$STR_ACE_Interaction_FlowMenu"; - }; - class GVAR(AutoCloseMenu) { - value = 0; - typeName = "BOOL"; - isClientSetable = 1; - displayName = "$STR_ACE_Interaction_AutoCloseMenu"; - }; - class GVAR(AutoCenterCursor) { - value = 1; - typeName = "BOOL"; - isClientSetable = 1; - displayName = "$STR_ACE_Interaction_AutoCenterCursor"; - }; class GVAR(EnableTeamManagement) { value = 1; typeName = "BOOL"; }; }; - -class ACE_canInteractConditions { - class GVAR(isNotSwimming) { - condition = QUOTE( !underwater ACE_player ); - }; -}; diff --git a/addons/interaction/functions/fnc_AddSelectableItem.sqf b/addons/interaction/functions/fnc_AddSelectableItem.sqf index 1e3065d234..966c4fe043 100644 --- a/addons/interaction/functions/fnc_AddSelectableItem.sqf +++ b/addons/interaction/functions/fnc_AddSelectableItem.sqf @@ -29,13 +29,8 @@ if (_picture == "" || _picture == "PictureThing") then { _picture = QUOTE(PATHTOF(UI\dot_ca.paa)); }; -if ((profileNamespace getVariable [QGVAR(FlowMenu), false])) then { - //[_displayName, _statement, _condition, _priority, _subMenu, _icon, _tooltip, _conditionShow, _exceptions, _distance, _hotkey] - _container pushBack [_displayName, nil, {true},0,[], _picture, "", {true}, [], 4, "", _data]; -}else{ - _index = lbAdd [_container, _displayName]; - lbSetData [_container, _index, str _data]; - lbSetPicture [_container, _index, _picture]; -}; +_index = lbAdd [_container, _displayName]; +lbSetData [_container, _index, str _data]; +lbSetPicture [_container, _index, _picture]; _container diff --git a/addons/interaction/functions/fnc_GetActions.sqf b/addons/interaction/functions/fnc_GetActions.sqf deleted file mode 100644 index 67386331c1..0000000000 --- a/addons/interaction/functions/fnc_GetActions.sqf +++ /dev/null @@ -1,154 +0,0 @@ -/* - Author: - commy2 - Garth de Wet (LH) - - Description: - - Parameters: - 0: OBJECT - target - 1: ARRAY - Parents of the target object - 2: ARRAY - Actions - 3: ARRAY - Patches - 4: CONFIG - Parent config (ConfigFile >> "CfgVehicles"/MissionConfigFile >> "CfgVehicles") - 5: BOOL - Is mission config file? - 6: STRING - Classname ("ACE_Actions"/"ACE_SelfActions") - 7: STRING - Sub-class - - Returns: - Nothing - - Example: - [player, [configfile >> "CfgVehicles" >> typeOf player, true] call BIS_fnc_returnParents, [], [],configfile >> "CfgVehicles", false, "ACE_Actions"] call ACE_Interaction_fnc_GetActions; - - [player, [configfile >> "CfgVehicles" >> typeOf player, true] call BIS_fnc_returnParents, [], [],configfile >> "CfgVehicles", false, "ACE_SelfActions"] call ACE_Interaction_fnc_GetActions; -*/ -#include "script_component.hpp" - -#define DEFAULT_ICON QUOTE(PATHTOF(UI\dot_ca.paa)) -private ["_target", "_parents", "_actions", "_patches", "_baseConfig", "_actionType", "_i","_index", "_missionConfig", "_stdConfig"]; -_target = _this select 0; -_parents = _this select 1; -_actions = _this select 2; -_patches = _this select 3; -_baseConfig = _this select 4; -_missionConfig = _this select 5; -_actionType = _this select 6; -_subClass = _this select 7; - -_stdConfig = (configFile >> "CfgVehicles" >> typeOf _target >> _actionType); -if (_subClass != "") then { - _stdConfig = _stdConfig >> _subClass; -}; - -_count = count _parents; -for "_i" from 0 to (_count - 1) do { - _config = _baseConfig >> _parents select _i >> _actionType; - if (_subClass != "") then { - _config = _config >> _subClass; - }; - - _count = count _config; - if (_count > 0) then { - for "_index" from 0 to (_count - 1) do { - private ["_action", "_displayName", "_distance","_condition","_statement","_showDisabled", "_priority", "_tooltip", "_hotkey", - "_subMenu", "_conditionShow", "_exceptions", "_icon", "_actionToCache", "_cacheActions", "_cache", "_indexCache", "_configName"]; - _action = if (_missionConfig) then {_config select _index} else {_stdConfig >> configName (_config select _index)}; - _cache = missionNamespace getVariable [QGVAR(MenuCache), [[], [], []]]; - - if (count _action > 0) then { - _configName = configName _action; - - _cacheConfigs = _cache select 0; - _cacheActions = _cache select 1; - _cacheIndices = _cache select 2; - - _indexCache = _cacheConfigs find _action; - if (_indexCache == -1) then { - _displayName = getText (_action >> "displayName"); - _distance = getNumber (_action >> "distance"); - _priority = getNumber (_action >> "priority"); - _subMenu = getArray (_action >> "subMenu"); - _tooltip = getText (_action >> "tooltip"); - _hotkey = getText (_action >> "hotkey"); - _enableInside = getNumber (_action >> "enableInside"); - - // Condition - _condition = getText (_action >> "condition"); - if (_condition == "") then {_condition = "true"}; - - _condition = _condition + format [QUOTE( && {%1 call EGVAR(common,canInteract)} && {[ARR_2(ACE_player, GVAR(Target))] call EFUNC(common,canInteractWith)} ), getArray (_action >> "exceptions")]; - if (_enableInside != 1) then {_condition = _condition + " && {_player == _vehicle}"}; - - _condition = compile _condition; - - // Condition to show the action - _conditionShow = getText (_action >> "conditionShow"); - _conditionShow = if (_conditionShow == "") then {{true}} else {compile _conditionShow}; - - _showDisabled = getNumber (_action >> "showDisabled") == 1; - if (isText (_action >> "conditionShow")) then { - _showDisabled = [_object, _player] call _conditionShow; - }; - - // Exceptions to the general conditions that have to be true - _exceptions = getArray (_action >> "exceptions"); - - // statement - _statement = getText (_action >> "statement"); - _statement = compile _statement; - - if (profileNamespace getVariable [QGVAR(FlowMenu), false]) then { - _statement = if (getText (_action >> "statement") == "" && {count _subMenu > 1}) then { - compile format [QUOTE( call FUNC(hideMenu);if(%2 == 1)then{['%1'] call FUNC(openSubMenuSelf);}else{['%1'] call FUNC(openSubMenu);}; ), _subMenu select 0, _subMenu select 1]; - } else { - compile (QUOTE( call FUNC(hideMenu); ) + getText (_action >> "statement")); - }; - }; - - // icon - _icon = getText (_action >> "Icon"); - if (_icon == "") then { - _icon = DEFAULT_ICON; - }; - - _actionToCache = [_displayName, _statement, _condition, _priority, _subMenu, _icon, _tooltip, _conditionShow, _exceptions, _distance, _hotkey]; - - if (!(_configName in _patches) && {_showDisabled || {[_object, _player] call _condition}} && {_distance == 0 || {[_object, _distance] call FUNC(isInRange)}}) then { - _actions pushBack _actionToCache; - _patches pushBack _configName; - }; - - _indexCache = _cacheActions find _actionToCache; - if (_indexCache == -1) then { - _indexCache = count _cacheActions; - _cacheActions pushBack _actionToCache; - }; - - _cacheConfigs pushBack _action; - _cacheIndices pushBack _indexCache; - - _cache = [_cacheConfigs, _cacheActions, _cacheIndices]; - ["InteractionMenu", _action, {format ["%1 loaded into cache", _this]}] call EFUNC(common,log); - } else { - ["InteractionMenu", _action, {format ["%1 loaded from cache", _this]}] call EFUNC(common,log); - - _cachedAction = _cacheActions select (_cacheIndices select _indexCache); - - _showDisabled = getNumber (_action >> "showDisabled") == 1; - if (isText (_action >> "conditionShow")) then { - _showDisabled = [_object, _player] call (_cachedAction select 7); - }; - - if (!(_configName in _patches) && {_showDisabled || {[_object, _player] call (_cachedAction select 2)}} && {[_object, (_cachedAction select 9)] call FUNC(isInRange) || {(_cachedAction select 9) == 0}}) then { - _actions pushBack _cachedAction; - _patches pushBack _configName; - }; - }; - }; - - GVAR(MenuCache) = _cache; - }; - }; -}; -[_actions, _patches] diff --git a/addons/interaction/functions/fnc_addInteraction.sqf b/addons/interaction/functions/fnc_addInteraction.sqf deleted file mode 100644 index 5e8889891d..0000000000 --- a/addons/interaction/functions/fnc_addInteraction.sqf +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Author: commy2 - * - * Add an ACE action to an object. Note: This function is global. - * - * Argument: - * 0: Object the action should be assigned to (Object) - * 1: Name of the action shown in the menu (String) - * 2: Distance the player can be away from the object (Number) - * 3: Condition (Code or String) - * 4: Statement (Code or String) - * 5: Show the action even if the conditon is not met (Bool or Number) - * 6: Priority (Number, optional default: 0) - * - * Return value: - * ID of the action (used to remove it later). - */ - -#include "script_component.hpp" - -private ["_object", "_displayName", "_distance", "_condition", "_statement", "_showDisabled", "_priority", "_actionsVar", "_id", "_actionIDs", "_actions"]; - -_object = _this select 0; -_displayName = _this select 1; -_distance = _this select 2; -_condition = _this select 3; -_statement = _this select 4; -_showDisabled = _this select 5; -_priority = _this select 6; - -if (typeName _condition == "STRING") then { - _condition = compile _condition; -}; - -if (typeName _statement == "STRING") then { - _statement = compile _statement; -}; - -if (typeName _showDisabled == "SCALAR") then { - _showDisabled = _showDisabled > 0; -}; - -if (isNil "_priority") then { - _priority = 0; -}; - -_actionsVar = _object getVariable [QGVAR(Interactions), [-1, [], []]]; - -_id = (_actionsVar select 0) + 1; -_actionIDs = _actionsVar select 1; -_actions = _actionsVar select 2; - -_actionIDs pushBack _id; -_actions pushBack [_displayName, _distance, _condition, _statement, _showDisabled, _priority]; - -_object setVariable [QGVAR(Interactions), [_id, _actionIDs, _actions], true]; -_id diff --git a/addons/interaction/functions/fnc_addInteractionSelf.sqf b/addons/interaction/functions/fnc_addInteractionSelf.sqf deleted file mode 100644 index 48773fcb99..0000000000 --- a/addons/interaction/functions/fnc_addInteractionSelf.sqf +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Author: commy2 - * - * Add an ACE self action to the player. Execute this on the local machine of the player. - * - * Argument: - * 0: Name of the action shown in the menu (String) - * 1: Condition (Code or String) - * 2: Statement (Code or String) - * 3: Show the action even if the conditon is not met (Bool or Number) - * 4: Priority (Number, optional default: 0) - * - * Return value: - * ID of the action (used to remove it later). - */ - -#include "script_component.hpp" - -private ["_displayName", "_condition", "_statement", "_showDisabled", "_priority", "_actionsVar", "_id", "_actionIDs", "_actions"]; - - -_displayName = _this select 0; - -_condition = _this select 1; -_statement = _this select 2; -_showDisabled = _this select 3; -_priority = _this select 4; - -if (typeName _condition == "STRING") then { - _condition = compile _condition; -}; - -if (typeName _statement == "STRING") then { - _statement = compile _statement; -}; - -if (typeName _showDisabled == "SCALAR") then { - _showDisabled = _showDisabled > 0; -}; - -if (isNil "_priority") then { - _priority = 0; -}; - -_actionsVar = ACE_player getVariable [QGVAR(InteractionsSelf), [-1, [], []]]; - -_id = (_actionsVar select 0) + 1; -_actionIDs = _actionsVar select 1; -_actions = _actionsVar select 2; - -_actionIDs pushBack _id; -_actions pushBack [_displayName, _condition, _statement, _showDisabled, _priority]; - -ACE_player setVariable [QGVAR(InteractionsSelf), [_id, _actionIDs, _actions], false]; -_id diff --git a/addons/interaction/functions/fnc_addToTooltip.sqf b/addons/interaction/functions/fnc_addToTooltip.sqf deleted file mode 100644 index 9f5595a9bc..0000000000 --- a/addons/interaction/functions/fnc_addToTooltip.sqf +++ /dev/null @@ -1,5 +0,0 @@ -// by commy2 - -#include "script_component.hpp" - -GVAR(CurrentTooltip) pushBack (_this select 0); diff --git a/addons/interaction/functions/fnc_canInteractWith.sqf b/addons/interaction/functions/fnc_canInteractWithCivilian.sqf similarity index 61% rename from addons/interaction/functions/fnc_canInteractWith.sqf rename to addons/interaction/functions/fnc_canInteractWithCivilian.sqf index 5a47782546..6408d66aa8 100644 --- a/addons/interaction/functions/fnc_canInteractWith.sqf +++ b/addons/interaction/functions/fnc_canInteractWithCivilian.sqf @@ -2,13 +2,10 @@ #include "script_component.hpp" -private ["_unit", "_isCivilian"]; - -_unit = _this select 0; -_isCivilian = _this select 1; +EXPLODE_2_PVT(_this,_unit,_isCivilian); if (isNil "_isCivilian") then {_isCivilian = true}; alive _unit && [side _unit != side ACE_player, side group _unit == civilian] select _isCivilian -//&& {count (weapons _unit) == 0} +//&& {count (weapons _unit) == 0} \ No newline at end of file diff --git a/addons/interaction/functions/fnc_getActions2.sqf b/addons/interaction/functions/fnc_getActions2.sqf deleted file mode 100644 index 0de4f7a534..0000000000 --- a/addons/interaction/functions/fnc_getActions2.sqf +++ /dev/null @@ -1,121 +0,0 @@ -// commy2 -#include "script_component.hpp" - -private ["_object", "_config", "_type", "_actions", "_configs"]; - -_object = _this select 0; -_config = _this select 1; // configFile, missionConfigFile -_type = _this select 2; // "ACE_CfgInteractions", "ACE_CfgInteractionsSelf" -_actions = _this select 3; // []; - -_configs = "_object isKindOf configName _x" configClasses (_config >> _type); - -// cache -private ["_cache", "_cacheConfigs", "_cacheActions", "_cacheIndices"]; - -_cache = uiNamespace getVariable [QGVAR(MenuCache), [[], [], []]]; -_cacheConfigs = _cache select 0; -_cacheActions = _cache select 1; -_cacheIndices = _cache select 2; - -// get interactions -{ - private "_configActions"; - - _configActions = "true" configClasses (_config >> _type >> configName _x); - { - private ["_action", "_configName", "_indexCache"]; - - _action = _x; - _configName = configName _action; - - _indexCache = _cacheConfigs find _action; - if (_indexCache == -1) then { - private ["_displayName", "_distance", "_priority", "_subMenu", "_tooltip", "_hotkey", "_enableInside", "_condition", "_conditionShow", "_showDisabled", "_exceptions", "_statement", "_icon"]; - - _displayName = getText (_action >> "displayName"); - _distance = getNumber (_action >> "distance"); - _priority = getNumber (_action >> "priority"); - _subMenu = getArray (_action >> "subMenu"); - _tooltip = getText (_action >> "tooltip"); - _hotkey = getText (_action >> "hotkey"); - _enableInside = getNumber (_action >> "enableInside"); - - // Condition - _condition = getText (_action >> "condition"); - if (_condition == "") then {_condition = "true"}; - - _condition = _condition + format [QUOTE(&& {%1 call EFUNC(common,canInteract)} && {[ARR_2(ACE_player, GVAR(Target))] call FUNC(canInteractWith)}), getArray (_action >> "exceptions")]; - if (_enableInside != 1) then {_condition = _condition + " && {_player == _vehicle}"}; - - _condition = compile _condition; - - // Condition to show the action - _conditionShow = getText (_action >> "conditionShow"); - _conditionShow = if (_conditionShow == "") then {{true}} else {compile _conditionShow}; - - _showDisabled = getNumber (_action >> "showDisabled") == 1; - if (isText (_action >> "conditionShow")) then { - _showDisabled = [_object, _player] call _conditionShow; - }; - - // Exceptions to the general conditions that have to be true - _exceptions = getArray (_action >> "exceptions"); - - // statement - _statement = getText (_action >> "statement"); - _statement = compile _statement; - - if (GVAR(FlowMenu)) then { - _statement = if (getText (_action >> "statement") == "" && {count _subMenu > 1}) then { - compile format [QUOTE( call FUNC(hideMenu);if(%2 == 1)then{['%1'] call FUNC(openSubMenuSelf);}else{['%1'] call FUNC(openSubMenu);}; ), _subMenu select 0, _subMenu select 1]; - } else { - compile (QUOTE( call FUNC(hideMenu); ) + getText (_action >> "statement")); - }; - }; - - // icon - _icon = getText (_action >> "Icon"); - if (_icon == "") then { - _icon = DEFAULT_ICON; - }; - - private "_actionToCache"; - _actionToCache = [_displayName, _statement, _condition, _priority, _subMenu, _icon, _tooltip, _conditionShow, _exceptions, _distance, _hotkey]; - - if ((_showDisabled || {[_object, _player] call _condition}) && {_distance == 0 || {[_object, _distance] call FUNC(isInRange)}}) then { - _actions pushBack _actionToCache; - }; - - _indexCache = _cacheActions find _actionToCache; - if (_indexCache == -1) then { - _indexCache = count _cacheActions; - _cacheActions pushBack _actionToCache; - }; - - _cacheConfigs pushBack _action; - _cacheIndices pushBack _indexCache; - - _cache = [_cacheConfigs, _cacheActions, _cacheIndices]; - ["InteractionMenu", _action, {format ["%1 loaded into cache", _this]}] call EFUNC(common,log); - } else { - ["InteractionMenu", _action, {format ["%1 loaded from cache", _this]}] call EFUNC(common,log); - - private ["_cachedAction", "_showDisabled"]; - _cachedAction = _cacheActions select (_cacheIndices select _indexCache); - - _showDisabled = getNumber (_action >> "showDisabled") == 1; - if (isText (_action >> "conditionShow")) then { - _showDisabled = [_object, _player] call (_cachedAction select 7); - }; - - if ((_showDisabled || {[_object, _player] call (_cachedAction select 2)}) && {[_object, (_cachedAction select 9)] call FUNC(isInRange) || {(_cachedAction select 9) == 0}}) then { - _actions pushBack _cachedAction; - }; - }; - } forEach _configActions; //Actions of this CfgVehicles class -} forEach _configs; //CfgVehicles class - -uiNamespace setVariable [QGVAR(MenuCache), _cache]; - -_actions diff --git a/addons/interaction/functions/fnc_initialiseInteraction.sqf b/addons/interaction/functions/fnc_initialiseInteraction.sqf deleted file mode 100644 index 4d88eb4ea1..0000000000 --- a/addons/interaction/functions/fnc_initialiseInteraction.sqf +++ /dev/null @@ -1,167 +0,0 @@ -/* - Author: - commy2 - Garth de Wet (LH) - - Description: - Initialises the interaction click handlers. - - Parameters: - 0 : CODE - code to call when right clicking/center button - 1 : BOOLEAN - Submenu - 2 : BOOLEAN - Flow Menu - 3 : BOOLEAN - Self interaction - 4 : OBJECT - Target - - Returns: - Nothing - - Example: - [{"Default" call FUNC(openMenu);}, true, (profileNamespace getVariable [QGVAR(FlowMenu), false]), GVAR(Target)] call FUNC(initialiseInteraction); -*/ -#include "script_component.hpp" - -private ["_subMenu", "_selfMenu", "_target"]; -GVAR(MainButton) = _this select 0; -_subMenu = _this select 1; -_selfMenu = _this select 3; -_target = _this select 4; - -_player = ACE_player; -_vehicle = vehicle _player; -//_object = [GVAR(Target), _player] select (GVAR(MenuType) % 2 == 1); - -if !([_target, 5] call FUNC(isInRange)) exitWith {}; - -GVAR(Shortcuts) = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; - -// Flow menu -if (_this select 2) then { - (QGVAR(FlowMenu) call BIS_fnc_rscLayer) cutRsc [QGVAR(FlowMenu), "PLAIN",0.5, false]; - ACE_Interaction_SelectedButton = 0; - (findDisplay 1713999) closeDisplay 1; - if (_player getVariable ["ACE_AcceptAction", -1] == -1) then { - [{if(isNil {GVAR(MainButton)} || {!(profileNamespace getVariable [QGVAR(FlowMenu), false])})exitWith{false};(-(_this select 0) / 1.2) call FUNC(MoveDown);true}] call EFUNC(common,addScrollWheelEventHandler); - - _player setVariable ["ACE_AcceptAction", [_player, "DefaultAction", {(!isNil {GVAR(MainButton)}) && {(profileNamespace getVariable [QGVAR(FlowMenu), false])}}, {_action = GVAR(Buttons) select ACE_Interaction_SelectedButton;_target = GVAR(Target);_player = ACE_player;_vehicle = vehicle _player;if ([_target, _player] call (_action select 2)) then {call FUNC(hideMenu);if(count _action == 12) then{(_action select 11) call (_action select 1);}else{[_target, _player] call (_action select 1);};};}] call EFUNC(common,addActionEventHandler)]; - _player setVariable ["ACE_AcceptAction", [_player, "menuBack", {(!isNil {GVAR(MainButton)}) && {(profileNamespace getVariable [QGVAR(FlowMenu), false])}}, {call GVAR(MainButton);}] call EFUNC(common,addActionEventHandler)]; - }; - 0 call FUNC(moveDown); - [localize "STR_ACE_Interaction_MakeSelection", if (_subMenu)then{localize "STR_ACE_Interaction_Back"}else{""}, localize "STR_ACE_Interaction_ScrollHint"] call FUNC(showMouseHint); - ((uiNamespace getVariable QGVAR(Flow_Display)) displayCtrl (1210)) ctrlShow _subMenu; -}else{ // Rose - if (!isNull(uiNamespace getVariable QGVAR(Flow_Display))) then { - (uiNameSpace getVariable QGVAR(Flow_Display)) closeDisplay 0; - call FUNC(hideMouseHint); - }; - if (!_subMenu || {isNull (findDisplay 1713999)}) then { - (findDisplay 1713999) closeDisplay 1; - - (findDisplay 46) createDisplay QGVAR(Dialog); - // Add eventhandlers - /*(findDisplay 1713999) displayAddEventHandler ["KeyDown", QUOTE(_this call EGVAR(common,onKeyDown))]; - (findDisplay 1713999) displayAddEventHandler ["KeyUp", QUOTE(_this call EGVAR(common,onKeyUp))];*/ - - (findDisplay 1713999) displayAddEventHandler ["KeyDown", QUOTE(_this call FUNC(menuKeyInput))]; - }; - disableSerialization; - _dlgInteractionDialog = uiNamespace getVariable QGVAR(Dialog); - _ctrlInteractionDialog = _dlgInteractionDialog displayCtrl 3; - if (GVAR(AutoCenterCursor)) then {setMousePosition [0.5, 0.5]}; - if !(_subMenu) then { - _ctrlInteractionDialog ctrlSetText ([_target] call EFUNC(common,getName)); - } else { - _ctrlInteractionDialog ctrlSetText localize "STR_ACE_Interaction_Back"; - }; - - _buttons = GVAR(Buttons); - _count = count _buttons; - - for "_i" from 0 to 9 do { - _ctrlInteractionDialog = _dlgInteractionDialog displayCtrl (10 + _i); - _ctrlInteractionDialog ctrlShow true; - - _ctrlInteractionDialogIcon = _dlgInteractionDialog displayCtrl (20 + _i); - _ctrlInteractionDialogShortcut = _dlgInteractionDialog displayCtrl (30 + _i); - //_ctrlInteractionDialogBackground = _dlgInteractionDialog displayCtrl (40 + _i); - if (_i < _count) then { - _action = _buttons select _i; - _ctrlInteractionDialog ctrlSetText (_action select 0); - _ctrlInteractionDialog ctrlEnable ([_target, _player] call (_action select 2)); - _ctrlInteractionDialog ctrlSetTooltip (_action select 6); - - _ctrlInteractionDialogIcon ctrlSetText (_action select 5); - _ctrlInteractionDialogShortcut ctrlSetText (_action select 10); - //_ctrlInteractionDialogBackground ctrlShow true; - - GVAR(Shortcuts) set [_i, [_action select 10] call EFUNC(common,letterToCode)]; - } else { - _ctrlInteractionDialog ctrlSetText ""; - _ctrlInteractionDialog ctrlEnable false; - _ctrlInteractionDialog ctrlSetTooltip ""; - - _ctrlInteractionDialogIcon ctrlSetText ""; - _ctrlInteractionDialogShortcut ctrlSetText ""; - //_ctrlInteractionDialogBackground ctrlShow false; - }; - }; - - // Update Buttons - terminate (missionNamespace getVariable [QGVAR(updateMenuHandle), scriptNull]); - - GVAR(updateMenuHandle) = 0 spawn { - disableSerialization; - _dlgMenu = uiNamespace getVariable [QGVAR(Dialog), displayNull]; - _ctrlTooltip = _dlgMenu displayCtrl 40; - - _player = ACE_player; - _vehicle = vehicle _player; - _target = [GVAR(Target), _player] select (GVAR(MenuType) % 2 == 1); - - waitUntil { - if !([_target, 5] call FUNC(isInRange)) exitWith { - (findDisplay 1713999) closeDisplay 1 - }; - - GVAR(Tooltips) = [[], [], [], [], [], [], [], [], [], []]; - { - _ctrlText = _dlgMenu displayCtrl (10 + _forEachIndex); - _ctrlIcon = _dlgMenu displayCtrl (20 + _forEachIndex); - - _condition = _x select 2; - _conditionShow = _x select 7; - _distance = _x select 9; - - GVAR(CurrentTooltip) = []; - - _enable = (_distance == 0 || {[_target, _distance] call FUNC(isInRange)}) && {[_target, _player] call _condition} && {[_target, _player] call _conditionShow}; - if (isNil "_enable") then {_enable = false}; - - GVAR(Tooltips) set [_forEachIndex, GVAR(CurrentTooltip)]; - - // apply conditional tooltips - /*if (_forEachIndex == call ACE_Interaction_fnc_getSelectedButton) then { - _tooltip = _x select 6; - - _showTooltip = _tooltip != ""; - - _tooltip = text _tooltip; - - { - _showTooltip = true; - _tooltip = composeText [_tooltip, lineBreak, _x]; - } forEach (GVAR(Tooltips) select _forEachIndex); - - _ctrlTooltip ctrlSetStructuredText _tooltip; - _ctrlTooltip ctrlShow _showTooltip; - };*/ - - _ctrlText ctrlEnable _enable; - _ctrlIcon ctrlEnable _enable; - } forEach GVAR(Buttons); - - sleep 0.5; - isNull (findDisplay 1713999) - }; - }; -}; diff --git a/addons/interaction/functions/fnc_menuKeyInput.sqf b/addons/interaction/functions/fnc_menuKeyInput.sqf deleted file mode 100644 index 2390d6be14..0000000000 --- a/addons/interaction/functions/fnc_menuKeyInput.sqf +++ /dev/null @@ -1,17 +0,0 @@ -// by commy2 -#include "script_component.hpp" - -private "_key"; - -_key = _this select 1; - -if (_key in [28, 57, 156, 200, 208, 203, 205, 201, 209]) exitWith {true}; - -_index = GVAR(Shortcuts) find _key; - -if (_index != -1 && {ctrlEnabled (findDisplay 1713999 displayCtrl (_index + 10))}) exitWith { - _index call FUNC(onClick); - true -}; - -false diff --git a/addons/interaction/functions/fnc_onButtonDown.sqf b/addons/interaction/functions/fnc_onButtonDown.sqf deleted file mode 100644 index 63f62ed4a0..0000000000 --- a/addons/interaction/functions/fnc_onButtonDown.sqf +++ /dev/null @@ -1,18 +0,0 @@ -// by commy2 -#include "script_component.hpp" - -if (dialog) exitWith { - closeDialog 0; -}; - -if (isNull (findDisplay 1713999)) then { - if (ACE_player == vehicle ACE_player) then {"" call FUNC(openMenu)} else {[ACE_player, vehicle ACE_player] call FUNC(openMenuSelectUI)}; - setMousePosition [0.5, 0.5]; -} else { - (findDisplay 1713999) closeDisplay 1; -}; - -// Raise custom event. @todo: remove -[_player, "interactionMenuOpened", [_player, GVAR(Target), 0]] call EFUNC(common,callCustomEventHandlers); -// Raise ACE localEvent -["interactionMenuOpened", [_player, GVAR(Target), 0]] call EFUNC(common,localEvent); diff --git a/addons/interaction/functions/fnc_onButtonDownSelf.sqf b/addons/interaction/functions/fnc_onButtonDownSelf.sqf deleted file mode 100644 index 7b9abb926e..0000000000 --- a/addons/interaction/functions/fnc_onButtonDownSelf.sqf +++ /dev/null @@ -1,18 +0,0 @@ -// by commy2 -#include "script_component.hpp" - -if (dialog) exitWith { - closeDialog 0; -}; - -if (isNull (findDisplay 1713999)) then { - "" call FUNC(openMenuSelf); - setMousePosition [0.5, 0.5]; -} else { - (findDisplay 1713999) closeDisplay 1; -}; - -// Raise custom event. @todo: remove -[_player, "interactionMenuOpened", [_player, GVAR(Target), 1]] call EFUNC(common,callCustomEventHandlers); -// Raise ACE localEvent -["interactionMenuOpened", [_player, GVAR(Target), 1]] call EFUNC(common,localEvent); diff --git a/addons/interaction/functions/fnc_openDoor.sqf b/addons/interaction/functions/fnc_openDoor.sqf index d8cd8b0693..0d67ae7a55 100644 --- a/addons/interaction/functions/fnc_openDoor.sqf +++ b/addons/interaction/functions/fnc_openDoor.sqf @@ -47,7 +47,7 @@ playSound "ACE_Sound_Click"; !GVAR(isOpeningDoor) || {getPosASL ACE_player distance _position > 1} }; - if (!_usedMouseWheel && {time < _time}) then { + if (!_usedMouseWheel && {time < _time} && {[ACE_player, objNull, []] call EGVAR(common,canInteractWith)}) then { _phase = [0, 1] select (_house animationPhase (_animations select 0) < 0.5); {_house animate [_x, _phase]} forEach _animations; diff --git a/addons/interaction/functions/fnc_openMenu.sqf b/addons/interaction/functions/fnc_openMenu.sqf deleted file mode 100644 index 7785f2e4a4..0000000000 --- a/addons/interaction/functions/fnc_openMenu.sqf +++ /dev/null @@ -1,7 +0,0 @@ -// by commy2 -#include "script_component.hpp" - -private "_target"; -_target = [cursorTarget, GVAR(Target)] select (_this == "Default"); - -[0, _target, ""] call FUNC(showMenu); diff --git a/addons/interaction/functions/fnc_openMenuSelf.sqf b/addons/interaction/functions/fnc_openMenuSelf.sqf deleted file mode 100644 index 9ce84f7287..0000000000 --- a/addons/interaction/functions/fnc_openMenuSelf.sqf +++ /dev/null @@ -1,4 +0,0 @@ -// by commy2 -#include "script_component.hpp" - -[1, ACE_player, ""] call FUNC(showMenu); diff --git a/addons/interaction/functions/fnc_openSubMenu.sqf b/addons/interaction/functions/fnc_openSubMenu.sqf deleted file mode 100644 index cda4e76537..0000000000 --- a/addons/interaction/functions/fnc_openSubMenu.sqf +++ /dev/null @@ -1,4 +0,0 @@ -// by commy2 -#include "script_component.hpp" - -[2, GVAR(Target), _this select 0] call FUNC(showMenu); diff --git a/addons/interaction/functions/fnc_openSubMenuSelf.sqf b/addons/interaction/functions/fnc_openSubMenuSelf.sqf deleted file mode 100644 index e207603ebb..0000000000 --- a/addons/interaction/functions/fnc_openSubMenuSelf.sqf +++ /dev/null @@ -1,4 +0,0 @@ -// by commy2 -#include "script_component.hpp" - -[3, ACE_player, _this select 0] call FUNC(showMenu); diff --git a/addons/interaction/functions/fnc_prepareSelectMenu.sqf b/addons/interaction/functions/fnc_prepareSelectMenu.sqf index 43c9eccdf1..acff7fa5e2 100644 --- a/addons/interaction/functions/fnc_prepareSelectMenu.sqf +++ b/addons/interaction/functions/fnc_prepareSelectMenu.sqf @@ -18,18 +18,15 @@ private ["_buttonAction", "_header", "_buttonText", "_cancelButton"]; closeDialog 0; -if (!(profileNamespace getVariable [QGVAR(FlowMenu), false])) exitWith { - _header = _this select 0; - _buttonText = _this select 1; - if (isNil "_buttonText" or {_buttonText == ""}) then { - _buttonText = localize "STR_ACE_Interaction_MakeSelection"; - }; - createDialog "RscACE_SelectAnItem"; - ctrlSetText [8860, _buttonText]; - ctrlSetText [8870, _header]; - - lbClear 8866; - - 8866 +_header = _this select 0; +_buttonText = _this select 1; +if (isNil "_buttonText" or {_buttonText == ""}) then { + _buttonText = localize "STR_ACE_Interaction_MakeSelection"; }; -[] +createDialog "RscACE_SelectAnItem"; +ctrlSetText [8860, _buttonText]; +ctrlSetText [8870, _header]; + +lbClear 8866; + +8866 diff --git a/addons/interaction/functions/fnc_removeInteraction.sqf b/addons/interaction/functions/fnc_removeInteraction.sqf deleted file mode 100644 index 141773da73..0000000000 --- a/addons/interaction/functions/fnc_removeInteraction.sqf +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Author: commy2 - * - * Remove an ACE action from an object. Note: This function is global. - * - * Argument: - * 0: Object (Object) - * 1: ID of the action (Number) - * - * Return value: - * None. - */ -#include "script_component.hpp" - -private ["_object", "_id", "_actionsVar", "_currentID", "_actionIDs", "_actions"]; - -_object = _this select 0; -_id = _this select 1; - -_actionsVar = _object getVariable [QGVAR(Interactions), [-1, [], []]]; - -_currentID = _actionsVar select 0; -_actionIDs = _actionsVar select 1; -_actions = _actionsVar select 2; - -_id = _actionIDs find _id; - -if (_id == -1) exitWith {}; - -_actionIDs set [_id, -1]; -_actionIDs = _actionIDs - [-1]; - -_actions set [_id, []]; -_actions = _actions - [[]]; - -_object setVariable [QGVAR(Interactions), [_currentID, _actionIDs, _actions], true]; diff --git a/addons/interaction/functions/fnc_removeInteractionSelf.sqf b/addons/interaction/functions/fnc_removeInteractionSelf.sqf deleted file mode 100644 index fce0f6a5a0..0000000000 --- a/addons/interaction/functions/fnc_removeInteractionSelf.sqf +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Author: commy2 - * - * Remove an ACE self action from the player. - * - * Argument: - * 0: ID of the action (Number) - * - * Return value: - * None. - */ -#include "script_component.hpp" - -private ["_id", "_actionsVar", "_currentID", "_actionIDs", "_actions"]; - - -_id = _this select 0; - -_actionsVar = ACE_player getVariable [QGVAR(InteractionsSelf), [-1, [], []]]; - -_currentID = _actionsVar select 0; -_actionIDs = _actionsVar select 1; -_actions = _actionsVar select 2; - -_id = _actionIDs find _id; - -if (_id == -1) exitWith {}; - -_actionIDs set [_id, -1]; -_actionIDs = _actionIDs - [-1]; - -_actions set [_id, []]; -_actions = _actions - [[]]; - -ACE_player setVariable [QGVAR(InteractionsSelf), [_currentID, _actionIDs, _actions], false]; diff --git a/addons/interaction/functions/fnc_showMenu.sqf b/addons/interaction/functions/fnc_showMenu.sqf deleted file mode 100644 index b567a22ea4..0000000000 --- a/addons/interaction/functions/fnc_showMenu.sqf +++ /dev/null @@ -1,118 +0,0 @@ -/* - Author: - commy2 - Garth de Wet (LH) - aeroson - - Description: - - Parameters: - 0: NUMBER - Menu type (0 - interaction, 1 - self-interaction, 2 - sub-interaction, 3 - sub-self-interaction) - 1: OBJECT - Target object - 2: STRING - Sub-Menu ClassName - - Returns: - Nothing - - Example: - [0, GVAR(Target)] call FUNC(showMenu); - [1, player] call FUNC(showMenu); - [2, GVAR(Target), "ACE_Explosives"] call FUNC(showMenu); - [3, player, "ACE_Explosives"] call FUNC(showMenu); -*/ -#include "script_component.hpp" - -private ["_player", "_vehicle", "_mainButtonAction", "_object", "_index", "_actions", "_result", "_menuType"]; -#define DEFAULT_ICON QUOTE(PATHOF(UI\dot_ca.paa)) -#define DEFAULT_DISTANCE 4 // seems to be 4 -_player = ACE_player; -_vehicle = vehicle _player; - -GVAR(MenuType) = _this select 0; // 0 Interaction, 1 Self Interaction - -_mainButtonAction = [ - {call FUNC(hideMenu)}, - {call FUNC(hideMenu)}, - {"Default" call FUNC(openMenu)}, - {"Default" call FUNC(openMenuSelf)} -] select GVAR(MenuType); - -_menuType = GVAR(MenuType) % 2; -uiNamespace setVariable [QGVAR(CursorPosition), [controlNull, 0.5, 0.5, -1]]; - -GVAR(Target) = _this select 1; -_object = GVAR(Target); - -if (_menuType == 0 && {(isNull (_object) || {!([_object, 4] call FUNC(isInRange))})}) exitWith {}; -if !([_player, _object] call EFUNC(common,canInteractWith)) exitWith {}; - -// add actions or self actions of GVAR(Target) -_parents = [configFile >> "CfgVehicles" >> typeOf _object, true] call BIS_fnc_returnParents; -_result = [_object, _parents, [], [], missionConfigFile >> "CfgVehicles", true, ["ACE_Actions", "ACE_SelfActions"] select _menuType, _this select 2] call FUNC(GetActions); -_actions = ([_object, _parents, _result select 0, _result select 1,configFile >> "CfgVehicles", false, ["ACE_Actions", "ACE_SelfActions"] select _menuType, _this select 2] call FUNC(GetActions) select 0); - -// add self actions of vehicle _player -if (_menuType == 1 && {_player != _vehicle}) then { - _parents = [configFile >> "CfgVehicles" >> typeOf _vehicle, true] call BIS_fnc_returnParents; - _result = [_vehicle, _parents, [], [], missionConfigFile >> "CfgVehicles", true, ["ACE_Actions", "ACE_SelfActions"] select _menuType, _this select 2] call FUNC(GetActions); - _actions = _actions + (([_vehicle, _parents, _result select 0, _result select 1,configFile >> "CfgVehicles", false, ["ACE_Actions", "ACE_SelfActions"] select _menuType, _this select 2] call FUNC(GetActions) select 0)); -}; - -// custom defined actions, stored in variable instead of cfg like above -if (GVAR(MenuType) < 2) then { - - private ["_customActions", "_customAction", "_displayName", "_distance","_condition","_statement","_showDisabled", "_priority"]; - - // add interactions or self interactions of GVAR(Target) - _customActions = (_object getVariable [[QGVAR(Interactions), QGVAR(ACE_InteractionsSelf)] select _menuType, [-1, [], []]]) select 2; - - // add self interactions of vehicle _player - if (_menuType == 1 && {_player != _vehicle}) then { - _customActions = _customActions + ((_vehicle getVariable [[QGVAR(Interactions), QGVAR(ACE_InteractionsSelf)] select _menuType, [-1, [], []]]) select 2); - }; - - if(_menuType==0) then { - - private ["_distance"]; - - for "_index" from 0 to (count _customActions - 1) do { - - _customAction = _customActions select _index; - _displayName = _customAction select 0; - _distance = _customAction select 1; - _condition = _customAction select 2; - _statement = _customAction select 3; - _showDisabled = _customAction select 4; - _priority = _customAction select 5; - - if ((_showDisabled || {[_object, _player] call _condition}) && {[_object, _distance] call FUNC(isInRange) || {_distance == 0}}) then { - _actions pushBack [_displayName, _statement, _condition, _priority, [], DEFAULT_ICON, "", {true}, [], _distance, ""]; - }; - }; - - } else { // self interactions do not have distance - - for "_index" from 0 to (count _customActions - 1) do { - - _customAction = _customActions select _index; - _displayName = _customAction select 0; - _condition = _customAction select 1; - _statement = _customAction select 2; - _showDisabled = _customAction select 3; - _priority = _customAction select 4; - - if (_showDisabled || {[_object, _player] call _condition}) then { - _actions pushBack [_displayName, _statement, _condition, _priority, [], DEFAULT_ICON, "", {true}, [], DEFAULT_DISTANCE, ""]; - }; - }; - - }; - - -}; - -if (count _actions == 0) exitWith {}; - -_actions call FUNC(sortOptionsByPriority); -GVAR(Buttons) = _actions; -[_mainButtonAction, (_this select 2) != "", (profileNamespace getVariable [QGVAR(FlowMenu), false]), _menuType == 1, _object] call FUNC(initialiseInteraction); diff --git a/addons/interaction/functions/fnc_tapShoulder.sqf b/addons/interaction/functions/fnc_tapShoulder.sqf index 02eed88542..262012dbb9 100644 --- a/addons/interaction/functions/fnc_tapShoulder.sqf +++ b/addons/interaction/functions/fnc_tapShoulder.sqf @@ -1,21 +1,22 @@ // by commy2 #include "script_component.hpp" -private ["_unit", "_message"]; - -_tapper = _this select 0; -_target = _this select 1; +EXPLODE_3_PVT(_this,_tapper,_target,_shoulderNum); if (_target != ACE_player) exitWith { - addCamShake [4, 0.5, 5]; - if !(local _target) then { - [[_tapper, _target], QUOTE(DFUNC(tapShoulder)), _target] call EFUNC(common,execRemoteFnc); - }; + addCamShake [4, 0.5, 5]; + ACE_player playActionNow 'gestureAdvance'; + if !(local _target) then { + [[_tapper, _target, _shoulderNum], QUOTE(DFUNC(tapShoulder)), _target] call EFUNC(common,execRemoteFnc); + }; }; addCamShake [4, 0.5, 5]; -//_message = format ["%1 tapped you on your shoulder.", [_unit] call EFUNC(common,getName)]; -_message = localize "STR_ACE_Interaction_YouWereTapped"; +if (_shoulderNum == 0) then { + _message = localize "STR_ACE_Interaction_YouWereTappedRight"; +} else { + _message = localize "STR_ACE_Interaction_YouWereTappedLeft"; +}; [_message] call EFUNC(common,displayTextStructured); diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index e58e808687..76898cd227 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -2,6 +2,27 @@ + + Interactions >> + + + Head >> + + + Left Arm >> + + + Right Arm >> + + + Left Leg >> + + + Right Leg >> + + + Weapon >> + Interaction Menu Interaktionsmenü @@ -338,17 +359,29 @@ Tocar ombro Dai un colpetto - - You were tapped on the shoulder. - Dir wurde auf die Schulter geklopft - Te tocaron el hombro. - On te tape sur l'épaule. - Zostałeś klepnięty po ramieniu - Vállonveregettek - Někdo tě poklepal na rameno. - Вас похлопали по плечу - Você foi tocado no ombro. - Ti è stato dato un colpetto sulla spalla + + You were tapped on the RIGHT shoulder > + Te tocaron el hombro DERECHO > + Dir wurde auf die Schulter geklopft > + On te tape sur l'épaule > + Zostałeś klepnięty po ramieniu > + Vállonveregettek > + Někdo tě poklepal na rameno > + Вас похлопали по плечу > + Você foi tocado no ombro > + Ti è stato dato un colpetto sulla spalla > + + + < You were tapped on the LEFT shoulder. + < Te tocaron el hombro IZQUIERDO. + < Dir wurde auf die Schulter geklopft + < On te tape sur l'épaule. + < Zostałeś klepnięty po ramieniu + < Vállonveregettek + < Někdo tě poklepal na rameno. + < Вас похлопали по плечу + < Você foi tocado no ombro. + < Ti è stato dato un colpetto sulla spalla Cancel @@ -554,18 +587,6 @@ Perdona Megbocsátás - - Flow Menu - Mausradmenü - Flow Menu - Menú desplegable - Menu Déroulant - Flow Menu - Выпадающее меню - Flow Menu - Menù a Scorrimento - Legördülő menü - Scroll Scrollen @@ -601,25 +622,6 @@ Poza zasięgiem Mimo dosah - - Close Menu on Key Release - Menü nach Loslassen schließen - Zamknij menu automatycznie - Fermer le menu en relâchant la touche - Cerrar menú al soltar la tecla - Menü bezárása a billentyű elengedésekor - Закрывать меню при отжатии клавиши - Menu interakce (Na držení) - - - Auto Center Cursor - Mauszeiger automatisch zentrieren - Auto-centrar cursor - Automatycznie centruj kursor - Vycentrování kurzoru - Egér auto-centrírozása - Автоцентрирование курсора - Equipment >> Ausrüstung >> diff --git a/addons/inventory/RscDisplayInventory.hpp b/addons/inventory/RscDisplayInventory.hpp new file mode 100644 index 0000000000..c8c93ab142 --- /dev/null +++ b/addons/inventory/RscDisplayInventory.hpp @@ -0,0 +1,516 @@ +/* +Adjust the scaling of the inventory screen +- changes it from scaling based on user's interface size to a dynamic size based on a setting variable +- text size and row height size are uneffected (so more rows in a list) +- also tweaks the height of the two ProgressBars which looked odd scaled up so much + +regex: +x = "[-+]?(\d*[.]?\d+).* +x = X_PART\(\1\); + */ + +class RscText; +class RscPicture; +class RscListBox; +class RscProgress; +class RscStructuredText; +class RscActiveText; +class RscCombo; + +#define X_BIS(num) (num * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)) +#define Y_BIS(num) (num * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)) +#define W_BIS(num) (num * (((safezoneW / safezoneH) min 1.2) / 40)) +#define H_BIS(num) (num * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)) + +#define X_MAKEITBIGGA(num) (num * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)) +#define Y_MAKEITBIGGA(num) (num * (safeZoneH / 30) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)) +#define W_MAKEITBIGGA(num) (num * (safeZoneH / 40)) +#define H_MAKEITBIGGA(num) (num * (safeZoneH / 30)) + +#define X_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QGVAR(inventoryDisplaySize)), 0)]), X_BIS(num), X_MAKEITBIGGA(num))]) +#define Y_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QGVAR(inventoryDisplaySize)), 0)]), Y_BIS(num), Y_MAKEITBIGGA(num))]) +#define W_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QGVAR(inventoryDisplaySize)), 0)]), W_BIS(num), W_MAKEITBIGGA(num))]) +#define H_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QGVAR(inventoryDisplaySize)), 0)]), H_BIS(num), H_MAKEITBIGGA(num))]) + +class RscDisplayInventory { + class controls { + class CA_ContainerBackground: RscText { + //crate: GroundLoad adjust size + x = X_PART(1); + y = Y_PART(1); + w = W_PART(12); + h = H_PART(22.5); + }; + class CA_PlayerBackground: RscText { + //center player's container: decrease height because of progressbar height decrease + x = X_PART(14.6); + y = Y_PART(2); + w = W_PART(24.4); + h = H_PART(21.5); + }; + class TitleBackground: RscText { + x = X_PART(14.6); + y = Y_PART(1); + w = W_PART(24.4); + h = H_PART(1); + }; + class PlayersName: RscText { + x = X_PART(15.6); + y = Y_PART(1); + w = W_PART(19.8); + h = H_PART(1); + }; + class RankBackground: RscText { + x = X_PART(15.1); + y = Y_PART(1.25); + w = W_PART(0.6); + h = H_PART(0.6); + }; + class RankPicture: RscPicture { + x = X_PART(15.1); + y = Y_PART(1.25); + w = W_PART(0.6); + h = H_PART(0.6); + }; + class ButtonBack: RscActiveText { + x = X_PART(38); + y = Y_PART(1); + w = W_PART(1); + h = H_PART(1); + }; + class BackgroundSlotPrimary: RscPicture { + x = X_PART(26.6); + y = Y_PART(6); + w = W_PART(11.9); + h = H_PART(3); + }; + class BackgroundSlotPrimaryMuzzle: BackgroundSlotPrimary { + x = X_PART(26.6); + y = Y_PART(9.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class BackgroundSlotPrimaryFlashlight: BackgroundSlotPrimary { + x = X_PART(29.6); + y = Y_PART(9.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class BackgroundSlotPrimaryOptics: BackgroundSlotPrimary { + x = X_PART(32.6); + y = Y_PART(9.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class BackgroundSlotPrimaryMagazine: BackgroundSlotPrimary { + x = X_PART(35.6); + y = Y_PART(9.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class BackgroundSlotSecondary: BackgroundSlotPrimary { + x = X_PART(26.6); + y = Y_PART(11.5); + w = W_PART(11.9); + h = H_PART(3); + }; + class BackgroundSlotSecondaryMuzzle: BackgroundSlotPrimary { + x = X_PART(26.6); + y = Y_PART(14.6); + w = W_PART(2.9); + h = H_PART(2); + }; + class BackgroundSlotSecondaryFlashlight: BackgroundSlotPrimary { + x = X_PART(29.6); + y = Y_PART(14.6); + w = W_PART(2.9); + h = H_PART(2); + }; + class BackgroundSlotSecondaryOptics: BackgroundSlotPrimary { + x = X_PART(32.6); + y = Y_PART(14.6); + w = W_PART(2.9); + h = H_PART(2); + }; + class BackgroundSlotSecondaryMagazine: BackgroundSlotPrimary { + x = X_PART(35.6); + y = Y_PART(14.6); + w = W_PART(2.9); + h = H_PART(2); + }; + class BackgroundSlotHandgun: BackgroundSlotPrimary { + x = X_PART(26.6); + y = Y_PART(17); + w = W_PART(11.9); + h = H_PART(3); + }; + class BackgroundSlotHandgunMuzzle: BackgroundSlotPrimary { + x = X_PART(26.6); + y = Y_PART(20.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class BackgroundSlotHandgunFlashlight: BackgroundSlotPrimary { + x = X_PART(29.6); + y = Y_PART(20.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class BackgroundSlotHandgunOptics: BackgroundSlotPrimary { + x = X_PART(32.6); + y = Y_PART(20.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class BackgroundSlotHandgunMagazine: BackgroundSlotPrimary { + x = X_PART(35.6); + y = Y_PART(20.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class BackgroundSlotHeadgear: BackgroundSlotPrimary { + x = X_PART(26.6); + y = Y_PART(2.5); + w = W_PART(2.9); + h = H_PART(2.9); + }; + class BackgroundSlotGoggles: BackgroundSlotPrimary { + x = X_PART(29.6); + y = Y_PART(2.5); + w = W_PART(2.9); + h = H_PART(2.9); + }; + class BackgroundSlotHMD: BackgroundSlotPrimary { + x = X_PART(32.6); + y = Y_PART(2.5); + w = W_PART(2.9); + h = H_PART(2.9); + }; + class BackgroundSlotBinoculars: BackgroundSlotPrimary { + x = X_PART(35.6); + y = Y_PART(2.5); + w = W_PART(2.9); + h = H_PART(2.9); + }; + class BackgroundSlotMap: BackgroundSlotPrimary { + x = X_PART(15.1); + y = Y_PART(20.1); + w = W_PART(2.12); + h = H_PART(2); + }; + class BackgroundSlotGPS: BackgroundSlotPrimary { + x = X_PART(17.32); + y = Y_PART(20.1); + w = W_PART(2.12); + h = H_PART(2); + }; + class BackgroundSlotCompass: BackgroundSlotPrimary { + x = X_PART(21.76); + y = Y_PART(20.1); + w = W_PART(2.12); + h = H_PART(2); + }; + class BackgroundSlotRadio: BackgroundSlotPrimary { + x = X_PART(19.54); + y = Y_PART(20.1); + w = W_PART(2.12); + h = H_PART(2); + }; + class BackgroundSlotWatch: BackgroundSlotPrimary { + x = X_PART(23.98); + y = Y_PART(20.1); + w = W_PART(2.12); + h = H_PART(2); + }; + class ExternalContainerBackground: RscPicture { + x = X_PART(1.5); + y = Y_PART(3.7); + w = W_PART(11); + h = H_PART(18.4); + }; + class PlayerContainerBackground: ExternalContainerBackground { + x = X_PART(15.1); + y = Y_PART(6); + w = W_PART(11); + h = H_PART(14); + }; + class GroundTab: RscActiveText { + x = X_PART(1.5); + y = Y_PART(1.5); + w = W_PART(5.5); + h = H_PART(1); + }; + class SoldierTab: GroundTab { + x = X_PART(7); + y = Y_PART(1.5); + w = W_PART(5.5); + h = H_PART(1); + }; + class GroundContainer: RscListBox { + x = X_PART(1.5); + y = Y_PART(3.7); + w = W_PART(11); + h = H_PART(18.4); + }; + class GroundFilter: RscCombo { + x = X_PART(1.5); + y = Y_PART(2.6); + w = W_PART(11); + h = H_PART(1); + }; + class GroundLoad: RscProgress { + //crate: GroundLoad adjust size + x = X_PART(1.5); + y = Y_PART(22.5); + w = W_PART(11); + h = H_PART(0.5); + }; + class SlotPrimary: GroundTab { + x = X_PART(26.6); + y = Y_PART(6); + w = W_PART(11.9); + h = H_PART(3); + }; + class SlotPrimaryMuzzle: SlotPrimary { + x = X_PART(26.6); + y = Y_PART(9.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class SlotPrimaryGrip: SlotPrimary { + w = 0; + h = 0; + x = X_PART(39); + y = Y_PART(9); + }; + class SlotPrimaryFlashlight: SlotPrimary { + x = X_PART(29.6); + y = Y_PART(9.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class SlotPrimaryOptics: SlotPrimary { + x = X_PART(32.6); + y = Y_PART(9.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class SlotPrimaryMagazine: SlotPrimary { + x = X_PART(35.6); + y = Y_PART(9.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class SlotSecondary: SlotPrimary { + x = X_PART(26.6); + y = Y_PART(11.5); + w = W_PART(11.9); + h = H_PART(3); + }; + class SlotSecondaryMuzzle: SlotPrimary { + x = X_PART(26.6); + y = Y_PART(14.6); + w = W_PART(2.9); + h = H_PART(2); + }; + class SlotSecondaryGrip: SlotPrimary { + w = 0; + h = 0; + x = X_PART(39); + y = Y_PART(14.5); + }; + class SlotSecondaryFlashlight: SlotPrimary { + x = X_PART(29.6); + y = Y_PART(14.6); + w = W_PART(2.9); + h = H_PART(2); + }; + class SlotSecondaryOptics: SlotPrimary { + x = X_PART(32.6); + y = Y_PART(14.6); + w = W_PART(2.9); + h = H_PART(2); + }; + class SlotSecondaryMagazine: SlotPrimary { + x = X_PART(35.6); + y = Y_PART(14.6); + w = W_PART(2.9); + h = H_PART(2); + }; + class SlotHandgun: SlotPrimary { + x = X_PART(26.6); + y = Y_PART(17); + w = W_PART(11.9); + h = H_PART(3); + }; + class SlotHandgunMuzzle: SlotPrimary { + x = X_PART(26.6); + y = Y_PART(20.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class SlotHandgunGrip: SlotPrimary { + w = 0; + h = 0; + x = X_PART(39); + y = Y_PART(20); + }; + class SlotHandgunFlashlight: SlotPrimary { + x = X_PART(29.6); + y = Y_PART(20.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class SlotHandgunOptics: SlotPrimary { + x = X_PART(32.6); + y = Y_PART(20.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class SlotHandgunMagazine: SlotPrimary { + x = X_PART(35.6); + y = Y_PART(20.1); + w = W_PART(2.9); + h = H_PART(2); + }; + class SlotHeadgear: SlotPrimary { + x = X_PART(26.6); + y = Y_PART(2.5); + w = W_PART(2.9); + h = H_PART(2.9); + }; + class SlotGoggles: SlotPrimary { + x = X_PART(29.6); + y = Y_PART(2.5); + w = W_PART(2.9); + h = H_PART(2.9); + }; + class SlotHMD: SlotPrimary { + x = X_PART(32.6); + y = Y_PART(2.5); + w = W_PART(2.9); + h = H_PART(2.9); + }; + class SlotBinoculars: SlotPrimary { + x = X_PART(35.6); + y = Y_PART(2.5); + w = W_PART(2.9); + h = H_PART(2.9); + }; + class SlotMap: SlotPrimary { + x = X_PART(15.16); + y = Y_PART(20.1); + w = W_PART(2); + h = H_PART(2); + }; + class SlotGPS: SlotPrimary { + x = X_PART(17.38); + y = Y_PART(20.1); + w = W_PART(2); + h = H_PART(2); + }; + class SlotCompass: SlotPrimary { + x = X_PART(21.82); + y = Y_PART(20.1); + w = W_PART(2); + h = H_PART(2); + }; + class SlotRadio: SlotPrimary { + x = X_PART(19.6); + y = Y_PART(20.1); + w = W_PART(2); + h = H_PART(2); + }; + class SlotWatch: SlotPrimary { + x = X_PART(24.04); + y = Y_PART(20.1); + w = W_PART(2); + h = H_PART(2); + }; + class UniformTab: GroundTab { + x = X_PART(15.1); + y = Y_PART(2.5); + w = W_PART(3.5); + h = H_PART(3); + }; + class UniformSlot: SlotPrimary { + x = X_PART(15.35); + y = Y_PART(2.5); + w = W_PART(3); + h = H_PART(3); + }; + class UniformLoad: GroundLoad { + x = X_PART(15.1); + y = Y_PART(5.5); + w = W_PART(3.5); + h = H_PART(0.5); + }; + class UniformContainer: GroundContainer { + x = X_PART(15.1); + y = Y_PART(6); + w = W_PART(11); + h = H_PART(14); + }; + class VestTab: UniformTab { + x = X_PART(18.85); + y = Y_PART(2.5); + w = W_PART(3.5); + h = H_PART(3); + }; + class VestSlot: SlotPrimary { + x = X_PART(19.1); + y = Y_PART(2.5); + w = W_PART(3); + h = H_PART(3); + }; + class VestLoad: GroundLoad { + x = X_PART(18.85); + y = Y_PART(5.5); + w = W_PART(3.5); + h = H_PART(0.5); + }; + class BackpackTab: UniformTab { + x = X_PART(22.6); + y = Y_PART(2.5); + w = W_PART(3.5); + h = H_PART(3); + }; + class BackpackSlot: SlotPrimary { + x = X_PART(22.85); + y = Y_PART(2.5); + w = W_PART(3); + h = H_PART(3); + }; + class BackpackLoad: GroundLoad { + x = X_PART(22.6); + y = Y_PART(5.5); + w = W_PART(3.5); + h = H_PART(0.5); + }; + class TotalLoad: GroundLoad { + //center: progressbar height decrease + x = X_PART(15.1); + y = Y_PART(22.5); + w = W_PART(23.4); + h = H_PART(0.5); + }; + class ContainerMarker: GroundTab { + x = X_PART(0); + y = Y_PART(24); + w = W_PART(1); + h = H_PART(1); + }; + class GroundMarker: ContainerMarker { + x = X_PART(1.5); + y = Y_PART(24); + w = W_PART(1); + h = H_PART(1); + }; + class SoldierMarker: ContainerMarker { + x = X_PART(3); + y = Y_PART(24); + w = W_PART(1); + h = H_PART(1); + }; + }; +}; diff --git a/addons/inventory/config.cpp b/addons/inventory/config.cpp index e933cc40a4..c7b6649be6 100644 --- a/addons/inventory/config.cpp +++ b/addons/inventory/config.cpp @@ -12,503 +12,16 @@ class CfgPatches { }; }; +#include "RscDisplayInventory.hpp" -class RscText; -class RscPicture; -class RscListBox; -class RscProgress; -class RscStructuredText; -class RscActiveText; -class RscCombo; -class RscControlsGroupNoScrollbars; - -/* -Adjust the scaling of the inventory screen - - changes it from scaling based on user's interface size to a static size - - text size and row height size are uneffected - - also tweaks the height of the two ProgressBars which looked odd scaled up so much -*/ - -class RscDisplayInventory { - class controls { - class CA_ContainerBackground: RscText { - //crate: GroundLoad adjust size - x = "1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "12 * (safeZoneH / 40)"; - h = "22.5 * ((safeZoneH / 1.2) / 25)"; - }; - class CA_PlayerBackground: RscText { - //center player's container: decrease height because of progressbar height decrease - x = "14.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "24.4 * (safeZoneH / 40)"; - h = "21.5 * ((safeZoneH / 1.2) / 25)"; - }; - class TitleBackground: RscText { - x = "14.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "24.4 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; - }; - class PlayersName: RscText { - text = "Player name:"; - x = "15.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "19.8 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; - }; - class RankBackground: RscText { - x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1.25 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "0.6 * (safeZoneH / 40)"; - h = "0.6 * ((safeZoneH / 1.2) / 25)"; - }; - class RankPicture: RscPicture { - x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1.25 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "0.6 * (safeZoneH / 40)"; - h = "0.6 * ((safeZoneH / 1.2) / 25)"; - }; - class ButtonBack: RscActiveText { - x = "38 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "1 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotPrimary: RscPicture { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11.9 * (safeZoneH / 40)"; - h = "3 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotPrimaryMuzzle: BackgroundSlotPrimary { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "9.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotPrimaryFlashlight: BackgroundSlotPrimary { - x = "29.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "9.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotPrimaryOptics: BackgroundSlotPrimary { - x = "32.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "9.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotPrimaryMagazine: BackgroundSlotPrimary { - x = "35.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "9.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotSecondary: BackgroundSlotPrimary { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "11.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11.9 * (safeZoneH / 40)"; - h = "3 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotSecondaryMuzzle: BackgroundSlotPrimary { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "14.6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotSecondaryFlashlight: BackgroundSlotPrimary { - x = "29.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "14.6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotSecondaryOptics: BackgroundSlotPrimary { - x = "32.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "14.6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotSecondaryMagazine: BackgroundSlotPrimary { - x = "35.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "14.6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotHandgun: BackgroundSlotPrimary { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "17 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11.9 * (safeZoneH / 40)"; - h = "3 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotHandgunMuzzle: BackgroundSlotPrimary { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotHandgunFlashlight: BackgroundSlotPrimary { - x = "29.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotHandgunOptics: BackgroundSlotPrimary { - x = "32.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotHandgunMagazine: BackgroundSlotPrimary { - x = "35.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotHeadgear: BackgroundSlotPrimary { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2.9 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotGoggles: BackgroundSlotPrimary { - x = "29.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2.9 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotHMD: BackgroundSlotPrimary { - x = "32.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2.9 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotBinoculars: BackgroundSlotPrimary { - x = "35.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2.9 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotMap: BackgroundSlotPrimary { - x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.12 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotGPS: BackgroundSlotPrimary { - x = "17.32 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.12 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotCompass: BackgroundSlotPrimary { - x = "21.76 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.12 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotRadio: BackgroundSlotPrimary { - x = "19.54 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.12 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class BackgroundSlotWatch: BackgroundSlotPrimary { - x = "23.98 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.12 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class ExternalContainerBackground: RscPicture { - x = "1.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "3.7 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11 * (safeZoneH / 40)"; - h = "18.4 * ((safeZoneH / 1.2) / 25)"; - }; - class PlayerContainerBackground: ExternalContainerBackground { - x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11 * (safeZoneH / 40)"; - h = "14 * ((safeZoneH / 1.2) / 25)"; - }; - class GroundTab: RscActiveText { - x = "1.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "5.5 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; - }; - class SoldierTab: GroundTab { - x = "7 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "5.5 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; - }; - class GroundContainer: RscListBox { - x = "1.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "3.7 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11 * (safeZoneH / 40)"; - h = "18.4 * ((safeZoneH / 1.2) / 25)"; - }; - class GroundFilter: RscCombo { - x = "1.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; - }; - class GroundLoad: RscProgress { - //crate: GroundLoad adjust size - x = "1.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "22.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11 * (safeZoneH / 40)"; - h = "0.5 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotPrimary: GroundTab { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11.9 * (safeZoneH / 40)"; - h = "3 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotPrimaryMuzzle: SlotPrimary { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "9.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotPrimaryGrip: SlotPrimary { - w = 0; - h = 0; - x = "39 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "9 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - }; - class SlotPrimaryFlashlight: SlotPrimary { - x = "29.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "9.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotPrimaryOptics: SlotPrimary { - x = "32.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "9.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotPrimaryMagazine: SlotPrimary { - x = "35.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "9.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotSecondary: SlotPrimary { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "11.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11.9 * (safeZoneH / 40)"; - h = "3 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotSecondaryMuzzle: SlotPrimary { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "14.6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotSecondaryGrip: SlotPrimary { - w = 0; - h = 0; - x = "39 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "14.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - }; - class SlotSecondaryFlashlight: SlotPrimary { - x = "29.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "14.6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotSecondaryOptics: SlotPrimary { - x = "32.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "14.6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotSecondaryMagazine: SlotPrimary { - x = "35.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "14.6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotHandgun: SlotPrimary { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "17 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11.9 * (safeZoneH / 40)"; - h = "3 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotHandgunMuzzle: SlotPrimary { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotHandgunGrip: SlotPrimary { - w = 0; - h = 0; - x = "39 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - }; - class SlotHandgunFlashlight: SlotPrimary { - x = "29.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotHandgunOptics: SlotPrimary { - x = "32.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotHandgunMagazine: SlotPrimary { - x = "35.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotHeadgear: SlotPrimary { - x = "26.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2.9 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotGoggles: SlotPrimary { - x = "29.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2.9 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotHMD: SlotPrimary { - x = "32.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2.9 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotBinoculars: SlotPrimary { - x = "35.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2.9 * (safeZoneH / 40)"; - h = "2.9 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotMap: SlotPrimary { - x = "15.16 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotGPS: SlotPrimary { - x = "17.38 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotCompass: SlotPrimary { - x = "21.82 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotRadio: SlotPrimary { - x = "19.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class SlotWatch: SlotPrimary { - x = "24.04 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "20.1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "2 * (safeZoneH / 40)"; - h = "2 * ((safeZoneH / 1.2) / 25)"; - }; - class UniformTab: GroundTab { - x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "3.5 * (safeZoneH / 40)"; - h = "3 * ((safeZoneH / 1.2) / 25)"; - }; - class UniformSlot: SlotPrimary { - x = "15.35 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "3 * (safeZoneH / 40)"; - h = "3 * ((safeZoneH / 1.2) / 25)"; - }; - class UniformLoad: GroundLoad { - x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "5.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "3.5 * (safeZoneH / 40)"; - h = "0.5 * ((safeZoneH / 1.2) / 25)"; - }; - class UniformContainer: GroundContainer { - x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "6 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "11 * (safeZoneH / 40)"; - h = "14 * ((safeZoneH / 1.2) / 25)"; - }; - class VestTab: UniformTab { - x = "18.85 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "3.5 * (safeZoneH / 40)"; - h = "3 * ((safeZoneH / 1.2) / 25)"; - }; - class VestSlot: SlotPrimary { - x = "19.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "3 * (safeZoneH / 40)"; - h = "3 * ((safeZoneH / 1.2) / 25)"; - }; - class VestLoad: GroundLoad { - x = "18.85 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "5.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "3.5 * (safeZoneH / 40)"; - h = "0.5 * ((safeZoneH / 1.2) / 25)"; - }; - class BackpackTab: UniformTab { - x = "22.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "3.5 * (safeZoneH / 40)"; - h = "3 * ((safeZoneH / 1.2) / 25)"; - }; - class BackpackSlot: SlotPrimary { - x = "22.85 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "2.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "3 * (safeZoneH / 40)"; - h = "3 * ((safeZoneH / 1.2) / 25)"; - }; - class BackpackLoad: GroundLoad { - x = "22.6 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "5.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "3.5 * (safeZoneH / 40)"; - h = "0.5 * ((safeZoneH / 1.2) / 25)"; - }; - class TotalLoad: GroundLoad { - //center: progressbar height decrease - x = "15.1 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "22.5 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "23.4 * (safeZoneH / 40)"; - h = "0.5 * ((safeZoneH / 1.2) / 25)"; - }; - class ContainerMarker: GroundTab { - x = "0 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "24 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "1 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; - }; - class GroundMarker: ContainerMarker { - x = "1.5 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "24 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "1 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; - }; - class SoldierMarker: ContainerMarker { - x = "3 * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "24 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "1 * (safeZoneH / 40)"; - h = "1 * ((safeZoneH / 1.2) / 25)"; - }; +class ACE_Settings { + class GVAR(inventoryDisplaySize) { + value = 0; + typeName = "SCALAR"; + isClientSetable = 1; + displayName = "$STR_ACE_Inventory_SettingName"; + description = "$STR_ACE_Inventory_SettingDescription"; + values[] = {"Normal (Default Size)", "Medium", "Bigger"}; }; }; + diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml new file mode 100644 index 0000000000..9ca01373d1 --- /dev/null +++ b/addons/inventory/stringtable.xml @@ -0,0 +1,12 @@ + + + + + + Make Inventory Display Bigger + + + Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed. + + + \ No newline at end of file diff --git a/addons/kestrel/CfgVehicles.hpp b/addons/kestrel/CfgVehicles.hpp index 906e3a9e22..31aea38bda 100644 --- a/addons/kestrel/CfgVehicles.hpp +++ b/addons/kestrel/CfgVehicles.hpp @@ -1,9 +1,3 @@ - -#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ -} - class CfgVehicles { class Man; class CAManBase: Man { diff --git a/addons/laserpointer/CfgVehicles.hpp b/addons/laserpointer/CfgVehicles.hpp index c98d0626c2..8c81837fe2 100644 --- a/addons/laserpointer/CfgVehicles.hpp +++ b/addons/laserpointer/CfgVehicles.hpp @@ -1,9 +1,3 @@ - -#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ -} - class CfgVehicles { class NATO_Box_Base; class Box_NATO_Support_F: NATO_Box_Base { diff --git a/addons/laserpointer/config.cpp b/addons/laserpointer/config.cpp index 32357b31ef..b97587dac6 100644 --- a/addons/laserpointer/config.cpp +++ b/addons/laserpointer/config.cpp @@ -3,7 +3,7 @@ class CfgPatches { class ADDON { units[] = {}; - weapons[] = {"AGM_acc_pointer_red","AGM_acc_pointer_green"}; + weapons[] = {"ACE_acc_pointer_red","ACE_acc_pointer_green"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; author[] = {"commy2"}; diff --git a/addons/lockbackpacks/$PBOPREFIX$ b/addons/lockbackpacks/$PBOPREFIX$ deleted file mode 100644 index 012a3f3cd5..0000000000 --- a/addons/lockbackpacks/$PBOPREFIX$ +++ /dev/null @@ -1 +0,0 @@ -z\ace\addons\lockbackpacks \ No newline at end of file diff --git a/addons/lockbackpacks/CfgVehicles.hpp b/addons/lockbackpacks/CfgVehicles.hpp deleted file mode 100644 index 5517d81525..0000000000 --- a/addons/lockbackpacks/CfgVehicles.hpp +++ /dev/null @@ -1,31 +0,0 @@ - -class CfgVehicles { - class Man; - class CAManBase: Man { - class ACE_SelfActions { - class ACE_Equipment { - class ACE_LockBackpack { - displayName = "$STR_ACE_LockBackpacks_LockBackpack"; - condition = QUOTE([backpackContainer _player] call FUNC(isBackpack) && {!((backpackContainer _player) getVariable [ARR_2('ACE_LockedInventory', false)])}); - statement = QUOTE((backpackContainer _player) setVariable [ARR_3('ACE_LockedInventory', true, true)];); - showDisabled = 0; - priority = 2.5; - icon = ""; // @todo - hotkey = "L"; - enableInside = 1; - }; - - class ACE_UnlockBackpack { - displayName = "$STR_ACE_LockBackpacks_UnlockBackpack"; - condition = QUOTE([backpackContainer _player] call FUNC(isBackpack) && {(backpackContainer _player) getVariable [ARR_2('ACE_LockedInventory', false)]}); - statement = QUOTE((backpackContainer _player) setVariable [ARR_3('ACE_LockedInventory', false, true)];); - showDisabled = 0; - priority = 2.5; - icon = ""; // @todo - hotkey = "L"; - enableInside = 1; - }; - }; - }; - }; -}; diff --git a/addons/lockbackpacks/functions/fnc_onOpenInventory.sqf b/addons/lockbackpacks/functions/fnc_onOpenInventory.sqf deleted file mode 100644 index 9305bf3de7..0000000000 --- a/addons/lockbackpacks/functions/fnc_onOpenInventory.sqf +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Author: bux, commy2 - * - * Handle the open inventory event. Don't open the inventory if it's locked and display message. - * - * Argument: - * Input from "InventoryOpened" eventhandler - * - * Return value: - * Don't open the inventory dialog? (Bool) - */ -#include "script_component.hpp" - -private ["_target", "_isBackpack", "_isLocked", "_return"]; - -_target = _this select 1; - -_isBackpack = [_target] call FUNC(isBackpack); -_isLocked = _target getVariable ["ACE_LockedInventory", false]; - -_return = false; -if (_isBackpack) then { - // target is a backpack - private "_unit"; - _unit = [_target] call FUNC(getBackpackAssignedUnit); - - if (!alive _unit || {_unit getVariable ["ACE_isUnconscious", false]}) exitWith {}; - - if (_isLocked) then { - // target is a locked backpack - [format [localize "STR_ACE_LockBackpacks_BackpackLocked", [_unit] call EFUNC(common,getName)]] call EFUNC(common,displayTextStructured); - _return = true; - } else { - // target is a not-locked backpack - if (_unit getVariable ["ACE_LockedInventory", false]) then { - [localize "STR_ACE_LockBackpacks_InventoryLocked"] call EFUNC(common,displayTextStructured); - _return = true; - }; - }; -} else { - // target is not a backpack - if (_isLocked) then { - [localize "STR_ACE_LockBackpacks_InventoryLocked"] call EFUNC(common,displayTextStructured); - _return = true; - }; -}; -_return diff --git a/addons/lockbackpacks/functions/script_component.hpp b/addons/lockbackpacks/functions/script_component.hpp deleted file mode 100644 index 1ad43dc2cc..0000000000 --- a/addons/lockbackpacks/functions/script_component.hpp +++ /dev/null @@ -1 +0,0 @@ -#include "\z\ace\addons\lockbackpacks\script_component.hpp" \ No newline at end of file diff --git a/addons/lockbackpacks/script_component.hpp b/addons/lockbackpacks/script_component.hpp deleted file mode 100644 index 4275a6e7fd..0000000000 --- a/addons/lockbackpacks/script_component.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#define COMPONENT lockbackpacks -#include "\z\ace\addons\main\script_mod.hpp" - -#ifdef DEBUG_ENABLED_LOCKBACKPACKS - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_ENABLED_LOCKBACKPACKS - #define DEBUG_SETTINGS DEBUG_ENABLED_LOCKBACKPACKS -#endif - -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/lockbackpacks/stringtable.xml b/addons/lockbackpacks/stringtable.xml deleted file mode 100644 index 85cd7f77d3..0000000000 --- a/addons/lockbackpacks/stringtable.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - Take (Ventral) - Aufnehmen (Am Bauch) - Coger (Mochila delantera) - Załóż (brzuch) - Vzít (ventrální) - Prendre (Ventral) - Взять рюкзак (передний) - Felvétel (előre) - Pegar (Mochila Ventral) - Prendi - - - Take Off Backpack - Rucksack ablegen - Dejar mochila - Zdejmij (brzuch) - Odložit batoh - Enlever (Ventral) - Снять рюкзак (передний) - Táska levétele - Retirar Mochila - Togliere zaino - - - Lock Backpack - Rucksack verschließen - Verrouiller le sac à dos - Bloquear mochila - Zamknout batoh - Zablokuj plecak - Táska zárolása - Запереть рюкзак - - - Unlock Backpack - Rucksack aufschließen - Déverouiller le sac à dos - Desbloquear mochila - Odemknout batoh - Odblokuj plecak - Táska nyitása - Отпереть рюкзак - - - Backpack of %1 is locked - Der Rucksack von %1 ist verschlossen - Le sac à dos de %1 est verroullé - La mochila de %1 está bloqueada - %1 má zamčený batoh - Plecak %1 jest zablokowany - %1 táskája zárolva - Рюкзак %1 заперт - - - Inventory is locked - Das Inventar ist verschlossen - L'inventaire est verrouillé - Inventario bloqueado - Inventář je zamčený - Ekwipunek jest zablokowany - Felszerelés zárolt - Инвентарь заперт - - - \ No newline at end of file diff --git a/addons/logistics_uavbattery/CfgSounds.hpp b/addons/logistics_uavbattery/CfgSounds.hpp new file mode 100644 index 0000000000..530c5b86a9 --- /dev/null +++ b/addons/logistics_uavbattery/CfgSounds.hpp @@ -0,0 +1,7 @@ +class CfgSounds { + class ACE_replaceUAVBattery { + name = "ACE_replaceUAVBattery"; + sound[]={QUOTE(PATHTOF(sounds\exchange_battery.ogg)),1,1}; + titles[]={}; + }; +}; diff --git a/addons/logistics_uavbattery/CfgVehicles.hpp b/addons/logistics_uavbattery/CfgVehicles.hpp index 933079071a..a3a3fc763d 100644 --- a/addons/logistics_uavbattery/CfgVehicles.hpp +++ b/addons/logistics_uavbattery/CfgVehicles.hpp @@ -2,6 +2,7 @@ class CfgVehicles { class Helicopter_Base_F; class UAV_01_base_F: Helicopter_Base_F { class ACE_Actions { + class ACE_MainActions { class GVAR(RefuelUAV) { displayName = "$STR_ACE_logistics_uavbattery_Recharge"; distance = 4; @@ -11,9 +12,10 @@ class CfgVehicles { priority = 1.245; \ icon = QUOTE(PATHTOF(ui\UAV_battery.paa)); }; + }; }; }; - + // Misc box content class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { diff --git a/addons/logistics_uavbattery/config.cpp b/addons/logistics_uavbattery/config.cpp index 046a2665d0..32d8c49978 100644 --- a/addons/logistics_uavbattery/config.cpp +++ b/addons/logistics_uavbattery/config.cpp @@ -15,3 +15,4 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" +#include "CfgSounds.hpp" diff --git a/addons/logistics_uavbattery/functions/fnc_canRefuelUAV.sqf b/addons/logistics_uavbattery/functions/fnc_canRefuelUAV.sqf index 4256ddabf9..aaaac3077d 100644 --- a/addons/logistics_uavbattery/functions/fnc_canRefuelUAV.sqf +++ b/addons/logistics_uavbattery/functions/fnc_canRefuelUAV.sqf @@ -1,17 +1,19 @@ -/* fnc_refuel.sqf -* -* Author: marc_book (modified by PabstMirror) -* -* Tests if unit can refuel the target UAV -* -* Argument: -* 0: OBJECT - Player unit -* 1: OBJECT - UAV to test -* -* Return value: -* BOOL -*/ - +/* + * Author: marc_book + * Tests if unit can refuel the target UAV + * + * Arguments: + * 0: Player + * 1: UAV + * + * Return Value: + * Can the player rechange the UAV + * + * Example: + * [player, theUAV] call ace_logistics_uavbattery_fnc_canRefuelUAV + * + * Public: No + */ #include "script_component.hpp" PARAMS_2(_caller,_target); diff --git a/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf b/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf index 9384044f00..a23969aa9f 100644 --- a/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf +++ b/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf @@ -1,17 +1,19 @@ -/* fnc_refuel.sqf -* -* Author: marc_book (modified by PabstMirror) -* -* Starts refueling/recharging the 'Dartar' UAVs -* -* Argument: -* 0: OBJECT - Player unit -* 1: OBJECT - UAV -* -* Return value: -* NOTHING -*/ - +/* + * Author: marc_book + * Starts refueling/recharging the 'Dartar' UAVs + * + * Arguments: + * 0: Player + * 1: UAV + * + * Return Value: + * Nothing + * + * Example: + * [player, theUAV] call ace_logistics_uavbattery_fnc_refuelUAV + * + * Public: No + */ #include "script_component.hpp" PARAMS_2(_caller,_target); @@ -21,6 +23,7 @@ if (!(_this call FUNC(canRefuelUAV))) exitWith {}; _onFinish = { EXPLODE_2_PVT((_this select 0),_caller,_target); _caller removeItem "ACE_UAVBattery"; + playSound3D [QUOTE(PATHTO_R(sounds\exchange_battery.ogg)), objNull, false, getPosASL _caller, 1, 1, 10]; ["VehicleSetFuel", [_target], [_target, 1]] call EFUNC(common,targetEvent); //setFuel is local }; diff --git a/addons/logistics_uavbattery/sounds/exchange_battery.ogg b/addons/logistics_uavbattery/sounds/exchange_battery.ogg new file mode 100644 index 0000000000..5a40ddb47a Binary files /dev/null and b/addons/logistics_uavbattery/sounds/exchange_battery.ogg differ diff --git a/addons/logistics_wirecutter/CfgEventHandlers.hpp b/addons/logistics_wirecutter/CfgEventHandlers.hpp index f0a9f14d91..79c3aaa959 100644 --- a/addons/logistics_wirecutter/CfgEventHandlers.hpp +++ b/addons/logistics_wirecutter/CfgEventHandlers.hpp @@ -4,3 +4,8 @@ class Extended_PreInit_EventHandlers { init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; +class Extended_PostInit_EventHandlers { + class ADDON { + clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) ); + }; +}; diff --git a/addons/logistics_wirecutter/CfgVehicles.hpp b/addons/logistics_wirecutter/CfgVehicles.hpp deleted file mode 100644 index 8a16d1b828..0000000000 --- a/addons/logistics_wirecutter/CfgVehicles.hpp +++ /dev/null @@ -1,19 +0,0 @@ -class CfgVehicles { - class Man; - class CAManBase: Man { - class ACE_SelfActions { - class ACE_Equipment { - class GVAR(CutFence) { - displayName = "$STR_ACE_logistics_wirecutter_CutFence"; - condition = QUOTE([_player] call FUNC(canCutFence)); - statement = QUOTE([_player] call FUNC(cutDownFence)); - exceptions[] = {}; - showDisabled = 1; - priority = 0; - icon = PATHTOF(UI\wirecutter_ca.paa); - hotkey = "C"; - }; - }; - }; - }; -}; \ No newline at end of file diff --git a/addons/logistics_wirecutter/XEH_clientInit.sqf b/addons/logistics_wirecutter/XEH_clientInit.sqf new file mode 100644 index 0000000000..c46cab29f1 --- /dev/null +++ b/addons/logistics_wirecutter/XEH_clientInit.sqf @@ -0,0 +1,5 @@ +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +["interactMenuOpened", {_this call FUNC(interactEH)}] call EFUNC(common,addEventHandler); diff --git a/addons/logistics_wirecutter/XEH_preInit.sqf b/addons/logistics_wirecutter/XEH_preInit.sqf index 7588a109e6..44eb941c16 100644 --- a/addons/logistics_wirecutter/XEH_preInit.sqf +++ b/addons/logistics_wirecutter/XEH_preInit.sqf @@ -2,11 +2,11 @@ ADDON = false; -PREP(canCutFence); PREP(cutDownFence); PREP(cutDownFenceAbort); PREP(cutDownFenceCallback); PREP(getNearestFence); +PREP(interactEH); PREP(isFence); ADDON = true; diff --git a/addons/logistics_wirecutter/config.cpp b/addons/logistics_wirecutter/config.cpp index 7f292132fa..27d4467ccf 100644 --- a/addons/logistics_wirecutter/config.cpp +++ b/addons/logistics_wirecutter/config.cpp @@ -5,7 +5,7 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common", "ace_interaction"}; + requiredAddons[] = {"ace_interact_menu"}; author[] = {"gpgpgpgp", "PabstMirror"}; authorUrl = ""; VERSION_CONFIG; @@ -13,6 +13,5 @@ class CfgPatches { }; #include "CfgEventHandlers.hpp" -#include "CfgVehicles.hpp" #include "CfgSounds.hpp" #include "CfgWeapons.hpp" diff --git a/addons/logistics_wirecutter/functions/fnc_canCutFence.sqf b/addons/logistics_wirecutter/functions/fnc_canCutFence.sqf deleted file mode 100644 index f57a970d58..0000000000 --- a/addons/logistics_wirecutter/functions/fnc_canCutFence.sqf +++ /dev/null @@ -1,18 +0,0 @@ -/* fnc_canCutFence.sqf -* -* Author: PabstMirror -* -* Condition check if player is able to cut a fence. -* Checks for "ACE_wirecutter" item and if there is a nearby fence. -* -* Argument: -* 0: OBJECT - Unit to check condition for (player) -* -* Return value: -* BOOL -*/ - -#include "script_component.hpp" -PARAMS_1(_unit); - -("ACE_wirecutter" in (items _unit)) && {!(isNull ([_unit] call FUNC(getNearestFence)))} diff --git a/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf b/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf index 0a42d5d56b..ee4c512cd2 100644 --- a/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf +++ b/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf @@ -1,20 +1,31 @@ -// by gpgpgpgp, edited by commy2 +/* + * Author: gpgpgpgp, edited by commy2, PabstMirror + * Starts cutting down a fence + * + * Arguments: + * 0: Unit + * 1: Fence + * + * Return Value: + * Nothing + * + * Example: + * [player, berlinWall] call ace_logistics_wirecutter_fnc_cutDownFence + * + * Public: No + */ #include "script_component.hpp" -PARAMS_1(_unit); +private ["_timeToCut"]; + +PARAMS_2(_unit,_fenceObject); if (_unit != ACE_player) exitWith {}; -_fenceObject = [ACE_player] call FUNC(getNearestFence); -if (isNull _fenceObject) exitWith {}; - -_timeToCut = 5; -if !([ACE_player] call EFUNC(common,isEngineer)) then { - _timeToCut = _timeToCut + 5; -}; +_timeToCut = if ([ACE_player] call EFUNC(common,isEngineer)) then {5} else {10}; [ACE_player, "AinvPknlMstpSnonWnonDr_medic5", 0] call EFUNC(common,doAnimation); -if (_timeToCut > 4.5) then { +if (_timeToCut > 5) then { playSound "ACE_wirecutter_sound_long"; } else { playSound "ACE_wirecutter_sound"; diff --git a/addons/logistics_wirecutter/functions/fnc_cutDownFenceAbort.sqf b/addons/logistics_wirecutter/functions/fnc_cutDownFenceAbort.sqf index d17038af7c..20cb092131 100644 --- a/addons/logistics_wirecutter/functions/fnc_cutDownFenceAbort.sqf +++ b/addons/logistics_wirecutter/functions/fnc_cutDownFenceAbort.sqf @@ -1,4 +1,18 @@ -// by commy2 +/* + * Author: commy2 + * Stops cutting down fence (reset animation) + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * [] call ace_logistics_wirecutter_fnc_cutDownFenceAbort + * + * Public: No + */ #include "script_component.hpp" [ACE_player, "AmovPknlMstpSrasWrflDnon", 1] call EFUNC(common,doAnimation); diff --git a/addons/logistics_wirecutter/functions/fnc_cutDownFenceCallback.sqf b/addons/logistics_wirecutter/functions/fnc_cutDownFenceCallback.sqf index 57c0289461..77bc4f2ba6 100644 --- a/addons/logistics_wirecutter/functions/fnc_cutDownFenceCallback.sqf +++ b/addons/logistics_wirecutter/functions/fnc_cutDownFenceCallback.sqf @@ -1,7 +1,22 @@ +/* + * Author: PabstMirror + * Once progressbar is done: Fence is cutdown + * + * Arguments: + * 0: Fence Object + * + * Return Value: + * Nothing + * + * Example: + * [aFence] call ace_logistics_wirecutter_fnc_cutDownFenceCallback + * + * Public: No + */ #include "script_component.hpp" PARAMS_1(_fenceObject); _fenceObject setdamage 1; -[localize "STR_ACE_logistics_wirecutter_FenceCut"] call EFUNC(common,displayTextStructured); +// [localize "STR_ACE_logistics_wirecutter_FenceCut"] call EFUNC(common,displayTextStructured); [ACE_player, "AmovPknlMstpSrasWrflDnon", 1] call EFUNC(common,doAnimation); diff --git a/addons/logistics_wirecutter/functions/fnc_getNearestFence.sqf b/addons/logistics_wirecutter/functions/fnc_getNearestFence.sqf index 5004315fcd..c9e59b41a0 100644 --- a/addons/logistics_wirecutter/functions/fnc_getNearestFence.sqf +++ b/addons/logistics_wirecutter/functions/fnc_getNearestFence.sqf @@ -1,15 +1,18 @@ -/* fnc_getNearestFence.sqf -* -* Author: PabstMirror -* -* Gets nearest fence within 5 meters to the unit. -* -* Argument: -* 0: OBJECT - Unit to search for fence objects arround -* -* Return value: -* OBJECT - Nearest object that is a fence, objNull if none found. -*/ +/* + * Author: PabstMirror + * Gets nearest fence object (not actully used, left for utility) + * + * Arguments: + * 0: Unit + * + * Return Value: + * The return value + * + * Example: + * [player] call ace_logistics_wirecutter_fnc_getNearestFence + * + * Public: Yes + */ #include "script_component.hpp" private "_nearestFence"; @@ -20,6 +23,6 @@ _nearestFence = objNull; if ((isNull _nearestFence) && {[_x] call FUNC(isFence)}) then { _nearestFence = _x; }; -} forEach nearestObjects [_unit, [], 5]; +} forEach nearestObjects [_unit, [], 15]; _nearestFence diff --git a/addons/logistics_wirecutter/functions/fnc_interactEH.sqf b/addons/logistics_wirecutter/functions/fnc_interactEH.sqf new file mode 100644 index 0000000000..c81fc46c40 --- /dev/null +++ b/addons/logistics_wirecutter/functions/fnc_interactEH.sqf @@ -0,0 +1,64 @@ +/* + * Author: PabstMirror + * When interact_menu starts rendering (from "interact_keyDown" event) + * + * Arguments: + * Interact Menu Type (0 - world, 1 - self) + * + * Return Value: + * Nothing + * + * Example: + * [0] call ace_logistics_wirecutter_fnc_interactEH + * + * Public: Yes + */ +#include "script_component.hpp" + +PARAMS_1(_interactionType); + +if (_interactionType != 0) exitWith {}; + +//for performance only do stuff it they have a wirecutter item +//(if they somehow get one durring keydown they'll just have to reopen) +if (!("ACE_wirecutter" in (items ace_player))) exitWith {}; + +[{ + private ["_fncStatement", "_attachedFence", "_fncCondition", "_helper"]; + PARAMS_2(_args,_pfID); + EXPLODE_3_PVT(_args,_setPosition,_addedHelpers,_fencesHelped); + + if (!EGVAR(interact_menu,keyDown)) then { + {deleteVehicle _x;} forEach _addedHelpers; + [_pfID] call CBA_fnc_removePerFrameHandler; + } else { + //If play moved >5 meters from last pos, then rescan + if (((getPosASL ace_player) distance _setPosition) > 5) then { + + _fncStatement = { + _attachedFence = _target getVariable [QGVAR(attachedFence), objNull]; + [ace_player, _attachedFence] call FUNC(cutDownFence); + }; + _fncCondition = { + _attachedFence = _target getVariable [QGVAR(attachedFence), objNull]; + ((!isNull _attachedFence) && {(damage _attachedFence) < 1} && {("ACE_wirecutter" in (items ace_player))}) + }; + + { + if (!(_x in _fencesHelped)) then { + if ([_x] call FUNC(isFence)) then { + _fencesHelped pushBack _x; + _helper = "Sign_Sphere25cm_F" createVehicleLocal (getpos _x); + [_helper, 0, [""], (localize "STR_ACE_logistics_wirecutter_CutFence"), QUOTE(PATHTOF(ui\wirecutter_ca.paa)), [0,0,0], _fncStatement, _fncCondition, 5] call EFUNC(interact_menu,addAction); + _helper setPosASL ((getPosASL _x) vectorAdd [0,0,1.25]); + _helper hideObject true; + _helper setVariable [QGVAR(attachedFence), _x]; + _addedHelpers pushBack _helper; + }; + }; + } forEach nearestObjects [ace_player, [], 15]; + + _args set [0, (getPosASL ace_player)]; + }; + }; +}, 0.1, [((getPosASL ace_player) vectorAdd [-100,0,0]), [], []]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/logistics_wirecutter/functions/fnc_isFence.sqf b/addons/logistics_wirecutter/functions/fnc_isFence.sqf index 2c00cec92b..aee9a22ef9 100644 --- a/addons/logistics_wirecutter/functions/fnc_isFence.sqf +++ b/addons/logistics_wirecutter/functions/fnc_isFence.sqf @@ -1,16 +1,19 @@ -/* fnc_isFence.sqf -* -* Author: PabstMirror -* -* Checks if object is a fence. Should work on any fence type, even (typeof == ""). -* Call is fairly expensive because of all of the string checking. -* -* Argument: -* 0: OBJECT - Ojbect to test -* -* Return value: -* BOOL -*/ +/* + * Author: PabstMirror + * Checks if object is a fence. Should work on any fence type, even (typeof == ""). + * Call is fairly expensive because of all of the string checking. + * + * Arguments: + * 0: An Object To Test + * + * Return Value: + * Is it a fence + * + * Example: + * [aFence] call ace_logistics_wirecutter_fnc_isFence + * + * Public: No + */ #include "script_component.hpp" //find is case sensitive, so keep everything lowercase @@ -27,14 +30,14 @@ _typeOf = toLower (typeOf _object); _returnValue = false; if (_typeOf != "") then { - _returnValue = _typeOf in (FENCE_A3_TYPENAMES + FENCE_AIA_TYPENAMES); + _returnValue = _typeOf in (FENCE_A3_TYPENAMES + FENCE_AIA_TYPENAMES); } else { - _typeOf = toLower (str _object); //something like "123201: wall_indfnc_9.p3d" - { - if ((_typeOf find _x) != -1) then { - _returnValue = true; - }; - } forEach (FENCE_A3_P3DS + FENCE_AIA_P3DS); + _typeOf = toLower (str _object); //something like "123201: wall_indfnc_9.p3d" + { + if ((_typeOf find _x) != -1) then { + _returnValue = true; + }; + } forEach (FENCE_A3_P3DS + FENCE_AIA_P3DS); }; _returnValue diff --git a/addons/magazinerepack/functions/fnc_openSelectMagazineUI.sqf b/addons/magazinerepack/functions/fnc_openSelectMagazineUI.sqf index e96e84e9a1..fc183faa5b 100644 --- a/addons/magazinerepack/functions/fnc_openSelectMagazineUI.sqf +++ b/addons/magazinerepack/functions/fnc_openSelectMagazineUI.sqf @@ -54,6 +54,5 @@ _actions, { [_this] call FUNC(startRepackingMagazine); }, { call EFUNC(interaction,hideMenu); //ToDo: Self Interaction Integration - if !(profileNamespace getVariable [QGVAR(AutoCloseMenu), false]) then {"Default" call EFUNC(interaction,openMenuSelf)}; } ] call EFUNC(interaction,openSelectMenu); diff --git a/addons/magazines/CfgEventHandlers.hpp b/addons/magazines/CfgEventHandlers.hpp new file mode 100644 index 0000000000..b5577d09b7 --- /dev/null +++ b/addons/magazines/CfgEventHandlers.hpp @@ -0,0 +1,13 @@ +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; + +class Extended_FiredBIS_EventHandlers { + class AllVehicles { + class ADDON { + firedBIS = QUOTE(_this call FUNC(forceMagazineMuzzleVelocity)); + }; + }; +}; diff --git a/addons/magazines/CfgMagazines.hpp b/addons/magazines/CfgMagazines.hpp index 86cb6d9e1b..1c0242bd6d 100644 --- a/addons/magazines/CfgMagazines.hpp +++ b/addons/magazines/CfgMagazines.hpp @@ -22,6 +22,7 @@ class CfgMagazines { descriptionShort = "$STR_ACE_30Rnd_65x39_caseless_mag_SDDescription"; picture = "\A3\weapons_f\data\ui\m_30stanag_caseless_green_CA.paa"; initSpeed = 320; + GVAR(forceMagazineMuzzleVelocity) = 1; }; class ACE_30Rnd_65x39_caseless_mag_AP: 30Rnd_65x39_caseless_mag { @@ -57,6 +58,7 @@ class CfgMagazines { displayNameShort = "$STR_ACE_30Rnd_65x39_caseless_green_mag_SDNameShort"; descriptionShort = "$STR_ACE_30Rnd_65x39_caseless_green_mag_SDDescription"; initSpeed = 320; + GVAR(forceMagazineMuzzleVelocity) = 1; }; class ACE_30Rnd_65x39_caseless_green_mag_AP: 30Rnd_65x39_caseless_green { @@ -88,6 +90,7 @@ class CfgMagazines { displayNameShort = "$STR_ACE_30Rnd_556x45_mag_SDNameShort"; descriptionShort = "$STR_ACE_30Rnd_556x45_mag_SDDescription"; initSpeed = 320; + GVAR(forceMagazineMuzzleVelocity) = 1; picture = "\A3\weapons_f\data\ui\m_30stanag_green_ca.paa"; }; @@ -127,6 +130,7 @@ class CfgMagazines { displayNameShort = "$STR_ACE_20Rnd_762x51_mag_SDNameShort"; descriptionShort = "$STR_ACE_20Rnd_762x51_mag_SDDescription"; initSpeed = 320; + GVAR(forceMagazineMuzzleVelocity) = 1; }; class ACE_20Rnd_762x51_Mag_AP: 20Rnd_762x51_Mag { diff --git a/addons/magazines/CfgWeapons.hpp b/addons/magazines/CfgWeapons.hpp index d54cf28e52..2b24d578fe 100644 --- a/addons/magazines/CfgWeapons.hpp +++ b/addons/magazines/CfgWeapons.hpp @@ -1,5 +1,5 @@ - class SlotInfo; +class MuzzleSlot; class CfgWeapons { @@ -20,7 +20,7 @@ class CfgWeapons { }; class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_H"}; }; }; @@ -59,7 +59,7 @@ class CfgWeapons { }; class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_H"}; }; }; @@ -74,7 +74,7 @@ class CfgWeapons { class EBR_base_F: Rifle_Long_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_B"}; }; }; @@ -82,7 +82,7 @@ class CfgWeapons { class DMR_01_base_F: Rifle_Long_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_B"}; }; }; @@ -90,7 +90,7 @@ class CfgWeapons { class LMG_Mk200_F: Rifle_Long_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_H"}; }; }; @@ -98,7 +98,7 @@ class CfgWeapons { class LMG_Zafir_F: Rifle_Long_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_B"}; }; }; @@ -115,7 +115,7 @@ class CfgWeapons { }; class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_L"}; }; }; @@ -129,7 +129,7 @@ class CfgWeapons { }; class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_L"}; }; }; @@ -148,7 +148,7 @@ class CfgWeapons { class pdw2000_base_F: Rifle_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_smg_02"}; }; }; @@ -156,7 +156,7 @@ class CfgWeapons { class SMG_01_Base: Rifle_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_smg_01"}; }; }; @@ -164,7 +164,7 @@ class CfgWeapons { class SMG_02_base_F: Rifle_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_smg_02"}; }; }; @@ -180,7 +180,7 @@ class CfgWeapons { class hgun_P07_F: Pistol_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE"; compatibleItems[] += {"ACE_muzzle_mzls_smg_02"}; }; @@ -189,7 +189,7 @@ class CfgWeapons { class hgun_Rook40_F: Pistol_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE"; compatibleItems[] += {"ACE_muzzle_mzls_smg_02"}; }; @@ -198,7 +198,7 @@ class CfgWeapons { class hgun_ACPC2_F: Pistol_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_smg_01"}; }; }; @@ -206,7 +206,7 @@ class CfgWeapons { class hgun_Pistol_heavy_01_F: Pistol_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: SlotInfo { + class MuzzleSlot: MuzzleSlot { compatibleItems[] += {"ACE_muzzle_mzls_smg_01"}; }; }; diff --git a/addons/magazines/XEH_preInit.sqf b/addons/magazines/XEH_preInit.sqf new file mode 100644 index 0000000000..8e611f370a --- /dev/null +++ b/addons/magazines/XEH_preInit.sqf @@ -0,0 +1,7 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP(forceMagazineMuzzleVelocity); + +ADDON = true; diff --git a/addons/magazines/config.cpp b/addons/magazines/config.cpp index c757d62f5c..58c1dfa467 100644 --- a/addons/magazines/config.cpp +++ b/addons/magazines/config.cpp @@ -12,6 +12,8 @@ class CfgPatches { }; }; +#include "CfgEventHandlers.hpp" + #include "CfgAmmo.hpp" #include "CfgMagazines.hpp" #include "CfgVehicles.hpp" diff --git a/addons/magazines/functions/fnc_forceMagazineMuzzleVelocity.sqf b/addons/magazines/functions/fnc_forceMagazineMuzzleVelocity.sqf new file mode 100644 index 0000000000..414dbb40e8 --- /dev/null +++ b/addons/magazines/functions/fnc_forceMagazineMuzzleVelocity.sqf @@ -0,0 +1,41 @@ +/* + * Author: commy2 + * + * DESCRIPTION. + * + * Arguments: + * firedBIS + * + * Return Value: + * None + */ + +#include "script_component.hpp" + +private ["_weapon", "_magazine", "_projectile"]; + +_weapon = _this select 1; +_magazine = _this select 5; +_projectile = _this select 6; + +if (getNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(forceMagazineMuzzleVelocity)) != 1) exitWith { + //hint str (speed _projectile / 3.6); +}; + +private ["_initSpeedWeapon", "_initSpeedMagazine"]; + +_initSpeedWeapon = getNumber (configFile >> "CfgWeapons" >> _weapon >> "initSpeed"); +_initSpeedMagazine = getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed"); + +//systemChat format ["W: %1m/s, M: %2m/s", _initSpeedWeapon, _initSpeedMagazine]; + +// force magazine initSpeed + +private ["_credit", "_debit"]; + +_credit = vectorMagnitude velocity _projectile; +_debit = _credit + (_initSpeedMagazine - _initSpeedWeapon); + +_projectile setVelocity ((velocity _projectile) vectorMultiply (_debit / _credit)); + +//hint str (speed _projectile / 3.6); diff --git a/addons/magazines/functions/script_component.hpp b/addons/magazines/functions/script_component.hpp new file mode 100644 index 0000000000..2849ae3632 --- /dev/null +++ b/addons/magazines/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\magazines\script_component.hpp" \ No newline at end of file diff --git a/addons/main/config.cpp b/addons/main/config.cpp index 3b8c600e22..44e9c6f33e 100644 --- a/addons/main/config.cpp +++ b/addons/main/config.cpp @@ -1,539 +1,540 @@ #include "script_component.hpp" class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = { - "a3_air_f", - "a3_air_f_beta", - "a3_air_f_beta_heli_attack_01", - "a3_air_f_beta_heli_attack_02", - "a3_air_f_beta_heli_transport_01", - "a3_air_f_beta_heli_transport_02", - "a3_air_f_beta_parachute_01", - "a3_air_f_beta_parachute_02", - "a3_air_f_epb_heli_light_03", - "a3_air_f_epc_plane_cas_01", - "a3_air_f_epc_plane_cas_02", - "a3_air_f_epc_plane_fighter_03", - "a3_air_f_gamma_plane_fighter_03", - "a3_air_f_gamma_uav_01", - "a3_air_f_gamma_uav_02", - "a3_air_f_heli", - "a3_air_f_heli_heli_attack_01", - "a3_air_f_heli_heli_attack_02", - "a3_air_f_heli_heli_light_01", - "a3_air_f_heli_heli_light_02", - "a3_air_f_heli_heli_light_03", - "a3_air_f_heli_heli_transport_01", - "a3_air_f_heli_heli_transport_02", - "a3_air_f_heli_heli_transport_03", - "a3_air_f_heli_heli_transport_04", - "a3_air_f_heli_light_01", - "a3_air_f_heli_light_02", - "a3_animals_f", - "a3_animals_f_animconfig", - "a3_animals_f_chicken", - "a3_animals_f_dog", - "a3_animals_f_fishes", - "a3_animals_f_goat", - "a3_animals_f_kestrel", - "a3_animals_f_rabbit", - "a3_animals_f_seagull", - "a3_animals_f_sheep", - "a3_animals_f_snakes", - "a3_animals_f_turtle", - "a3_anims_f", - "a3_anims_f_config_sdr", - "a3_anims_f_epa", - "a3_anims_f_epc", - "a3_anims_f_heli", - "a3_anims_f_kart", - "a3_armor_f", - "a3_armor_f_amv", - "a3_armor_f_apc_wheeled_03", - "a3_armor_f_beta", - "a3_armor_f_beta_apc_tracked_02", - "a3_armor_f_epb_apc_tracked_03", - "a3_armor_f_epb_mbt_03", - "a3_armor_f_epc_mbt_01", - "a3_armor_f_marid", - "a3_armor_f_panther", - "a3_armor_f_slammer", - "a3_armor_f_t100k", - "a3_baseconfig_f", - "a3_boat_f", - "a3_boat_f_beta_boat_armed_01", - "a3_boat_f_beta_boat_transport_01", - "a3_boat_f_boat_armed_01", - "a3_boat_f_boat_transport_01", - "a3_boat_f_civilian_boat", - "a3_boat_f_epc_submarine_01_f", - "a3_boat_f_gamma_boat_transport_01", - "a3_boat_f_heli_boat_armed_01", - "a3_boat_f_heli_sdv_01", - "a3_boat_f_sdv_01", - "a3_boat_f_trawler", - "a3_cargoposes_f", - "a3_cargoposes_f_heli", - "a3_characters_f", - "a3_characters_f_beta", - "a3_characters_f_blufor", - "a3_characters_f_bootcamp", - "a3_characters_f_bootcamp_common", - "a3_characters_f_civil", - "a3_characters_f_common", - "a3_characters_f_epa", - "a3_characters_f_epb", - "a3_characters_f_epb_heads", - "a3_characters_f_epc", - "a3_characters_f_gamma", - "a3_characters_f_heads", - "a3_characters_f_indep", - "a3_characters_f_kart", - "a3_characters_f_opfor", - "a3_characters_f_proxies", - "a3_data_f", - "a3_data_f_bootcamp", - "a3_data_f_curator", - "a3_data_f_curator_characters", - "a3_data_f_curator_eagle", - "a3_data_f_curator_intel", - "a3_data_f_curator_misc", - "a3_data_f_curator_respawn", - "a3_data_f_curator_virtual", - "a3_data_f_heli", - "a3_data_f_hook", - "a3_data_f_kart", - "a3_data_f_kart_particleeffects", - "a3_data_f_particleeffects", - "a3_dubbing_radio_f", - "a3_editor_f", - "a3_functions_f", - "a3_functions_f_bootcamp", - "a3_functions_f_curator", - "a3_functions_f_epa", - "a3_functions_f_epc", - "a3_functions_f_heli", - "a3_language_f", - "a3_language_f_beta", - "a3_language_f_bootcamp", - "a3_language_f_curator", - "a3_language_f_epa", - "a3_language_f_epb", - "a3_language_f_epc", - "a3_language_f_gamma", - "a3_language_f_heli", - "a3_language_f_kart", - "a3_languagemissions_f", - "a3_languagemissions_f_beta", - "a3_languagemissions_f_gamma", - "a3_languagemissions_f_kart", - "a3_map_altis", - "a3_map_altis_scenes", - "a3_map_data", - "a3_map_stratis", - "a3_map_stratis_scenes", - "a3_map_vr_scenes", - "a3_misc_f", - "a3_misc_f_helpers", - "a3_missions_f", - "a3_missions_f_beta", - "a3_missions_f_bootcamp", - "a3_missions_f_curator", - "a3_missions_f_epa", - "a3_missions_f_epb", - "a3_missions_f_epc", - "a3_missions_f_gamma", - "a3_missions_f_heli", - "a3_missions_f_kart", - "a3_modules_f", - "a3_modules_f_beta", - "a3_modules_f_beta_firingdrills", - "a3_modules_f_bootcamp", - "a3_modules_f_bootcamp_misc", - "a3_modules_f_curator", - "a3_modules_f_curator_animals", - "a3_modules_f_curator_cas", - "a3_modules_f_curator_chemlights", - "a3_modules_f_curator_curator", - "a3_modules_f_curator_effects", - "a3_modules_f_curator_environment", - "a3_modules_f_curator_flares", - "a3_modules_f_curator_intel", - "a3_modules_f_curator_lightning", - "a3_modules_f_curator_mines", - "a3_modules_f_curator_misc", - "a3_modules_f_curator_multiplayer", - "a3_modules_f_curator_objectives", - "a3_modules_f_curator_ordnance", - "a3_modules_f_curator_respawn", - "a3_modules_f_curator_smokeshells", - "a3_modules_f_dyno", - "a3_modules_f_effects", - "a3_modules_f_epb", - "a3_modules_f_epb_misc", - "a3_modules_f_events", - "a3_modules_f_groupmodifiers", - "a3_modules_f_hc", - "a3_modules_f_heli", - "a3_modules_f_heli_spawnai", - "a3_modules_f_intel", - "a3_modules_f_kart", - "a3_modules_f_kart_timetrials", - "a3_modules_f_livefeed", - "a3_modules_f_marta", - "a3_modules_f_misc", - "a3_modules_f_multiplayer", - "a3_modules_f_objectmodifiers", - "a3_modules_f_sites", - "a3_modules_f_skirmish", - "a3_modules_f_strategicmap", - "a3_modules_f_supports", - "a3_modules_f_uav", - "a3_music_f", - "a3_music_f_bootcamp", - "a3_music_f_epa", - "a3_music_f_epb", - "a3_music_f_epc", - "a3_music_f_heli", - "a3_plants_f_bush", - "a3_roads_f", - "a3_rocks_f", - "a3_signs_f", - "a3_signs_f_ad", - "a3_soft_f", - "a3_soft_f_beta_quadbike", - "a3_soft_f_bootcamp_offroad_01", - "a3_soft_f_bootcamp_quadbike", - "a3_soft_f_bootcamp_truck", - "a3_soft_f_car", - "a3_soft_f_crusher_ugv", - "a3_soft_f_epc_truck_03", - "a3_soft_f_gamma_hemtt", - "a3_soft_f_gamma_offroad", - "a3_soft_f_gamma_quadbike", - "a3_soft_f_gamma_truckheavy", - "a3_soft_f_heli_car", - "a3_soft_f_heli_crusher_ugv", - "a3_soft_f_heli_mrap_01", - "a3_soft_f_heli_mrap_02", - "a3_soft_f_heli_mrap_03", - "a3_soft_f_heli_quadbike", - "a3_soft_f_heli_suv", - "a3_soft_f_heli_truck", - "a3_soft_f_hemtt", - "a3_soft_f_kart_kart_01", - "a3_soft_f_mrap_01", - "a3_soft_f_mrap_02", - "a3_soft_f_mrap_03", - "a3_soft_f_offroad_01", - "a3_soft_f_quadbike", - "a3_soft_f_suv", - "a3_soft_f_truck", - "a3_soft_f_truckheavy", - "a3_sounds_f", - "a3_sounds_f_bootcamp", - "a3_sounds_f_epb", - "a3_sounds_f_epc", - "a3_static_f", - "a3_static_f_beta_mortar_01", - "a3_static_f_gamma", - "a3_static_f_gamma_aa", - "a3_static_f_gamma_at", - "a3_static_f_gamma_mortar_01", - "a3_static_f_mortar_01", - "a3_structures_f", - "a3_structures_f_bootcamp_civ_camping", - "a3_structures_f_bootcamp_civ_sportsgrounds", - "a3_structures_f_bootcamp_ind_cargo", - "a3_structures_f_bootcamp_items_electronics", - "a3_structures_f_bootcamp_items_food", - "a3_structures_f_bootcamp_items_sport", - "a3_structures_f_bootcamp_system", - "a3_structures_f_bootcamp_training", - "a3_structures_f_bootcamp_vr_blocks", - "a3_structures_f_bootcamp_vr_coverobjects", - "a3_structures_f_bootcamp_vr_helpers", - "a3_structures_f_bridges", - "a3_structures_f_civ", - "a3_structures_f_civ_accessories", - "a3_structures_f_civ_ancient", - "a3_structures_f_civ_belltowers", - "a3_structures_f_civ_calvaries", - "a3_structures_f_civ_camping", - "a3_structures_f_civ_chapels", - "a3_structures_f_civ_constructions", - "a3_structures_f_civ_dead", - "a3_structures_f_civ_garbage", - "a3_structures_f_civ_graffiti", - "a3_structures_f_civ_infoboards", - "a3_structures_f_civ_kiosks", - "a3_structures_f_civ_lamps", - "a3_structures_f_civ_market", - "a3_structures_f_civ_offices", - "a3_structures_f_civ_pavements", - "a3_structures_f_civ_playground", - "a3_structures_f_civ_sportsgrounds", - "a3_structures_f_civ_statues", - "a3_structures_f_civ_tourism", - "a3_structures_f_dominants", - "a3_structures_f_dominants_amphitheater", - "a3_structures_f_dominants_castle", - "a3_structures_f_dominants_church", - "a3_structures_f_dominants_hospital", - "a3_structures_f_dominants_lighthouse", - "a3_structures_f_dominants_wip", - "a3_structures_f_epa_civ_camping", - "a3_structures_f_epa_civ_constructions", - "a3_structures_f_epa_items_electronics", - "a3_structures_f_epa_items_food", - "a3_structures_f_epa_items_medical", - "a3_structures_f_epa_items_tools", - "a3_structures_f_epa_items_vessels", - "a3_structures_f_epa_mil_scrapyard", - "a3_structures_f_epa_walls", - "a3_structures_f_epb_civ_accessories", - "a3_structures_f_epb_civ_camping", - "a3_structures_f_epb_civ_dead", - "a3_structures_f_epb_civ_garbage", - "a3_structures_f_epb_civ_graffiti", - "a3_structures_f_epb_civ_playground", - "a3_structures_f_epb_furniture", - "a3_structures_f_epb_items_documents", - "a3_structures_f_epb_items_luggage", - "a3_structures_f_epb_items_military", - "a3_structures_f_epb_items_vessels", - "a3_structures_f_epb_naval_fishing", - "a3_structures_f_epc_civ_accessories", - "a3_structures_f_epc_civ_camping", - "a3_structures_f_epc_civ_garbage", - "a3_structures_f_epc_civ_infoboards", - "a3_structures_f_epc_civ_kiosks", - "a3_structures_f_epc_civ_playground", - "a3_structures_f_epc_civ_tourism", - "a3_structures_f_epc_dominants_ghosthotel", - "a3_structures_f_epc_dominants_stadium", - "a3_structures_f_epc_furniture", - "a3_structures_f_epc_items_documents", - "a3_structures_f_epc_items_electronics", - "a3_structures_f_epc_walls", - "a3_structures_f_furniture", - "a3_structures_f_heli_civ_accessories", - "a3_structures_f_heli_civ_constructions", - "a3_structures_f_heli_civ_garbage", - "a3_structures_f_heli_civ_market", - "a3_structures_f_heli_furniture", - "a3_structures_f_heli_ind_airport", - "a3_structures_f_heli_ind_cargo", - "a3_structures_f_heli_ind_machines", - "a3_structures_f_heli_items_airport", - "a3_structures_f_heli_items_electronics", - "a3_structures_f_heli_items_food", - "a3_structures_f_heli_items_luggage", - "a3_structures_f_heli_items_sport", - "a3_structures_f_heli_items_tools", - "a3_structures_f_heli_vr_helpers", - "a3_structures_f_households", - "a3_structures_f_households_addons", - "a3_structures_f_households_house_big01", - "a3_structures_f_households_house_big02", - "a3_structures_f_households_house_shop01", - "a3_structures_f_households_house_shop02", - "a3_structures_f_households_house_small01", - "a3_structures_f_households_house_small02", - "a3_structures_f_households_house_small03", - "a3_structures_f_households_slum", - "a3_structures_f_households_stone_big", - "a3_structures_f_households_stone_shed", - "a3_structures_f_households_stone_small", - "a3_structures_f_households_wip", - "a3_structures_f_ind", - "a3_structures_f_ind_airport", - "a3_structures_f_ind_cargo", - "a3_structures_f_ind_carservice", - "a3_structures_f_ind_concretemixingplant", - "a3_structures_f_ind_crane", - "a3_structures_f_ind_dieselpowerplant", - "a3_structures_f_ind_factory", - "a3_structures_f_ind_fuelstation", - "a3_structures_f_ind_fuelstation_small", - "a3_structures_f_ind_pipes", - "a3_structures_f_ind_powerlines", - "a3_structures_f_ind_reservoirtank", - "a3_structures_f_ind_shed", - "a3_structures_f_ind_solarpowerplant", - "a3_structures_f_ind_tank", - "a3_structures_f_ind_transmitter_tower", - "a3_structures_f_ind_wavepowerplant", - "a3_structures_f_ind_windmill", - "a3_structures_f_ind_windpowerplant", - "a3_structures_f_items", - "a3_structures_f_items_cans", - "a3_structures_f_items_documents", - "a3_structures_f_items_electronics", - "a3_structures_f_items_gadgets", - "a3_structures_f_items_luggage", - "a3_structures_f_items_medical", - "a3_structures_f_items_military", - "a3_structures_f_items_stationery", - "a3_structures_f_items_tools", - "a3_structures_f_items_valuables", - "a3_structures_f_items_vessels", - "a3_structures_f_kart_civ_sportsgrounds", - "a3_structures_f_kart_mil_flags", - "a3_structures_f_kart_signs_companies", - "a3_structures_f_mil", - "a3_structures_f_mil_bagbunker", - "a3_structures_f_mil_bagfence", - "a3_structures_f_mil_barracks", - "a3_structures_f_mil_bunker", - "a3_structures_f_mil_cargo", - "a3_structures_f_mil_flags", - "a3_structures_f_mil_fortification", - "a3_structures_f_mil_helipads", - "a3_structures_f_mil_offices", - "a3_structures_f_mil_radar", - "a3_structures_f_mil_scrapyard", - "a3_structures_f_mil_shelters", - "a3_structures_f_mil_tenthangar", - "a3_structures_f_naval", - "a3_structures_f_naval_buoys", - "a3_structures_f_naval_fishing", - "a3_structures_f_naval_piers", - "a3_structures_f_naval_rowboats", - "a3_structures_f_research", - "a3_structures_f_signs_companies", - "a3_structures_f_system", - "a3_structures_f_training", - "a3_structures_f_training_invisibletarget", - "a3_structures_f_walls", - "a3_structures_f_wrecks", - "a3_supplies_f_heli", - "a3_supplies_f_heli_bladders", - "a3_supplies_f_heli_cargonets", - "a3_supplies_f_heli_fuel", - "a3_supplies_f_heli_slingload", - "a3_uav_f_characters_f_gamma", - "a3_uav_f_weapons_f_gamma_ammoboxes", - "a3_ui_f", - "a3_ui_f_bootcamp", - "a3_ui_f_curator", - "a3_ui_f_heli", - "a3_ui_f_kart", - "a3_uifonts_f", - "a3_weapons_f", - "a3_weapons_f_aaf", - "a3_weapons_f_acc", - "a3_weapons_f_ammoboxes", - "a3_weapons_f_beta", - "a3_weapons_f_beta_acc", - "a3_weapons_f_beta_ammoboxes", - "a3_weapons_f_beta_ebr", - "a3_weapons_f_beta_rifles_khaybar", - "a3_weapons_f_beta_rifles_mx", - "a3_weapons_f_beta_rifles_trg20", - "a3_weapons_f_bootcamp", - "a3_weapons_f_bootcamp_ammoboxes", - "a3_weapons_f_bootcamp_longrangerifles_gm6", - "a3_weapons_f_bootcamp_longrangerifles_m320", - "a3_weapons_f_csat", - "a3_weapons_f_dummyweapons", - "a3_weapons_f_ebr", - "a3_weapons_f_epa", - "a3_weapons_f_epa_acc", - "a3_weapons_f_epa_ammoboxes", - "a3_weapons_f_epa_ebr", - "a3_weapons_f_epa_longrangerifles_dmr_01", - "a3_weapons_f_epa_longrangerifles_gm6", - "a3_weapons_f_epa_rifles_mx", - "a3_weapons_f_epb", - "a3_weapons_f_epb_acc", - "a3_weapons_f_epb_ammoboxes", - "a3_weapons_f_epb_longrangerifles_gm3", - "a3_weapons_f_epb_longrangerifles_m320", - "a3_weapons_f_epb_rifles_mx_black", - "a3_weapons_f_epc", - "a3_weapons_f_explosives", - "a3_weapons_f_fia", - "a3_weapons_f_gamma", - "a3_weapons_f_gamma_acc", - "a3_weapons_f_gamma_ammoboxes", - "a3_weapons_f_gamma_items", - "a3_weapons_f_headgear", - "a3_weapons_f_itemholders", - "a3_weapons_f_items", - "a3_weapons_f_kart", - "a3_weapons_f_kart_pistols_pistol_signal_f", - "a3_weapons_f_launchers_law", - "a3_weapons_f_launchers_nlaw", - "a3_weapons_f_launchers_titan", - "a3_weapons_f_longrangerifles_gm6", - "a3_weapons_f_longrangerifles_m320", - "a3_weapons_f_machineguns_m200", - "a3_weapons_f_machineguns_zafir", - "a3_weapons_f_nato", - "a3_weapons_f_pistols_acpc2", - "a3_weapons_f_pistols_p07", - "a3_weapons_f_pistols_pdw2000", - "a3_weapons_f_pistols_pistol_heavy_01", - "a3_weapons_f_pistols_pistol_heavy_02", - "a3_weapons_f_pistols_rook40", - "a3_weapons_f_rifles_khaybar", - "a3_weapons_f_rifles_mk20", - "a3_weapons_f_rifles_mx", - "a3_weapons_f_rifles_sdar", - "a3_weapons_f_rifles_smg_02", - "a3_weapons_f_rifles_trg20", - "a3_weapons_f_rifles_vector", - "a3_weapons_f_uniforms", - "a3_weapons_f_vests", - "a3data", - "extended_eventhandlers", "CBA_UI", "CBA_XEH", "CBA_XEH_A3" + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { + "a3_air_f", + "a3_air_f_beta", + "a3_air_f_beta_heli_attack_01", + "a3_air_f_beta_heli_attack_02", + "a3_air_f_beta_heli_transport_01", + "a3_air_f_beta_heli_transport_02", + "a3_air_f_beta_parachute_01", + "a3_air_f_beta_parachute_02", + "a3_air_f_epb_heli_light_03", + "a3_air_f_epc_plane_cas_01", + "a3_air_f_epc_plane_cas_02", + "a3_air_f_epc_plane_fighter_03", + "a3_air_f_gamma_plane_fighter_03", + "a3_air_f_gamma_uav_01", + "a3_air_f_gamma_uav_02", + "a3_air_f_heli", + "a3_air_f_heli_heli_attack_01", + "a3_air_f_heli_heli_attack_02", + "a3_air_f_heli_heli_light_01", + "a3_air_f_heli_heli_light_02", + "a3_air_f_heli_heli_light_03", + "a3_air_f_heli_heli_transport_01", + "a3_air_f_heli_heli_transport_02", + "a3_air_f_heli_heli_transport_03", + "a3_air_f_heli_heli_transport_04", + "a3_air_f_heli_light_01", + "a3_air_f_heli_light_02", + "a3_animals_f", + "a3_animals_f_animconfig", + "a3_animals_f_chicken", + "a3_animals_f_dog", + "a3_animals_f_fishes", + "a3_animals_f_goat", + "a3_animals_f_kestrel", + "a3_animals_f_rabbit", + "a3_animals_f_seagull", + "a3_animals_f_sheep", + "a3_animals_f_snakes", + "a3_animals_f_turtle", + "a3_anims_f", + "a3_anims_f_config_sdr", + "a3_anims_f_epa", + "a3_anims_f_epc", + "a3_anims_f_heli", + "a3_anims_f_kart", + "a3_armor_f", + "a3_armor_f_amv", + "a3_armor_f_apc_wheeled_03", + "a3_armor_f_beta", + "a3_armor_f_beta_apc_tracked_02", + "a3_armor_f_epb_apc_tracked_03", + "a3_armor_f_epb_mbt_03", + "a3_armor_f_epc_mbt_01", + "a3_armor_f_marid", + "a3_armor_f_panther", + "a3_armor_f_slammer", + "a3_armor_f_t100k", + "a3_baseconfig_f", + "a3_boat_f", + "a3_boat_f_beta_boat_armed_01", + "a3_boat_f_beta_boat_transport_01", + "a3_boat_f_boat_armed_01", + "a3_boat_f_boat_transport_01", + "a3_boat_f_civilian_boat", + "a3_boat_f_epc_submarine_01_f", + "a3_boat_f_gamma_boat_transport_01", + "a3_boat_f_heli_boat_armed_01", + "a3_boat_f_heli_sdv_01", + "a3_boat_f_sdv_01", + "a3_boat_f_trawler", + "a3_cargoposes_f", + "a3_cargoposes_f_heli", + "a3_characters_f", + "a3_characters_f_beta", + "a3_characters_f_blufor", + "a3_characters_f_bootcamp", + "a3_characters_f_bootcamp_common", + "a3_characters_f_civil", + "a3_characters_f_common", + "a3_characters_f_epa", + "a3_characters_f_epb", + "a3_characters_f_epb_heads", + "a3_characters_f_epc", + "a3_characters_f_gamma", + "a3_characters_f_heads", + "a3_characters_f_indep", + "a3_characters_f_kart", + "a3_characters_f_opfor", + "a3_characters_f_proxies", + "a3_data_f", + "a3_data_f_bootcamp", + "a3_data_f_curator", + "a3_data_f_curator_characters", + "a3_data_f_curator_eagle", + "a3_data_f_curator_intel", + "a3_data_f_curator_misc", + "a3_data_f_curator_respawn", + "a3_data_f_curator_virtual", + "a3_data_f_heli", + "a3_data_f_hook", + "a3_data_f_kart", + "a3_data_f_kart_particleeffects", + "a3_data_f_particleeffects", + "a3_dubbing_radio_f", + "a3_editor_f", + "a3_functions_f", + "a3_functions_f_bootcamp", + "a3_functions_f_curator", + "a3_functions_f_epa", + "a3_functions_f_epc", + "a3_functions_f_heli", + "a3_language_f", + "a3_language_f_beta", + "a3_language_f_bootcamp", + "a3_language_f_curator", + "a3_language_f_epa", + "a3_language_f_epb", + "a3_language_f_epc", + "a3_language_f_gamma", + "a3_language_f_heli", + "a3_language_f_kart", + "a3_languagemissions_f", + "a3_languagemissions_f_beta", + "a3_languagemissions_f_gamma", + "a3_languagemissions_f_kart", + "a3_map_altis", + "a3_map_altis_scenes", + "a3_map_data", + "a3_map_stratis", + "a3_map_stratis_scenes", + "a3_map_vr_scenes", + "a3_misc_f", + "a3_misc_f_helpers", + "a3_missions_f", + "a3_missions_f_beta", + "a3_missions_f_bootcamp", + "a3_missions_f_curator", + "a3_missions_f_epa", + "a3_missions_f_epb", + "a3_missions_f_epc", + "a3_missions_f_gamma", + "a3_missions_f_heli", + "a3_missions_f_kart", + "a3_modules_f", + "a3_modules_f_beta", + "a3_modules_f_beta_firingdrills", + "a3_modules_f_bootcamp", + "a3_modules_f_bootcamp_misc", + "a3_modules_f_curator", + "a3_modules_f_curator_animals", + "a3_modules_f_curator_cas", + "a3_modules_f_curator_chemlights", + "a3_modules_f_curator_curator", + "a3_modules_f_curator_effects", + "a3_modules_f_curator_environment", + "a3_modules_f_curator_flares", + "a3_modules_f_curator_intel", + "a3_modules_f_curator_lightning", + "a3_modules_f_curator_mines", + "a3_modules_f_curator_misc", + "a3_modules_f_curator_multiplayer", + "a3_modules_f_curator_objectives", + "a3_modules_f_curator_ordnance", + "a3_modules_f_curator_respawn", + "a3_modules_f_curator_smokeshells", + "a3_modules_f_dyno", + "a3_modules_f_effects", + "a3_modules_f_epb", + "a3_modules_f_epb_misc", + "a3_modules_f_events", + "a3_modules_f_groupmodifiers", + "a3_modules_f_hc", + "a3_modules_f_heli", + "a3_modules_f_heli_spawnai", + "a3_modules_f_intel", + "a3_modules_f_kart", + "a3_modules_f_kart_timetrials", + "a3_modules_f_livefeed", + "a3_modules_f_marta", + "a3_modules_f_misc", + "a3_modules_f_multiplayer", + "a3_modules_f_objectmodifiers", + "a3_modules_f_sites", + "a3_modules_f_skirmish", + "a3_modules_f_strategicmap", + "a3_modules_f_supports", + "a3_modules_f_uav", + "a3_music_f", + "a3_music_f_bootcamp", + "a3_music_f_epa", + "a3_music_f_epb", + "a3_music_f_epc", + "a3_music_f_heli", + "a3_plants_f_bush", + "a3_roads_f", + "a3_rocks_f", + "a3_signs_f", + "a3_signs_f_ad", + "a3_soft_f", + "a3_soft_f_beta_quadbike", + "a3_soft_f_bootcamp_offroad_01", + "a3_soft_f_bootcamp_quadbike", + "a3_soft_f_bootcamp_truck", + "a3_soft_f_car", + "a3_soft_f_crusher_ugv", + "a3_soft_f_epc_truck_03", + "a3_soft_f_gamma_hemtt", + "a3_soft_f_gamma_offroad", + "a3_soft_f_gamma_quadbike", + "a3_soft_f_gamma_truckheavy", + "a3_soft_f_heli_car", + "a3_soft_f_heli_crusher_ugv", + "a3_soft_f_heli_mrap_01", + "a3_soft_f_heli_mrap_02", + "a3_soft_f_heli_mrap_03", + "a3_soft_f_heli_quadbike", + "a3_soft_f_heli_suv", + "a3_soft_f_heli_truck", + "a3_soft_f_hemtt", + "a3_soft_f_kart_kart_01", + "a3_soft_f_mrap_01", + "a3_soft_f_mrap_02", + "a3_soft_f_mrap_03", + "a3_soft_f_offroad_01", + "a3_soft_f_quadbike", + "a3_soft_f_suv", + "a3_soft_f_truck", + "a3_soft_f_truckheavy", + "a3_sounds_f", + "a3_sounds_f_bootcamp", + "a3_sounds_f_epb", + "a3_sounds_f_epc", + "a3_static_f", + "a3_static_f_beta_mortar_01", + "a3_static_f_gamma", + "a3_static_f_gamma_aa", + "a3_static_f_gamma_at", + "a3_static_f_gamma_mortar_01", + "a3_static_f_mortar_01", + "a3_structures_f", + "a3_structures_f_bootcamp_civ_camping", + "a3_structures_f_bootcamp_civ_sportsgrounds", + "a3_structures_f_bootcamp_ind_cargo", + "a3_structures_f_bootcamp_items_electronics", + "a3_structures_f_bootcamp_items_food", + "a3_structures_f_bootcamp_items_sport", + "a3_structures_f_bootcamp_system", + "a3_structures_f_bootcamp_training", + "a3_structures_f_bootcamp_vr_blocks", + "a3_structures_f_bootcamp_vr_coverobjects", + "a3_structures_f_bootcamp_vr_helpers", + "a3_structures_f_bridges", + "a3_structures_f_civ", + "a3_structures_f_civ_accessories", + "a3_structures_f_civ_ancient", + "a3_structures_f_civ_belltowers", + "a3_structures_f_civ_calvaries", + "a3_structures_f_civ_camping", + "a3_structures_f_civ_chapels", + "a3_structures_f_civ_constructions", + "a3_structures_f_civ_dead", + "a3_structures_f_civ_garbage", + "a3_structures_f_civ_graffiti", + "a3_structures_f_civ_infoboards", + "a3_structures_f_civ_kiosks", + "a3_structures_f_civ_lamps", + "a3_structures_f_civ_market", + "a3_structures_f_civ_offices", + "a3_structures_f_civ_pavements", + "a3_structures_f_civ_playground", + "a3_structures_f_civ_sportsgrounds", + "a3_structures_f_civ_statues", + "a3_structures_f_civ_tourism", + "a3_structures_f_dominants", + "a3_structures_f_dominants_amphitheater", + "a3_structures_f_dominants_castle", + "a3_structures_f_dominants_church", + "a3_structures_f_dominants_hospital", + "a3_structures_f_dominants_lighthouse", + "a3_structures_f_dominants_wip", + "a3_structures_f_epa_civ_camping", + "a3_structures_f_epa_civ_constructions", + "a3_structures_f_epa_items_electronics", + "a3_structures_f_epa_items_food", + "a3_structures_f_epa_items_medical", + "a3_structures_f_epa_items_tools", + "a3_structures_f_epa_items_vessels", + "a3_structures_f_epa_mil_scrapyard", + "a3_structures_f_epa_walls", + "a3_structures_f_epb_civ_accessories", + "a3_structures_f_epb_civ_camping", + "a3_structures_f_epb_civ_dead", + "a3_structures_f_epb_civ_garbage", + "a3_structures_f_epb_civ_graffiti", + "a3_structures_f_epb_civ_playground", + "a3_structures_f_epb_furniture", + "a3_structures_f_epb_items_documents", + "a3_structures_f_epb_items_luggage", + "a3_structures_f_epb_items_military", + "a3_structures_f_epb_items_vessels", + "a3_structures_f_epb_naval_fishing", + "a3_structures_f_epc_civ_accessories", + "a3_structures_f_epc_civ_camping", + "a3_structures_f_epc_civ_garbage", + "a3_structures_f_epc_civ_infoboards", + "a3_structures_f_epc_civ_kiosks", + "a3_structures_f_epc_civ_playground", + "a3_structures_f_epc_civ_tourism", + "a3_structures_f_epc_dominants_ghosthotel", + "a3_structures_f_epc_dominants_stadium", + "a3_structures_f_epc_furniture", + "a3_structures_f_epc_items_documents", + "a3_structures_f_epc_items_electronics", + "a3_structures_f_epc_walls", + "a3_structures_f_furniture", + "a3_structures_f_heli_civ_accessories", + "a3_structures_f_heli_civ_constructions", + "a3_structures_f_heli_civ_garbage", + "a3_structures_f_heli_civ_market", + "a3_structures_f_heli_furniture", + "a3_structures_f_heli_ind_airport", + "a3_structures_f_heli_ind_cargo", + "a3_structures_f_heli_ind_machines", + "a3_structures_f_heli_items_airport", + "a3_structures_f_heli_items_electronics", + "a3_structures_f_heli_items_food", + "a3_structures_f_heli_items_luggage", + "a3_structures_f_heli_items_sport", + "a3_structures_f_heli_items_tools", + "a3_structures_f_heli_vr_helpers", + "a3_structures_f_households", + "a3_structures_f_households_addons", + "a3_structures_f_households_house_big01", + "a3_structures_f_households_house_big02", + "a3_structures_f_households_house_shop01", + "a3_structures_f_households_house_shop02", + "a3_structures_f_households_house_small01", + "a3_structures_f_households_house_small02", + "a3_structures_f_households_house_small03", + "a3_structures_f_households_slum", + "a3_structures_f_households_stone_big", + "a3_structures_f_households_stone_shed", + "a3_structures_f_households_stone_small", + "a3_structures_f_households_wip", + "a3_structures_f_ind", + "a3_structures_f_ind_airport", + "a3_structures_f_ind_cargo", + "a3_structures_f_ind_carservice", + "a3_structures_f_ind_concretemixingplant", + "a3_structures_f_ind_crane", + "a3_structures_f_ind_dieselpowerplant", + "a3_structures_f_ind_factory", + "a3_structures_f_ind_fuelstation", + "a3_structures_f_ind_fuelstation_small", + "a3_structures_f_ind_pipes", + "a3_structures_f_ind_powerlines", + "a3_structures_f_ind_reservoirtank", + "a3_structures_f_ind_shed", + "a3_structures_f_ind_solarpowerplant", + "a3_structures_f_ind_tank", + "a3_structures_f_ind_transmitter_tower", + "a3_structures_f_ind_wavepowerplant", + "a3_structures_f_ind_windmill", + "a3_structures_f_ind_windpowerplant", + "a3_structures_f_items", + "a3_structures_f_items_cans", + "a3_structures_f_items_documents", + "a3_structures_f_items_electronics", + "a3_structures_f_items_gadgets", + "a3_structures_f_items_luggage", + "a3_structures_f_items_medical", + "a3_structures_f_items_military", + "a3_structures_f_items_stationery", + "a3_structures_f_items_tools", + "a3_structures_f_items_valuables", + "a3_structures_f_items_vessels", + "a3_structures_f_kart_civ_sportsgrounds", + "a3_structures_f_kart_mil_flags", + "a3_structures_f_kart_signs_companies", + "a3_structures_f_mil", + "a3_structures_f_mil_bagbunker", + "a3_structures_f_mil_bagfence", + "a3_structures_f_mil_barracks", + "a3_structures_f_mil_bunker", + "a3_structures_f_mil_cargo", + "a3_structures_f_mil_flags", + "a3_structures_f_mil_fortification", + "a3_structures_f_mil_helipads", + "a3_structures_f_mil_offices", + "a3_structures_f_mil_radar", + "a3_structures_f_mil_scrapyard", + "a3_structures_f_mil_shelters", + "a3_structures_f_mil_tenthangar", + "a3_structures_f_naval", + "a3_structures_f_naval_buoys", + "a3_structures_f_naval_fishing", + "a3_structures_f_naval_piers", + "a3_structures_f_naval_rowboats", + "a3_structures_f_research", + "a3_structures_f_signs_companies", + "a3_structures_f_system", + "a3_structures_f_training", + "a3_structures_f_training_invisibletarget", + "a3_structures_f_walls", + "a3_structures_f_wrecks", + "a3_supplies_f_heli", + "a3_supplies_f_heli_bladders", + "a3_supplies_f_heli_cargonets", + "a3_supplies_f_heli_fuel", + "a3_supplies_f_heli_slingload", + "a3_uav_f_characters_f_gamma", + "a3_uav_f_weapons_f_gamma_ammoboxes", + "a3_ui_f", + "a3_ui_f_bootcamp", + "a3_ui_f_curator", + "a3_ui_f_heli", + "a3_ui_f_kart", + "a3_uifonts_f", + "a3_weapons_f", + "a3_weapons_f_aaf", + "a3_weapons_f_acc", + "a3_weapons_f_ammoboxes", + "a3_weapons_f_beta", + "a3_weapons_f_beta_acc", + "a3_weapons_f_beta_ammoboxes", + "a3_weapons_f_beta_ebr", + "a3_weapons_f_beta_rifles_khaybar", + "a3_weapons_f_beta_rifles_mx", + "a3_weapons_f_beta_rifles_trg20", + "a3_weapons_f_bootcamp", + "a3_weapons_f_bootcamp_ammoboxes", + "a3_weapons_f_bootcamp_longrangerifles_gm6", + "a3_weapons_f_bootcamp_longrangerifles_m320", + "a3_weapons_f_csat", + "a3_weapons_f_dummyweapons", + "a3_weapons_f_ebr", + "a3_weapons_f_epa", + "a3_weapons_f_epa_acc", + "a3_weapons_f_epa_ammoboxes", + "a3_weapons_f_epa_ebr", + "a3_weapons_f_epa_longrangerifles_dmr_01", + "a3_weapons_f_epa_longrangerifles_gm6", + "a3_weapons_f_epa_rifles_mx", + "a3_weapons_f_epb", + "a3_weapons_f_epb_acc", + "a3_weapons_f_epb_ammoboxes", + "a3_weapons_f_epb_longrangerifles_gm3", + "a3_weapons_f_epb_longrangerifles_m320", + "a3_weapons_f_epb_rifles_mx_black", + "a3_weapons_f_epc", + "a3_weapons_f_explosives", + "a3_weapons_f_fia", + "a3_weapons_f_gamma", + "a3_weapons_f_gamma_acc", + "a3_weapons_f_gamma_ammoboxes", + "a3_weapons_f_gamma_items", + "a3_weapons_f_headgear", + "a3_weapons_f_itemholders", + "a3_weapons_f_items", + "a3_weapons_f_kart", + "a3_weapons_f_kart_pistols_pistol_signal_f", + "a3_weapons_f_launchers_law", + "a3_weapons_f_launchers_nlaw", + "a3_weapons_f_launchers_titan", + "a3_weapons_f_longrangerifles_gm6", + "a3_weapons_f_longrangerifles_m320", + "a3_weapons_f_machineguns_m200", + "a3_weapons_f_machineguns_zafir", + "a3_weapons_f_nato", + "a3_weapons_f_pistols_acpc2", + "a3_weapons_f_pistols_p07", + "a3_weapons_f_pistols_pdw2000", + "a3_weapons_f_pistols_pistol_heavy_01", + "a3_weapons_f_pistols_pistol_heavy_02", + "a3_weapons_f_pistols_rook40", + "a3_weapons_f_rifles_khaybar", + "a3_weapons_f_rifles_mk20", + "a3_weapons_f_rifles_mx", + "a3_weapons_f_rifles_sdar", + "a3_weapons_f_rifles_smg_02", + "a3_weapons_f_rifles_trg20", + "a3_weapons_f_rifles_vector", + "a3_weapons_f_uniforms", + "a3_weapons_f_vests", + "a3data", + "map_vr", + "extended_eventhandlers", "CBA_UI", "CBA_XEH", "CBA_XEH_A3" + }; + author[] = {"ACE Team"}; + authorUrl = ""; + versionDesc = "A.C.E."; + versionAct = "['MAIN',_this] execVM '\z\ace\addons\main\about.sqf';"; + VERSION_CONFIG; }; - author[] = {"ACE Team"}; - authorUrl = ""; - versionDesc = "A.C.E."; - versionAct = "['MAIN',_this] execVM '\z\ace\addons\main\about.sqf';"; - VERSION_CONFIG; - }; }; class CfgMods { - class PREFIX { - dir = "@ACE"; - name = "Core - Advanced Combat Environment"; - picture = "A3\Ui_f\data\Logos\arma3_expansion_alpha_ca"; - hidePicture = "true"; - hideName = "true"; - actionName = "Website"; - action = "http://ace.dev-heaven.net"; - description = "Bugtracker: "; - }; + class PREFIX { + dir = "@ACE"; + name = "Core - Advanced Combat Environment"; + picture = "A3\Ui_f\data\Logos\arma3_expansion_alpha_ca"; + hidePicture = "true"; + hideName = "true"; + actionName = "Website"; + action = "http://ace.dev-heaven.net"; + description = "Bugtracker: "; + }; }; class CfgSettings { - class CBA { - class Versioning { - class PREFIX { - level = DEFAULT_VERSIONING_LEVEL; - handler = "ace_common_fnc_mismatch"; - class Dependencies { - CBA[]={"cba_main", {1,0,0}, "true"}; - XEH[]={"cba_xeh", {1,0,0}, "true"}; + class CBA { + class Versioning { + class PREFIX { + level = DEFAULT_VERSIONING_LEVEL; + handler = "ace_common_fnc_mismatch"; + class Dependencies { + CBA[]={"cba_main", {1,0,0}, "true"}; + XEH[]={"cba_xeh", {1,0,0}, "true"}; + }; + }; }; - }; - }; -/* + /* class Registry { - class PREFIX { + class PREFIX { removed[] = {}; - }; }; -*/ - }; + }; + */ + }; }; #include "CfgModuleCategories.hpp" diff --git a/addons/main/script_debug.hpp b/addons/main/script_debug.hpp new file mode 100644 index 0000000000..642de3428d --- /dev/null +++ b/addons/main/script_debug.hpp @@ -0,0 +1,46 @@ +/** +STACK TRACING +**/ +//#define ENABLE_CALLSTACK + +#ifdef ENABLE_CALLSTACK + +#define CALLSTACK(function) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'ANON', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'ANON'; _ret = _this call ##function; ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} +#define CALLSTACK_NAMED(function, functionName) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, functionName, _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = functionName; _ret = _this call ##function; ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} +#define DUMPSTACK ([__FILE__, __LINE__] call ACE_DUMPSTACK_FNC) + +#define FUNC(var1) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'TRIPLES(ADDON,fnc,var1)', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'TRIPLES(ADDON,fnc,var1)'; _ret = _this call TRIPLES(ADDON,fnc,var1); ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} +#define EFUNC(var1,var2) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'TRIPLES(DOUBLES(PREFIX,var1),fnc,var2)', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'TRIPLES(DOUBLES(PREFIX,var1),fnc,var2)'; _ret = _this call TRIPLES(DOUBLES(PREFIX,var1),fnc,var2); ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} + +#else +#define CALLSTACK(function) function +#define CALLSTACK_NAMED(function, functionName) function +#define DUMPSTACK + +#define FUNC(var1) TRIPLES(ADDON,fnc,var1) +#define EFUNC(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) + +#endif + + +/** +PERFORMANCE COUNTERS SECTION +**/ +//#define ENABLE_PERFORMANCE_COUNTERS + +#ifdef ENABLE_PERFORMANCE_COUNTERS + #define ADDPFH(function, timing, args) call { _ret = [function, timing, args, #function] call EFUNC(sys_sync,perFrame_add); if(isNil "ACE_PFH" ) then { ACE_PFH=[]; }; ACE_PFH pushBack [[_ret, __FILE__, __LINE__], [function, timing, args]]; _ret } + + #define CREATE_COUNTER(x) if(isNil "ACE_COUNTERS" ) then { ACE_COUNTERS=[]; }; GVAR(DOUBLES(x,counter))=[]; GVAR(DOUBLES(x,counter)) set[0, QUOTE(GVAR(DOUBLES(x,counter)))]; GVAR(DOUBLES(x,counter)) set[1, diag_tickTime]; ACE_COUNTERS pushBack GVAR(DOUBLES(x,counter)); + #define BEGIN_COUNTER(x) if(isNil QUOTE(GVAR(DOUBLES(x,counter)))) then { CREATE_COUNTER(x) }; GVAR(DOUBLES(x,counter)) set[2, diag_tickTime]; + #define END_COUNTER(x) GVAR(DOUBLES(x,counter)) pushBack [(GVAR(DOUBLES(x,counter)) select 2), diag_tickTime]; + + #define DUMP_COUNTERS ([__FILE__, __LINE__] call ACE_DUMPCOUNTERS_FNC) +#else + #define ADDPFH(function, timing, args) [function, timing, args, #function] call EFUNC(sys_sync,perFrame_add) + + #define CREATE_COUNTER(x) /* disabled */ + #define BEGIN_COUNTER(x) /* disabled */ + #define END_COUNTER(x) /* disabled */ + #define DUMP_COUNTERS /* disabled */ +#endif \ No newline at end of file diff --git a/addons/main/script_macros.hpp b/addons/main/script_macros.hpp index cc589aac3e..8425c4ad1e 100644 --- a/addons/main/script_macros.hpp +++ b/addons/main/script_macros.hpp @@ -1,4 +1,5 @@ #include "\x\cba\addons\main\script_macros_common.hpp" +#include "\x\cba\addons\xeh\script_xeh.hpp" // Default versioning level #define DEFAULT_VERSIONING_LEVEL 2 @@ -223,26 +224,6 @@ #define PREP_MODULE(folder) [] call compile preprocessFileLineNumbers QUOTE(PATHTOF(folder\__PREP__.sqf)) - -#ifdef ENABLE_CALLSTACK -#define CALLSTACK(function) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'ANON', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'ANON'; _ret = _this call ##function; ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} -#define CALLSTACK_NAMED(function, functionName) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, functionName, _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = functionName; _ret = _this call ##function; ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} -#define DUMPSTACK ([__FILE__, __LINE__] call ACE_DUMPSTACK_FNC) - -#define FUNC(var1) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'TRIPLES(ADDON,fnc,var1)', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'TRIPLES(ADDON,fnc,var1)'; _ret = _this call TRIPLES(ADDON,fnc,var1); ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} -#define EFUNC(var1,var2) {private ['_ret']; if(ACE_IS_ERRORED) then { ['AUTO','AUTO'] call ACE_DUMPSTACK_FNC; ACE_IS_ERRORED = false; }; ACE_IS_ERRORED = true; ACE_STACK_TRACE set [ACE_STACK_DEPTH, [diag_tickTime, __FILE__, __LINE__, ACE_CURRENT_FUNCTION, 'TRIPLES(DOUBLES(PREFIX,var1),fnc,var2)', _this]]; ACE_STACK_DEPTH = ACE_STACK_DEPTH + 1; ACE_CURRENT_FUNCTION = 'TRIPLES(DOUBLES(PREFIX,var1),fnc,var2)'; _ret = _this call TRIPLES(DOUBLES(PREFIX,var1),fnc,var2); ACE_STACK_DEPTH = ACE_STACK_DEPTH - 1; ACE_IS_ERRORED = false; _ret;} - -#else -#define CALLSTACK(function) function -#define CALLSTACK_NAMED(function, functionName) function -#define DUMPSTACK - -#define FUNC(var1) TRIPLES(ADDON,fnc,var1) -#define EFUNC(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) - -#endif - - #define HASH_CREATE ([] call EFUNC(common,hashCreate)) #define HASH_SET(hash, key, val) ([hash, key, val, __FILE__, __LINE__] call EFUNC(common,hashSet)) #define HASH_GET(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashGet)) @@ -254,3 +235,5 @@ #define HASHLIST_SELECT(hashList, index) ([hashList, index, __FILE__, __LINE__] call EFUNC(common,hashListSelect)) #define HASHLIST_SET(hashList, index, value) ([hashList, index, value, __FILE__, __LINE__] call EFUNC(common,hashListSet)) #define HASHLIST_PUSH(hashList, value) ([hashList, value, __FILE__, __LINE__] call EFUNC(common,hashListPush)) + +#include "script_debug.hpp" \ No newline at end of file diff --git a/addons/map/CfgEventHandlers.hpp b/addons/map/CfgEventHandlers.hpp index 23d60e02da..49b87fb4fd 100644 --- a/addons/map/CfgEventHandlers.hpp +++ b/addons/map/CfgEventHandlers.hpp @@ -1,12 +1,11 @@ class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); - serverInit = QUOTE( call COMPILE_FILE(XEH_preInitServer) ); - }; + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit) ); + }; }; class Extended_PostInit_EventHandlers { - class ADDON { - clientInit = QUOTE( call COMPILE_FILE(XEH_postInitClient) ); - }; + class ADDON { + clientInit = QUOTE(call COMPILE_FILE(XEH_postInitClient) ); + }; }; diff --git a/addons/map/CfgMarkers.hpp b/addons/map/CfgMarkers.hpp index d6281a4a6e..0a04e4a691 100644 --- a/addons/map/CfgMarkers.hpp +++ b/addons/map/CfgMarkers.hpp @@ -1,67 +1,42 @@ // MARKERS class CfgMarkers { - class Flag; + class Flag; - // Reenable NATO symbols ... - class b_unknown: Flag {scope = 2;}; + // Reenable NATO symbols ... + class b_unknown: Flag {scope = 2;}; - // ... and disable all the useless ones - // If you think that some of these are needed, create an issue; But until - // there's a better way to place markers, there should be only the most - // important markers here. - // Keep in mind that all of these can still be placed in the editor. - class b_hq: b_unknown {scope = 1;}; - class b_installation: b_unknown {scope = 1;}; - class b_maint: b_unknown {scope = 1;}; - class b_med: b_unknown {scope = 1;}; - class b_service: b_unknown {scope = 1;}; - class b_support: b_unknown {scope = 1;}; + // ... and disable all the useless ones + // If you think that some of these are needed, create an issue; But until + // there's a better way to place markers, there should be only the most + // important markers here. + // Keep in mind that all of these can still be placed in the editor. + class b_hq: b_unknown {scope = 1;}; + class b_installation: b_unknown {scope = 1;}; + class b_maint: b_unknown {scope = 1;}; + class b_med: b_unknown {scope = 1;}; + class b_service: b_unknown {scope = 1;}; + class b_support: b_unknown {scope = 1;}; - class n_unknown: b_unknown {}; - class n_hq: n_unknown {scope = 1;}; - class n_installation: n_unknown {scope = 1;}; - class u_installation: n_unknown {scope = 1;}; // i have no idea... - class n_maint: n_unknown {scope = 1;}; - class n_med: n_unknown {scope = 1;}; - class n_service: n_unknown {scope = 1;}; - class n_support: n_unknown {scope = 1;}; + class n_unknown: b_unknown {}; + class n_hq: n_unknown {scope = 1;}; + class n_installation: n_unknown {scope = 1;}; + class u_installation: n_unknown {scope = 1;}; // i have no idea... + class n_maint: n_unknown {scope = 1;}; + class n_med: n_unknown {scope = 1;}; + class n_service: n_unknown {scope = 1;}; + class n_support: n_unknown {scope = 1;}; - class o_unknown: b_unknown {}; - class o_hq: o_unknown {scope = 1;}; - class o_installation: o_unknown {scope = 1;}; - class o_maint: o_unknown {scope = 1;}; - class o_med: o_unknown {scope = 1;}; - class o_service: o_unknown {scope = 1;}; - class o_support: o_unknown {scope = 1;}; + class o_unknown: b_unknown {}; + class o_hq: o_unknown {scope = 1;}; + class o_installation: o_unknown {scope = 1;}; + class o_maint: o_unknown {scope = 1;}; + class o_med: o_unknown {scope = 1;}; + class o_service: o_unknown {scope = 1;}; + class o_support: o_unknown {scope = 1;}; - // disable all civy markers (harbor etc.) - class c_unknown: b_unknown {scope = 1;}; + // disable all civy markers (harbor etc.) + class c_unknown: b_unknown {scope = 1;}; - // disable quantity indicators (fire team/squad/platoon ...) - class group_0: b_unknown {scope = 1;}; - - - class ACE_MapToolFixed { - name = "MapToolFixed"; - icon = PATHTOF(data\mapToolFixed.paa); - scope = 0; - color[] = {1,1,1,1}; - size = 32; - }; - - class ACE_MapToolRotatingNormal { - name = "MapToolRotating"; - icon = PATHTOF(data\mapToolRotatingNormal.paa); - scope = 0; - color[] = {1,1,1,1}; - size = 32; - }; - - class ACE_MapToolRotatingSmall { - name = "MapToolRotating"; - icon = PATHTOF(data\mapToolRotatingSmall.paa); - scope = 0; - color[] = {1,1,1,1}; - size = 32; - }; + // disable quantity indicators (fire team/squad/platoon ...) + class group_0: b_unknown {scope = 1;}; }; diff --git a/addons/map/CfgVehicles.hpp b/addons/map/CfgVehicles.hpp index 6c2d4a1ee1..7960fe67ee 100644 --- a/addons/map/CfgVehicles.hpp +++ b/addons/map/CfgVehicles.hpp @@ -1,159 +1,67 @@ -#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ - }; - class CfgVehicles { - class Man; - class CAManBase: Man { - class ACE_SelfActions { - - class ACE_MapTools { - displayName = "$STR_ACE_Map_MapTools_Menu"; - condition = QUOTE((call FUNC(canUseMapTools) || {call FUNC(canUseMapGPS)})); - statement = ""; - exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; - showDisabled = 0; - priority = 100; - subMenu[] = {"ACE_MapTools", 1}; - enableInside = 1; - - class ACE_MapToolsHide { - displayName = "$STR_ACE_Map_MapToolsHide"; - condition = QUOTE((call FUNC(canUseMapTools) && {GVAR(mapTool_Shown) != 0})); - statement = QUOTE(GVAR(mapTool_Shown) = 0; [] call FUNC(updateMapToolMarkers)); - exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; - showDisabled = 1; - priority = 5; - enableInside = 1; + class Module_F; + class ACE_ModuleMap: Module_F { + author = "$STR_ACE_Common_ACETeam"; + category = "ACE"; + displayName = "Map"; + function = QFUNC(moduleMap); + scope = 2; + isGlobal = 1; + icon = PATHTOF(UI\IconMap_ca.paa); + class Arguments { + class MapIllumination { + displayName = "Map illumination?"; + description = "Calculate dynamic map illumination based on light conditions?"; + typeName = "BOOL"; + class values { + class Yes { name = "Yes"; value = 1; default = 1; }; + class No { name = "No"; value = 0; }; + }; + }; + class MapShake { + displayName = "Map shake?"; + description = "Make map shake when walking?"; + typeName = "BOOL"; + class values { + class Yes { name = "Yes"; value = 1; default = 1;}; + class No { name = "No"; value = 0; }; + }; + }; + class MapLimitZoom { + displayName = "Limit map zoom?"; + description = "Limit the amount of zoom available for the map?"; + typeName = "BOOL"; + class values { + class Yes { name = "Yes"; value = 1; }; + class No { name = "No"; value = 0; default = 1;}; + }; + }; }; - class ACE_MapToolsShowNormal { - displayName = "$STR_ACE_Map_MapToolsShowNormal"; - condition = QUOTE((call FUNC(canUseMapTools) && {GVAR(mapTool_Shown) != 1})); - statement = QUOTE(GVAR(mapTool_Shown) = 1; [] call FUNC(updateMapToolMarkers)); - exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; - showDisabled = 1; - priority = 4; - enableInside = 1; - }; - class ACE_MapToolsShowSmall { - displayName = "$STR_ACE_Map_MapToolsShowSmall"; - condition = QUOTE((call FUNC(canUseMapTools) && {GVAR(mapTool_Shown) != 2})); - statement = QUOTE(GVAR(mapTool_Shown) = 2; [] call FUNC(updateMapToolMarkers)); - exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; - showDisabled = 1; - priority = 3; - enableInside = 1; - }; - class ACE_MapToolsAlignNorth { - displayName = "$STR_ACE_Map_MapToolsAlignNorth"; - condition = QUOTE((call FUNC(canUseMapTools) && {GVAR(mapTool_Shown) != 0})); - statement = QUOTE(GVAR(mapTool_angle) = 0; [] call FUNC(updateMapToolMarkers)); - exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; - showDisabled = 1; - priority = 2; - enableInside = 1; - }; - class ACE_MapToolsAlignCompass { - displayName = "$STR_ACE_Map_MapToolsAlignCompass"; - condition = QUOTE((call FUNC(canUseMapTools) && {GVAR(mapTool_Shown) != 0} && {('ItemCompass' in assigneditems ACE_player) || {'ItemCompass' in assigneditems ACE_player}})); - statement = QUOTE(GVAR(mapTool_angle) = getDir ACE_player; [] call FUNC(updateMapToolMarkers)); - exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; - showDisabled = 1; - priority = 1; - enableInside = 1; - }; - class ACE_MapGpsShow { - displayName = "$STR_ACE_Map_MapGpsShow"; - condition = QUOTE((call FUNC(canUseMapGPS) && {!GVAR(mapGpsShow)})); - statement = QUOTE(GVAR(mapGpsShow) = true; [GVAR(mapGpsShow)] call FUNC(openMapGps)); - exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; - showDisabled = 0; - priority = 0; - enableInside = 1; - }; - class ACE_MapGpsHide { - displayName = "$STR_ACE_Map_MapGpsHide"; - condition = QUOTE((call FUNC(canUseMapGPS) && {GVAR(mapGpsShow)})); - statement = QUOTE(GVAR(mapGpsShow) = false; [GVAR(mapGpsShow)] call FUNC(openMapGps)); - exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; - showDisabled = 0; - priority = 0; - enableInside = 1; - }; - }; }; - class ACE_Actions { - class ACE_CopyMap { - displayName = "$STR_ACE_Map_CopyMap"; - condition = QUOTE(([_target] call EFUNC(common,isPlayer) && {'ItemMap' in assigneditems _player} && {'ACE_MapTools' in items _player} && {'ItemMap' in assignedItems _target})); - statement = QUOTE([ARR_2(_player,_target)] call FUNC(copyMapStart)); - showDisabled = 0; - priority = -1; - }; - }; - }; - - class NATO_Box_Base; - class EAST_Box_Base; - class IND_Box_Base; - class FIA_Box_Base_F; - - class Box_NATO_Support_F: NATO_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_MapTools,12) - }; - }; - - class Box_East_Support_F: EAST_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_MapTools,12) - }; - }; - - class Box_IND_Support_F: IND_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_MapTools,12) - }; - }; - - class Box_FIA_Support_F: FIA_Box_Base_F { - class TransportItems { - MACRO_ADDITEM(ACE_MapTools,12) - }; - }; - - class ACE_Box_Misc: Box_NATO_Support_F { - class TransportItems { - MACRO_ADDITEM(ACE_MapTools,12) - }; - }; - - class Module_F; - class ACE_ModuleBlueForceTracking: Module_F { - author = "$STR_ACE_Common_ACETeam"; - category = "ACE"; - displayName = "Blue Force Tracking"; - function = QFUNC(blueForceTrackingModule); - scope = 2; - isGlobal = 1; - icon = PATHTOF(UI\IconBFTracking_ca.paa); - class Arguments { - class Interval { - displayName = "Interval"; - description = "How often the markers should be refreshed (in seconds)"; - defaultValue = 1; - }; - class HideAiGroups { - displayName = "Hide AI groups?"; - description = "Hide markers for 'AI only' groups?"; - typeName = "BOOL"; - class values { - class Yes { name = "Yes"; value = 1; }; - class No { name = "No"; value = 0; default = 1; }; + class ACE_ModuleBlueForceTracking: Module_F { + author = "$STR_ACE_Common_ACETeam"; + category = "ACE"; + displayName = "Blue Force Tracking"; + function = QFUNC(blueForceTrackingModule); + scope = 2; + isGlobal = 1; + icon = PATHTOF(UI\IconBFTracking_ca.paa); + class Arguments { + class Interval { + displayName = "Interval"; + description = "How often the markers should be refreshed (in seconds)"; + defaultValue = 1; + }; + class HideAiGroups { + displayName = "Hide AI groups?"; + description = "Hide markers for 'AI only' groups?"; + typeName = "BOOL"; + class values { + class Yes { name = "Yes"; value = 1; }; + class No { name = "No"; value = 0; default = 1; }; + }; + }; }; - }; }; - }; }; diff --git a/addons/map/CfgWeapons.hpp b/addons/map/CfgWeapons.hpp deleted file mode 100644 index fa6d0897c5..0000000000 --- a/addons/map/CfgWeapons.hpp +++ /dev/null @@ -1,15 +0,0 @@ -class CfgWeapons { - class ACE_ItemCore; - class InventoryItem_Base_F; - - class ACE_MapTools: ACE_ItemCore { - displayName = "$STR_ACE_MapTools_Name"; - descriptionShort = "$STR_ACE_MapTools_Description"; - model = "\A3\weapons_F\ammo\mag_univ.p3d"; - picture = PATHTOF(UI\maptool_item.paa); - scope = 2; - class ItemInfo: InventoryItem_Base_F { - mass = 1; - }; - }; -}; diff --git a/addons/map/MapControls.hpp b/addons/map/MapControls.hpp index 3255cb7929..62256e2df4 100644 --- a/addons/map/MapControls.hpp +++ b/addons/map/MapControls.hpp @@ -1,93 +1,9 @@ class controls { - class ButtonPlayer: RscActiveText { - text = ""; - w = 0; - h = 0; - sizeEx = 0; - onButtonClick = ""; - }; - class CA_PlayerName: RscText { - x = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; - }; - class ProfilePicture: RscPicture { - x = "13.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; - }; - class ProfileBackground: RscText { - x = "13.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; - }; - class Separator1: RscPicture { - x = "14.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; - }; - class ColorBlack: RscButton { - idc = 36732; - x = "0 * (((safezoneW / safezoneH) min 1.2) / 40)"; - y = "0.25 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - w = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1.00 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - colorBackground[] = {0.2,0.2,0.2,1}; - colorBackgroundActive[] = {0,0,0,1}; - colorFocused[] = {0,0,0,1}; - onButtonClick = "missionNamespace setVariable [""ACE_Map_drawing_drawColor"", ""ColorBlack""]"; - // onButtonClick = QUOTE(missionNamespace setVariable [ARR_2(QGVAR(drawing_drawColor),"ColorBlack")]); - }; - class ColorRed: RscButton { - idc = 36733; - x = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; - y = "0.25 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - w = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1.00 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - colorBackground[] = {0.8,0.2,0.2,1}; - colorBackgroundActive[] = {1,0,0,1}; - colorFocused[] = {1,0,0,1}; - onButtonClick = "missionNamespace setVariable [""ACE_Map_drawing_drawColor"", ""ColorRed""]"; - // onButtonClick = QUOTE(missionNamespace setVariable [ARR_2(QGVAR(drawing_drawColor),QUOTE(ColorRed))]); - }; - class ColorGreen: RscButton { - idc = 36734; - x = "0.6 * (((safezoneW / safezoneH) min 1.2) / 40)"; - y = "0.25 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - w = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1.00 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - colorBackground[] = {0.2,0.8,0.2,1}; - colorBackgroundActive[] = {0,1,0,1}; - colorFocused[] = {0,1,0,1}; - onButtonClick = "missionNamespace setVariable [""ACE_Map_drawing_drawColor"", ""ColorGreen""]"; - // onButtonClick = QUOTE(missionNamespace setVariable [ARR_2(QGVAR(drawing_drawColor),"ColorGreen")]); - }; - class ColorBlue: RscButton { - idc = 36735; - x = "0.9 * (((safezoneW / safezoneH) min 1.2) / 40)"; - y = "0.25 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - w = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1.00 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - colorBackground[] = {0.2,0.2,0.8,1}; - colorBackgroundActive[] = {0,0,1,1}; - colorFocused[] = {0,0,1,1}; - onButtonClick = "missionNamespace setVariable [""ACE_Map_drawing_drawColor"", ""ColorBlue""]"; - // onButtonClick = QUOTE(missionNamespace setVariable [ARR_2(QGVAR(drawing_drawColor), "ColorBlue")]); - }; - class ColorYellow: RscButton { - idc = 36736; - x = "1.2 * (((safezoneW / safezoneH) min 1.2) / 40)"; - y = "0.25 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - w = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1.00 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - colorBackground[] = {0.8,0.8,0.2,1}; - colorBackgroundActive[] = {1,1,0,1}; - colorFocused[] = {1,1,0,1}; - onButtonClick = "missionNamespace setVariable [""ACE_Map_drawing_drawColor"", ""ColorYellow""]"; - // onButtonClick = QUOTE(missionNamespace setVariable [ARR_2(QGVAR(drawing_drawColor), "ColorYellow")]); - }; - class ColorWhite: RscButton { - idc = 36737; - x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40)"; - y = "0.25 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - w = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1.00 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - colorBackground[] = {0.8,0.8,0.8,1}; - colorBackgroundActive[] = {1,1,1,1}; - colorFocused[] = {1,1,1,1}; - onButtonClick = "missionNamespace setVariable [""ACE_Map_drawing_drawColor"", ""ColorWhite""]"; - // onButtonClick = QUOTE(missionNamespace setVariable [ARR_2(QGVAR(drawing_drawColor), "ColorWhite")]); - }; + class ButtonPlayer: RscActiveText { + text = ""; + w = 0; + h = 0; + sizeEx = 0; + onButtonClick = ""; + }; }; diff --git a/addons/map/MapGpsUI.hpp b/addons/map/MapGpsUI.hpp deleted file mode 100644 index e21b8db0a1..0000000000 --- a/addons/map/MapGpsUI.hpp +++ /dev/null @@ -1,81 +0,0 @@ -#define GUI_GRID_X (0) -#define GUI_GRID_Y (0) -#define GUI_GRID_W (0.025) -#define GUI_GRID_H (0.04) - -#define ST_LEFT 0x00 -#define ST_RIGHT 0x01 -#define ST_CENTER 0x02 - -#define W_gps 0.4025 -#define H_gps 0.25 -#define X_gps safeZoneX + safeZoneW - 1.1 * W_gps -#define Y_gps safeZoneY + safeZoneH - 1.2 * H_gps - -class RscTitles { - class RscACE_MapGps { - idd = 9855; - movingEnable = 1; - duration = 3600; - fadein = 0; - fadeout = 0; - // onLoad = QUOTE(uiNamespace setVariable [ARR_2(QGVAR(ui_mapGpsDisplay), _this select 0)];); - onLoad = "uiNamespace setVariable ['ACE_map_ui_mapGpsDisplay', _this select 0];"; //@todo cbaify this - //onUnLoad = "_this call onRscLoad"; - class controls { - class back:RscPicture { - x = X_gps; - y = Y_gps; - w = W_gps; - h = H_gps; - text = PATHTOF(UI\mapGps.paa); - colorBackground[] = {1, 1, 1, 1}; - }; - class heading: RscText{ - idc = 913590; - x = X_gps + W_gps * 0.25; - y = Y_gps + H_gps * 0.12; - w = W_gps * 0.2; - h = H_gps * 0.16; - style = ST_LEFT; - text = "225"; - colorBackground[] = {0,0,0,0}; - colorText[] = {0.247,0.251,0.157,1}; - shadowColo[] = {0,0,0,0}; - font = "EtelkaNarrowMediumPro"; - shadow = 0; - sizeEx = 0.042; - }; - class altitude: RscText{ - idc = 913591; - x = X_gps + W_gps * 0.55; - y = Y_gps + H_gps * 0.12; - w = W_gps * 0.2; - h = H_gps * 0.16; - style = ST_RIGHT; - text = "55 m"; - colorBackground[] = {0,0,0,0}; - colorText[] = {0.247,0.251,0.157,1}; - shadowColo[] = {0,0,0,0}; - font = "EtelkaNarrowMediumPro"; - shadow = 0; - sizeEx = 0.042; - }; - class coordinates: RscText{ - idc = 913592; - x = X_gps + W_gps * 0.2; - y = Y_gps + H_gps * 0.33; - w = W_gps * 0.6; - h = H_gps * 0.35; - style = ST_CENTER; - text = "012.3 115.1"; - colorBackground[] = {0,0,0,0}; - colorText[] = {0.247,0.251,0.157,1}; - shadowColo[] = {0,0,0,0}; - font = "EtelkaNarrowMediumPro"; - shadow = 0; - sizeEx = 0.1; - }; - }; - }; -}; diff --git a/addons/map/MapTweaks.hpp b/addons/map/MapTweaks.hpp new file mode 100644 index 0000000000..2cf5786059 --- /dev/null +++ b/addons/map/MapTweaks.hpp @@ -0,0 +1,38 @@ +// Hide Bushes +class Bush { + icon = ""; + color[] = {0.450000, 0.640000, 0.330000, 0.0}; + size = 14; + importance = "0.2 * 14 * 0.05"; + coefMin = 0.250000; + coefMax = 4; +}; + +// Hide Trees +class SmallTree { + icon = ""; + color[] = {0.450000, 0.640000, 0.330000, 0.0}; + size = 12; + importance = "0.6 * 12 * 0.05"; + coefMin = 0.250000; + coefMax = 4; +}; +class Tree { + icon = ""; + color[] = {0.450000, 0.640000, 0.330000, 0.0}; + size = 12; + importance = "0.9 * 16 * 0.05"; + coefMin = 0.250000; + coefMax = 4; +}; + +class Legend { + x = SafeZoneX+SafeZoneW-.340; + y = SafeZoneY+SafeZoneH-.152; + font = "PuristaMedium"; + w = .340; + h = .152; + sizeEx = 0.039210; + colorBackground[] = {0.906000, 0.901000, 0.880000, 0.5}; + color[] = {0, 0, 0, 0.75}; +}; diff --git a/addons/map/README.md b/addons/map/README.md index e51efe71d5..6544d0f236 100644 --- a/addons/map/README.md +++ b/addons/map/README.md @@ -1,7 +1,12 @@ ace_map ======= -Various tweaks to the in-game map. +Various tweaks to the in-game map. Including: +- Better map styling (countours, legend, hiding bushes and trees, etc). +- Max zoom level (optional) +- Map shaking while walking (optional) +- Map illumination (optional) +- Blufor tracker (optional) ## Maintainers diff --git a/addons/map/UI/IconMap_ca.paa b/addons/map/UI/IconMap_ca.paa new file mode 100644 index 0000000000..128f08f6f0 Binary files /dev/null and b/addons/map/UI/IconMap_ca.paa differ diff --git a/addons/map/XEH_postInitClient.sqf b/addons/map/XEH_postInitClient.sqf index 24b906e61c..ccaf9041ab 100644 --- a/addons/map/XEH_postInitClient.sqf +++ b/addons/map/XEH_postInitClient.sqf @@ -1,71 +1,22 @@ -// by CAA-Picard - #include "script_component.hpp" -if (!hasInterface) exitWith{}; +ADDON = false; +LOG(MSG_INIT); -// Init variables -GVAR(mapVisableLastFrame) = false; -GVAR(mapGpsShow) = true; +// Calculate the maximum zoom allowed for this map +call FUNC(determineZoom); -GVAR(mapTool_Shown) = 0; -GVAR(mapTool_pos) = [0,0]; -GVAR(mapTool_angle) = 0; -GVAR(mapTool_isDragging) = false; -GVAR(mapTool_isRotating) = false; - -GVAR(drawing_isDrawing) = false; -GVAR(drawing_tempLineMarker) = []; -GVAR(drawing_lineMarkers) = []; -GVAR(drawing_drawColor) = "ColorBlack"; -GVAR(drawing_controls) = [36732, 36733, 36734, 36735, 36736, 36737]; - -//Probably need this spawn, because CBA_fnc_addPerFrameHandler doesn't work durring breifing. +// This spawn is probably worth keeping, as pfh don't work natively on the briefing screen and IDK how reliable the hack we implemented for them is. +// The thread dies as soon as the mission start, so it's not really compiting for scheduler space. [] spawn { - _fnc_installMapEvents = { - _d = _this; - diag_log format ["Installing EH in display %1", _d]; - ((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseMoving", {_this call FUNC(handleMouseMove);}]; - ((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseButtonDown", {[1, _this] call FUNC(handleMouseButton);}]; - ((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseButtonUp", {[0, _this] call FUNC(handleMouseButton)}]; - ((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["Draw", {[] call FUNC(updateMapToolMarkers);}]; - (finddisplay _d) displayAddEventHandler ["KeyDown", {_this call FUNC(handleKeyDown);}]; - }; + // Wait until the map display is detected + waitUntil {(!isNull findDisplay 12)}; - // Wait until the briefing map is detected - // display = 37 for SP - // display = 52 for host server on MP; - // display = 53 for MP clients) - waitUntil {(!isNull findDisplay 37) || (!isNull findDisplay 52) || (!isNull findDisplay 53) || (!isNull findDisplay 12)}; + GVAR(lastStillPosition) = ((findDisplay 12) displayCtrl 51) ctrlMapScreenToWorld [0.5, 0.5]; + GVAR(lastStillTime) = time; + GVAR(isShaking) = false; - if (isNull findDisplay 12) then { - // Install event handlers on the map control of the briefing screen (control = 51) - GVAR(drawing_syncMarkers) = true; - if (!isNull findDisplay 52) then { - 52 call _fnc_installMapEvents; - } else { - if (!isNull findDisplay 53) then { - 53 call _fnc_installMapEvents; - } else { - 37 call _fnc_installMapEvents; - }; - }; - } else { - // Briefing screen was skipped; the player is JIP, create the markers defined during the briefing - GVAR(drawing_syncMarkers) = false; - { - _x call FUNC(addLineMarker); - } forEach GVAR(drawing_serverLineMarkers); - }; - - // Wait until the main map display is detected (display = 12) - waitUntil { !isNull findDisplay 12 }; - // Install event handlers on the map control and display (control = 51) - GVAR(drawing_syncMarkers) = false; - 12 call _fnc_installMapEvents; - - // Update the size and rotation of map tools - [] call FUNC(updateMapToolMarkers); - - [FUNC(mapStateUpdater), 0, []] call CBA_fnc_addPerFrameHandler; + ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", {[] call FUNC(updateMapEffects);}]; }; + +ADDON = true; diff --git a/addons/map/XEH_preInit.sqf b/addons/map/XEH_preInit.sqf index 1ab43c7ca8..7899c6a637 100644 --- a/addons/map/XEH_preInit.sqf +++ b/addons/map/XEH_preInit.sqf @@ -1,35 +1,13 @@ #include "script_component.hpp" ADDON = false; +LOG(MSG_INIT); -PREP(addLineMarker); PREP(blueForceTrackingModule); PREP(blueForceTrackingUpdate); -PREP(calculateMapScale); -PREP(cancelDrawing); -PREP(canDraw); -PREP(canUseMapTools); -PREP(canUseMapGPS); -PREP(copyMapReceiveMarkers); -PREP(copyMapRemoteSend); -PREP(copyMapStart); -PREP(handleKeyDown); -PREP(handleMouseButton); -PREP(handleMouseMove); -PREP(handleMouseZChanged); -PREP(isInsideMapTool); -PREP(mapStateUpdater); -PREP(openMapGps); -PREP(openMapGpsUpdate); -PREP(removeLineMarker); -PREP(updateMapToolMarkers); -PREP(updateLineMarker); - -//Add Event Handlers: -["drawing_removeLineMarker", FUNC(removeLineMarker) ] call EFUNC(common,addEventHandler); -["drawing_addLineMarker", FUNC(addLineMarker) ] call EFUNC(common,addEventHandler); - -["drawing_requestMarkers", FUNC(copyMapRemoteSend) ] call EFUNC(common,addEventHandler); -["drawing_sendbackMarkers", FUNC(copyMapReceiveMarkers) ] call EFUNC(common,addEventHandler); +PREP(determineMapLight); +PREP(determineZoom); +PREP(moduleMap); +PREP(updateMapEffects); ADDON = true; diff --git a/addons/map/XEH_preInitServer.sqf b/addons/map/XEH_preInitServer.sqf deleted file mode 100644 index 1614e9a340..0000000000 --- a/addons/map/XEH_preInitServer.sqf +++ /dev/null @@ -1,6 +0,0 @@ -// by CAA-Picard - -#include "script_component.hpp" - -GVAR(drawing_serverLineMarkers) = []; -publicVariable QGVAR(drawing_serverLineMarkers); diff --git a/addons/map/config.cpp b/addons/map/config.cpp index 36a6f85168..c779caa9b2 100644 --- a/addons/map/config.cpp +++ b/addons/map/config.cpp @@ -1,15 +1,15 @@ #include "script_component.hpp" class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {"ACE_MapTools"}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common", "ace_interaction"}; - author[] = {"KoffeinFlummi","CAA-Picard"}; - authorUrl = "https://github.com/KoffeinFlummi/"; - VERSION_CONFIG; - }; + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common", "ace_interaction"}; + author[] = {"KoffeinFlummi","Rocko","CAA-Picard"}; + authorUrl = "https://github.com/KoffeinFlummi/"; + VERSION_CONFIG; + }; }; class RscControlsGroup; @@ -28,10 +28,6 @@ class ACE_Settings { value = 1.0; typeName = "SCALAR"; }; - class GVAR(EveryoneCanDrawOnBriefing) { - value = 1; - typeName = "BOOL"; - }; class GVAR(BFT_Enabled) { value = 0; typeName = "BOOL"; @@ -40,116 +36,154 @@ class ACE_Settings { value = 0; typeName = "BOOL"; }; + class GVAR(mapIllumination) { + value = 1; + typeName = "BOOL"; + }; + class GVAR(mapShake) { + value = 1; + typeName = "BOOL"; + }; + class GVAR(mapLimitZoom) { + value = 0; + typeName = "BOOL"; + }; }; -#include "MapGpsUI.hpp" #include "CfgEventHandlers.hpp" #include "CfgMarkers.hpp" #include "CfgVehicles.hpp" -#include "CfgWeapons.hpp" - class RscMapControl { - sizeExGrid = 0.032; + maxSatelliteAlpha = 0.5; + + // From Arma 2 + colorTracks[] = {1.0,0.0,0.0,1}; + colorTracksFill[] = {1.0,1.0,0.0,1}; + colorRoads[] = {0.0,0.0,0.0,1}; + colorRoadsFill[] = {1,1,0,1}; + colorMainRoads[] = {0.0,0.0,0.0,1}; + colorMainRoadsFill[] = {1,0.6,0.4,1}; + colorRailWay[] = {0.8,0.2,0,1}; + + // From ACE2 + colorBackground[] = {0.929412, 0.929412, 0.929412, 1.0}; + colorOutside[] = {0.929412, 0.929412, 0.929412, 1.0}; + colorCountlines[] = {0.647059, 0.533333, 0.286275, 1}; + colorMainCountlines[] = {0.858824, 0, 0,1}; + colorForest[] = {0.6, 0.8, 0.2, 0.25}; + colorLevels[] = {0.0, 0.0, 0.0, 1.0}; + colorRocks[] = {0.50, 0.50, 0.50, 0.50}; + + sizeExLevel = 0.03; + showCountourInterval = 1; // refs #13673 + + sizeExGrid = 0.032; }; // REGULAR MAP class RscDisplayMainMap { - // get rid of the "center to player position" - button (as it works even on elite) - class controls { - class TopRight: RscControlsGroup { - #include "MapControls.hpp" + // Tweak map styling + class controlsBackground { + class CA_Map : RscMapControl { + #include "MapTweaks.hpp" + }; }; - }; - // scale up the compass - class objects { - class Compass: RscObject { - scale = 0.7; - zoomDuration = 0; + // get rid of the "center to player position" - button (as it works even on elite) + class controls { + class TopRight: RscControlsGroup { + #include "MapControls.hpp" + }; + }; + // scale up the compass + class objects { + class Compass: RscObject { + scale = 0.7; + zoomDuration = 0; + }; }; - }; }; // DIARY class RscDisplayDiary { - // get rid of the "center to player position" - button (as it works even on elite) - class controls { - class TopRight: RscControlsGroup { - class controls { - class ButtonPlayer: RscActiveText { - text = ""; - w = 0; - h = 0; - sizeEx = 0; - onButtonClick = ""; + // get rid of the "center to player position" - button (as it works even on elite) + class controls { + class TopRight: RscControlsGroup { + class controls { + class ButtonPlayer: RscActiveText { + text = ""; + w = 0; + h = 0; + sizeEx = 0; + onButtonClick = ""; + }; + class CA_PlayerName: RscText { + x = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + }; + class ProfilePicture: RscPicture { + x = "13.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + }; + class ProfileBackground: RscText { + x = "13.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + }; + class Separator1: RscPicture { + x = "14.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + }; + }; }; - class CA_PlayerName: RscText { - x = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; - }; - class ProfilePicture: RscPicture { - x = "13.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; - }; - class ProfileBackground: RscText { - x = "13.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; - }; - class Separator1: RscPicture { - x = "14.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; - }; - }; }; - }; - // scale up the compass - class objects { - class Compass: RscObject { - scale = 0.7; - zoomDuration = 0; + // scale up the compass + class objects { + class Compass: RscObject { + scale = 0.7; + zoomDuration = 0; + }; }; - }; }; // BRIEFING SCREEN class RscDisplayGetReady: RscDisplayMainMap { - // get rid of the "center to player position" - button (as it works even on elite) - class controls { - class TopRight: RscControlsGroup { - #include "MapControls.hpp" + // get rid of the "center to player position" - button (as it works even on elite) + class controls { + class TopRight: RscControlsGroup { + #include "MapControls.hpp" + }; }; - }; - // scale up the compass - class objects { - class Compass: RscObject { - scale = 0.7; - zoomDuration = 0; + // scale up the compass + class objects { + class Compass: RscObject { + scale = 0.7; + zoomDuration = 0; + }; }; - }; }; class RscDisplayClientGetReady: RscDisplayGetReady { - // get rid of the "center to player position" - button (as it works even on elite) - class controls { - class TopRight: RscControlsGroup { - #include "MapControls.hpp" + // get rid of the "center to player position" - button (as it works even on elite) + class controls { + class TopRight: RscControlsGroup { + #include "MapControls.hpp" + }; }; - }; - // scale up the compass - class objects { - class Compass: RscObject { - scale = 0.7; - zoomDuration = 0; + // scale up the compass + class objects { + class Compass: RscObject { + scale = 0.7; + zoomDuration = 0; + }; }; - }; }; class RscDisplayServerGetReady: RscDisplayGetReady { - // get rid of the "center to player position" - button (as it works even on elite) - class controls { - class TopRight: RscControlsGroup { - #include "MapControls.hpp" + // get rid of the "center to player position" - button (as it works even on elite) + class controls { + class TopRight: RscControlsGroup { + #include "MapControls.hpp" + }; }; - }; - // scale up the compass - class objects { - class Compass: RscObject { - scale = 0.7; - zoomDuration = 0; + // scale up the compass + class objects { + class Compass: RscObject { + scale = 0.7; + zoomDuration = 0; + }; }; - }; }; diff --git a/addons/map/functions/fnc_blueForceTrackingUpdate.sqf b/addons/map/functions/fnc_blueForceTrackingUpdate.sqf index b2619155c2..030daeaa36 100644 --- a/addons/map/functions/fnc_blueForceTrackingUpdate.sqf +++ b/addons/map/functions/fnc_blueForceTrackingUpdate.sqf @@ -2,37 +2,37 @@ // Delete last set of markers (always) { - deleteMarkerLocal _x; + deleteMarkerLocal _x; } forEach GVAR(BFT_markers); if (GVAR(BFT_Enabled) and {(!isNil "ACE_player") and {alive ACE_player}}) then { - _groupsToDrawMarkers = []; - _playerSide = call EFUNC(common,playerSide); + _groupsToDrawMarkers = []; + _playerSide = call EFUNC(common,playerSide); - if (GVAR(BFT_HideAiGroups)) then { - _groupsToDrawMarkers = [allGroups, {side _this == _playerSide}] call EFUNC(common,filter); - } else { - _groupsToDrawMarkers = [allGroups, { - _anyPlayers = { - [_x] call EFUNC(common,isPlayer); - } count units _this; - (side _this == _playerSide) && _anyPlayers > 0 - }] call EFUNC(common,filter); - }; + if !(GVAR(BFT_HideAiGroups)) then { + _groupsToDrawMarkers = [allGroups, {side _this == _playerSide}] call EFUNC(common,filter); + } else { + _groupsToDrawMarkers = [allGroups, { + _anyPlayers = { + [_x] call EFUNC(common,isPlayer); + } count units _this; + (side _this == _playerSide) && _anyPlayers > 0 + }] call EFUNC(common,filter); + }; + + { + _markerType = [_x] call EFUNC(common,getMarkerType); - { - _markerType = [_x] call EFUNC(common,getMarkerType); + _colour = format ["Color%1", side _x]; - _colour = format ["Color%1", side _x]; + _marker = createMarkerLocal [format ["ACE_BFT_%1", _forEachIndex], [(getPos leader _x) select 0, (getPos leader _x) select 1]]; + _marker setMarkerTypeLocal _markerType; + _marker setMarkerColorLocal _colour; + _marker setMarkerTextLocal (groupID _x); - _marker = createMarkerLocal [format ["ACE_BFT_%1", _i], [(getPos leader _x) select 0, (getPos leader _x) select 1]]; - _marker setMarkerTypeLocal _markerType; - _marker setMarkerColorLocal _colour; - _marker setMarkerTextLocal (groupID _x); - - GVAR(BFT_markers) pushBack _marker; - } forEach _groupsToDrawMarkers; + GVAR(BFT_markers) pushBack _marker; + } forEach _groupsToDrawMarkers; }; diff --git a/addons/map/functions/fnc_determineMapLight.sqf b/addons/map/functions/fnc_determineMapLight.sqf new file mode 100644 index 0000000000..370bcdb167 --- /dev/null +++ b/addons/map/functions/fnc_determineMapLight.sqf @@ -0,0 +1,144 @@ +/* +* Author: Rocko and CAA-Picard +* Calculates the current map illumination for a given unit +* +* Arguments: +* 0: Unit +* +* Return Value: +* 0: Does the map needs shading? +* 1: Color of the overlay +* +* Public: No +*/ +#include "script_component.hpp" + +EXPLODE_1_PVT(_this,_unit); + +private ["_isEnclosed","_nearObjects","_light","_ll","_flashlight"]; + +// Blend two colors +_fnc_blendColor = { + EXPLODE_3_PVT(_this,_c1,_c2,_alpha); + [(_c1 select 0) * (1 - _alpha) + (_c2 select 0) * _alpha, + (_c1 select 1) * (1 - _alpha) + (_c2 select 1) * _alpha, + (_c1 select 2) * (1 - _alpha) + (_c2 select 2) * _alpha, + (_c1 select 3) * (1 - _alpha) + (_c2 select 3) * _alpha] +}; + +// Ambient light tint depending on time of day +_lightTint = switch (true) do { + case (sunOrMoon == 1.0) : { [0.5,0.5,0.5,1] }; + case (sunOrMoon > 0.80) : {[[1.0 - overcast,0.2,0,1], [1,1,1,1], (sunOrMoon - 0.8)/0.2] call _fnc_blendColor}; + case (sunOrMoon > 0.50) : {[[0,0,0.1,1], [1.0 - overcast,0.2,0,1], (sunOrMoon - 0.5)/0.3] call _fnc_blendColor}; + case (sunOrMoon <= 0.5) : { [0,0,0.1,1] }; +}; + +// Calculates overlay color from tint and light level +_fnc_calcColor = { + EXPLODE_2_PVT(_this,_c1,_lightLevel); + + if (_lightLevel < 0.5) then { + _l = _lightLevel / 0.5; + [(_c1 select 0) * _l, + (_c1 select 1) * _l, + (_c1 select 2) * _l, + (_c1 select 3) * (1 - _lightLevel)] + } else { + _l = (_lightLevel - 0.5) / 0.5; + [(_c1 select 0) * (1 - _l) + _l, + (_c1 select 1) * (1 - _l) + _l, + (_c1 select 2) * (1 - _l) + _l, + (_c1 select 3) * (1 - _lightLevel)] + }; +}; + +_lightLevel = 0.04 + (0.96 * call EFUNC(common,ambientBrightness)); + +// check if player has NVG enabled +if (currentVisionMode _unit == 1) exitWith { + // stick to nvg color + [true, [154/255,253/255,177/255,0.5]] +}; + +// Do not obscure the map if the ambient light level is above 0.95 +if (_lightLevel > 0.95) exitWith { + [false, [0.5,0.5,0.5,0]] +}; + +// Do not obscure the map if the player is on a enclosed vehicle (assume internal illumination) +if (vehicle _unit != _unit) then { + // Player is in a vehicle + if ((vehicle _unit) isKindOf "Tank") then { + _isEnclosed = true; + }; +}; +if (_isEnclosed) exitWith { + TRACE_1("Player in a enclosed vehicle",""); + [false, [1,1,1,0]] +}; + +// Player is not in a vehicle +TRACE_1("Player is on foot or in an open vehicle",""); + +// Check if player is near a campfires, lights or vehicles with lights on - 15m +_nearObjects = [nearestObjects [_unit, ["All"], 15], {(inflamed _this) || (isLightOn _this)}] call EFUNC(common,filter); +if (count (_nearObjects) > 0) then { + _light = _nearObjects select 0; + + _ll = (1 - (((((_unit distance _light) - 5)/10) max 0) min 1)); + if (_ll > _lightLevel) then { + _lightLevel = _ll; + TRACE_1("player near campfire",""); + }; +}; + + +// Gun with light +_nearObjects = [nearestObjects [_unit, ["CAManBase"], 10], { _this isFlashlightOn (currentWeapon _this)}] call EFUNC(common,filter); +if (count (_nearObjects) > 0) then { + _light = (_nearObjects select 0); + _flashlight = (_light weaponAccessories currentMuzzle _light) select 1; + + // Check if it's a day laser + if (_flashlight == "ACE_acc_pointer_red") exitWith {}; + if (_flashlight == "ACE_acc_pointer_green") exitWith {}; + + _lightLevel = _lightLevel max (1 - (((((_unit distance _light) - 2)/8) max 0) min 1)); + TRACE_1("Using gun light",""); +}; + + +// @todo: Illumination flares (timed) + + +// Using chemlights +_nearObjects = [_unit nearObjects ["SmokeShell", 4], { + alive _this && {(typeOf _this == "Chemlight_red") || { + (typeOf _this == "Chemlight_green") || { + (typeOf _this == "Chemlight_blue") || { + (typeOf _this == "Chemlight_yellow")}}}}}] call EFUNC(common,filter); +if (count (_nearObjects) > 0) then { + _light = _nearObjects select 0; + + _ll = (1 - ((((_unit distance _light) - 2)/2) max 0)) * 0.4; + if (_ll > _lightLevel) then { + _flareTint = switch (typeOf _light) do { + case "Chemlight_red" : {[1,0,0,1]}; + case "Chemlight_green" : {[0,1,0,1]}; + case "Chemlight_blue" : {[0,0,1,1]}; + case "Chemlight_yellow" : {[1,1,0,1]}; + }; + _lightTint = [_lightTint, _flareTint, (_ll - _lightLevel)/(1 - _lightLevel)] call _fnc_blendColor; + _lightLevel = _ll; + TRACE_1("player near chemlight",""); + }; +}; + +// Do not obscure the map if the ambient light level is above 0.95 +if (_lightLevel > 0.95) exitWith { + [false, [0.5,0.5,0.5,0]] +}; + +// Calculate resulting map color +[true, [_lightTint, _lightLevel] call _fnc_calcColor] diff --git a/addons/map/functions/fnc_determineZoom.sqf b/addons/map/functions/fnc_determineZoom.sqf new file mode 100644 index 0000000000..fdc620b417 --- /dev/null +++ b/addons/map/functions/fnc_determineZoom.sqf @@ -0,0 +1,43 @@ +/* +* Author: Rocko +* Calculate the maximum zoom level allowed for the current map +* +* Arguments: +* None +* +* Return Value: +* None +* +* Public: No +*/ +#include "script_component.hpp" + +private ["_grids", "_fourSize", "_sixSize", "_continue", "_size"]; +_grids = configFile >> "CfgWorlds" >> worldName >> "Grid"; +_fourSize = -1; +_sixSize = -1; +for "_i" from 1 to 10 do { + _continue = false; + if (isClass(_grids >> format["Zoom%1", _i])) then { + _continue = true; + _size = getText(_grids >> format["Zoom%1", _i] >> "formatX"); + if ((count toArray(_size)) == 2) then { + _fourSize = getNumber(_grids >> format["Zoom%1", _i] >> "zoomMax"); + }; + if ((count toArray(_size)) == 3) then { + _sixSize = getNumber(_grids >> format["Zoom%1", _i] >> "zoomMax"); + }; + if (_fourSize != -1 && {_sixSize != -1}) then { + _continue = false; + }; + }; + if (!_continue) exitWith {}; +}; + +if(_fourSize != -1 && {_sixSize != -1}) then { + if (isNil QGVAR(minMapSize)) then { + GVAR(minMapSize) = _sixSize + 0.01 + } else { + GVAR(minMapSize) = -1 + }; +}; diff --git a/addons/map/functions/fnc_moduleMap.sqf b/addons/map/functions/fnc_moduleMap.sqf new file mode 100644 index 0000000000..4fdea61420 --- /dev/null +++ b/addons/map/functions/fnc_moduleMap.sqf @@ -0,0 +1,22 @@ +/* + * Author: CAA-Picard + * Initializes the Map module. + * + * Arguments: + * Whatever the module provides. (I dunno.) + * + * Return Value: + * None + */ +#include "script_component.hpp" + +_logic = _this select 0; +_activated = _this select 2; + +if !(_activated) exitWith {}; + +[_logic, QGVAR(mapIllumination), "MapIllumination"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(mapShake), "MapShake" ] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(mapLimitZoom), "MapLimitZoom" ] call EFUNC(common,readSettingFromModule); + +diag_log text "[ACE]: Interaction Module Initialized."; diff --git a/addons/map/functions/fnc_updateMapEffects.sqf b/addons/map/functions/fnc_updateMapEffects.sqf new file mode 100644 index 0000000000..ad32a02632 --- /dev/null +++ b/addons/map/functions/fnc_updateMapEffects.sqf @@ -0,0 +1,78 @@ +/* +* Author: Rocko and CAA-Picard +* On map draw, updates the effects +* +* Arguments: +* None +* +* Return Value: +* None +* +* Public: No +*/ +#include "script_component.hpp" + +private ["_mapCtrl","_mapScale"]; + +_mapCtrl = ((findDisplay 12) displayCtrl 51); +_mapScale = ctrlMapScale _mapCtrl; + +if (GVAR(mapIllumination)) then { + private ["_data","_darkenFill"]; + + // Calculate map illumination + _data = [[ACE_player], FUNC(determineMapLight), missionNamespace, QGVAR(mapLight), 0.1] call EFUNC(common,cachedCall); + + EXPLODE_2_PVT(_data,_darkenMap,_darkenColor); + if (_darkenMap) then { + _darkenFill = format["#(rgb,1,1,1)color(%1,%2,%3,%4)",_darkenColor select 0, _darkenColor select 1, _darkenColor select 2, _darkenColor select 3]; + _mapCtrl drawRectangle [(getArray(configFile >> 'CfgWorlds' >> worldName >> 'centerPosition')),80000,80000,0,_darkenColor,_darkenFill]; + }; +}; + +if (GVAR(mapShake)) then { + private ["_speed","_amplitude", "_time", "_shakePos"]; + + // Only shake map while moving on foot + _speed = 0; + if (vehicle ACE_player == ACE_player) then { + _speed = vectorMagnitude (velocity ACE_player); + }; + + // If speed is large enough, create anims to shake map + if (_speed > 0.1) then { + if (ctrlMapAnimDone _mapCtrl) then { + + _amplitude = (_speed - 0.1) / 5 * (1000 * _mapScale); + _time = 0.1; + + _shakePos = [(GVAR(lastStillPosition) select 0) + sin((time + _time - GVAR(lastStillTime))*100) * _amplitude * 0.25, + (GVAR(lastStillPosition) select 1) + sin((time + _time - GVAR(lastStillTime))*260) * _amplitude]; + + _mapCtrl ctrlMapAnimAdd [_time, _mapScale, _shakePos]; + ctrlMapAnimCommit _mapCtrl; + + GVAR(isShaking) = true; + }; + } else { + if (GVAR(isShaking)) then { + // Stop shaking, return to original position + _mapCtrl ctrlMapAnimAdd [0, _mapScale, GVAR(lastStillPosition)]; + ctrlMapAnimCommit _mapCtrl; + GVAR(isShaking) = false; + } else { + // The map is still, store state + ctrlMapAnimClear _mapCtrl; + GVAR(lastStillPosition) = _mapCtrl ctrlMapScreenToWorld [0.5, 0.5]; + GVAR(lastStillTime) = time; + }; + }; +}; + +if (GVAR(mapLimitZoom)) then { + if (GVAR(minMapSize) >= _mapScale) then { + ctrlMapAnimClear _mapCtrl; + _mapCtrl ctrlMapAnimAdd [0, GVAR(minMapSize) + 0.001, (_mapCtrl ctrlMapScreenToWorld [0.5, 0.5])]; + ctrlMapAnimCommit _mapCtrl; + }; +}; diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index afc6c2cec2..e3e2a6fe93 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -2,147 +2,6 @@ - - Map Tools - Herramientas de mapa - Outils de navigation - Narzędzia nawigacyjne - Kartenwerkzeug - Pomůcky k Mapě - Strumenti Cartografici - Ferramentas de Mapa - Térképészeti eszközök - Инструменты карты - - - The Map Tools allow you to measure distances and angles on the map. - Las herramientas de mapa permiten medir distancias y ángulos en el mapa. - Les outils de navigation permettent de mesurer des distances et des angles sur la carte. - Narzędzia nawigacyjne pozwalają na mierzenie odległości i kątów na mapie. - Das Kartenwerkzeug erlaubt es dir, Distanzen und Winkel zu messen. - Pomůcky k mapě slouží k měření vzdáleností a úhlů na mapě. - Gli Strumenti Cartografici ti consentono di misurare distanze ed angoli sulla mappa. - As Ferramentas de Mapa permitem que você meça distâncias e ângulos no mapa. - A térképészeti eszközökkel távolságokat és szögeket tud mérni a térképen. - Картографические инструменты позволяют измерять расстояния и углы на карте. - - - Map Tools >> - Herramientas de mapa >> - Outils de navigation >> - Narzędzia nawigacyjne >> - Kartenwerkzeug >> - Pomůcky k Mapě >> - Strumenti Cartografici >> - Ferramentas de Mapa >> - Térképészeti eszközök >> - Инструменты карты >> - - - Hide Map Tool - Verstecke Kartenwerkzeug - Ocultar herr. de mapa - Ranger les outils - Nascondi Strumenti Cartografici - Ocultar Ferramenta de Mapa - Térképészeti eszközök elrejtése - Ukryj narzędzia nawigacyjne - Schovat pomůcku k mapě - Скрыть инструменты - - - Show Normal Map Tool - Zeige Kartenwerkzeug (normal) - Mostrar herr. de mapa normal - Montrer outils normaux - Visualizza Strumenti Cartografici standard - Mostrar Ferramenta de Mapa Padrão - Térképészeti eszköz megjelenítése (normál méret) - Pokaż normalne narzędzia nawigacyjne - Zobrazit normální pomůcku k mapě - Показать инструменты (средн. размер) - - - Show Small Map Tool - Zeige Kartenwerkzeug (klein) - Mostrar herr. de mapa pequeñas - Montrer petits outils - Visualizza Strumenti Cartografici piccoli - Mostrar Ferramenta de Mapa Pequena - Térképészeti eszköz megjelenítése (kicsinyített) - Pokaż pomniejszone narzędzia nawigacyjne - Zobrazit malou pomůcku k mapě - Показать инструменты (малый размер) - - - Align Map Tool to North - Kartenwerkzeug nach Norden ausrichten - Alinear herr. de mapa al norte - Aligner au nord - Allinea gli Strumenti Cartografici con il Nord - Alinhar Ferramenta de Mapa com o Norte - Térképészeti eszköz Északhoz állítása - Wyrównaj linijkę do północy - Srovnat pomůcku k mapě na sever - Выровнять инструменты на север - - - Align Map Tool to Compass - Kartenwerkzeug am Kompass ausrichten - Alinear herr. de mapa a la brújula - Aligner sur la boussole - Allinea gli Strumenti Cartografici con la bussola - Alinhar Ferramenta de Mapa com a Bússola - Térképészeti eszköz iránytűhöz állítása - Wyrównaj linijkę do kompasu - Srovnat pomůcku k mapě ke kompasu - Выровнять инструменты по компасу - - - Show GPS on Map - Zeige GPS auf der Karte - Mostrar el GPS sobre el mapa - Ranger le GPS - Visualizza il GPS sulla mappa - Mostrar GPS no Mapa - GPS megjelnítése a térképen - Pokaż GPS na mapie - Zobrazit GPS na mapě - Показать GPS на карте - - - Hide GPS on Map - Verstecke GPS auf der Karte - Ocultar el GPS del mapa - Montrer le GPS - Nascondi il GPS sulla mappa - Ocultar GPS no Mapa - GPS elrejtése térképről - Ukryj GPS na mapie - Schovat GPS na mapě - Скрыть GPS на карте - - - Copy Map - Karte kopieren - Copiar mapa - Скопировать карту - Kopiuj oznaczenia mapy - Copier la carte - Zkopírovat mapu - Copiare Carta - Térkép másolása - Copiar Mapa - - - Direction: %1° - Drehung: %1° - Direction: %1° - Směr: %1° - Kierunek: %1° - Dirección: %1° - Irány: %1 - Направление:%1 - + \ No newline at end of file diff --git a/addons/maptools/$PBOPREFIX$ b/addons/maptools/$PBOPREFIX$ new file mode 100644 index 0000000000..11a24a58d8 --- /dev/null +++ b/addons/maptools/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\Addons\map \ No newline at end of file diff --git a/addons/maptools/CfgEventHandlers.hpp b/addons/maptools/CfgEventHandlers.hpp new file mode 100644 index 0000000000..27bbf326d3 --- /dev/null +++ b/addons/maptools/CfgEventHandlers.hpp @@ -0,0 +1,11 @@ +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + clientInit = QUOTE( call COMPILE_FILE(XEH_postInitClient) ); + }; +}; diff --git a/addons/maptools/CfgMarkers.hpp b/addons/maptools/CfgMarkers.hpp new file mode 100644 index 0000000000..8a2b86fc13 --- /dev/null +++ b/addons/maptools/CfgMarkers.hpp @@ -0,0 +1,26 @@ +// MARKERS +class CfgMarkers { + class ACE_MapToolFixed { + name = "MapToolFixed"; + icon = PATHTOF(data\mapToolFixed.paa); + scope = 0; + color[] = {1,1,1,1}; + size = 32; + }; + + class ACE_MapToolRotatingNormal { + name = "MapToolRotating"; + icon = PATHTOF(data\mapToolRotatingNormal.paa); + scope = 0; + color[] = {1,1,1,1}; + size = 32; + }; + + class ACE_MapToolRotatingSmall { + name = "MapToolRotating"; + icon = PATHTOF(data\mapToolRotatingSmall.paa); + scope = 0; + color[] = {1,1,1,1}; + size = 32; + }; +}; diff --git a/addons/maptools/CfgVehicles.hpp b/addons/maptools/CfgVehicles.hpp new file mode 100644 index 0000000000..4ecc649893 --- /dev/null +++ b/addons/maptools/CfgVehicles.hpp @@ -0,0 +1,128 @@ +class CfgVehicles { + class Man; + class CAManBase: Man { + class ACE_SelfActions { + + class ACE_MapTools { + displayName = "$STR_ACE_MapTools_MapTools_Menu"; + condition = QUOTE((call FUNC(canUseMapTools) || {call FUNC(canUseMapGPS)})); + statement = ""; + exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; + showDisabled = 0; + priority = 100; + enableInside = 1; + + class ACE_MapToolsHide { + displayName = "$STR_ACE_MapTools_MapToolsHide"; + condition = QUOTE((call FUNC(canUseMapTools) && {GVAR(mapTool_Shown) != 0})); + statement = QUOTE(GVAR(mapTool_Shown) = 0; [] call FUNC(updateMapToolMarkers)); + exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; + showDisabled = 1; + priority = 5; + enableInside = 1; + }; + class ACE_MapToolsShowNormal { + displayName = "$STR_ACE_MapTools_MapToolsShowNormal"; + condition = QUOTE((call FUNC(canUseMapTools) && {GVAR(mapTool_Shown) != 1})); + statement = QUOTE(GVAR(mapTool_Shown) = 1; [] call FUNC(updateMapToolMarkers)); + exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; + showDisabled = 1; + priority = 4; + enableInside = 1; + }; + class ACE_MapToolsShowSmall { + displayName = "$STR_ACE_MapTools_MapToolsShowSmall"; + condition = QUOTE((call FUNC(canUseMapTools) && {GVAR(mapTool_Shown) != 2})); + statement = QUOTE(GVAR(mapTool_Shown) = 2; [] call FUNC(updateMapToolMarkers)); + exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; + showDisabled = 1; + priority = 3; + enableInside = 1; + }; + class ACE_MapToolsAlignNorth { + displayName = "$STR_ACE_MapTools_MapToolsAlignNorth"; + condition = QUOTE((call FUNC(canUseMapTools) && {GVAR(mapTool_Shown) != 0})); + statement = QUOTE(GVAR(mapTool_angle) = 0; [] call FUNC(updateMapToolMarkers)); + exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; + showDisabled = 1; + priority = 2; + enableInside = 1; + }; + class ACE_MapToolsAlignCompass { + displayName = "$STR_ACE_MapTools_MapToolsAlignCompass"; + condition = QUOTE((call FUNC(canUseMapTools) && {GVAR(mapTool_Shown) != 0} && {('ItemCompass' in assigneditems ACE_player) || {'ItemCompass' in assigneditems ACE_player}})); + statement = QUOTE(GVAR(mapTool_angle) = getDir ACE_player; [] call FUNC(updateMapToolMarkers)); + exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; + showDisabled = 1; + priority = 1; + enableInside = 1; + }; + class ACE_MapGpsShow { + displayName = "$STR_ACE_MapTools_MapGpsShow"; + condition = QUOTE((call FUNC(canUseMapGPS) && {!GVAR(mapGpsShow)})); + statement = QUOTE(GVAR(mapGpsShow) = true; [GVAR(mapGpsShow)] call FUNC(openMapGps)); + exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; + showDisabled = 0; + priority = 0; + enableInside = 1; + }; + class ACE_MapGpsHide { + displayName = "$STR_ACE_MapTools_MapGpsHide"; + condition = QUOTE((call FUNC(canUseMapGPS) && {GVAR(mapGpsShow)})); + statement = QUOTE(GVAR(mapGpsShow) = false; [GVAR(mapGpsShow)] call FUNC(openMapGps)); + exceptions[] = {"ACE_Drag_isNotDragging", QEGVAR(common,notOnMap)}; + showDisabled = 0; + priority = 0; + enableInside = 1; + }; + }; + }; + + class ACE_Actions { + class ACE_MainActions { + class ACE_CopyMap { + displayName = "$STR_ACE_MapTools_CopyMap"; + condition = QUOTE(([_target] call EFUNC(common,isPlayer) && {'ItemMap' in assigneditems _player} && {'ACE_MapTools' in items _player} && {'ItemMap' in assignedItems _target})); + statement = QUOTE([ARR_2(_player,_target)] call FUNC(copyMapStart)); + showDisabled = 0; + priority = -1; + }; + }; + }; + }; + + class NATO_Box_Base; + class EAST_Box_Base; + class IND_Box_Base; + class FIA_Box_Base_F; + + class Box_NATO_Support_F: NATO_Box_Base { + class TransportItems { + MACRO_ADDITEM(ACE_MapTools,12); + }; + }; + + class Box_East_Support_F: EAST_Box_Base { + class TransportItems { + MACRO_ADDITEM(ACE_MapTools,12); + }; + }; + + class Box_IND_Support_F: IND_Box_Base { + class TransportItems { + MACRO_ADDITEM(ACE_MapTools,12); + }; + }; + + class Box_FIA_Support_F: FIA_Box_Base_F { + class TransportItems { + MACRO_ADDITEM(ACE_MapTools,12); + }; + }; + + class ACE_Box_Misc: Box_NATO_Support_F { + class TransportItems { + MACRO_ADDITEM(ACE_MapTools,12); + }; + }; +}; diff --git a/addons/maptools/CfgWeapons.hpp b/addons/maptools/CfgWeapons.hpp new file mode 100644 index 0000000000..9d4d313c43 --- /dev/null +++ b/addons/maptools/CfgWeapons.hpp @@ -0,0 +1,15 @@ +class CfgWeapons { + class ACE_ItemCore; + class InventoryItem_Base_F; + + class ACE_MapTools: ACE_ItemCore { + displayName = "$STR_ACE_MapTools_Name"; + descriptionShort = "$STR_ACE_MapTools_Description"; + model = "\A3\weapons_F\ammo\mag_univ.p3d"; + picture = PATHTOF(UI\maptool_item.paa); + scope = 2; + class ItemInfo: InventoryItem_Base_F { + mass = 1; + }; + }; +}; diff --git a/addons/maptools/MapControls.hpp b/addons/maptools/MapControls.hpp new file mode 100644 index 0000000000..409796a6b1 --- /dev/null +++ b/addons/maptools/MapControls.hpp @@ -0,0 +1,80 @@ +class controls { + class CA_PlayerName: RscText { + x = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + }; + class ProfilePicture: RscPicture { + x = "13.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + }; + class ProfileBackground: RscText { + x = "13.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + }; + class Separator1: RscPicture { + x = "14.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + }; + class ColorBlack: RscButton { + idc = 36732; + x = "0 * (((safezoneW / safezoneH) min 1.2) / 40)"; + y = "0.25 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + w = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1.00 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorBackground[] = {0.2,0.2,0.2,1}; + colorBackgroundActive[] = {0,0,0,1}; + colorFocused[] = {0,0,0,1}; + onButtonClick = QUOTE(missionNamespace setVariable [ARR_2(QUOTE(QGVAR(drawing_drawColor)),'ColorBlack')]); + }; + class ColorRed: RscButton { + idc = 36733; + x = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; + y = "0.25 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + w = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1.00 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorBackground[] = {0.8,0.2,0.2,1}; + colorBackgroundActive[] = {1,0,0,1}; + colorFocused[] = {1,0,0,1}; + onButtonClick = QUOTE(missionNamespace setVariable [ARR_2(QUOTE(QGVAR(drawing_drawColor)),'ColorRed')]); + }; + class ColorGreen: RscButton { + idc = 36734; + x = "0.6 * (((safezoneW / safezoneH) min 1.2) / 40)"; + y = "0.25 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + w = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1.00 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorBackground[] = {0.2,0.8,0.2,1}; + colorBackgroundActive[] = {0,1,0,1}; + colorFocused[] = {0,1,0,1}; + onButtonClick = QUOTE(missionNamespace setVariable [ARR_2(QUOTE(QGVAR(drawing_drawColor)),'ColorGreen')]); + }; + class ColorBlue: RscButton { + idc = 36735; + x = "0.9 * (((safezoneW / safezoneH) min 1.2) / 40)"; + y = "0.25 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + w = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1.00 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorBackground[] = {0.2,0.2,0.8,1}; + colorBackgroundActive[] = {0,0,1,1}; + colorFocused[] = {0,0,1,1}; + onButtonClick = QUOTE(missionNamespace setVariable [ARR_2(QUOTE(QGVAR(drawing_drawColor)),'ColorBlue')]); + }; + class ColorYellow: RscButton { + idc = 36736; + x = "1.2 * (((safezoneW / safezoneH) min 1.2) / 40)"; + y = "0.25 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + w = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1.00 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorBackground[] = {0.8,0.8,0.2,1}; + colorBackgroundActive[] = {1,1,0,1}; + colorFocused[] = {1,1,0,1}; + onButtonClick = QUOTE(missionNamespace setVariable [ARR_2(QUOTE(QGVAR(drawing_drawColor)),'ColorYellow')]); + }; + class ColorWhite: RscButton { + idc = 36737; + x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40)"; + y = "0.25 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + w = "0.3 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1.00 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorBackground[] = {0.8,0.8,0.8,1}; + colorBackgroundActive[] = {1,1,1,1}; + colorFocused[] = {1,1,1,1}; + onButtonClick = QUOTE(missionNamespace setVariable [ARR_2(QUOTE(QGVAR(drawing_drawColor)),'ColorWhite')]); + }; +}; diff --git a/addons/maptools/MapGpsUI.hpp b/addons/maptools/MapGpsUI.hpp new file mode 100644 index 0000000000..ff8ec8b96e --- /dev/null +++ b/addons/maptools/MapGpsUI.hpp @@ -0,0 +1,79 @@ +#define GUI_GRID_X (0) +#define GUI_GRID_Y (0) +#define GUI_GRID_W (0.025) +#define GUI_GRID_H (0.04) + +#define ST_LEFT 0x00 +#define ST_RIGHT 0x01 +#define ST_CENTER 0x02 + +#define W_gps 0.4025 +#define H_gps 0.25 +#define X_gps safeZoneX + safeZoneW - 1.1 * W_gps +#define Y_gps safeZoneY + safeZoneH - 1.2 * H_gps + +class RscTitles { + class RscACE_MapGps { + idd = 9855; + movingEnable = 1; + duration = 3600; + fadein = 0; + fadeout = 0; + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ui_mapGpsDisplay)), _this select 0)];); + class controls { + class back:RscPicture { + x = X_gps; + y = Y_gps; + w = W_gps; + h = H_gps; + text = PATHTOF(UI\mapGps.paa); + colorBackground[] = {1, 1, 1, 1}; + }; + class heading: RscText{ + idc = 913590; + x = X_gps + W_gps * 0.25; + y = Y_gps + H_gps * 0.12; + w = W_gps * 0.2; + h = H_gps * 0.16; + style = ST_LEFT; + text = "225"; + colorBackground[] = {0,0,0,0}; + colorText[] = {0.247,0.251,0.157,1}; + shadowColo[] = {0,0,0,0}; + font = "EtelkaNarrowMediumPro"; + shadow = 0; + sizeEx = 0.042; + }; + class altitude: RscText{ + idc = 913591; + x = X_gps + W_gps * 0.55; + y = Y_gps + H_gps * 0.12; + w = W_gps * 0.2; + h = H_gps * 0.16; + style = ST_RIGHT; + text = "55 m"; + colorBackground[] = {0,0,0,0}; + colorText[] = {0.247,0.251,0.157,1}; + shadowColo[] = {0,0,0,0}; + font = "EtelkaNarrowMediumPro"; + shadow = 0; + sizeEx = 0.042; + }; + class coordinates: RscText{ + idc = 913592; + x = X_gps + W_gps * 0.2; + y = Y_gps + H_gps * 0.33; + w = W_gps * 0.6; + h = H_gps * 0.35; + style = ST_CENTER; + text = "012.3 115.1"; + colorBackground[] = {0,0,0,0}; + colorText[] = {0.247,0.251,0.157,1}; + shadowColo[] = {0,0,0,0}; + font = "EtelkaNarrowMediumPro"; + shadow = 0; + sizeEx = 0.1; + }; + }; + }; +}; diff --git a/addons/maptools/README.md b/addons/maptools/README.md new file mode 100644 index 0000000000..9248948efa --- /dev/null +++ b/addons/maptools/README.md @@ -0,0 +1,14 @@ +ace_maptools +============ + +Map tools: +- Roamer +- Map drawing +- Showing GPS on map + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [esteldunedain](https://github.com/esteldunedain) +- [NouberNou](https://github.com/NouberNou) diff --git a/addons/maptools/UI/IconBFTracking_ca.paa b/addons/maptools/UI/IconBFTracking_ca.paa new file mode 100644 index 0000000000..128f08f6f0 Binary files /dev/null and b/addons/maptools/UI/IconBFTracking_ca.paa differ diff --git a/addons/map/UI/mapGps.paa b/addons/maptools/UI/mapGps.paa similarity index 100% rename from addons/map/UI/mapGps.paa rename to addons/maptools/UI/mapGps.paa diff --git a/addons/map/UI/maptool_item.paa b/addons/maptools/UI/maptool_item.paa similarity index 100% rename from addons/map/UI/maptool_item.paa rename to addons/maptools/UI/maptool_item.paa diff --git a/addons/maptools/XEH_postInitClient.sqf b/addons/maptools/XEH_postInitClient.sqf new file mode 100644 index 0000000000..5267a8c802 --- /dev/null +++ b/addons/maptools/XEH_postInitClient.sqf @@ -0,0 +1,71 @@ +// by CAA-Picard + +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +// Init variables +GVAR(mapVisableLastFrame) = false; +GVAR(mapGpsShow) = true; + +GVAR(mapTool_Shown) = 0; +GVAR(mapTool_pos) = [0,0]; +GVAR(mapTool_angle) = 0; +GVAR(mapTool_isDragging) = false; +GVAR(mapTool_isRotating) = false; + +GVAR(drawing_isDrawing) = false; +GVAR(drawing_tempLineMarker) = []; +GVAR(drawing_lineMarkers) = []; +GVAR(drawing_drawColor) = "ColorBlack"; +GVAR(drawing_controls) = [36732, 36733, 36734, 36735, 36736, 36737]; + +// This spawn is probably worth keeping, as pfh don't work natively on the briefing screen and IDK how reliable the hack we implemented for them is. +// The thread dies as soon as the mission start, so it's not really compiting for scheduler space. +[] spawn { + _fnc_installMapEvents = { + _d = _this; + ((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseMoving", {_this call FUNC(handleMouseMove);}]; + ((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseButtonDown", {[1, _this] call FUNC(handleMouseButton);}]; + ((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["MouseButtonUp", {[0, _this] call FUNC(handleMouseButton)}]; + ((finddisplay _d) displayctrl 51) ctrlAddEventHandler ["Draw", {[] call FUNC(updateMapToolMarkers);}]; + (finddisplay _d) displayAddEventHandler ["KeyDown", {_this call FUNC(handleKeyDown);}]; + }; + + // Wait until the briefing map is detected + // display = 37 for SP + // display = 52 for host server on MP; + // display = 53 for MP clients) + waitUntil {(!isNull findDisplay 37) || (!isNull findDisplay 52) || (!isNull findDisplay 53) || (!isNull findDisplay 12)}; + + if (isNull findDisplay 12) then { + // Install event handlers on the map control of the briefing screen (control = 51) + GVAR(drawing_syncMarkers) = true; + if (!isNull findDisplay 52) then { + 52 call _fnc_installMapEvents; + } else { + if (!isNull findDisplay 53) then { + 53 call _fnc_installMapEvents; + } else { + 37 call _fnc_installMapEvents; + }; + }; + } else { + // Briefing screen was skipped; the player is JIP, create the markers defined during the briefing + GVAR(drawing_syncMarkers) = false; + { + _x call FUNC(addLineMarker); + } forEach GVAR(drawing_serverLineMarkers); + }; + + // Wait until the main map display is detected (display = 12) + waitUntil { !isNull findDisplay 12 }; + // Install event handlers on the map control and display (control = 51) + GVAR(drawing_syncMarkers) = false; + 12 call _fnc_installMapEvents; + + // Update the size and rotation of map tools + [] call FUNC(updateMapToolMarkers); + + [FUNC(mapStateUpdater), 0, []] call CBA_fnc_addPerFrameHandler; +}; diff --git a/addons/maptools/XEH_preInit.sqf b/addons/maptools/XEH_preInit.sqf new file mode 100644 index 0000000000..20777fb118 --- /dev/null +++ b/addons/maptools/XEH_preInit.sqf @@ -0,0 +1,38 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP(addLineMarker); +PREP(calculateMapScale); +PREP(cancelDrawing); +PREP(canDraw); +PREP(canUseMapTools); +PREP(canUseMapGPS); +PREP(copyMapReceiveMarkers); +PREP(copyMapRemoteSend); +PREP(copyMapStart); +PREP(handleKeyDown); +PREP(handleMouseButton); +PREP(handleMouseMove); +PREP(handleMouseZChanged); +PREP(isInsideMapTool); +PREP(mapStateUpdater); +PREP(openMapGps); +PREP(openMapGpsUpdate); +PREP(removeLineMarker); +PREP(updateMapToolMarkers); +PREP(updateLineMarker); + +if (isServer) then { + GVAR(drawing_serverLineMarkers) = []; + publicVariable QGVAR(drawing_serverLineMarkers); +}; + +//Add Event Handlers: +["drawing_removeLineMarker", FUNC(removeLineMarker) ] call EFUNC(common,addEventHandler); +["drawing_addLineMarker", FUNC(addLineMarker) ] call EFUNC(common,addEventHandler); + +["drawing_requestMarkers", FUNC(copyMapRemoteSend) ] call EFUNC(common,addEventHandler); +["drawing_sendbackMarkers", FUNC(copyMapReceiveMarkers) ] call EFUNC(common,addEventHandler); + +ADDON = true; diff --git a/addons/maptools/config.cpp b/addons/maptools/config.cpp new file mode 100644 index 0000000000..ea39ca7708 --- /dev/null +++ b/addons/maptools/config.cpp @@ -0,0 +1,74 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {"ACE_MapTools"}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common", "ace_interaction"}; + author[] = {"CAA-Picard"}; + authorUrl = "https://github.com/esteldunedain/"; + VERSION_CONFIG; + }; +}; + +class ACE_Settings { + class GVAR(EveryoneCanDrawOnBriefing) { + value = 1; + typeName = "BOOL"; + }; +}; + +class RscControlsGroup; +class RscActiveText; +class RscPicture; +class RscText; +class RscObject; +class RscButton; +class RscButtonMenuOK; +class RscButtonMenuCancel; +class RscButtonMenu; +class RscEdit; + +#include "MapGpsUI.hpp" +#include "CfgEventHandlers.hpp" +#include "CfgMarkers.hpp" +#include "CfgVehicles.hpp" +#include "CfgWeapons.hpp" + + +// REGULAR MAP +class RscDisplayMainMap { + // Create the drawing color selector + class controls { + class TopRight: RscControlsGroup { + #include "MapControls.hpp" + }; + }; +}; + +// BRIEFING SCREEN +class RscDisplayGetReady: RscDisplayMainMap { + // Create the drawing color selector + class controls { + class TopRight: RscControlsGroup { + #include "MapControls.hpp" + }; + }; +}; +class RscDisplayClientGetReady: RscDisplayGetReady { + // Create the drawing color selector + class controls { + class TopRight: RscControlsGroup { + #include "MapControls.hpp" + }; + }; +}; +class RscDisplayServerGetReady: RscDisplayGetReady { + // Create the drawing color selector + class controls { + class TopRight: RscControlsGroup { + #include "MapControls.hpp" + }; + }; +}; diff --git a/addons/map/data/mapToolFixed.paa b/addons/maptools/data/mapToolFixed.paa similarity index 100% rename from addons/map/data/mapToolFixed.paa rename to addons/maptools/data/mapToolFixed.paa diff --git a/addons/map/data/mapToolRotatingNormal.paa b/addons/maptools/data/mapToolRotatingNormal.paa similarity index 100% rename from addons/map/data/mapToolRotatingNormal.paa rename to addons/maptools/data/mapToolRotatingNormal.paa diff --git a/addons/map/data/mapToolRotatingSmall.paa b/addons/maptools/data/mapToolRotatingSmall.paa similarity index 100% rename from addons/map/data/mapToolRotatingSmall.paa rename to addons/maptools/data/mapToolRotatingSmall.paa diff --git a/addons/map/functions/fnc_addLineMarker.sqf b/addons/maptools/functions/fnc_addLineMarker.sqf similarity index 100% rename from addons/map/functions/fnc_addLineMarker.sqf rename to addons/maptools/functions/fnc_addLineMarker.sqf diff --git a/addons/map/functions/fnc_calculateMapScale.sqf b/addons/maptools/functions/fnc_calculateMapScale.sqf similarity index 100% rename from addons/map/functions/fnc_calculateMapScale.sqf rename to addons/maptools/functions/fnc_calculateMapScale.sqf diff --git a/addons/map/functions/fnc_canDraw.sqf b/addons/maptools/functions/fnc_canDraw.sqf similarity index 100% rename from addons/map/functions/fnc_canDraw.sqf rename to addons/maptools/functions/fnc_canDraw.sqf diff --git a/addons/map/functions/fnc_canUseMapGPS.sqf b/addons/maptools/functions/fnc_canUseMapGPS.sqf similarity index 100% rename from addons/map/functions/fnc_canUseMapGPS.sqf rename to addons/maptools/functions/fnc_canUseMapGPS.sqf diff --git a/addons/map/functions/fnc_canUseMapTools.sqf b/addons/maptools/functions/fnc_canUseMapTools.sqf similarity index 100% rename from addons/map/functions/fnc_canUseMapTools.sqf rename to addons/maptools/functions/fnc_canUseMapTools.sqf diff --git a/addons/map/functions/fnc_cancelDrawing.sqf b/addons/maptools/functions/fnc_cancelDrawing.sqf similarity index 100% rename from addons/map/functions/fnc_cancelDrawing.sqf rename to addons/maptools/functions/fnc_cancelDrawing.sqf diff --git a/addons/map/functions/fnc_copyMapReceiveMarkers.sqf b/addons/maptools/functions/fnc_copyMapReceiveMarkers.sqf similarity index 100% rename from addons/map/functions/fnc_copyMapReceiveMarkers.sqf rename to addons/maptools/functions/fnc_copyMapReceiveMarkers.sqf diff --git a/addons/map/functions/fnc_copyMapRemoteSend.sqf b/addons/maptools/functions/fnc_copyMapRemoteSend.sqf similarity index 100% rename from addons/map/functions/fnc_copyMapRemoteSend.sqf rename to addons/maptools/functions/fnc_copyMapRemoteSend.sqf diff --git a/addons/map/functions/fnc_copyMapStart.sqf b/addons/maptools/functions/fnc_copyMapStart.sqf similarity index 100% rename from addons/map/functions/fnc_copyMapStart.sqf rename to addons/maptools/functions/fnc_copyMapStart.sqf diff --git a/addons/map/functions/fnc_handleKeyDown.sqf b/addons/maptools/functions/fnc_handleKeyDown.sqf similarity index 100% rename from addons/map/functions/fnc_handleKeyDown.sqf rename to addons/maptools/functions/fnc_handleKeyDown.sqf diff --git a/addons/map/functions/fnc_handleMouseButton.sqf b/addons/maptools/functions/fnc_handleMouseButton.sqf similarity index 100% rename from addons/map/functions/fnc_handleMouseButton.sqf rename to addons/maptools/functions/fnc_handleMouseButton.sqf diff --git a/addons/map/functions/fnc_handleMouseMove.sqf b/addons/maptools/functions/fnc_handleMouseMove.sqf similarity index 100% rename from addons/map/functions/fnc_handleMouseMove.sqf rename to addons/maptools/functions/fnc_handleMouseMove.sqf diff --git a/addons/map/functions/fnc_handleMouseZChanged.sqf b/addons/maptools/functions/fnc_handleMouseZChanged.sqf similarity index 100% rename from addons/map/functions/fnc_handleMouseZChanged.sqf rename to addons/maptools/functions/fnc_handleMouseZChanged.sqf diff --git a/addons/map/functions/fnc_isInsideMapTool.sqf b/addons/maptools/functions/fnc_isInsideMapTool.sqf similarity index 100% rename from addons/map/functions/fnc_isInsideMapTool.sqf rename to addons/maptools/functions/fnc_isInsideMapTool.sqf diff --git a/addons/map/functions/fnc_mapStateUpdater.sqf b/addons/maptools/functions/fnc_mapStateUpdater.sqf similarity index 100% rename from addons/map/functions/fnc_mapStateUpdater.sqf rename to addons/maptools/functions/fnc_mapStateUpdater.sqf diff --git a/addons/map/functions/fnc_openMapGps.sqf b/addons/maptools/functions/fnc_openMapGps.sqf similarity index 100% rename from addons/map/functions/fnc_openMapGps.sqf rename to addons/maptools/functions/fnc_openMapGps.sqf diff --git a/addons/map/functions/fnc_openMapGpsUpdate.sqf b/addons/maptools/functions/fnc_openMapGpsUpdate.sqf similarity index 100% rename from addons/map/functions/fnc_openMapGpsUpdate.sqf rename to addons/maptools/functions/fnc_openMapGpsUpdate.sqf diff --git a/addons/map/functions/fnc_removeLineMarker.sqf b/addons/maptools/functions/fnc_removeLineMarker.sqf similarity index 100% rename from addons/map/functions/fnc_removeLineMarker.sqf rename to addons/maptools/functions/fnc_removeLineMarker.sqf diff --git a/addons/map/functions/fnc_updateLineMarker.sqf b/addons/maptools/functions/fnc_updateLineMarker.sqf similarity index 100% rename from addons/map/functions/fnc_updateLineMarker.sqf rename to addons/maptools/functions/fnc_updateLineMarker.sqf diff --git a/addons/map/functions/fnc_updateMapToolMarkers.sqf b/addons/maptools/functions/fnc_updateMapToolMarkers.sqf similarity index 100% rename from addons/map/functions/fnc_updateMapToolMarkers.sqf rename to addons/maptools/functions/fnc_updateMapToolMarkers.sqf diff --git a/addons/maptools/functions/script_component.hpp b/addons/maptools/functions/script_component.hpp new file mode 100644 index 0000000000..adeb2788b5 --- /dev/null +++ b/addons/maptools/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\maptools\script_component.hpp" diff --git a/addons/maptools/script_component.hpp b/addons/maptools/script_component.hpp new file mode 100644 index 0000000000..a3dad97a49 --- /dev/null +++ b/addons/maptools/script_component.hpp @@ -0,0 +1,17 @@ +#define COMPONENT maptools +#include "\z\ace\Addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_MAPTOOLS + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_MAPTOOLS + #define DEBUG_SETTINGS DEBUG_SETTINGS_MAPTOOLS +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" + + +#define MARKERNAME_MAPTOOL_FIXED "ACE_MapToolFixed" +#define MARKERNAME_MAPTOOL_ROTATINGNORMAL "ACE_MapToolRotatingNormal" +#define MARKERNAME_MAPTOOL_ROTATINGSMALL "ACE_MapToolRotatingSmall" diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml new file mode 100644 index 0000000000..1658856128 --- /dev/null +++ b/addons/maptools/stringtable.xml @@ -0,0 +1,148 @@ + + + + + + Map Tools + Herramientas de mapa + Outils de navigation + Narzędzia nawigacyjne + Kartenwerkzeug + Pomůcky k Mapě + Strumenti Cartografici + Ferramentas de Mapa + Térképészeti eszközök + Инструменты карты + + + The Map Tools allow you to measure distances and angles on the map. + Las herramientas de mapa permiten medir distancias y ángulos en el mapa. + Les outils de navigation permettent de mesurer des distances et des angles sur la carte. + Narzędzia nawigacyjne pozwalają na mierzenie odległości i kątów na mapie. + Das Kartenwerkzeug erlaubt es dir, Distanzen und Winkel zu messen. + Pomůcky k mapě slouží k měření vzdáleností a úhlů na mapě. + Gli Strumenti Cartografici ti consentono di misurare distanze ed angoli sulla mappa. + As Ferramentas de Mapa permitem que você meça distâncias e ângulos no mapa. + A térképészeti eszközökkel távolságokat és szögeket tud mérni a térképen. + Картографические инструменты позволяют измерять расстояния и углы на карте. + + + Map Tools >> + Herramientas de mapa >> + Outils de navigation >> + Narzędzia nawigacyjne >> + Kartenwerkzeug >> + Pomůcky k Mapě >> + Strumenti Cartografici >> + Ferramentas de Mapa >> + Térképészeti eszközök >> + Инструменты карты >> + + + Hide Map Tool + Verstecke Kartenwerkzeug + Ocultar herr. de mapa + Ranger les outils + Nascondi Strumenti Cartografici + Ocultar Ferramenta de Mapa + Térképészeti eszközök elrejtése + Ukryj narzędzia nawigacyjne + Schovat pomůcku k mapě + Скрыть инструменты + + + Show Normal Map Tool + Zeige Kartenwerkzeug (normal) + Mostrar herr. de mapa normal + Montrer outils normaux + Visualizza Strumenti Cartografici standard + Mostrar Ferramenta de Mapa Padrão + Térképészeti eszköz megjelenítése (normál méret) + Pokaż normalne narzędzia nawigacyjne + Zobrazit normální pomůcku k mapě + Показать инструменты (средн. размер) + + + Show Small Map Tool + Zeige Kartenwerkzeug (klein) + Mostrar herr. de mapa pequeñas + Montrer petits outils + Visualizza Strumenti Cartografici piccoli + Mostrar Ferramenta de Mapa Pequena + Térképészeti eszköz megjelenítése (kicsinyített) + Pokaż pomniejszone narzędzia nawigacyjne + Zobrazit malou pomůcku k mapě + Показать инструменты (малый размер) + + + Align Map Tool to North + Kartenwerkzeug nach Norden ausrichten + Alinear herr. de mapa al norte + Aligner au nord + Allinea gli Strumenti Cartografici con il Nord + Alinhar Ferramenta de Mapa com o Norte + Térképészeti eszköz Északhoz állítása + Wyrównaj linijkę do północy + Srovnat pomůcku k mapě na sever + Выровнять инструменты на север + + + Align Map Tool to Compass + Kartenwerkzeug am Kompass ausrichten + Alinear herr. de mapa a la brújula + Aligner sur la boussole + Allinea gli Strumenti Cartografici con la bussola + Alinhar Ferramenta de Mapa com a Bússola + Térképészeti eszköz iránytűhöz állítása + Wyrównaj linijkę do kompasu + Srovnat pomůcku k mapě ke kompasu + Выровнять инструменты по компасу + + + Show GPS on Map + Zeige GPS auf der Karte + Mostrar el GPS sobre el mapa + Ranger le GPS + Visualizza il GPS sulla mappa + Mostrar GPS no Mapa + GPS megjelnítése a térképen + Pokaż GPS na mapie + Zobrazit GPS na mapě + Показать GPS на карте + + + Hide GPS on Map + Verstecke GPS auf der Karte + Ocultar el GPS del mapa + Montrer le GPS + Nascondi il GPS sulla mappa + Ocultar GPS no Mapa + GPS elrejtése térképről + Ukryj GPS na mapie + Schovat GPS na mapě + Скрыть GPS на карте + + + Copy Map + Karte kopieren + Copiar mapa + Скопировать карту + Kopiuj oznaczenia mapy + Copier la carte + Zkopírovat mapu + Copiare Carta + Térkép másolása + Copiar Mapa + + + Direction: %1° + Drehung: %1° + Direction: %1° + Směr: %1° + Kierunek: %1° + Dirección: %1° + Irány: %1 + Направление:%1 + + + \ No newline at end of file diff --git a/addons/markers/functions/fnc_initInsertMarker.sqf b/addons/markers/functions/fnc_initInsertMarker.sqf index d172c6a532..e5328a7470 100644 --- a/addons/markers/functions/fnc_initInsertMarker.sqf +++ b/addons/markers/functions/fnc_initInsertMarker.sqf @@ -31,42 +31,49 @@ ctrlSetFocus _text; //Change ok button's text based on current channel - //if (isNull _buttonOK) exitWith {true}; + [{ + EXPLODE_2_PVT(_this,_params,_pfhId); + EXPLODE_1_PVT(_params,_buttonOK); - _channel = ""; - _textColor = [1,1,1,1]; - switch (call EFUNC(common,currentChannel)) do { + if (isNull _buttonOK) exitWith { + [_pfhId] call CBA_fnc_removePerFrameHandler; + }; + + _channel = ""; + _textColor = [1,1,1,1]; + switch (call EFUNC(common,currentChannel)) do { case ("global"): { - _channel = localize "str_channel_global"; - _textColor = [(216/255),(216/255),(216/255),1]; - }; + _channel = localize "str_channel_global"; + _textColor = [(216/255),(216/255),(216/255),1]; + }; case ("side"): { - _channel = localize "str_channel_side"; - _textColor = [(70/255),(211/255),(252/255),1]; - }; + _channel = localize "str_channel_side"; + _textColor = [(70/255),(211/255),(252/255),1]; + }; case ("group"): { - _channel = localize "str_channel_group"; - _textColor = [(181/255),(248/255),(98/255),1]; - }; + _channel = localize "str_channel_group"; + _textColor = [(181/255),(248/255),(98/255),1]; + }; case ("vehicle"): { - _channel = localize "str_channel_vehicle"; - _textColor = [(255/255),(208/255),(0/255),1]; - }; + _channel = localize "str_channel_vehicle"; + _textColor = [(255/255),(208/255),(0/255),1]; + }; case ("direct"): { - _channel = localize "str_channel_direct"; - _textColor = [(255/255),(255/255),(255/255),1]; - }; + _channel = localize "str_channel_direct"; + _textColor = [(255/255),(255/255),(255/255),1]; + }; case ("command"): { - _channel = localize "str_channel_command"; - _textColor = [(255/255),(255/255),(70/255),1]; + _channel = localize "str_channel_command"; + _textColor = [(255/255),(255/255),(70/255),1]; + }; }; - }; - //If localization not found, then don't touch anything (default is RscButtonMenuOK's localized text) - if (_channel != "") then { - _buttonOK ctrlSetTextColor _textColor; - _buttonOK ctrlSetText format [localize "STR_ACE_Markers_PlaceIn", _channel]; - }; + //If localization not found, then don't touch anything (default is RscButtonMenuOK's localized text) + if (_channel != "") then { + _buttonOK ctrlSetTextColor _textColor; + _buttonOK ctrlSetText format [localize "STR_ACE_Markers_PlaceIn", _channel]; + }; + }, 0, [_buttonOK]] call CBA_fnc_addPerFrameHandler; //--- Background _pos = ctrlposition _text; diff --git a/addons/medical/$PBOPREFIX$ b/addons/medical/$PBOPREFIX$ index 03a98be3f5..72c25436dd 100644 --- a/addons/medical/$PBOPREFIX$ +++ b/addons/medical/$PBOPREFIX$ @@ -1 +1 @@ -z\ace\Addons\medical \ No newline at end of file +z\ace\addons\medical diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp new file mode 100644 index 0000000000..b34403148e --- /dev/null +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -0,0 +1,747 @@ + +class ACE_Medical_Actions { + class Basic { + // @todo: localization + class Bandage { + displayName = "Bandage"; + displayNameProgress = "Bandaging ..."; + + treatmentLocations[] = {"All"}; + requiredMedic = 0; + treatmentTime = 5; + treatmentTimeSelfCoef = 1; + items[] = {{QGVAR(fieldDressing), QGVAR(packingBandage), QGVAR(elasticBandage), QGVAR(quikClot)}}; + condition = ""; + itemConsumed = 1; + + callbackSuccess = QUOTE(DFUNC(treatmentBasic_bandage)); + callbackFailure = ""; + callbackProgress = ""; + + animationPatient = ""; + animationCaller = "AinvPknlMstpSnonWnonDnon_medic4"; + animationCallerProne = "AinvPpneMstpSlayW[wpn]Dnon_medic"; + animationCallerSelf = "AinvPknlMstpSlayW[wpn]Dnon_medic"; + animationCallerSelfProne = "AinvPpneMstpSlayW[wpn]Dnon_medic"; + }; + class Morphine: Bandage { + displayName = "Morphine"; + displayNameProgress = "Injecting Morphine ..."; + treatmentTime = 2; + items[] = {QGVAR(morphine)}; + callbackSuccess = QUOTE(DFUNC(treatmentBasic_morphine)); + animationCaller = "AinvPknlMstpSnonWnonDnon_medic1"; + }; + class Epipen: Bandage { + displayName = "Epinephrine"; + displayNameProgress = "Injecting Epinephrine ..."; + requiredMedic = 1; + treatmentTime = 3; + items[] = {QGVAR(epipen)}; + callbackSuccess = QUOTE(DFUNC(treatmentBasic_epipen)); + animationCaller = "AinvPknlMstpSnonWnonDnon_medic1"; + }; + class Bloodbag: Bandage { + displayName = "Blood Bag"; + displayNameProgress = "Transfusing Blood ..."; + requiredMedic = 1; + treatmentTime = 20; + items[] = {{QGVAR(bloodIV), QGVAR(bloodIV_500), QGVAR(bloodIV_250)}}; + callbackSuccess = QUOTE(DFUNC(treatmentBasic_bloodbag)); + animationCaller = "AinvPknlMstpSnonWnonDnon_medic1"; + }; + }; + + class Advanced { + class FieldDressing { + // Which locations can this treatment action be used? Available: Field, MedicalFacility, MedicalVehicle, All. + treatmentLocations[] = {"All"}; + // What is the level of medical skill required for this treatment action? 0 = all soldiers, 1 = medic, 2 = doctor + requiredMedic = 0; + // The time it takes for a treatment action to complete. Time is in seconds. + treatmentTime = 5; + // Item required for the action. Leave empty for no item required. + items[] = {QGVAR(fieldDressing)}; + condition = ""; + // Callbacks + callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_bandage)); + callbackFailure = ""; + callbackProgress = ""; + itemConsumed = 1; + animationPatient = ""; + animationCaller = "AinvPknlMstpSnonWnonDnon_medic4"; + animationCallerProne = "AinvPpneMstpSlayW[wpn]Dnon_medic"; + animationCallerSelf = "AinvPknlMstpSlayW[wpn]Dnon_medic"; + animationCallerSelfProne = "AinvPpneMstpSlayW[wpn]Dnon_medic"; + }; + class PackingBandage: fieldDressing { + items[] = {QGVAR(packingBandage)}; + }; + class ElasticBandage: fieldDressing { + items[] = {QGVAR(elasticBandage)}; + }; + class QuikClot: fieldDressing { + items[] = {QGVAR(quikClot)}; + }; + class Tourniquet: fieldDressing { + items[] = {QGVAR(tourniquet)}; + treatmentTime = 6; + callbackSuccess = QUOTE(DFUNC(treatmentTourniquet)); + condition = QUOTE(!([ARR_2(_this select 1, _this select 2)] call FUNC(hasTourniquetAppliedTo))); + }; + class Morphine: fieldDressing { + items[] = {QGVAR(morphine)}; + treatmentTime = 3; + callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_medication)); + animationCaller = "AinvPknlMstpSnonWnonDnon_medic1"; + }; + class Atropine: Morphine { + items[] = {QGVAR(atropine)}; + }; + class Epinephrine: Morphine { + items[] = {QGVAR(epinephrine)}; + }; + class BloodIV: fieldDressing { + items[] = {QGVAR(bloodIV)}; + requiredMedic = 1; + treatmentTime = 7; + callbackSuccess = QUOTE(DFUNC(treatmentIV)); + animationCaller = "AinvPknlMstpSnonWnonDnon_medic1"; + }; + class BloodIV_500: BloodIV { + items[] = {QGVAR(bloodIV_500)}; + }; + class BloodIV_250: BloodIV { + items[] = {QGVAR(bloodIV_250)}; + }; + class PlasmaIV: BloodIV { + items[] = {QGVAR(plasmaIV)}; + animationCaller = "AinvPknlMstpSnonWnonDnon_medic1"; + }; + class PlasmaIV_500: PlasmaIV { + items[] = {QGVAR(plasmaIV_500)}; + }; + class PlasmaIV_250: PlasmaIV { + items[] = {QGVAR(plasmaIV_250)}; + }; + class SalineIV: BloodIV { + items[] = {QGVAR(salineIV)}; + animationCaller = "AinvPknlMstpSnonWnonDnon_medic1"; + }; + class SalineIV_500: SalineIV { + items[] = {QGVAR(salineIV_500)}; + }; + class SalineIV_250: SalineIV { + items[] = {QGVAR(salineIV_250)}; + }; + class SurgicalKit: fieldDressing { + items[] = {QGVAR(surgicalKit)}; + treatmentLocations[] = {"MedicalFacility", "MedicalVehicle"}; + requiredMedic = 2; + treatmentTime = 15; + callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_surgicalKit)); + itemConsumed = 0; + animationCaller = "AinvPknlMstpSnonWnonDnon_medic1"; + }; + class PersonalAidKit: fieldDressing { + items[] = {QGVAR(personalAidKit)}; + treatmentLocations[] = {"All"}; + requiredMedic = 1; + treatmentTime = 15; + callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_fullHeal)); + itemConsumed = 0; + animationCaller = "AinvPknlMstpSnonWnonDnon_medic1"; + }; + class CheckPulse: fieldDressing { + treatmentLocations[] = {"All"}; + requiredMedic = 0; + treatmentTime = 2; + items[] = {}; + callbackSuccess = QUOTE(DFUNC(actionCheckPulse)); + callbackFailure = ""; + callbackProgress = ""; + animationPatient = ""; + animationCaller = ""; // TODO + itemConsumed = 0; + }; + class CheckBloodPressure: CheckPulse { + callbackSuccess = QUOTE(DFUNC(actionCheckBloodPressure)); + }; + class CheckResponse: CheckPulse { + callbackSuccess = QUOTE(DFUNC(actionCheckResponse)); + }; + class RemoveTourniquet: CheckPulse { + treatmentTime = 2.5; + callbackSuccess = QUOTE(DFUNC(actionRemoveTourniquet)); + condition = QUOTE([ARR_2(_this select 1, _this select 2)] call FUNC(hasTourniquetAppliedTo)); + }; + class CPR: fieldDressing { + treatmentLocations[] = {"All"}; + requiredMedic = 0; + treatmentTime = 25; + items[] = {}; + condition = ""; // unconscious? + callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_CPR)); + callbackFailure = ""; + callbackProgress = ""; + animationPatient = ""; + animationCaller = ""; // TODO + itemConsumed = 0; + }; + class BodyBag: fieldDressing { + treatmentLocations[] = {"All"}; + requiredMedic = 0; + treatmentTime = 7.5; + items[] = {QGVAR(bodyBag)}; + condition = "!alive (_this select 1);"; + callbackSuccess = QUOTE(DFUNC(actionPlaceInBodyBag)); + callbackFailure = ""; + callbackProgress = ""; + animationPatient = ""; + itemConsumed = 0; + }; + + }; +}; + +class ACE_Medical_Advanced { + // Defines all the possible injury types for advanced medical + class Injuries { + // All the possible wounds + class wounds { + + // Source: Scarle + // Also called scrapes, they occur when the skin is rubbed away by friction against another rough surface (e.g. rope burns and skinned knees). + class Abrasion { + name = "Scrape"; + selections[] = {"All"}; + bleedingRate = 0.0001; + pain = 0.01; + causes[] = {"falling", "ropeburn", "vehiclecrash"}; + minDamage = 0.01; + class Minor { + minDamage = 0.01; + bleedingRate = 0.0001; + }; + class Medium { + minDamage = 0.2; + bleedingRate = 0.00015; + }; + class Large { + minDamage = 0.3; + bleedingRate = 0.0002; + }; + }; + + // Occur when an entire structure or part of it is forcibly pulled away, such as the loss of a permanent tooth or an ear lobe. Explosions, gunshots, and animal bites may cause avulsions. + class Avulsions { + name = "Avulsion"; + selections[] = {"All"}; + bleedingRate = 0.01; + pain = 0.3; + causes[] = {"explosive", "vehiclecrash", "grenade", "shell", "bullet", "backblast", "bite"}; + minDamage = 0.2; + class Minor { + minDamage = 0.2; + bleedingRate = 0.01; + }; + class Medium { + minDamage = 0.3; + bleedingRate = 0.02; + }; + class Large { + minDamage = 0.5; + bleedingRate = 0.05; + }; + }; + + // Also called bruises, these are the result of a forceful trauma that injures an internal structure without breaking the skin. Blows to the chest, abdomen, or head with a blunt instrument (e.g. a football or a fist) can cause contusions. + class Contusion { + name = "Bruise"; + selections[] = {"All"}; + bleedingRate = 0.0; + pain = 0.05; + causes[] = {"bullet", "backblast", "punch","vehiclecrash","falling"}; + minDamage = 0.01; + class Minor { + minDamage = 0.01; + }; + class Medium { + minDamage = 0.1; + }; + class Large { + minDamage = 0.3; + }; + }; + + // Occur when a heavy object falls onto a person, splitting the skin and shattering or tearing underlying structures. + class CrushWound { + name = "Crushed tissue"; + selections[] = {"All"}; + bleedingRate = 0.01; + pain = 0.1; + causes[] = {"falling", "vehiclecrash", "punch"}; + minDamage = 0.1; + class Minor { + minDamage = 0.1; + bleedingRate = 0.005; + }; + class Medium { + minDamage = 0.4; + bleedingRate = 0.007; + }; + class Large { + minDamage = 0.6; + bleedingRate = 0.0095; + }; + }; + + // Slicing wounds made with a sharp instrument, leaving even edges. They may be as minimal as a paper cut or as significant as a surgical incision. + class Cut { + name = "Cut"; + selections[] = {"All"}; + bleedingRate = 0.01; + pain = 0.075; + causes[] = {"vehiclecrash", "grenade", "explosive", "shell", "backblast", "stab"}; + minDamage = 0.1; + class Minor { + minDamage = 0.1; + bleedingRate = 0.005; + }; + class Medium { + minDamage = 0.3; + bleedingRate = 0.02; + }; + class Large { + minDamage = 0.65; + bleedingRate = 0.05; + }; + }; + + // Also called tears, these are separating wounds that produce ragged edges. They are produced by a tremendous force against the body, either from an internal source as in childbirth, or from an external source like a punch. + class Laceration { + name = "Tear"; + selections[] = {"All"}; + bleedingRate = 0.01; + pain = 0.075; + causes[] = {"vehiclecrash", "punch"}; + minDamage = 0.01; + class Minor { + minDamage = 0.1; + bleedingRate = 0.005; + }; + class Medium { + minDamage = 0.5; + bleedingRate = 0.01; + }; + class Large { + minDamage = 0.7; + bleedingRate = 0.03; + }; + }; + + // Also called velocity wounds, they are caused by an object entering the body at a high speed, typically a bullet or small peices of shrapnel. + class velocityWound { + name = "Velocity Wound"; + selections[] = {"All"}; + bleedingRate = 0.01; + pain = 0.2; + causes[] = {"bullet", "grenade","explosive", "shell"}; + minDamage = 0.15; + class Minor { + minDamage = 0.15; + bleedingRate = 0.025; + }; + class Medium { + minDamage = 0.3; + bleedingRate = 0.05; + }; + class Large { + minDamage = 0.75; + bleedingRate = 0.1; + }; + }; + + // Deep, narrow wounds produced by sharp objects such as nails, knives, and broken glass. + class punctureWound { + name = "Puncture Wound"; + selections[] = {"All"}; + bleedingRate = 0.01; + pain = 0.075; + causes[] = {"stab", "grenade"}; + minDamage = 0.01; + class Minor { + minDamage = 0.01; + bleedingRate = 0.01; + }; + class Medium { + minDamage = 0.5; + bleedingRate = 0.03; + }; + class Large { + minDamage = 0.65; + bleedingRate = 0.08; + }; + }; + }; + class fractures { + class Femur { + name = "Broken Femur"; + selections[] = {"Head", "Torso"}; + pain = 0.2; + causes[] = {"Bullet", "VehicleCrash", "Backblast", "Explosive", "Shell", "Grenade"}; + minDamage = 0.5; + }; + }; + class damageTypes { + thresholds[] = {{0.1, 1}}; + selectionSpecific = 1; + class bullet { + // above damage, amount. Put the highest threshold to the left and lower the threshold with the elements to the right of it. + thresholds[] = {{0.1, 1}}; + selectionSpecific = 1; + }; + class grenade { + thresholds[] = {{0.1, 3}, {0, 1}}; + selectionSpecific = 0; + }; + class explosive { + thresholds[] = {{1, 6}, {0.1, 4}, {0, 1}}; + selectionSpecific = 0; + }; + class shell { + thresholds[] = {{1, 7}, {0.1, 5}, {0, 1}}; + selectionSpecific = 0; + }; + class vehiclecrash { + thresholds[] = {{0.25, 5}}; + selectionSpecific = 0; + }; + class backblast { + thresholds[] = {{0.25, 5}}; + selectionSpecific = 0; + }; + class stab { + thresholds[] = {{0.1, 1}}; + selectionSpecific = 1; + }; + class punch { + thresholds[] = {{0.1, 1}}; + selectionSpecific = 1; + }; + class falling { + thresholds[] = {{0.1, 1}}; + selectionSpecific = 1; + }; + class ropeburn { + thresholds[] = {{0.1, 1}}; + selectionSpecific = 1; + }; + }; + }; + class Treatment { + class Bandaging { + class FieldDressing { + // How effect is the bandage for treating one wounds type injury + effectiveness = 1; + // What is the chance and delays (in seconds) of the treated default injury reopening + reopeningChance = 0.1; + reopeningMinDelay = 120; + reopeningMaxDelay = 200; + class Abrasion { + effectiveness = 1; + reopeningChance = 0; + reopeningMinDelay = 0; + reopeningMaxDelay = 0; + }; + class Avulsions: Abrasion { + effectiveness = 0.3; + reopeningChance = 0.5; + reopeningMinDelay = 120; + reopeningMaxDelay = 200; + }; + class Contusion: Abrasion { + effectiveness = 1; + reopeningChance = 0; + reopeningMinDelay = 0; + reopeningMaxDelay = 0; + }; + class CrushWound: Abrasion { + effectiveness = 0.6; + reopeningChance = 0.2; + reopeningMinDelay = 120; + reopeningMaxDelay = 200; + }; + class Cut: Abrasion { + effectiveness = 0.4; + reopeningChance = 0.5; + reopeningMinDelay = 220; + reopeningMaxDelay = 260; + }; + class Laceration: Abrasion { + effectiveness = 0.7; + reopeningChance = 0.3; + reopeningMinDelay = 120; + reopeningMaxDelay = 260; + }; + class velocityWound: Abrasion { + effectiveness = 0.3; + reopeningChance = 0.8; + reopeningMinDelay = 20; + reopeningMaxDelay = 300; + }; + class punctureWound: Abrasion { + effectiveness = 0.5; + reopeningChance = 0.8; + reopeningMinDelay = 20; + reopeningMaxDelay = 300; + }; + }; + class PackingBandage: fieldDressing { + class Abrasion { + effectiveness = 1; + reopeningChance = 0; + reopeningMinDelay = 0; + reopeningMaxDelay = 0; + }; + class Avulsions: Abrasion { + effectiveness = 1; + reopeningChance = 0.3; + reopeningMinDelay = 120; + reopeningMaxDelay = 200; + }; + class Contusion: Abrasion { + effectiveness = 1; + reopeningChance = 0; + reopeningMinDelay = 0; + reopeningMaxDelay = 0; + }; + class CrushWound: Abrasion { + effectiveness = 0.6; + reopeningChance = 0.2; + reopeningMinDelay = 120; + reopeningMaxDelay = 200; + }; + class Cut: Abrasion { + effectiveness = 0.2; + reopeningChance = 0.6; + reopeningMinDelay = 30; + reopeningMaxDelay = 260; + }; + class Laceration: Abrasion { + effectiveness = 0.3; + reopeningChance = 0.3; + reopeningMinDelay = 120; + reopeningMaxDelay = 260; + }; + class velocityWound: Abrasion { + effectiveness = 1; + reopeningChance = 0.5; + reopeningMinDelay = 20; + reopeningMaxDelay = 300; + }; + class punctureWound: Abrasion { + effectiveness = 0.3; + reopeningChance = 0.5; + reopeningMinDelay = 20; + reopeningMaxDelay = 300; + }; + }; + class ElasticBandage: fieldDressing { + class Abrasion { + effectiveness = 1; + reopeningChance = 0; + reopeningMinDelay = 0; + reopeningMaxDelay = 0; + }; + class Avulsions: Abrasion { + effectiveness = 0.3; + reopeningChance = 0.4; + reopeningMinDelay = 120; + reopeningMaxDelay = 200; + }; + class Contusion: Abrasion { + effectiveness = 1; + reopeningChance = 0; + reopeningMinDelay = 0; + reopeningMaxDelay = 0; + }; + class CrushWound: Abrasion { + effectiveness = 1; + reopeningChance = 0; + reopeningMinDelay = 0; + reopeningMaxDelay = 0; + }; + class Cut: Abrasion { + effectiveness = 1; + reopeningChance = 0.2; + reopeningMinDelay = 10; + reopeningMaxDelay = 400; + }; + class Laceration: Abrasion { + effectiveness = 1; + reopeningChance = 0.3; + reopeningMinDelay = 120; + reopeningMaxDelay = 260; + }; + class velocityWound: Abrasion { + effectiveness = 0.5; + reopeningChance = 0.5; + reopeningMinDelay = 20; + reopeningMaxDelay = 300; + }; + class punctureWound: Abrasion { + effectiveness = 0.85; + reopeningChance = 0.5; + reopeningMinDelay = 20; + reopeningMaxDelay = 300; + }; + }; + class QuikClot: fieldDressing { + class Abrasion { + effectiveness = 0.7; + reopeningChance = 0; + reopeningMinDelay = 0; + reopeningMaxDelay = 0; + }; + class Avulsions: Abrasion { + effectiveness = 0.2; + reopeningChance = 0.1; + reopeningMinDelay = 300; + reopeningMaxDelay = 350; + }; + class Contusion: Abrasion { + effectiveness = 0.7; + reopeningChance = 0; + reopeningMinDelay = 0; + reopeningMaxDelay = 0; + }; + class CrushWound: Abrasion { + effectiveness = 0.7; + reopeningChance = 0; + reopeningMinDelay = 0; + reopeningMaxDelay = 0; + }; + class Cut: Abrasion { + effectiveness = 0.7; + reopeningChance = 0.2; + reopeningMinDelay = 100; + reopeningMaxDelay = 400; + }; + class Laceration: Abrasion { + effectiveness = 0.7; + reopeningChance = 0; + reopeningMinDelay = 0; + reopeningMaxDelay = 0; + }; + class velocityWound: Abrasion { + effectiveness = 0.7; + reopeningChance = 0.1; + reopeningMinDelay = 200; + reopeningMaxDelay = 300; + }; + class punctureWound: Abrasion { + effectiveness = 0.5; + reopeningChance = 0.1; + reopeningMinDelay = 200; + reopeningMaxDelay = 300; + }; + }; + + }; + class Medication { + // How much does the pain get reduced? + painReduce = 0; + // How much will the heart rate be increased when the HR is low (below 55)? {minIncrease, maxIncrease, seconds} + hrIncreaseLow[] = {0, 0, 0}; + hrIncreaseNormal[] = {0, 0, 0}; + hrIncreaseHigh[] = {0, 0, 0}; + // Callback once the heart rate values have been added. + hrCallback = ""; + + // How long until this medication has disappeared + timeInSystem = 120; + // How many of this type of medication can be in the system before the patient overdoses? + maxDose = 4; + // Function to execute upon overdose. Arguments passed to call back are 0: unit , 1: medicationClassName + onOverDose = ""; + // The viscosity of a fluid is a measure of its resistance to gradual deformation by shear stress or tensile stress. For liquids, it corresponds to the informal concept of "thickness". This value will increase/decrease the viscoty of the blood with the percentage given. Where 100 = max. Using the minus will decrease viscosity + viscosityChange = 0; + + // specific details for the ACE_Morphine treatment action + class Morphine { + painReduce = 0.7; + hrIncreaseLow[] = {-10, -30, 35}; + hrIncreaseNormal[] = {-10, -50, 40}; + hrIncreaseHigh[] = {-10, -40, 50}; + timeInSystem = 500; + maxDose = 4; + inCompatableMedication[] = {}; + viscosityChange = 10; + }; + class Epinephrine { + painReduce = 0; + hrIncreaseLow[] = {10, 20, 30}; + hrIncreaseNormal[] = {10, 50, 20}; + hrIncreaseHigh[] = {10, 40, 10}; + timeInSystem = 120; + maxDose = 10; + inCompatableMedication[] = {}; + }; + class Atropine { + painReduce = 0; + hrIncreaseLow[] = {20, 30, 15}; + hrIncreaseNormal[] = {-10, -50, 20}; + hrIncreaseHigh[] = {-10, -40, 10}; + timeInSystem = 120; + maxDose = 6; + inCompatableMedication[] = {}; + }; + class PainKillers { + painReduce = 0.7; + timeInSystem = 120; + maxDose = 10; + inCompatableMedication[] = {}; + viscosityChange = 5; + }; + }; + class IV { + // volume is in millileters + volume = 1000; + ratio[] = {}; + type = "Blood"; + class BloodIV { + volume = 1000; + ratio[] = {"Plasma", 1}; + }; + class BloodIV_500: BloodIV { + volume = 500; + }; + class BloodIV_250: BloodIV { + volume = 250; + }; + class PlasmaIV: BloodIV { + volume = 1000; + ratio[] = {"Blood", 1}; + type = "Plasma"; + }; + class PlasmaIV_500: PlasmaIV { + volume = 500; + }; + class PlasmaIV_250: PlasmaIV { + volume = 250; + }; + class SalineIV: BloodIV { + volume = 1000; + type = "Saline"; + ratio[] = {}; + }; + class SalineIV_500: SalineIV { + volume = 500; + }; + class SalineIV_250: SalineIV { + volume = 250; + }; + }; + }; +}; diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp new file mode 100644 index 0000000000..a57bc43dff --- /dev/null +++ b/addons/medical/ACE_Settings.hpp @@ -0,0 +1,71 @@ +class ACE_Settings { + class GVAR(level) { + value = 1; + typeName = "SCALAR"; + values[] = {"Disabled", "Basic", "Advanced"}; + }; + class GVAR(medicSetting) { + value = 1; + typeName = "SCALAR"; + values[] = {"Disabled", "Normal", "Advanced"}; + }; + class GVAR(enableFor) { + value = 0; + typeName = "SCALAR"; + values[] = {"Players only", "Players and AI"}; + }; + class GVAR(maxRevives) { + typeName = "NUMBER"; + value = 1; + }; + class GVAR(enableOverdosing) { + typeName = "BOOL"; + value = true; + }; + class GVAR(bleedingCoefficient) { + typeName = "NUMBER"; + value = 1; + }; + + class GVAR(enableAirway) { + typeName = "BOOL"; + value = false; + }; + class GVAR(enableFractures) { + typeName = "BOOL"; + value = false; + }; + class GVAR(enableAdvancedWounds) { + typeName = "BOOL"; + value = false; + }; + class GVAR(enableVehicleCrashes) { + typeName = "BOOL"; + value = true; + }; + class GVAR(enableScreams) { + typeName = "BOOL"; + value = true; + }; + class GVAR(playerDamageThreshold) { + typeName = "NUMBER"; + value = 1; + }; + class GVAR(AIDamageThreshold) { + typeName = "NUMBER"; + value = 1; + }; + class GVAR(enableUnsconsiousnessAI) { + value = 1; + typeName = "NUMBER"; + values[] = {"Disabled", "Enabled", "50/50"}; + }; + class GVAR(preventInstaDeath) { + typeName = "BOOL"; + value = false; + }; + class GVAR(maxReviveTime) { + typeName = "NUMBER"; + value = 120; + }; +}; diff --git a/addons/medical/CfgEventHandlers.hpp b/addons/medical/CfgEventHandlers.hpp index ab62ee2c0a..9600675e46 100644 --- a/addons/medical/CfgEventHandlers.hpp +++ b/addons/medical/CfgEventHandlers.hpp @@ -1,3 +1,4 @@ + class Extended_PreInit_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_preInit)); @@ -6,30 +7,38 @@ class Extended_PreInit_EventHandlers { class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_postInit)); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; - -class Extended_Killed_Eventhandlers { - class CaManBase { +class Extended_Init_EventHandlers { + class CAManBase { class ADDON { - Killed = QUOTE(_this call FUNC(eh_killed)); + init = QUOTE(call COMPILE_FILE(XEH_init)); }; }; }; -class Extended_Local_Eventhandlers { - class CaManBase { +class Extended_Respawn_EventHandlers { + class CAManBase { class ADDON { - Local = QUOTE(_this call FUNC(eh_local)); + respawn = QUOTE(call COMPILE_FILE(XEH_respawn)); }; }; }; -class Extended_Init_Eventhandlers { - class CaManBase { + +class Extended_Killed_EventHandlers { + class CAManBase { class ADDON { - init = QUOTE(_this call FUNC(onInitForUnit);); + killed = QUOTE(call FUNC(handleKilled)); + }; + }; +}; + +class Extended_Local_EventHandlers { + class CAManBase { + class ADDON { + local = QUOTE(call FUNC(handleLocal)); }; }; }; diff --git a/addons/medical/CfgFactionClasses.hpp b/addons/medical/CfgFactionClasses.hpp index 35f77aedb1..e98b1f84ec 100644 --- a/addons/medical/CfgFactionClasses.hpp +++ b/addons/medical/CfgFactionClasses.hpp @@ -1,7 +1,6 @@ -class CfgFactionClasses -{ +class CfgFactionClasses { class NO_CATEGORY; - class ACE_medical: NO_CATEGORY { + class ADDON: NO_CATEGORY { displayName = "ACE Medical"; }; -}; \ No newline at end of file +}; diff --git a/addons/medical/CfgHints.hpp b/addons/medical/CfgHints.hpp deleted file mode 100644 index 2c6409536d..0000000000 --- a/addons/medical/CfgHints.hpp +++ /dev/null @@ -1,38 +0,0 @@ -class CfgHints -{ - class Combat_Space_Enhancement - { - displayName = "Combat Space Enhancement"; - class ACE_Module - { - displayName = "Combat Medical System"; - displayNameShort = "Combat Medical System"; - description = "Combat Medical System is an advanced medical system for players and AI."; - tip = ""; - arguments[] = {}; - image = ""; - noImage = true; - }; - class Assessment - { - displayName = "Patient Assessment"; - displayNameShort = "Patient Assessment"; - description = "It is essential when treating a casualty that you fully assess each of the areas of the casualty to determine not only the injuries but the priority of each in severity.
You cna assess a patient by clicking on the Assessment ICON
Use Check Pulse, check Blood Pressure and Check Response to get an overview."; - tip = "Medics will get a faster and more accurate result when assessing patients."; - arguments[] = {}; - image = ""; - noImage = true; - }; - - class Bleeding - { - displayName = "Bandaging a wound"; - displayNameShort = "Bandaging a wound"; - description = "For casualties the first priority is to stop the bleeding. You will want to bandage the largest wounds first, before attending to the smaller ones.
You can apply a tourniquet on the limbs to stem the bleeding faster, but remember to remove it!"; - tip = "Select a wound in the injury list to bandage that one first!"; - arguments[] = {}; - image = ""; - noImage = true; - }; - }; -}; \ No newline at end of file diff --git a/addons/medical/CfgSounds.hpp b/addons/medical/CfgSounds.hpp index de25bda65d..6b5fa48344 100644 --- a/addons/medical/CfgSounds.hpp +++ b/addons/medical/CfgSounds.hpp @@ -1,45 +1,37 @@ -class CfgSounds -{ - class GVAR(heartbeat_fast_1) - { - name = QGVAR(heartbeat_fast_1); - sound[] = {QUOTE(PATHTOF(sounds\heart_beats\fast_1.wav)),"db-1",1}; +class CfgSounds { + class ACE_heartbeat_fast_1 { + name = "ACE_heartbeat_fast_1"; + sound[] = {QUOTE(PATHTOF(sounds\heart_beats\fast_1.wav)), "db+1", 1}; titles[] = {}; }; - class GVAR(heartbeat_fast_2) - { - name = QGVAR(heartbeat_fast_2); - sound[] = {QUOTE(PATHTOF(sounds\heart_beats\fast_2.wav)),"db-1",1}; + class ACE_heartbeat_fast_2 { + name = "ACE_heartbeat_fast_2"; + sound[] = {QUOTE(PATHTOF(sounds\heart_beats\fast_2.wav)), "db+1", 1}; titles[] = {}; }; - class GVAR(heartbeat_fast_3) - { - name = QGVAR(heartbeat_fast_3); - sound[] = {QUOTE(PATHTOF(sounds\heart_beats\fast_3.wav)),"db-1",1}; + class ACE_heartbeat_fast_3 { + name = "ACE_heartbeat_fast_3"; + sound[] = {QUOTE(PATHTOF(sounds\heart_beats\fast_3.wav)), "db+1", 1}; titles[] = {}; }; - class GVAR(heartbeat_norm_1) - { - name = QGVAR(heartbeat_norm_1); - sound[] = {QUOTE(PATHTOF(sounds\heart_beats\norm_1.wav)),"db-1",1}; + class ACE_heartbeat_norm_1 { + name = "ACE_heartbeat_norm_1"; + sound[] = {QUOTE(PATHTOF(sounds\heart_beats\norm_1.wav)), "db+1", 1}; titles[] = {}; }; - class GVAR(heartbeat_norm_2) - { - name = QGVAR(heartbeat_norm_2); - sound[] = {QUOTE(PATHTOF(sounds\heart_beats\norm_2.wav)),"db-1",1}; + class ACE_heartbeat_norm_2 { + name = "ACE_heartbeat_norm_2"; + sound[] = {QUOTE(PATHTOF(sounds\heart_beats\norm_2.wav)), "db+1", 1}; titles[] = {}; }; - class GVAR(heartbeat_slow_1) - { - name = QGVAR(heartbeat_slow_1); - sound[] = {QUOTE(PATHTOF(sounds\heart_beats\slow_1.wav)),"db-1",1}; + class ACE_heartbeat_slow_1 { + name = "ACE_heartbeat_slow_1"; + sound[] = {QUOTE(PATHTOF(sounds\heart_beats\slow_1.wav)), "db+1", 1}; titles[] = {}; }; - class GVAR(heartbeat_slow_2) - { - name = QGVAR(heartbeat_slow_2); - sound[] = {QUOTE(PATHTOF(sounds\heart_beats\slow_2.wav)),"db-1",1}; + class ACE_heartbeat_slow_2 { + name = "ACE_heartbeat_slow_2"; + sound[] = {QUOTE(PATHTOF(sounds\heart_beats\slow_2.wav)), "db+1", 1}; titles[] = {}; }; -}; \ No newline at end of file +}; diff --git a/addons/medical/CfgVehicles.hpp b/addons/medical/CfgVehicles.hpp index c081efc27f..a15167f820 100644 --- a/addons/medical/CfgVehicles.hpp +++ b/addons/medical/CfgVehicles.hpp @@ -1,82 +1,48 @@ -class CfgVehicles -{ + +class CfgVehicles { + class Logic; class Module_F: Logic { class ArgumentsBaseUnits { }; }; - class ACE_moduleCombatMedicalSystem: Module_F { + // TODO localization for all the modules + class ACE_moduleMedicalSettings: Module_F { scope = 2; - displayName = "Combat Medical System [ACE]"; - icon = QUOTE(PATHTOF(data\ACE_medical_module.paa)); + displayName = "Medical Settings [ACE]"; + icon = QUOTE(PATHTOF(ui\moduleIcon.paa)); category = "ACE_medical"; - function = QUOTE(FUNC(initalizeModuleCMS)); + function = QUOTE(DFUNC(moduleMedicalSettings)); functionPriority = 1; isGlobal = 1; isTriggerActivated = 0; author = "Glowbal"; - class Arguments { - class advancedLevel { - displayName = "Advanced Level"; - description = "How advanced can the medical system be?"; + class Arguments { + class level { + displayName = "Medical Level"; + description = "What is the medical simulation level?"; typeName = "NUMBER"; class values { - class basic { - name = "Basic. Only bleeding and pain."; + class disable { + name = "Disabled"; value = 0; - default = 1; }; class normal { - name = "Normal. Bleeding, Pain, Blood pressure and heart rate"; - value = 1; - }; - class full { - name = "Full. Everything enabled."; - value = 2; - }; - }; - }; - class openingOfWounds { - displayName = "Advanced Wounds"; - description = "When set to true, bandaged wounds could on occasion re-open, resulting in new open wounds that need to be bandaged."; - typeName = "BOOL"; - defaultValue = 1; - }; - class mediACEtting { - displayName = "Advanced Medic roles"; - description = "Medics only are able to view the detailed information"; - typeName = "BOOL"; - defaultValue = 1; - }; - class difficultySetting { - displayName = "Survival Difficulty"; - description = "Select the aggressiveness of the medical simulation"; - typeName = "NUMBER"; - class values { - class recruit { - name = "Recruit"; - value = 0.5; - }; - class regular { - name = "Regular"; + name = "Basic"; value = 1; default = 1; }; - class veteran { - name = "Veteran"; - value = 1.2; - }; - class expert { - name = "Expert"; - value = 1.5; + class full { + name = "Advanced"; + value = 2; }; }; }; class enableFor { displayName = "Enabled for"; - description = "Select what units CMS will be enabled for"; + description = "Select what units the medical system will be enabled for"; typeName = "NUMBER"; - class values { + class values { class playableUnits { name = "Players only"; value = 0; @@ -90,124 +56,132 @@ class CfgVehicles }; class enableAirway { displayName = "Enable Airway"; - description = "Should CMS Airway system be enabled?"; - typeName = "NUMBER"; - class values { - class enable { - name = "Yes"; - value = 1; - }; - class disable { - name = "No"; - value = 0; - default = 1; - }; - }; + description = "Enable Advanced medical Airway"; + typeName = "BOOL"; + defaultValue = 0; }; - class vehCrashes { + class enableFractures { + displayName = "Enable Fractures"; + description = "Enable Advanced medical Fractures"; + typeName = "BOOL"; + defaultValue = 0; + }; + class enableAdvancedWounds { + displayName = "Enable Advanced wounds"; + description = "Allow reopening of bandaged wounds?"; + typeName = "BOOL"; + defaultValue = 0; + }; + class enableVehicleCrashes { displayName = "Vehicle Crashes"; - description = "Enable injuries on vehicle crashes"; + description = "Do units take damage from a vehicle crash?"; typeName = "BOOL"; defaultValue = 1; }; - - class aidKitUponUsage { - displayName = "Disposable Aid kit"; - description = "Is a personal aid kit disposable?"; + class enableScreams { + displayName = "Enable Screams"; + description = "Enable screaming by injuried units"; typeName = "BOOL"; - defaultValue = false; + defaultValue = 1; }; - class aidKitMedicsOnly { - displayName = "Medics only"; - description = "Are aid kits restricted to medics only?"; - typeName = "BOOL"; - defaultValue = false; - }; - class aidKitRestrictions { - displayName = "Aid kit"; - description = "When can an Aid kit be used?"; + class playerDamageThreshold { + displayName = "Player Damage"; + description = "What is the damage a player can take before being killed?"; typeName = "NUMBER"; - class values { - class medFacility { - name = "Medical Facility"; + defaultValue = 1; + }; + class AIDamageThreshold { + displayName = "AI Damage"; + description = "What is the damage an AI can take before being killed?"; + typeName = "NUMBER"; + defaultValue = 1; + }; + class enableUnsconsiousnessAI { + displayName = "AI Unconsciousness"; + description = "Allow AI to go unconscious"; + typeName = "NUMBER"; + class values { + class disable { + name = "Disabled"; value = 0; + }; + class normal { + name = "Enabled"; + value = 1; default = 1; }; - class medFAcilityNoBleeding { - name = "Medical Facility & No bleeding"; - value = 1; - }; - class Everywhere { - name = "Everywhere"; + class full { + name = "50/50"; value = 2; }; - class EverywhereNoBleeding { - name = "Everywhere & No Bleeding"; - value = 3; - }; }; }; - class bandageTime { - displayName = "Bandage Time"; - description = "Time it takes for a bandage action to be completed"; - typeName = "NUMBER"; - defaultValue = 5; - }; - class stitchingAllow { - displayName = "Can Stitch"; - description = "What units can use stitching?"; - typeName = "NUMBER"; + class preventInstaDeath { + displayName = "Prevent instant death"; + description = "Have a unit move to unconscious instead of death"; + typeName = "BOOL"; defaultValue = 0; - class values { - class medicsOnly { - name = "Medics Only"; - value = 0; - default = 1; - }; - class everyone { - name = "Everyone"; - value = 1; - }; - class noOne { - name = "No units"; - value = -1; - }; - }; }; - }; class ModuleDescription { - description = "Provides a more realistic medical system for both players and AI."; // Short description, will be formatted as structured text + description = "Provides a medical system for both players and AI."; sync[] = {}; }; }; - class ACE_moduleDamageSettings: Module_F { + class ACE_moduleTreatmentConfiguration: Module_F { scope = 2; - displayName = "Damage Settings [ACE]"; - icon = QUOTE(PATHTOF(data\ACE_medical_module.paa)); + displayName = "Treatment Configuration [ACE]"; + icon = QUOTE(PATHTOF(ui\moduleIcon.paa)); category = "ACE_medical"; - function = QUOTE(FUNC(moduleDamageSettings)); - functionPriority = 1; - isGlobal = 1; + function = QUOTE(FUNC(moduleTreatmentConfiguration)); + functionPriority = 10; + isGlobal = 2; isTriggerActivated = 0; + isDisposable = 0; author = "Glowbal"; class Arguments { - class damageThresholdAI { - displayName = "Damage Threshold AI"; - description = "How much damage does it take for an AI to be killed?"; + class medicSetting { + displayName = "Medics setting"; + description = "What is the level of detail prefered for medics?"; + typeName = "NUMBER"; + class values { + class disable { + name = "Disable medics"; + value = 0; + }; + class normal { + name = "Normal"; + value = 1; + default = 1; + }; + class full { + name = "Advanced"; + value = 2; + }; + }; + }; + class maxRevives { + displayName = "Max revives"; + description = "Max amount of revives available (when preventing death)"; typeName = "NUMBER"; defaultValue = 1; }; - class damageThresholdPlayers { - displayName = "Damage Threshold Players"; - description = "How much damage does it take for a player to be killed?"; + class enableOverdosing { + displayName = "Enable Overdosing"; + description = "Enable overdosing of medications"; + typeName = "BOOL"; + defaultValue = 1; + }; + class bleedingCoefficient { + displayName = "Bleeding coefficient"; + description = "Coefficient to modify the bleeding speed"; typeName = "NUMBER"; defaultValue = 1; }; }; class ModuleDescription { - description = "Custom damage threshold module"; + description = "Configure the treatment settings from ACE Medical"; sync[] = {}; }; }; @@ -215,7 +189,7 @@ class CfgVehicles class ACE_moduleAssignMedicRoles: Module_F { scope = 2; displayName = "Set Medic Class [ACE]"; - icon = QUOTE(PATHTOF(data\ACE_medical_module.paa)); + icon = QUOTE(PATHTOF(ui\moduleIcon.paa)); category = "ACE_medical"; function = QUOTE(FUNC(moduleAssignMedicRoles)); functionPriority = 10; @@ -223,29 +197,45 @@ class CfgVehicles isTriggerActivated = 0; isDisposable = 0; author = "Glowbal"; - class Arguments { + class Arguments { class EnableList { displayName = "List"; description = "List of unit names that will be classified as medic, separated by commas."; defaultValue = ""; + typeName = "STRING"; }; - class class { + class role { displayName = "Is Medic"; description = "Medics allow for more advanced treatment in case of Advanced Medic roles enabled"; - typeName = "BOOL"; - defaultValue = true; + typeName = "NUMBER"; + class values { + class none { + name = "None"; + value = 0; + }; + class medic { + name = "Regular medic"; + value = 1; + default = 1; + }; + class doctor { + name = "Doctor (Only Advanced Medics)"; + value = 1; + default = 1; + }; + }; }; }; class ModuleDescription { - description = "Assigns the ACE medic class to a unit"; // Short description, will be formatted as structured text + description = "Assigns the ACE medic class to a unit"; sync[] = {}; }; }; - class ACE_moduleAssignMedicalVehicle: Module_F { + class ACE_moduleAssignMedicVehicle: Module_F { scope = 2; - displayName = "set Medical Vehicle [ACE]"; - icon = QUOTE(PATHTOF(data\ACE_medical_module.paa)); + displayName = "Set Medical Vehicle [ACE]"; + icon = QUOTE(PATHTOF(ui\moduleIcon.paa)); category = "ACE_medical"; function = QUOTE(FUNC(moduleAssignMedicalVehicle)); functionPriority = 10; @@ -253,29 +243,29 @@ class CfgVehicles isTriggerActivated = 0; isDisposable = 0; author = "Glowbal"; - class Arguments { + class Arguments { class EnableList { displayName = "List"; - description = "List of object names that will be classified as medical vehicle, separated by commas."; + description = "List of vehicles that will be classified as medical vehicle, separated by commas."; defaultValue = ""; + typeName = "STRING"; }; class enabled { displayName = "Is Medical Vehicle"; description = "Whatever or not the objects in the list will be a medical vehicle."; typeName = "BOOL"; - defaultValue = true; + defaultValue = 1; }; }; class ModuleDescription { - description = "Assigns the ACE medical vehicle class to a vehicle."; + description = "Assigns the ACE medic class to a unit"; sync[] = {}; }; }; - class ACE_moduleAssignMedicalFacility: Module_F { scope = 2; displayName = "Set Medical Facility [ACE]"; - icon = QUOTE(PATHTOF(data\ACE_medical_module.paa)); + icon = QUOTE(PATHTOF(ui\moduleIcon.paa)); category = "ACE_medical"; function = QUOTE(FUNC(moduleAssignMedicalFacility)); functionPriority = 10; @@ -283,8 +273,8 @@ class CfgVehicles isTriggerActivated = 0; isDisposable = 0; author = "Glowbal"; - class Arguments { - class class { + class Arguments { + class enabled { displayName = "Is Medical Facility"; description = "Registers an object as a medical facility for CMS"; typeName = "BOOL"; @@ -295,522 +285,6 @@ class CfgVehicles sync[] = {}; }; }; - class ACE_moduleAssignMedicalEquipment: Module_F { - scope = 2; - displayName = "Assign Medical Equipment [ACE]"; - icon = QUOTE(PATHTOF(data\ACE_medical_module.paa)); - category = "ACE_medical"; - function = QUOTE(FUNC(moduleAssignMedicalEquipment)); - functionPriority = 1; - isGlobal = 1; - isTriggerActivated = 0; - author = "Glowbal"; - class Arguments { - class equipment { - displayName = "Assign Equipment"; - description = "Assign Medical equipment to all players"; - typeName = "NUMBER"; - defaultValue = 0; - class values { - class AllPlayers { - name = "All Players"; - value = 0; - default = 1; - }; - class MedicsOnly { - name = "Medics only"; - value = 1; - }; - }; - }; - }; - class ModuleDescription { - description = "Assigns medical equipment to units"; - sync[] = {}; - }; - }; - - - class MapBoard_altis_F; - class ACE_bodyBag: MapBoard_altis_F { - scope = 1; - side = -1; - model = QUOTE(PATHTOF(equipment\bodybag.p3d)); - icon = ""; - displayName = $STR_ACE_MAG_BODYBAG_DISPLAY; - }; - - - class Item_Base_F; - class ACE_bandage_basicItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_BANDAGE_BASIC_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_bandage_basic - { - name = "ACE_bandage_basic"; - count = 1; - }; - }; - }; - class ACE_packing_bandageItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_PACKING_BANDAGE_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_packing_bandage - { - name = "ACE_packing_bandage"; - count = 1; - }; - }; - }; - class ACE_bandageElasticItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_BANDAGE_ELASTIC_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_bandageElastic - { - name = "ACE_bandageElastic"; - count = 1; - }; - }; - }; - class ACE_tourniquetItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_TOURNIQUET_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_tourniquet - { - name = "ACE_tourniquet"; - count = 1; - }; - }; - }; - class ACE_splintItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_SPLINT_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_splint - { - name = "ACE_splint"; - count = 1; - }; - }; - }; - class ACE_morphineItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_MORPHINE_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_morphine - { - name = "ACE_morphine"; - count = 1; - }; - }; - }; - class ACE_atropineItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_ATROPINE_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_atropine - { - name = "ACE_atropine"; - count = 1; - }; - }; - }; - class ACE_epinephrineItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_EPINEPHRINE_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_epinephrine - { - name = "ACE_epinephrine"; - count = 1; - }; - }; - }; - class ACE_plasma_ivItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_PLASMA_IV; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_plasma_iv - { - name = "ACE_plasma_iv"; - count = 1; - }; - }; - }; - class ACE_plasma_iv_500Item: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_PLASMA_IV_500; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_plasma_iv_500 - { - name = "ACE_plasma_iv_500"; - count = 1; - }; - }; - }; - class ACE_plasma_iv_250Item: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_PLASMA_IV_250; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_plasma_iv_250 - { - name = "ACE_plasma_iv_250"; - count = 1; - }; - }; - }; - class ACE_blood_ivItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_BLOOD_IV; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_blood_iv - { - name = "ACE_blood_iv"; - count = 1; - }; - }; - }; - class ACE_blood_iv_500Item: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_BLOOD_IV_500; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_blood_iv_500 - { - name = "ACE_blood_iv_500"; - count = 1; - }; - }; - }; - class ACE_blood_iv_250Item: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_BLOOD_IV_250; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_blood_iv_250 - { - name = "ACE_blood_iv_250"; - count = 1; - }; - }; - }; - class ACE_saline_ivItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_SALINE_IV; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_saline_iv - { - name = "ACE_saline_iv"; - count = 1; - }; - }; - }; - class ACE_saline_iv_500Item: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_SALINE_IV_500; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_saline_iv_500 - { - name = "ACE_saline_iv_500"; - count = 1; - }; - }; - }; - class ACE_saline_iv_250Item: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_SALINE_IV_250; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_saline_iv_250 - { - name = "ACE_saline_iv_250"; - count = 1; - }; - }; - }; - class ACE_quikclotItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_QUIKCLOT_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_quikclot - { - name = "ACE_quikclot"; - count = 1; - }; - }; - }; - class ACE_nasopharyngeal_tubeItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_NPA_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_nasopharyngeal_tube - { - name = "ACE_nasopharyngeal_tube"; - count = 1; - }; - }; - }; - class ACE_opaItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_OPA_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_opa - { - name = "ACE_opa"; - count = 1; - }; - }; - }; - class ACE_liquidSkinItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_LIQUID_SKIN_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_liquidSkin - { - name = "ACE_liquidSkin"; - count = 1; - }; - }; - }; - class ACE_chestsealItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_CHEST_SEAL_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_chestseal - { - name = "ACE_chestseal"; - count = 1; - }; - }; - }; - class ACE_personal_aid_kitItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_AID_KIT_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_personal_aid_kit - { - name = "ACE_personal_aid_kit"; - count = 1; - }; - }; - }; - class ACE_bodyBagItem: Item_Base_F { - scope = 2; - scopeCurator = 2; - displayName = $STR_ACE_MAG_BODYBAG_DISPLAY; - author = "Glowbal"; - vehicleClass = "Items"; - class TransportItems - { - class ACE_itemBodyBag - { - name = "ACE_itemBodyBag"; - count = 1; - }; - }; - }; - - - class NATO_Box_Base; - class ACE_medical_supply_crate_cms : NATO_Box_Base { - scope = 2; - accuracy = 1000; - displayName = "Medical Supply Crate [ACE]"; - model = "\A3\weapons_F\AmmoBoxes\AmmoBox_F"; - author = "Glowbal"; - class TransportItems { - class ACE_bandage_basic { - name = "ACE_bandage_basic"; - count = 25; - }; - class ACE_packing_bandage { - name = "ACE_packing_bandage"; - count = 25; - }; - class ACE_tourniquet { - name = "ACE_tourniquet"; - count = 25; - }; - class ACE_splint { - name = "ACE_splint"; - count = 25; - }; - class ACE_plasma_iv { - name = "ACE_plasma_iv"; - count = 25; - }; - class ACE_plasma_iv_500 { - name = "ACE_plasma_iv_500"; - count = 25; - }; - class ACE_plasma_iv_250 { - name = "ACE_plasma_iv_250"; - count = 25; - }; - class ACE_blood_iv { - name = "ACE_blood_iv"; - count = 25; - }; - class ACE_blood_iv_500 { - name = "ACE_blood_iv_500"; - count = 25; - }; - class ACE_blood_iv_250 { - name = "ACE_blood_iv_250"; - count = 25; - }; - class ACE_saline_iv { - name = "ACE_saline_iv"; - count = 25; - }; - class ACE_saline_iv_500 { - name = "ACE_saline_iv_500"; - count = 25; - }; - class ACE_saline_iv_250 { - name = "ACE_saline_iv_250"; - count = 25; - }; - class ACE_morphine { - name = "ACE_morphine"; - count = 25; - }; - class ACE_epinephrine { - name = "ACE_epinephrine"; - count = 25; - }; - class ACE_atropine { - name = "ACE_atropine"; - count = 25; - }; - class ACE_quikclot { - name = "ACE_quikclot"; - count = 25; - }; - class ACE_nasopharyngeal_tube { - name = "ACE_nasopharyngeal_tube"; - count = 25; - }; - class ACE_bandageElastic { - name = "ACE_bandageElastic"; - count = 25; - }; - class ACE_liquidSkin { - name = "ACE_liquidSkin"; - count = 25; - }; - class ACE_chestseal { - name = "ACE_chestseal"; - count = 25; - }; - class ACE_personal_aid_kit { - name = "ACE_personal_aid_kit"; - count = 25; - }; - class ACE_surgical_kit { - name = "ACE_surgical_kit"; - count = 25; - }; - class ACE_itemBodyBag { - name = "ACE_itemBodyBag"; - count = 5; - }; - }; - }; - #define ARM_LEG_ARMOR_DEFAULT 2 #define ARM_LEG_ARMOR_BETTER 3 @@ -870,6 +344,613 @@ class CfgVehicles name = "leg_r"; }; }; + + class ACE_Actions { + class ACE_Head { + runOnHover = 1; + statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation)); + + class Bandage_Head { + displayName = "Bandage Head"; + distance = 2.0; + condition = QUOTE([ARR_4(_player, _target, 'head', 'Bandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'head', 'Bandage')] call DFUNC(treatment)); + showDisabled = 1; + priority = 2; + hotkey = "B"; + enableInside = 1; + }; + // Advanced medical + class FieldDressing { + displayName = "Field Dressing"; + distance = 5.0; + condition = QUOTE([ARR_4(_player, _target, 'head', 'FieldDressing')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'head', 'FieldDressing')] call DFUNC(treatment)); + showDisabled = 0; + priority = 2; + hotkey = ""; + enableInside = 1; + }; + class PackingBandage: fieldDressing { + displayName = "Packing Bandage"; + condition = QUOTE([ARR_4(_player, _target, 'head', 'PackingBandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'head', 'PackingBandage')] call DFUNC(treatment)); + }; + class ElasticBandage: fieldDressing { + displayName = "Elastic Bandage"; + condition = QUOTE([ARR_4(_player, _target, 'head', 'ElasticBandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'head', 'ElasticBandage')] call DFUNC(treatment)); + }; + class QuikClot: fieldDressing { + displayName = "QuikClot"; + condition = QUOTE([ARR_4(_player, _target, 'head', 'QuikClot')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'head', 'QuikClot')] call DFUNC(treatment)); + }; + class CheckPulse: fieldDressing { + displayName = "Check Pulse"; + condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckPulse')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckPulse')] call DFUNC(treatment)); + }; + class CheckBloodPressure: CheckPulse { + displayName = "Check Blood Pressure"; + condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckBloodPressure')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckBloodPressure')] call DFUNC(treatment)); + }; + class CheckResponse: CheckPulse { + displayName = "Check Response"; + condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(treatment)); + }; + }; + class ACE_MainActions { + class Medical { + displayName = "Medical"; + distance = 5.0; + condition = "true"; + runOnHover = 1; + statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation)); + showDisabled = 1; + priority = 2; + hotkey = "M"; + enableInside = 1; + class Bandage_Torso { + displayName = "Bandage Torso"; + distance = 2.0; + condition = QUOTE([ARR_4(_player, _target, 'body', 'Bandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'body', 'Bandage')] call DFUNC(treatment)); + showDisabled = 1; + priority = 2; + hotkey = "B"; + enableInside = 1; + }; + + // Advanced medical + class FieldDressing { + displayName = "Field Dressing"; + distance = 5.0; + condition = QUOTE([ARR_4(_player, _target, 'body', 'FieldDressing')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'body', 'FieldDressing')] call DFUNC(treatment)); + showDisabled = 0; + priority = 2; + hotkey = ""; + enableInside = 1; + }; + class PackingBandage: fieldDressing { + displayName = "Packing Bandage"; + condition = QUOTE([ARR_4(_player, _target, 'body', 'PackingBandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'body', 'PackingBandage')] call DFUNC(treatment)); + }; + class ElasticBandage: fieldDressing { + displayName = "Elastic Bandage"; + condition = QUOTE([ARR_4(_player, _target, 'body', 'ElasticBandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'body', 'ElasticBandage')] call DFUNC(treatment)); + }; + class QuikClot: fieldDressing { + displayName = "QuikClot"; + condition = QUOTE([ARR_4(_player, _target, 'body', 'QuikClot')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'body', 'QuikClot')] call DFUNC(treatment)); + }; + class Morphine: fieldDressing { + displayName = "Morphine"; + condition = QUOTE([ARR_4(_player, _target, 'body', 'Morphine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'body', 'Morphine')] call DFUNC(treatment)); + }; + class Atropine: Morphine { + displayName = "Atropine"; + condition = QUOTE([ARR_4(_player, _target, 'body', 'Atropine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'body', 'Atropine')] call DFUNC(treatment)); + }; + class Epinephrine: Morphine { + displayName = "Epinephrine"; + condition = QUOTE([ARR_4(_player, _target, 'body', 'Epinephrine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'body', 'Epinephrine')] call DFUNC(treatment)); + }; + class SurgicalKit: fieldDressing { + displayName = "Use Surgical Kit"; + condition = QUOTE([ARR_4(_player, _target, 'body', 'SurgicalKit')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'body', 'SurgicalKit')] call DFUNC(treatment)); + }; + class PersonalAidKit: fieldDressing { + displayName = "Use Personal Aid Kit"; + condition = QUOTE([ARR_4(_player, _target, 'body', 'PackingBandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'body', 'PackingBandage')] call DFUNC(treatment)); + }; + class CPR: fieldDressing { + displayName = "CPR"; + condition = QUOTE([ARR_4(_player, _target, 'body', 'CPR')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'body', 'CPR')] call DFUNC(treatment)); + }; + }; + }; + class ACE_ArmLeft { + runOnHover = 1; + statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation)); + + class Bandage_LeftArm { + displayName = "Bandage Left Arm"; + distance = 2.0; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Bandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Bandage')] call DFUNC(treatment)); + showDisabled = 1; + priority = 2; + hotkey = "B"; + enableInside = 1; + }; + + // Advanced medical + class FieldDressing { + displayName = "Field Dressing"; + distance = 5.0; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'FieldDressing')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'FieldDressing')] call DFUNC(treatment)); + showDisabled = 0; + priority = 2; + hotkey = ""; + enableInside = 1; + }; + class PackingBandage: fieldDressing { + displayName = "Packing Bandage"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'PackingBandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'PackingBandage')] call DFUNC(treatment)); + }; + class ElasticBandage: fieldDressing { + displayName = "Elastic Bandage"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'ElasticBandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'ElasticBandage')] call DFUNC(treatment)); + }; + class QuikClot: fieldDressing { + displayName = "QuikClot"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'QuikClot')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'QuikClot')] call DFUNC(treatment)); + }; + class Tourniquet: fieldDressing { + displayName = "Tourniquet"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Tourniquet')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Tourniquet')] call DFUNC(treatment)); + }; + class Morphine: fieldDressing { + displayName = "Morphine"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Morphine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Morphine')] call DFUNC(treatment)); + }; + class Atropine: Morphine { + displayName = "Atropine"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Atropine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Atropine')] call DFUNC(treatment)); + }; + class Epinephrine: Morphine { + displayName = "Epinephrine"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Epinephrine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Epinephrine')] call DFUNC(treatment)); + }; + class BloodIV: fieldDressing { + displayName = "Give Blood IV (1000ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV')] call DFUNC(treatment)); + }; + class BloodIV_500: BloodIV { + displayName = "Give Blood IV (500ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV_500')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV_500')] call DFUNC(treatment)); + }; + class BloodIV_250: BloodIV { + displayName = "Give Blood IV (250ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV_250')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV_250')] call DFUNC(treatment)); + }; + class PlasmaIV: BloodIV { + displayName = "Give Blood IV (1000ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'BloodIV')] call DFUNC(treatment)); + }; + class PlasmaIV_500: PlasmaIV { + displayName = "Give Blood IV (500ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV_500')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV_500')] call DFUNC(treatment)); + }; + class PlasmaIV_250: PlasmaIV { + displayName = "Give Blood IV (250ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV_250')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'PlasmaIV_250')] call DFUNC(treatment)); + }; + class SalineIV: BloodIV { + displayName = "Give Blood IV (1000ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV')] call DFUNC(treatment)); + }; + class SalineIV_500: SalineIV { + displayName = "Give Blood IV (500ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV_500')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV_500')] call DFUNC(treatment)); + }; + class SalineIV_250: SalineIV { + displayName = "Give Blood IV (250ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV_250')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'SalineIV_250')] call DFUNC(treatment)); + }; + class CheckPulse: fieldDressing { + displayName = "Check Pulse"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckPulse')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckPulse')] call DFUNC(treatment)); + }; + class CheckBloodPressure: CheckPulse { + displayName = "Check Blood Pressure"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckBloodPressure')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'CheckBloodPressure')] call DFUNC(treatment)); + }; + class RemoveTourniquet: Tourniquet { + displayName = "Remove Tourniquet"; + condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'RemoveTourniquet')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'RemoveTourniquet')] call DFUNC(treatment)); + }; + }; + class ACE_ArmRight { + runOnHover = 1; + statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation)); + class Bandage_RightArm { + displayName = "Bandage Right Arm"; + distance = 2.0; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Bandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Bandage')] call DFUNC(treatment)); + showDisabled = 1; + priority = 2; + hotkey = "B"; + enableInside = 1; + }; + + // Advanced medical + class FieldDressing { + displayName = "Field Dressing"; + distance = 5.0; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'FieldDressing')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'FieldDressing')] call DFUNC(treatment)); + showDisabled = 0; + priority = 2; + hotkey = ""; + enableInside = 1; + }; + class PackingBandage: fieldDressing { + displayName = "Packing Bandage"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PackingBandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PackingBandage')] call DFUNC(treatment)); + }; + class ElasticBandage: fieldDressing { + displayName = "Elastic Bandage"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'ElasticBandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'ElasticBandage')] call DFUNC(treatment)); + }; + class QuikClot: fieldDressing { + displayName = "QuikClot"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'QuikClot')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'QuikClot')] call DFUNC(treatment)); + }; + class Tourniquet: fieldDressing { + displayName = "Tourniquet"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Tourniquet')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Tourniquet')] call DFUNC(treatment)); + }; + class Morphine: fieldDressing { + displayName = "Morphine"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Morphine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Morphine')] call DFUNC(treatment)); + }; + class Atropine: Morphine { + displayName = "Atropine"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Atropine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Atropine')] call DFUNC(treatment)); + }; + class Epinephrine: Morphine { + displayName = "Epinephrine"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Epinephrine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Epinephrine')] call DFUNC(treatment)); + }; + class BloodIV: fieldDressing { + displayName = "Give Blood IV (1000ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV')] call DFUNC(treatment)); + }; + class BloodIV_500: BloodIV { + displayName = "Give Blood IV (500ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV_500')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV_500')] call DFUNC(treatment)); + }; + class BloodIV_250: BloodIV { + displayName = "Give Blood IV (250ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV_250')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV_250')] call DFUNC(treatment)); + }; + class PlasmaIV: BloodIV { + displayName = "Give Blood IV (1000ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'BloodIV')] call DFUNC(treatment)); + }; + class PlasmaIV_500: PlasmaIV { + displayName = "Give Blood IV (500ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV_500')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV_500')] call DFUNC(treatment)); + }; + class PlasmaIV_250: PlasmaIV { + displayName = "Give Blood IV (250ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV_250')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'PlasmaIV_250')] call DFUNC(treatment)); + }; + class SalineIV: BloodIV { + displayName = "Give Blood IV (1000ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV')] call DFUNC(treatment)); + }; + class SalineIV_500: SalineIV { + displayName = "Give Blood IV (500ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV_500')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV_500')] call DFUNC(treatment)); + }; + class SalineIV_250: SalineIV { + displayName = "Give Blood IV (250ml)"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV_250')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'SalineIV_250')] call DFUNC(treatment)); + }; + class CheckPulse: fieldDressing { + displayName = "Check Pulse"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckPulse')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckPulse')] call DFUNC(treatment)); + }; + class CheckBloodPressure: CheckPulse { + displayName = "Check Blood Pressure"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckBloodPressure')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'CheckBloodPressure')] call DFUNC(treatment)); + }; + class RemoveTourniquet: Tourniquet { + displayName = "Remove Tourniquet"; + condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'RemoveTourniquet')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'RemoveTourniquet')] call DFUNC(treatment)); + }; + + }; + class ACE_LegLeft { + runOnHover = 1; + statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation)); + class Bandage_LeftLeg { + displayName = "Bandage Left Leg"; + distance = 2.0; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Bandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Bandage')] call DFUNC(treatment)); + showDisabled = 1; + priority = 2; + hotkey = "B"; + enableInside = 1; + }; + + + // Advanced medical + class FieldDressing { + displayName = "Field Dressing"; + distance = 5.0; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'FieldDressing')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'FieldDressing')] call DFUNC(treatment)); + showDisabled = 0; + priority = 2; + hotkey = ""; + enableInside = 1; + }; + class PackingBandage: fieldDressing { + displayName = "Packing Bandage"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PackingBandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PackingBandage')] call DFUNC(treatment)); + }; + class ElasticBandage: fieldDressing { + displayName = "Elastic Bandage"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'ElasticBandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'ElasticBandage')] call DFUNC(treatment)); + }; + class QuikClot: fieldDressing { + displayName = "QuikClot"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'QuikClot')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'QuikClot')] call DFUNC(treatment)); + }; + class Tourniquet: fieldDressing { + displayName = "Tourniquet"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Tourniquet')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Tourniquet')] call DFUNC(treatment)); + }; + class Morphine: fieldDressing { + displayName = "Morphine"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Morphine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Morphine')] call DFUNC(treatment)); + }; + class Atropine: Morphine { + displayName = "Atropine"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Atropine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Atropine')] call DFUNC(treatment)); + }; + class Epinephrine: Morphine { + displayName = "Epinephrine"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Epinephrine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Epinephrine')] call DFUNC(treatment)); + }; + class BloodIV: fieldDressing { + displayName = "Give Blood IV (1000ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV')] call DFUNC(treatment)); + }; + class BloodIV_500: BloodIV { + displayName = "Give Blood IV (500ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV_500')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV_500')] call DFUNC(treatment)); + }; + class BloodIV_250: BloodIV { + displayName = "Give Blood IV (250ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV_250')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV_250')] call DFUNC(treatment)); + }; + class PlasmaIV: BloodIV { + displayName = "Give Blood IV (1000ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'BloodIV')] call DFUNC(treatment)); + }; + class PlasmaIV_500: PlasmaIV { + displayName = "Give Blood IV (500ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV_500')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV_500')] call DFUNC(treatment)); + }; + class PlasmaIV_250: PlasmaIV { + displayName = "Give Blood IV (250ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV_250')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'PlasmaIV_250')] call DFUNC(treatment)); + }; + class SalineIV: BloodIV { + displayName = "Give Blood IV (1000ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV')] call DFUNC(treatment)); + }; + class SalineIV_500: SalineIV { + displayName = "Give Blood IV (500ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV_500')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV_500')] call DFUNC(treatment)); + }; + class SalineIV_250: SalineIV { + displayName = "Give Blood IV (250ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV_250')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'SalineIV_250')] call DFUNC(treatment)); + }; + class RemoveTourniquet: Tourniquet { + displayName = "Remove Tourniquet"; + condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'RemoveTourniquet')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'RemoveTourniquet')] call DFUNC(treatment)); + }; + }; + class ACE_LegRight { + runOnHover = 1; + statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation)); + class Bandage_RightLeg { + displayName = "Bandage Right Leg"; + distance = 2.0; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Bandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Bandage')] call DFUNC(treatment)); + showDisabled = 1; + priority = 2; + hotkey = "B"; + enableInside = 1; + }; + + + // Advanced medical + class FieldDressing { + displayName = "Field Dressing"; + distance = 5.0; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'FieldDressing')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'FieldDressing')] call DFUNC(treatment)); + showDisabled = 0; + priority = 2; + hotkey = ""; + enableInside = 1; + }; + class PackingBandage: fieldDressing { + displayName = "Packing Bandage"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PackingBandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PackingBandage')] call DFUNC(treatment)); + }; + class ElasticBandage: fieldDressing { + displayName = "Elastic Bandage"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'ElasticBandage')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'ElasticBandage')] call DFUNC(treatment)); + }; + class QuikClot: fieldDressing { + displayName = "QuikClot"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'QuikClot')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'QuikClot')] call DFUNC(treatment)); + }; + class Tourniquet: fieldDressing { + displayName = "Tourniquet"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Tourniquet')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Tourniquet')] call DFUNC(treatment)); + }; + class Morphine: fieldDressing { + displayName = "Morphine"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Morphine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Morphine')] call DFUNC(treatment)); + }; + class Atropine: Morphine { + displayName = "Atropine"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Atropine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Atropine')] call DFUNC(treatment)); + }; + class Epinephrine: Morphine { + displayName = "Epinephrine"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Epinephrine')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Epinephrine')] call DFUNC(treatment)); + }; + class BloodIV: fieldDressing { + displayName = "Give Blood IV (1000ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV')] call DFUNC(treatment)); + }; + class BloodIV_500: BloodIV { + displayName = "Give Blood IV (500ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV_500')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV_500')] call DFUNC(treatment)); + }; + class BloodIV_250: BloodIV { + displayName = "Give Blood IV (250ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV_250')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV_250')] call DFUNC(treatment)); + }; + class PlasmaIV: BloodIV { + displayName = "Give Blood IV (1000ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'BloodIV')] call DFUNC(treatment)); + }; + class PlasmaIV_500: PlasmaIV { + displayName = "Give Blood IV (500ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV_500')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV_500')] call DFUNC(treatment)); + }; + class PlasmaIV_250: PlasmaIV { + displayName = "Give Blood IV (250ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV_250')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'PlasmaIV_250')] call DFUNC(treatment)); + }; + class SalineIV: BloodIV { + displayName = "Give Blood IV (1000ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV')] call DFUNC(treatment)); + }; + class SalineIV_500: SalineIV { + displayName = "Give Blood IV (500ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV_500')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV_500')] call DFUNC(treatment)); + }; + class SalineIV_250: SalineIV { + displayName = "Give Blood IV (250ml)"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV_250')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'SalineIV_250')] call DFUNC(treatment)); + }; + class RemoveTourniquet: Tourniquet { + displayName = "Remove Tourniquet"; + condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'RemoveTourniquet')] call DFUNC(canTreat)); + statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'RemoveTourniquet')] call DFUNC(treatment)); + }; + }; + }; }; class SoldierWB: CAManBase {}; @@ -877,6 +958,7 @@ class CfgVehicles class SoldierGB: CAManBase {}; class B_Soldier_base_F: SoldierWB {}; + class B_Soldier_04_f: B_Soldier_base_F { class HitPoints: HitPoints { class HitHead: HitHead {}; @@ -1036,4 +1118,315 @@ class CfgVehicles }; }; }; + class MapBoard_altis_F; + class ACE_bodyBag: MapBoard_altis_F { + scope = 1; + side = -1; + model = QUOTE(PATHTOF(data\bodybag.p3d)); + icon = ""; + displayName = $STR_ACE_MEDICAL_BODYBAG_DISPLAY; + }; + class Item_Base_F; + class GVAR(fieldDressingItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_BANDAGE_BASIC_DISPLAY; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(fieldDressing) + { + name = QGVAR(fieldDressing); + count = 1; + }; + }; + }; + class GVAR(packingBandageItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_PACKING_BANDAGE_DISPLAY; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(packingBandage) + { + name = QGVAR(packingBandage); + count = 1; + }; + }; + }; + class GVAR(elasticBandageItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DISPLAY; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(elasticBandage) + { + name = QGVAR(elasticBandage); + count = 1; + }; + }; + }; + class GVAR(tourniquetItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_TOURNIQUET_DISPLAY; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(tourniquet) + { + name = QGVAR(tourniquet); + count = 1; + }; + }; + }; + class GVAR(morphineItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_MORPHINE_DISPLAY; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(morphine) + { + name = QGVAR(morphine); + count = 1; + }; + }; + }; + class GVAR(atropineItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_ATROPINE_DISPLAY; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(atropine) + { + name = QGVAR(atropine); + count = 1; + }; + }; + }; + class GVAR(epinephrineItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_EPINEPHRINE_DISPLAY; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(epinephrine) + { + name = QGVAR(epinephrine); + count = 1; + }; + }; + }; + class GVAR(plasmaIVItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_PLASMA_IV; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(plasmaIV) + { + name = QGVAR(plasmaIV); + count = 1; + }; + }; + }; + + class GVAR(bloodIVItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_BLOOD_IV; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(bloodIV) + { + name = QGVAR(bloodIV); + count = 1; + }; + }; + }; + class GVAR(salineIVItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_SALINE_IV; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(salineIV) + { + name = QGVAR(salineIV); + count = 1; + }; + }; + }; + class GVAR(quikClotItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_QUIKCLOT_DISPLAY; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(quikClot) + { + name = QGVAR(quikClot); + count = 1; + }; + }; + }; + class GVAR(personalAidKitItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_AID_KIT_DISPLAY; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(personalAidKit) + { + name = QGVAR(personalAidKit); + count = 1; + }; + }; + }; + class GVAR(surgicalKitItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_SURGICALKIT_DISPLAY; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(surgicalKit) + { + name = QGVAR(surgicalKit); + count = 1; + }; + }; + }; + class GVAR(bodyBagItem): Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = $STR_ACE_MEDICAL_BODYBAG_DISPLAY; + author = "Glowbal"; + vehicleClass = "Items"; + class TransportItems + { + class GVAR(bodyBag) + { + name = QGVAR(bodyBag); + count = 1; + }; + }; + }; + + class NATO_Box_Base; + class GVAR(supplyCrate): NATO_Box_Base { + scope = 2; + accuracy = 1000; + displayName = "Medical Supply Crate [ACE]"; + model = "\A3\weapons_F\AmmoBoxes\AmmoBox_F"; + author = "Glowbal"; + class TransportItems { + class GVAR(fieldDressing) { + name = QGVAR(fieldDressing); + count = 25; + }; + class GVAR(packingBandage) { + name = QGVAR(packingBandage); + count = 25; + }; + class GVAR(elasticBandage) { + name = QGVAR(elasticBandage); + count = 25; + }; + class GVAR(tourniquet) { + name = QGVAR(tourniquet); + count = 15; + }; + class GVAR(morphine) { + name = QGVAR(morphine); + count = 15; + }; + class GVAR(atropine) { + name = QGVAR(atropine); + count = 15; + }; + class GVAR(epinephrine) { + name = QGVAR(epinephrine); + count = 15; + }; + class GVAR(plasmaIV) { + name = QGVAR(plasmaIV); + count = 7; + }; + class GVAR(plasmaIV_500) { + name = QGVAR(plasmaIV_500); + count = 7; + }; + class GVAR(plasmaIV_250) { + name = QGVAR(plasmaIV_250); + count = 7; + }; + class GVAR(salineIV) { + name = QGVAR(salineIV); + count = 7; + }; + class GVAR(salineIV_500) { + name = QGVAR(salineIV_500); + count = 7; + }; + class GVAR(salineIV_250) { + name = QGVAR(salineIV_250); + count = 7; + }; + class GVAR(bloodIV) { + name = QGVAR(bloodIV); + count = 7; + }; + class GVAR(bloodIV_500) { + name = QGVAR(bloodIV_500); + count = 7; + }; + class GVAR(bloodIV_250) { + name = QGVAR(bloodIV_250); + count = 7; + }; + class GVAR(quikClot) { + name = QGVAR(quikClot); + count = 20; + }; + class GVAR(personalAidKit) { + name = QGVAR(personalAidKit); + count = 3; + }; + class GVAR(surgicalKit) { + name = QGVAR(surgicalKit); + count = 2; + }; + class GVAR(bodyBag) { + name = QGVAR(bodyBag); + count = 5; + }; + }; + }; }; diff --git a/addons/medical/CfgWeapons.hpp b/addons/medical/CfgWeapons.hpp index 34636cf0fb..3eb30929d7 100644 --- a/addons/medical/CfgWeapons.hpp +++ b/addons/medical/CfgWeapons.hpp @@ -1,317 +1,263 @@ + class CfgWeapons { - class ItemCore; - class InventoryItem_Base_F; - class ACE_bandage_basic: ItemCore - { - scope = 2; - value = 1; - count = 1; - type = 16; - displayName = $STR_ACE_MAG_BANDAGE_BASIC_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\field_dressing.paa)); - model = QUOTE(PATHTOF(equipment\bandages\fielddressing.p3d)); - descriptionShort = $STR_ACE_MAG_BANDAGE_BASIC_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_BANDAGE_BASIC_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { - mass=0.5; - type=201; - }; + class ItemCore; + class InventoryItem_Base_F; + class InventoryFirstAidKitItem_Base_F; + class MedikitItem; + + // ITEMS + class FirstAidKit: ItemCore { + type = 0; + class ItemInfo: InventoryFirstAidKitItem_Base_F { + mass = 4; + type = 201; }; - class ACE_packing_bandage: ItemCore - { - scope = 2; - value = 1; - count = 1; - type = 16; - displayName = $STR_ACE_MAG_PACKING_BANDAGE_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\packing_bandage.paa)); - model = QUOTE(PATHTOF(equipment\bandages\packingbandage.p3d)); - descriptionShort = $STR_ACE_MAG_PACKING_BANDAGE_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_PACKING_BANDAGE_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { - mass=1; - type=201; - }; + }; + class Medikit: ItemCore { + type = 0; + class ItemInfo: MedikitItem { + mass = 60; + type = 201; }; - class ACE_bandageElastic: ItemCore { + }; + + // @todo localize + class ACE_ItemCore; + class GVAR(fieldDressing): ACE_ItemCore { scope = 2; - value = 1; - count = 1; - type = 16; - displayName = $STR_ACE_MAG_BANDAGE_ELASTIC_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\bandageElastic.paa)); model = "\A3\Structures_F_EPA\Items\Medical\Bandage_F.p3d"; - descriptionShort = $STR_ACE_MAG_BANDAGE_ELASTIC_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_BANDAGE_ELASTIC_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { + picture = QUOTE(PATHTOF(ui\items\fieldDressing.paa)); + displayName = $STR_ACE_MEDICAL_BANDAGE_BASIC_DISPLAY; + descriptionShort = $STR_ACE_MEDICAL_BANDAGE_BASIC_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_BANDAGE_BASIC_DESC_USE; + class ItemInfo: InventoryItem_Base_F { mass=1; type=201; }; }; - class ACE_tourniquet: ItemCore - { + class GVAR(packingBandage): ItemCore { scope = 2; value = 1; count = 1; type = 16; - displayName = $STR_ACE_MAG_TOURNIQUET_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\tourniquet.paa)); - model = QUOTE(PATHTOF(equipment\Tourniquet.p3d)); - descriptionShort = $STR_ACE_MAG_TOURNIQUET_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_TOURNIQUET_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { + displayName = $STR_ACE_MEDICAL_PACKING_BANDAGE_DISPLAY; + picture = QUOTE(PATHTOF(ui\items\packingBandage.paa)); + model = QUOTE(PATHTOF(data\packingbandage.p3d)); + descriptionShort = $STR_ACE_MEDICAL_PACKING_BANDAGE_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_PACKING_BANDAGE_DESC_USE; + class ItemInfo: InventoryItem_Base_F { mass=1; type=201; }; }; - class ACE_splint: ItemCore - { + class GVAR(elasticBandage): ItemCore { scope = 2; value = 1; count = 1; type = 16; - displayName = $STR_ACE_MAG_SPLINT_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\splint.paa)); - descriptionUse = $STR_ACE_MAG_SPLINT_DESC_USE; - descriptionShort = $STR_ACE_MAG_SPLINT_DESC_SHORT; - class ItemInfo: InventoryItem_Base_F - { + displayName = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DISPLAY; + picture = QUOTE(PATHTOF(ui\items\elasticBandage.paa)); + model = "\A3\Structures_F_EPA\Items\Medical\Bandage_F.p3d"; + descriptionShort = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DESC_USE; + class ItemInfo: InventoryItem_Base_F { mass=1; type=201; }; }; - class ACE_morphine: ItemCore - { + class GVAR(tourniquet): ItemCore { scope = 2; value = 1; count = 1; type = 16; - displayName = $STR_ACE_MAG_MORPHINE_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\morphine.paa)); - model = QUOTE(PATHTOF(equipment\Morphinpen.p3d)); - descriptionShort = $STR_ACE_MAG_MORPHINE_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_MORPHINE_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { + displayName = $STR_ACE_MEDICAL_TOURNIQUET_DISPLAY; + picture = QUOTE(PATHTOF(ui\items\tourniquet.paa)); + model = QUOTE(PATHTOF(data\tourniquet.p3d)); + descriptionShort = $STR_ACE_MEDICAL_TOURNIQUET_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_TOURNIQUET_DESC_USE; + class ItemInfo: InventoryItem_Base_F { mass=1; type=201; }; }; - class ACE_atropine: ItemCore { + class GVAR(morphine): ItemCore { scope = 2; value = 1; count = 1; type = 16; - displayName = $STR_ACE_MAG_ATROPINE_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\atropine.paa)); - model = QUOTE(PATHTOF(equipment\Atropin-pen.p3d)); - descriptionShort = $STR_ACE_MAG_ATROPINE_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_ATROPINE_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { + displayName = $STR_ACE_MEDICAL_MORPHINE_DISPLAY; + picture = QUOTE(PATHTOF(ui\items\morphine.paa)); + model = QUOTE(PATHTOF(data\morphine.p3d)); + descriptionShort = $STR_ACE_MEDICAL_MORPHINE_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_MORPHINE_DESC_USE; + class ItemInfo: InventoryItem_Base_F { mass=1; type=201; }; }; - class ACE_epinephrine: ItemCore { + class GVAR(atropine): ItemCore { scope = 2; value = 1; count = 1; type = 16; - displayName = $STR_ACE_MAG_EPINEPHRINE_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\epinephrine.paa)); - model = QUOTE(PATHTOF(equipment\Epipen.p3d)); - descriptionShort = $STR_ACE_MAG_EPINEPHRINE_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_EPINEPHRINE_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { + displayName = $STR_ACE_MEDICAL_ATROPINE_DISPLAY; + picture = QUOTE(PATHTOF(ui\items\atropine.paa)); + model = QUOTE(PATHTOF(data\atropine.p3d)); + descriptionShort = $STR_ACE_MEDICAL_ATROPINE_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_ATROPINE_DESC_USE; + class ItemInfo: InventoryItem_Base_F { mass=1; type=201; }; }; - class ACE_plasma_iv: ItemCore { + class GVAR(epinephrine): ItemCore { scope = 2; value = 1; count = 1; - displayName = $STR_ACE_MAG_PLASMA_IV; - picture = QUOTE(PATHTOF(equipment\img\plasma_iv.paa)); - descriptionShort = $STR_ACE_MAG_PLASMA_IV_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_PLASMA_IV_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { + type = 16; + displayName = $STR_ACE_MEDICAL_EPINEPHRINE_DISPLAY; + picture = QUOTE(PATHTOF(ui\items\epinephrine.paa)); + model = QUOTE(PATHTOF(data\epinephrine.p3d)); + descriptionShort = $STR_ACE_MEDICAL_EPINEPHRINE_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_EPINEPHRINE_DESC_USE; + class ItemInfo: InventoryItem_Base_F { mass=1; type=201; }; }; - class ACE_plasma_iv_500: ACE_plasma_iv { - displayName = $STR_ACE_MAG_PLASMA_IV_500; + class GVAR(plasmaIV): ItemCore { + scope = 2; + value = 1; + count = 1; + displayName = $STR_ACE_MEDICAL_PLASMA_IV; + picture = QUOTE(PATHTOF(ui\items\plasmaIV.paa)); + descriptionShort = $STR_ACE_MEDICAL_PLASMA_IV_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_PLASMA_IV_DESC_USE; + class ItemInfo: InventoryItem_Base_F { + mass = 10; + type = 201; + }; }; - class ACE_plasma_iv_250: ACE_plasma_iv_500 { - displayName = $STR_ACE_MAG_PLASMA_IV_250; + class GVAR(plasmaIV_500): GVAR(plasmaIV) { + displayName = $STR_ACE_MEDICAL_PLASMA_IV_500; + class ItemInfo: InventoryItem_Base_F { + mass = 5; + type = 201; + }; }; - class ACE_blood_iv: ItemCore { + class GVAR(plasmaIV_250): GVAR(plasmaIV) { + displayName = $STR_ACE_MEDICAL_PLASMA_IV_250; + class ItemInfo: InventoryItem_Base_F { + mass = 2.5; + type = 201; + }; + }; + class GVAR(bloodIV): ItemCore { scope = 2; value = 1; count = 1; model = "\A3\Structures_F_EPA\Items\Medical\BloodBag_F.p3d"; - displayName = $STR_ACE_MAG_BLOOD_IV; - picture = QUOTE(PATHTOF(equipment\img\bloodbag.paa)); - descriptionShort = $STR_ACE_MAG_BLOOD_IV_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_BLOOD_IV_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { - mass=1; - type=201; + displayName = $STR_ACE_MEDICAL_BLOOD_IV; + picture = QUOTE(PATHTOF(ui\items\bloodIV.paa)); + descriptionShort = $STR_ACE_MEDICAL_BLOOD_IV_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_BLOOD_IV_DESC_USE; + class ItemInfo: InventoryItem_Base_F { + mass = 10; + type = 201; }; }; - class ACE_blood_iv_500: ACE_blood_iv { - displayName = $STR_ACE_MAG_BLOOD_IV_500; + class GVAR(bloodIV_500): GVAR(bloodIV) { + displayName = $STR_ACE_MEDICAL_BLOOD_IV_500; + class ItemInfo: InventoryItem_Base_F { + mass = 5; + type = 201; + }; }; - class ACE_blood_iv_250: ACE_blood_iv_500 { - displayName = $STR_ACE_MAG_BLOOD_IV_250; + class GVAR(bloodIV_250): GVAR(bloodIV) { + displayName = $STR_ACE_MEDICAL_BLOOD_IV_250; + class ItemInfo: InventoryItem_Base_F { + mass = 2.5; + type = 201; + }; }; - class ACE_saline_iv: ItemCore { + class GVAR(salineIV): ItemCore { scope = 2; value = 1; count = 1; - displayName = $STR_ACE_MAG_SALINE_IV; - picture = QUOTE(PATHTOF(equipment\img\saline_iv.paa)); - descriptionShort = $STR_ACE_MAG_SALINE_IV_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_SALINE_IV_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { - mass=1; - type=201; + displayName = $STR_ACE_MEDICAL_SALINE_IV; + picture = QUOTE(PATHTOF(ui\items\salineIV.paa)); + descriptionShort = $STR_ACE_MEDICAL_SALINE_IV_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_SALINE_IV_DESC_USE; + class ItemInfo: InventoryItem_Base_F { + mass = 10; + type = 201; }; }; - class ACE_saline_iv_500: ACE_saline_iv { - displayName = $STR_ACE_MAG_SALINE_IV_500; + class GVAR(salineIV_500): GVAR(salineIV) { + displayName = $STR_ACE_MEDICAL_SALINE_IV_500; + class ItemInfo: InventoryItem_Base_F { + mass = 2.5; + type = 201; + }; }; - class ACE_saline_iv_250: ACE_saline_iv_500 { - displayName = $STR_ACE_MAG_SALINE_IV_250; + class GVAR(salineIV_250): GVAR(salineIV) { + displayName = $STR_ACE_MEDICAL_SALINE_IV_250; + class ItemInfo: InventoryItem_Base_F { + mass = 2.5; + type = 201; + }; }; - class ACE_quikclot: ItemCore { + class GVAR(quikclot): ItemCore { scope = 2; value = 1; count = 1; type = 16; - displayName = $STR_ACE_MAG_QUIKCLOT_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\quickclot.paa)); - descriptionShort = $STR_ACE_MAG_QUIKCLOT_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_QUIKCLOT_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { - mass=1; - type=201; + displayName = $STR_ACE_MEDICAL_QUIKCLOT_DISPLAY; + picture = QUOTE(PATHTOF(ui\items\quickclot.paa)); + descriptionShort = $STR_ACE_MEDICAL_QUIKCLOT_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_QUIKCLOT_DESC_USE; + class ItemInfo: InventoryItem_Base_F { + mass = 1; + type = 201; }; }; - class ACE_nasopharyngeal_tube: ItemCore { + class GVAR(personalAidKit): ItemCore { scope = 2; value = 1; count = 1; type = 16; - displayName = $STR_ACE_MAG_NPA_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\nasopharyngeal_tube.paa)); - descriptionUse = $STR_ACE_MAG_NPA_DESC_USE; - descriptionShort = $STR_ACE_MAG_NPA_DESC_SHORT; - class ItemInfo: InventoryItem_Base_F - { - mass=1; - type=201; + displayName = $STR_ACE_MEDICAL_AID_KIT_DISPLAY; + picture = QUOTE(PATHTOF(ui\items\personal_aid_kit.paa)); + //model = QUOTE(PATHTOF(equipment\Personal-aidkits\MTP.p3d)); + descriptionShort = $STR_ACE_MEDICAL_AID_KIT_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_AID_KIT_DESC_USE; + class ItemInfo: InventoryItem_Base_F { + mass = 2; + type = 201; }; }; - class ACE_opa: ItemCore { - scope = 2; - value = 1; - count = 1; - type = 16; - displayName = $STR_ACE_MAG_OPA_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\nasopharyngeal_tube.paa)); - descriptionShort = $STR_ACE_MAG_OPA_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_OPA_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { - mass=1; - type=201; - }; - }; - class ACE_liquidSkin: ItemCore { - scope = 2; - value = 1; - count = 1; - type = 16; - displayName = $STR_ACE_MAG_LIQUID_SKIN_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\liquidSkin.paa)); - model = QUOTE(PATHTOF(equipment\skinliquid.p3d)); - descriptionShort = $STR_ACE_MAG_LIQUID_SKIN_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_LIQUID_SKIN_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { - mass=1; - type=201; - }; - }; - class ACE_chestseal: ItemCore { - scope = 2; - value = 1; - count = 1; - type = 16; - displayName = $STR_ACE_MAG_CHEST_SEAL_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\chestseal.paa)); - descriptionShort = $STR_ACE_MAG_CHEST_SEAL_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_CHEST_SEAL_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { - mass=1; - type=201; - }; - }; - class ACE_personal_aid_kit: ItemCore { - scope = 2; - value = 1; - count = 1; - type = 16; - displayName = $STR_ACE_MAG_AID_KIT_DISPLAY; - picture = QUOTE(PATHTOF(equipment\img\personal_aid_kit.paa)); - model = QUOTE(PATHTOF(equipment\Personal-aidkits\MTP.p3d)); - descriptionShort = $STR_ACE_MAG_AID_KIT_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_AID_KIT_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { - mass=2; - type=201; - }; - }; - class ACE_surgical_kit: ItemCore - { + class GVAR(surgicalKit): ItemCore { scope=2; - displayName= $STR_ACE_MAG_SURGICALKIT_DISPLAY; - model = QUOTE(PATHTOF(equipment\surgical_kit.p3d)); - picture = QUOTE(PATHTOF(equipment\img\surgical_kit.paa)); - descriptionShort = $STR_ACE_MAG_SURGICALKIT_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_SURGICALKIT_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { - mass= 5; - type=201; + displayName= $STR_ACE_MEDICAL_SURGICALKIT_DISPLAY; + model = QUOTE(PATHTOF(data\surgical_kit.p3d)); + picture = QUOTE(PATHTOF(ui\items\surgicalKit.paa)); + descriptionShort = $STR_ACE_MEDICAL_SURGICALKIT_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_SURGICALKIT_DESC_USE; + class ItemInfo: InventoryItem_Base_F { + mass = 5; + type = 201; }; }; - class ACE_itemBodyBag: ItemCore - { + class GVAR(bodyBag): ItemCore { scope=2; - displayName= $STR_ACE_MAG_BODYBAG_DISPLAY; - model = QUOTE(PATHTOF(equipment\bodybagItem.p3d)); - picture = QUOTE(PATHTOF(equipment\img\bodybag.paa)); - descriptionShort = $STR_ACE_MAG_BODYBAG_DESC_SHORT; - descriptionUse = $STR_ACE_MAG_BODYBAG_DESC_USE; - class ItemInfo: InventoryItem_Base_F - { - mass= 15; - type=201; + displayName= $STR_ACE_MEDICAL_BODYBAG_DISPLAY; + model = QUOTE(PATHTOF(data\bodybagItem.p3d)); + picture = QUOTE(PATHTOF(ui\items\bodybag.paa)); + descriptionShort = $STR_ACE_MEDICAL_BODYBAG_DESC_SHORT; + descriptionUse = $STR_ACE_MEDICAL_BODYBAG_DESC_USE; + class ItemInfo: InventoryItem_Base_F { + mass = 15; + type = 201; }; }; }; diff --git a/addons/medical/README.md b/addons/medical/README.md index 0b2b7a4038..b7a5fd2a3b 100644 --- a/addons/medical/README.md +++ b/addons/medical/README.md @@ -8,3 +8,4 @@ Provides a basic and advanced medical system. The people responsible for merging changes to this component or answering potential questions. - [Glowbal](https://github.com/Glowbal) +- [KoffeinFlummi](https://github.com/KoffeinFlummi) diff --git a/addons/medical/XEH_init.sqf b/addons/medical/XEH_init.sqf new file mode 100644 index 0000000000..4d92575f9b --- /dev/null +++ b/addons/medical/XEH_init.sqf @@ -0,0 +1,10 @@ +#include "script_component.hpp" + +private ["_unit"]; +_unit = _this select 0; + +if !(local _unit) exitWith {}; + +_unit addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}]; + +[_unit] call FUNC(init); diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index 062df32ddf..d23a02225f 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -1,245 +1,244 @@ -/** - * XEH_postInit.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ +// ACE Medical System Visual Loop #include "script_component.hpp" -#include "variable_defines.sqf" -GVAR(injuredUnitCollection) = []; +if (!hasInterface) exitwith{}; +GVAR(enabledFor) = 1; // TODO remove this once we implement settings. Just here to get the vitals working. + +GVAR(heartBeatSounds_Fast) = ["ACE_heartbeat_fast_1", "ACE_heartbeat_fast_2", "ACE_heartbeat_fast_3"]; +GVAR(heartBeatSounds_Normal) = ["ACE_heartbeat_norm_1", "ACE_heartbeat_norm_2"]; +GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"]; + +["Medical_treatmentCompleted", FUNC(onTreatmentCompleted)] call ace_common_fnc_addEventHandler; +["medical_propagateWound", FUNC(onPropagateWound)] call ace_common_fnc_addEventHandler; +["medical_woundUpdateRequest", FUNC(onWoundUpdateRequest)] call ace_common_fnc_addEventHandler; + +// Initialize all effects +_fnc_createEffect = { + private ["_type", "_layer", "_default"]; + _type = _this select 0; + _layer = _this select 1; + _default = _this select 2; + + _effect = ppEffectCreate [_type, _layer]; + _effect ppEffectForceInNVG true; + _effect ppEffectAdjust _default; + _effect ppEffectCommit 0; + + _effect +}; + +GVAR(effectUnconsciousCC) = [ + "ColorCorrections", + 4201, + [1,1,0, [0,0,0,1], [0,0,0,0], [1,1,1,1], [0.4,0.4,0,0,0,0.1,0.3]] +] call _fnc_createEffect; + +GVAR(effectUnconsciousRB) = [ + "RadialBlur", + 4202, + [0.01,0.01,0,0] +] call _fnc_createEffect; + +GVAR(effectBlindingCC) = [ + "ColorCorrections", + 4203, + [1,1,0, [1,1,1,0], [0,0,0,1], [0,0,0,0]] +] call _fnc_createEffect; + +GVAR(effectBloodVolumeCC) = [ + "ColorCorrections", + 4204, + [1,1,0, [0,0,0,0], [1,1,1,1], [0.2,0.2,0.2,0]] +] call _fnc_createEffect; + +GVAR(effectPainCA) = [ + "chromAberration", + 4205, + [0, 0, false] +] call _fnc_createEffect; + +GVAR(effectPainCC) = [ + "ColorCorrections", + 4206, + [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1.3,1.3,0,0,0,0.2,2]] +] call _fnc_createEffect; + +// Initialize Other Variables +GVAR(effectBlind) = false; +GVAR(effectTimeBlood) = time; + +// MAIN EFFECTS LOOP [{ - { - if (!alive _x || !local _x) then { - GVAR(injuredUnitCollection) set [ _forEachIndex, ObjNull]; - } else { - [_x] call FUNC(handleUnitVitals); + // Zeus interface is open or player is dead; disable everything + if (!(isNull (findDisplay 312)) or !(alive ACE_player)) exitWith { + GVAR(effectUnconsciousCC) ppEffectEnable false; + GVAR(effectUnconsciousRB) ppEffectEnable false; + GVAR(effectBlindingCC) ppEffectEnable false; + GVAR(effectBloodVolumeCC) ppEffectEnable false; + GVAR(effectPainCA) ppEffectEnable false; + GVAR(effectPainCC) ppEffectEnable false; + ["unconscious", false] call EFUNC(common,setDisableUserInputStatus); + }; - private "_pain"; - _pain = _X getvariable [QGVAR(amountOfPain), 0]; - if (_pain > 5 && (random(1) > 0.5)) then { - _x setvariable [QGVAR(amountOfPain), _pain + 0.002]; + // Unconsciousness effect + if (ACE_player getVariable [QGVAR(isUnconscious), false]) then { + GVAR(effectUnconsciousCC) ppEffectEnable true; + GVAR(effectUnconsciousRB) ppEffectEnable true; + GVAR(effectBlind) = true; + ["unconscious", true] call EFUNC(common,setDisableUserInputStatus); + } else { + GVAR(effectUnconsciousCC) ppEffectEnable false; + GVAR(effectUnconsciousRB) ppEffectEnable false; + ["unconscious", false] call EFUNC(common,setDisableUserInputStatus); + if (GVAR(effectBlind)) then { + _strength = 0.78 * (call EFUNC(common,ambientBrightness)); + GVAR(effectBlindingCC) ppEffectEnable true; + GVAR(effectBlindingCC) ppEffectAdjust [1,1,_strength, [1,1,1,0], [0,0,0,1], [0,0,0,0]]; + GVAR(effectBlindingCC) ppEffectCommit 0; + + [{ + GVAR(effectBlindingCC) ppEffectAdjust [1,1,0, [1,1,1,0], [0,0,0,1], [0,0,0,0]]; + GVAR(effectBlindingCC) ppEffectCommit ((_this select 0) * 2); + }, [_strength], 0.01, 0] call EFUNC(common,waitAndExecute); + + [{ + GVAR(effectBlindingCC) ppEffectEnable false; + }, [], (_strength * 2) + 0.5, 0] call EFUNC(common,waitAndExecute); + + GVAR(effectBlind) = false; + }; + }; + + // Bleeding Indicator + if (damage ACE_player > 0.1 and GVAR(effectTimeBlood) + 6 < time) then { + GVAR(effectTimeBlood) = time; + [500 * damage ACE_player] call BIS_fnc_bloodEffect; + }; + + // Blood Volume Effect + _blood = (ACE_player getVariable [QGVAR(bloodVolume), 100]) / 100; + if (_blood > 0.99) then { + GVAR(effectBloodVolumeCC) ppEffectEnable false; + } else { + GVAR(effectBloodVolumeCC) ppEffectEnable true; + GVAR(effectBloodVolumeCC) ppEffectAdjust [1,1,0, [0,0,0,0], [1,1,1,_blood], [0.2,0.2,0.2,0]]; + GVAR(effectBloodVolumeCC) ppEffectCommit 0; + }; +}, 0.5, []] call CBA_fnc_addPerFrameHandler; + + +GVAR(lastHeartBeat) = time; +GVAR(lastHeartBeatSound) = time; + +// @todo, remove once parameters are set up +if (isNil QGVAR(level)) then { + GVAR(level) = 0; +}; + +// HEARTRATE BASED EFFECTS +[{ + _heartRate = ACE_player getVariable [QGVAR(heartRate), 70]; + if (GVAR(level) == 1) then { + _heartRate = 60 + 40 * (ACE_player getVariable [QGVAR(pain), 0]); + }; + if (_heartRate <= 0) exitwith {}; + _interval = 60 / (_heartRate min 50); + if (time > GVAR(lastHeartBeat) + _interval) then { + GVAR(lastHeartBeat) = time; + + // Pain effect + _strength = ACE_player getVariable [QGVAR(pain), 0]; + // _strength = _strength * (ACE_player getVariable [QGVAR(coefPain), GVAR(coefPain)]); @todo + GVAR(alternativePainEffect) = false; // @todo + if (GVAR(alternativePainEffect)) then { + GVAR(effectPainCC) ppEffectEnable false; + if ((ACE_player getVariable [QGVAR(pain), 0]) > 0 && {alive ACE_player}) then { + _strength = _strength * 0.15; + GVAR(effectPainCA) ppEffectEnable true; + GVAR(effectPainCA) ppEffectAdjust [_strength, _strength, false]; + GVAR(effectPainCA) ppEffectCommit 0.01; + [{ + GVAR(effectPainCA) ppEffectAdjust [(_this select 0), (_this select 0), false]; + GVAR(effectPainCA) ppEffectCommit (_this select 1); + }, [_strength * 0.1, _interval * 0.2], _interval * 0.05, 0] call EFUNC(common,waitAndExecute); + [{ + GVAR(effectPainCA) ppEffectAdjust [(_this select 0), (_this select 0), false]; + GVAR(effectPainCA) ppEffectCommit 0.01; + }, [_strength * 0.7], _interval * 0.3, 0] call EFUNC(common,waitAndExecute); + [{ + GVAR(effectPainCA) ppEffectAdjust [(_this select 0), (_this select 0), false]; + GVAR(effectPainCA) ppEffectCommit (_this select 1); + }, [_strength * 0.1, _interval * 0.55], _interval * 0.4, 0] call EFUNC(common,waitAndExecute); + } else { + GVAR(effectPainCA) ppEffectEnable false; }; - if (_pain > 45) then { - if (random(1) > 0.6) then { - [_X] call FUNC(setUnconsciousState); - }; - //[_X] call FUNC(playInjuredSound); + } else { + GVAR(effectPainCA) ppEffectEnable false; + if ((ACE_player getVariable [QGVAR(pain), 0]) > 0 && {alive ACE_player}) then { + _strength = _strength * 0.6; + GVAR(effectPainCC) ppEffectEnable true; + GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - _strength,1 - _strength,0,0,0,0.2,2]]; + GVAR(effectPainCC) ppEffectCommit 0.01; + [{ + GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - (_this select 0),1 - (_this select 0),0,0,0,0.2,2]]; + GVAR(effectPainCC) ppEffectCommit (_this select 1); + }, [_strength * 0.1, _interval * 0.2], _interval * 0.05, 0] call EFUNC(common,waitAndExecute); + [{ + GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - (_this select 0),1 - (_this select 0),0,0,0,0.2,2]]; + GVAR(effectPainCC) ppEffectCommit 0.01; + }, [_strength * 0.7], _interval * 0.3, 0] call EFUNC(common,waitAndExecute); + [{ + GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - (_this select 0),1 - (_this select 0),0,0,0,0.2,2]]; + GVAR(effectPainCC) ppEffectCommit (_this select 1); + }, [_strength * 0.1, _interval * 0.55], _interval * 0.4, 0] call EFUNC(common,waitAndExecute); + } else { + GVAR(effectPainCC) ppEffectEnable false; }; }; - }foreach GVAR(injuredUnitCollection); - GVAR(injuredUnitCollection) = GVAR(injuredUnitCollection) - [ObjNull]; -}, 1, [] ] call CBA_fnc_addPerFrameHandler; + }; -[ - {(([_this select 0,QGVAR(bloodVolume)] call EFUNC(common,getDefinedVariable)) < 65)}, - {(([_this select 0,QGVAR(amountOfPain)] call EFUNC(common,getDefinedVariable)) > 48)}, - {(((_this select 0) call FUNC(getBloodLoss)) > 0.25)}, - {((_this select 0) getvariable ["ACE_inReviveState", false])} -] call FUNC(registerUnconsciousCondition); + if (GVAR(level) >= 2 && {_heartRate > 0}) then { + _minTime = 60 / _heartRate; + if (time - GVAR(lastHeartBeatSound) > _minTime) then { + GVAR(lastHeartBeatSound) = time; + // Heart rate sound effect + if (_heartRate < 60) then { + _sound = GVAR(heartBeatSounds_Normal) select (random((count GVAR(heartBeatSounds_Normal)) -1)); + playSound _sound; + } else { + if (_heartRate > 150) then { + playSound "ACE_heartbeat_fast_2"; + }; + }; + }; + }; -call FUNC(handleDisplayEffects); +}, 0, []] call CBA_fnc_addPerFrameHandler; -// Assigning all eventhandlers -["Medical_treatmentCompleted", FUNC(onTreatmentCompleted)] call ace_common_fnc_addEventHandler; -["onStartMovingUnit", FUNC(onStartMovingUnit)] call ace_common_fnc_addEventHandler; -["onUnconscious", FUNC(onUnconscious)] call ace_common_fnc_addEventHandler; -["carryObjectDropped", FUNC(onCarryObjectDropped)] call ace_common_fnc_addEventHandler; +// broadcast injuries to JIP clients in a MP session +if (isMultiplayer) then { + [QGVAR(onPlayerConnected), "onPlayerConnected", { + if (isNil QGVAR(InjuredCollection)) then { + GVAR(InjuredCollection) = []; + }; -if (isNil QGVAR(ENABLE_REVIVE_F)) then { - GVAR(ENABLE_REVIVE_F) = 0; + { + _unit = _x; + _openWounds = _unit getvariable [QGVAR(openWounds), []]; + { + ["medical_propagateWound", [_id], [_unit, _x]] call EFUNC(common,targetEvent); + }foreach _openWounds; + }foreach GVAR(InjuredCollection); + }, []] call BIS_fnc_addStackedEventHandler; }; -// Keybindings -GVAR(keyPressed) = false; - -["ACE3", - localize "STR_ACE_OPEN_CMS_MENU_DESC", - { if (!GVAR(keyPressed)) then { - GVAR(keyPressed) = true; - GVAR(timeMenuOpened) = time; - [] call FUNC(openMenu); - - true; - } else { - false; - }; - }, - [ 0, [false, false, false]], - false, - "keydown"] call cba_fnc_registerKeybind; - -["ACE3", - localize "STR_ACE_OPEN_CMS_MENU_DESC", - { - GVAR(keyPressed) = false; - if (time - GVAR(timeMenuOpened) >= (0.25*accTime)) then { - disableSerialization; - _display = uiNamespace getVariable QGVAR(medicalMenu); - if (!isnil "_display") then { - closeDialog 314412; - }; - }; - false; - }, - [ 0, [false, false, false]], - false, - "keyUp"] call cba_fnc_registerKeybind; - - -// Adding the treatment options for all available medical equipment. - -// Advanced Treatment options -ADD_TREATMENT_ADVANCED("STR_ACE_ACTION_BLOODIV_1000ml","STR_ACE_ACTION_BLOODIV_1000ML_TOOLTIP",'ACE_blood_iv'); -ADD_TREATMENT_ADVANCED("STR_ACE_ACTION_BLOODIV_500ml","STR_ACE_ACTION_BLOODIV_500ML_TOOLTIP",'ACE_blood_iv_500'); -ADD_TREATMENT_ADVANCED("STR_ACE_ACTION_BLOODIV_250ml","STR_ACE_ACTION_BLOODIV_250ML_TOOLTIP",'ACE_blood_iv_250'); -ADD_TREATMENT_ADVANCED("STR_ACE_ACTION_PLASMAIV_1000ml","STR_ACE_ACTION_PLASMAIV_1000ML_TOOLTIP",'ACE_plasma_iv'); -ADD_TREATMENT_ADVANCED("STR_ACE_ACTION_PLASMAIV_500ml","STR_ACE_ACTION_PLASMAIV_500ML_TOOLTIP",'ACE_plasma_iv_500'); -ADD_TREATMENT_ADVANCED("STR_ACE_ACTION_PLASMAIV_250ml","STR_ACE_ACTION_PLASMAIV_250ML_TOOLTIP",'ACE_plasma_iv_250'); -ADD_TREATMENT_ADVANCED("STR_ACE_ACTION_SALINEIV_1000ml","STR_ACE_ACTION_SALINEIV_1000ML_TOOLTIP",'ACE_saline_iv'); -ADD_TREATMENT_ADVANCED("STR_ACE_ACTION_SALINEIV_500ml","STR_ACE_ACTION_SALINEIV_500ML_TOOLTIP",'ACE_saline_iv_500'); -ADD_TREATMENT_ADVANCED("STR_ACE_ACTION_SALINEIV_250ml","STR_ACE_ACTION_SALINEIV_250ML_TOOLTIP",'ACE_saline_iv_250'); - -["STR_ACE_ACTION_PERSONAL_AID_KIT","STR_ACE_ACTION_PERSONAL_AID_KIT_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - if !([_this select 0,_this select 1, 'ACE_personal_aid_kit'] call FUNC(hasEquipment)) exitwith { - false; - }; - _inMedFacility = ([_caller] call FUNC(inMedicalFacility)); - _hasOpenWounds = ([_target] call FUNC(hasOpenWounds)); - - if ((GVAR(setting_aidKitRestrictions) == 0 && _inMedFacility) || - (GVAR(setting_aidKitRestrictions) == 1 && _inMedFacility && (!_hasOpenWounds)) || - (GVAR(setting_aidKitRestrictions) == 2) || - (GVAR(setting_aidKitRestrictions) == 3 && (!_hasOpenWounds))) exitwith { - - ((GVAR(setting_aidKitMedicsOnly) && [_caller] call FUNC(isMedic) || !GVAR(setting_aidKitMedicsOnly))); - }; - false; -},TREATMENT_ADVANCED('ACE_personal_aid_kit'),'advanced'] call FUNC(addTreatmentOption); - -["STR_ACE_ACTION_PERFORM_CPR","STR_ACE_ACTION_PERFORM_CPR_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - - (!(_caller getvariable[QGVAR(isProvidingCPR), false]) && ((_target getvariable [QGVAR(inCardiacArrest),false]) || !([_target] call EFUNC(common,isAwake)))) -},TREATMENT_ADVANCED('ACE_CPR'),'advanced'] call FUNC(addTreatmentOption); - -["STR_ACE_ACTION_STOP_CPR","STR_ACE_ACTION_STOP_CPR_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - - (_caller getvariable[QGVAR(isProvidingCPR), false]) -},{((_this select 0) setvariable[QGVAR(isProvidingCPR), nil, true])},'advanced'] call FUNC(addTreatmentOption); - -["STR_ACE_ACTION_STITCHING","STR_ACE_ACTION_STITCHING_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - - ((GVAR(setting_allowStitching) == 0 && [_Caller] call FUNC(isMedic)) || GVAR(setting_allowStitching) == 1) -},TREATMENT_ADVANCED('ACE_surgical_kit'),'advanced'] call FUNC(addTreatmentOption); - -// Airway Management -["STR_ACE_ACTION_APPLY_NPA","STR_ACE_ACTION_APPLY_NPA_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - if !([_this select 0,_this select 1, 'ACE_nasopharyngeal_tube'] call FUNC(hasEquipment)) exitwith { - false; - }; - (!([_target, QGVAR(airwayTreated)] call EFUNC(common,getDefinedVariable)) && !([_target] call EFUNC(common,isAwake))) -},TREATMENT_AIRWAY('ACE_nasopharyngeal_tube'),'advanced'] call FUNC(addTreatmentOption); - -["STR_ACE_ACTION_REMOVE_NPA","STR_ACE_ACTION_REMOVE_NPA_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - ([_target, QGVAR(airwayTreated)] call EFUNC(common,getDefinedVariable)); -}, {GVAR(INTERACTION_TARGET) setvariable [QGVAR(airwayTreated), nil, true]; (_this select 0) addItem 'ACE_nasopharyngeal_tube';},'airway'] call FUNC(addTreatmentOption); - - -// Bandaging -ADD_TREATMENT_BANDAGE("STR_ACE_ACTION_BANDAGE_BASIC","STR_ACE_ACTION_BANDAGE_BASIC_TOOLTIP",'ACE_bandage_basic'); -ADD_TREATMENT_BANDAGE("STR_ACE_ACTION_QUIKCLOT","STR_ACE_ACTION_QUIKCLOT_TOOLTIP",'ACE_quikclot'); -ADD_TREATMENT_BANDAGE("STR_ACE_ACTION_BANDAGE_ELASTIC","STR_ACE_ACTION_BANDAGE_ELASTIC_TOOLTIP",'ACE_bandageElastic'); -ADD_TREATMENT_BANDAGE("STR_ACE_ACTION_PACKING_BANDAGE","STR_ACE_ACTION_PACKING_BANDAGE_TOOLTIP",'ACE_packing_bandage'); - -["STR_ACE_ACTION_REMOVE_TOURNIQUET","STR_ACE_ACTION_REMOVE_TOURNIQUET_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - ([_target, call FUNC(getSelectedBodyPart)] call FUNC(hasTourniquetAppliedTo)); -},{[_this select 0,_this select 1,call FUNC(getSelectedBodyPart)] call FUNC(actionRemoveTourniquet)},'bandage'] call FUNC(addTreatmentOption); - -["STR_ACE_ACTION_APPLY_TOURNIQUET","STR_ACE_ACTION_APPLY_TOURNIQUET_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - (!([_target, call FUNC(getSelectedBodyPart)] call FUNC(hasTourniquetAppliedTo)) && ([_caller,_target,'ACE_tourniquet'] call FUNC(hasEquipment))); -},TREATMENT_BANDAGE('ACE_tourniquet'),'bandage'] call FUNC(addTreatmentOption); - - -// Medication -ADD_TREATMENT_MEDICATION("STR_ACE_ACTION_MORPHINE","STR_ACE_ACTION_MORPHINE_TOOLTIP",'ACE_morphine'); -ADD_TREATMENT_MEDICATION("STR_ACE_ACTION_ATROPINE","STR_ACE_ACTION_ATROPINE_TOOLTIP",'ACE_atropine'); -ADD_TREATMENT_MEDICATION("STR_ACE_ACTION_EPINEPHRINE","STR_ACE_ACTION_EPINEPHRINE_TOOLTIP",'ACE_epinephrine'); - - -// Examine -["STR_ACE_ACTION_CHECK_PULSE","STR_ACE_ACTION_CHECK_PULSE_TOOLTIP",{ - true; -},{[_this select 0,_this select 1] call FUNC(actionCheckPulse)},'examine'] call FUNC(addTreatmentOption); - -["STR_ACE_ACTION_CHECK_BP","STR_ACE_ACTION_CHECK_BP_TOOLTIP",{ - true; -},{[_this select 0,_this select 1] call FUNC(actionCheckBloodPressure);},'examine'] call FUNC(addTreatmentOption); - -["STR_ACE_ACTION_CHECK_RESPONSE","STR_ACE_ACTION_CHECK_RESPONSE_TOOLTIP",{ - true; -},{[_this select 0,_this select 1] call FUNC(actionCheckResponse)},'examine'] call FUNC(addTreatmentOption); - - -// Drag/Movement -["STR_ACE_ACTION_DRAG_PATIENT","STR_ACE_ACTION_DRAG_PATIENT_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - - (isNull ([_caller] call EFUNC(common,getCarriedObj)) && isNull ([_target] call EFUNC(common,getCarriedObj)) && (_caller != _target) && (vehicle _target == _target)); -}, {[_this select 0,_this select 1] call FUNC(actionDragUnit)},'drag'] call FUNC(addTreatmentOption); - -["STR_ACE_ACTION_CARRY_PATIENT","STR_ACE_ACTION_CARRY_PATIENT_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - - (isNull ([_caller] call EFUNC(common,getCarriedObj)) && isNull ([_target] call EFUNC(common,getCarriedObj)) && (_caller != _target) && (vehicle _target == _target)); -}, {[_this select 0,_this select 1] call FUNC(actionCarryUnit)},'drag'] call FUNC(addTreatmentOption); - -["STR_ACE_ACTION_BODYBAG","STR_ACE_ACTION_BODYBAG_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - - (isNull ([_caller] call EFUNC(common,getCarriedObj)) && isNull ([_target] call EFUNC(common,getCarriedObj)) && (_caller != _target) && (vehicle _target == _target) && ([_caller, _target] call FUNC(canPutInBodyBag))); -}, {[_this select 0,_this select 1] call FUNC(actionPlaceInBodyBag)},'drag'] call FUNC(addTreatmentOption); - -["STR_ACE_ACTION_DROP_PATIENT","STR_ACE_ACTION_DROP_PATIENT_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - - (!(isNull ([_caller] call EFUNC(common,getCarriedObj))) && ([_caller] call FUNC(isMovingUnit))); -}, {[_this select 0,_this select 1] call FUNC(actionDropUnit)},'drag'] call FUNC(addTreatmentOption); - -["STR_ACE_ACTION_LOAD_PATIENT","STR_ACE_ACTION_LOAD_PATIENT_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - - ((vehicle _target == _target)); -}, {[_this select 0,_this select 1] call FUNC(actionLoadUnit)},'drag'] call FUNC(addTreatmentOption); - -["STR_ACE_ACTION_UNLOAD_PATIENT","STR_ACE_ACTION_UNLOAD_PATIENT_TOOLTIP",{ - _caller = _this select 0; - _target = _this select 1; - - ((vehicle _target != _target)); -}, {[_this select 0,_this select 1] call FUNC(actionUnloadUnit)},'drag'] call FUNC(addTreatmentOption); +[ + {(((_this select 0) getvariable [QGVAR(bloodVolume), 0]) < 65)}, + {(((_this select 0) getvariable [QGVAR(pain), 0]) > 0.9)}, + {(((_this select 0) call FUNC(getBloodLoss)) > 0.25)}, + {((_this select 0) getvariable [QGVAR(inReviveState), false])}, + {((_this select 0) getvariable ["ACE_isDead", false])}, + {(((_this select 0) getvariable [QGVAR(airwayStatus), 100]) < 80)} +] call FUNC(addUnconsciousCondition); diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index 57800cd5b7..c6ddbf0783 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -1,171 +1,91 @@ -/** - * XEH_preInit); - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - #include "script_component.hpp" ADDON = false; -PREP(actionCarryUnit); -PREP(ActioncheckBloodPressure); -PREP(ActionCheckBloodPressureLocal); -PREP(ActionCheckPulse); +PREP(actionCheckBloodPressure); +PREP(actionCheckBloodPressureLocal); +PREP(actionCheckPulse); PREP(actionCheckPulseLocal); PREP(actionCheckResponse); -PREP(actionDragUnit); -PREP(actionDropUnit); -PREP(actionLoadUnit); PREP(actionPlaceInBodyBag); PREP(actionRemoveTourniquet); +PREP(actionLoadUnit); PREP(actionUnloadUnit); - -PREP(addActivityToLog); PREP(addHeartRateAdjustment); -PREP(addOpenWounds); PREP(addToInjuredCollection); -PREP(addToQuickViewLog); -PREP(addToTriageList); -PREP(addTreatmentOption); - +PREP(addToLog); +PREP(addToTriageCard); +PREP(addUnconsciousCondition); PREP(canAccessMedicalEquipment); -PREP(canPutInBodyBag); +PREP(canTreat); PREP(determineIfFatal); -PREP(determineIfUnconscious); -PREP(fromNumberToBodyPart); - -PREP(effectPain); -PREP(effectBleeding); -PREP(effectBlackOut); - -PREP(getActivityLog); PREP(getBloodLoss); PREP(getBloodPressure); PREP(getBloodVolumeChange); -PREP(getBodyPartNumber); PREP(getCardiacOutput); -PREP(getCurrentSelectedInjuryData); -PREP(getHeartRateChange); -PREP(getNewDamageBodyPart); -PREP(getQuickViewLog); -PREP(getSelectedBodyPart); -PREP(getTreatmentOptions); -PREP(getTriageList); -PREP(getTriageStatus); PREP(getTypeOfDamage); - -// Handling events & actions -PREP(handleBandageOpening); +PREP(getTriageStatus); +PREP(getUnconsciousCondition); PREP(handleDamage); -PREP(handleDisplayEffects); -PREP(handleHeal); -PREP(handleReactionHit); -PREP(handleTreatment); -PREP(handleTreatment_Action_AdvancedLocal); -PREP(handleTreatment_Action_AirwayLocal); -PREP(handleTreatment_Action_BandageLocal); -PREP(handleTreatment_Action_CPR); -PREP(handleTreatment_Action_CPRLocal); -PREP(handleTreatment_Action_fullHeal); -PREP(handleTreatment_Action_fullHealLocal); -PREP(handleTreatment_Action_MedicationLocal); -PREP(handleTreatment_Action_Stitching); -PREP(handleTreatment_Action_tourniquet); -PREP(handleTreatment_Action_tourniquetLocal); -PREP(handleTreatment_Category_Advanced); -PREP(handleTreatment_Category_Airway); -PREP(handleTreatment_Category_Bandaging); -PREP(handleTreatment_Category_Medication); -PREP(handleUI_DisplayOptions); -PREP(handleUI_dropDownTriageCard); +PREP(handleDamage_advanced); +PREP(handleDamage_advancedSetDamage); +PREP(handleDamage_airway); +PREP(handleDamage_basic); +PREP(handleDamage_caching); +PREP(handleDamage_fractures); +PREP(handleDamage_internalInjuries); +PREP(handleDamage_wounds); PREP(handleUnitVitals); -PREP(handleDropUnit); - -PREP(hasEquipment); +PREP(handleKilled); +PREP(handleLocal); +PREP(hasItem); +PREP(hasItems); PREP(hasMedicalEnabled); -PREP(hasOpenWounds); PREP(hasTourniquetAppliedTo); - -PREP(increasePain); -PREP(initalizeModuleCMS); -PREP(inMedicalFacility); +PREP(init); +PREP(isInMedicalFacility); PREP(isMedic); PREP(isMedicalVehicle); -PREP(isSetTreatmentMutex); -PREP(isMovingUnit); - -PREP(moduleAssignMedicalEquipment); -PREP(moduleAssignMedicalFacility); -PREP(moduleAssignMedicalVehicle); -PREP(moduleAssignMedicRoles); -PREP(moduleDamageSettings); - -PREP(onInitForUnit); -PREP(onInjury_assignAirwayStatus); -PREP(onInjury_assignFractures); -PREP(onInjury_assignOpenWounds); -PREP(onKilled); -PREP(onLocal); -PREP(onMenuOpen); -PREP(onTreatmentCompleted); -PREP(onUnconscious); -PREP(onStartMovingUnit); -PREP(onCarryObjectDropped); -PREP(onDamage); - -PREP(openMenu); +PREP(onMedicationUsage); +PREP(onWoundUpdateRequest); +PREP(onPropagateWound); +PREP(parseConfigForInjuries); PREP(playInjuredSound); +PREP(reactionToDamage); +PREP(selectionNameToNumber); PREP(setCardiacArrest); -PREP(setDamageBodyPart); PREP(setDead); -PREP(setMedicRole); -PREP(setTriageStatus); -PREP(treatmentMutex); +PREP(setHitPointDamage); +PREP(setUnconscious); +PREP(treatment); +PREP(treatment_failure); +PREP(treatment_success); +PREP(treatmentAdvanced_bandage); +PREP(treatmentAdvanced_bandageLocal); +PREP(treatmentAdvanced_CPR); +PREP(treatmentAdvanced_CPRLocal); +PREP(treatmentAdvanced_fullHeal); +PREP(treatmentAdvanced_fullHealLocal); +PREP(treatmentAdvanced_medication); +PREP(treatmentAdvanced_medicationLocal); +PREP(treatmentBasic_bandage); +PREP(treatmentBasic_bloodbag); +PREP(treatmentBasic_epipen); +PREP(treatmentBasic_morphine); +PREP(treatmentIV); +PREP(treatmentIVLocal); +PREP(treatmentTourniquet); +PREP(treatmentTourniquetLocal); +PREP(useItem); +PREP(useItems); +PREP(displayPatientInformation); +PREP(moduleMedicalSettings); +PREP(moduleAssignMedicRoles); +PREP(moduleAssignMedicalVehicle); +PREP(moduleAssignMedicalFacility); +PREP(moduleTreatmentConfiguration); -PREP(updateActivityLog); -PREP(updateBodyImg); -PREP(updateIcons); -PREP(updateUIInfo); - -PREP(useEquipment); -PREP(cacheHandledamageCall); -PREP(checkDamage); - - -PREP(setUnconsciousState); -PREP(isUnconscious); -PREP(getUnconsciousCondition); -PREP(registerUnconsciousCondition); -PREP(cleanUpCopyOfBody_F); -PREP(makeCopyOfBody_F); -PREP(canGoUnconsciousState); -PREP(setDead); -PREP(moduleBasicRevive); - -PREP(setWeaponsCorrectUnconscious); -PREP(setCaptiveSwitch); - - -// initalize all module parameters. -GVAR(setting_allowInstantDead) = true; -GVAR(setting_AdvancedLevel) = 0; -GVAR(setting_advancedWoundsSetting) = false; -GVAR(setting_advancedMedicRoles) = false; -GVAR(setting_medicalDifficulty) = 1; -GVAR(setting_enableBandagingAid) = true; -GVAR(setting_allowAIFullHeal) = false; -GVAR(setting_enableForUnits) = 1; -GVAR(setting_allowAirwayInjuries) = false; -GVAR(setting_aidKitRestrictions) = 0; -GVAR(setting_removeAidKitOnUse) = true; -GVAR(setting_aidKitMedicsOnly) = false; -GVAR(setting_bandageWaitingTime) = 5; -GVAR(setting_allowVehicleCrashInjuries) = true; -GVAR(setting_allowStitching) = 0; +GVAR(injuredUnitCollection) = []; +call FUNC(parseConfigForInjuries); ADDON = true; diff --git a/addons/medical/XEH_respawn.sqf b/addons/medical/XEH_respawn.sqf new file mode 100644 index 0000000000..f9ead5a801 --- /dev/null +++ b/addons/medical/XEH_respawn.sqf @@ -0,0 +1,10 @@ +#include "script_component.hpp" + +private ["_unit"]; + +_unit = _this select 0; + +if !(local _unit) exitWith {}; + +diag_log "running respawn"; +[_unit] call FUNC(init); diff --git a/addons/medical/config.cpp b/addons/medical/config.cpp index 96af8ac1ca..3e8aaa8d55 100644 --- a/addons/medical/config.cpp +++ b/addons/medical/config.cpp @@ -1,31 +1,22 @@ #include "script_component.hpp" -class CfgPatches -{ - class ADDON - { - units[] = {"ACE_medical_supply_crate_cms", "ACE_bandage_basicItem","ACE_packing_bandageItem","ACE_bandageElasticItem","ACE_tourniquetItem","ACE_splintItem","ACE_morphineItem","ACE_atropineItem","ACE_epinephrineItem","ACE_plasma_ivItem","ACE_plasma_iv_500Item","ACE_plasma_iv250Item","ACE_blood_ivItem","ACE_blood_iv_500Item","ACE_blood_iv_250Item","ACE_saline_ivItem","ACE_saline_iv_500Item","ACE_saline_iv_250Item","ACE_quikclotItem","ACE_nasopharyngeal_tubeItem","ACE_opaItem","ACE_liquidSkinItem","ACE_chestsealItem","ACE_personal_aid_kitItem"}; - weapons[] = {"ACE_surgical_kit"}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ACE_gui","ACE_common"}; - version = VERSION; - author[] = {$STR_ACE_Common_ACETeam, "Glowbal"}; - authorUrl = "http://csemod.com"; - }; -}; -class CfgAddons { - class PreloadAddons { - class ADDON { - list[] = {QUOTE(ADDON)}; - }; +class CfgPatches { + class ADDON { + units[] = {QGVAR(fieldDressingItem), QGVAR(packingBandageItem), QGVAR(elasticBandageItem), QGVAR(tourniquetItem), QGVAR(morphineItem), QGVAR(atropineItem), QGVAR(epinephrineItem), QGVAR(plasmaIVItem), QGVAR(bloodIVItem), QGVAR(salineIVItem), QGVAR(quikclotItem), QGVAR(personalAidKitItem), QGVAR(surgicalKitItem), QGVAR(bodyBagItem)}; + weapons[] = {QGVAR(fieldDressing), QGVAR(packingBandage), QGVAR(elasticBandage), QGVAR(tourniquet), QGVAR(morphine), QGVAR(atropine), QGVAR(epinephrine), QGVAR(plasmaIV), QGVAR(plasmaIV_500), QGVAR(plasmaIV_250), QGVAR(bloodIV), QGVAR(bloodIV_500), QGVAR(bloodIV_250), QGVAR(salineIV), QGVAR(salineIV_500), QGVAR(salineIV_250), QGVAR(quikclot), QGVAR(personalAidKit), QGVAR(surgicalKit), QGVAR(bodyBag)}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {ace_common, ace_interaction}; + author[] = {"Glowbal", "KoffienFlummi"}; + authorUrl = ""; + VERSION_CONFIG; }; }; #include "CfgEventHandlers.hpp" #include "CfgFactionClasses.hpp" -#include "CfgWeapons.hpp" -#include "CfgSounds.hpp" #include "CfgVehicles.hpp" -#include "ui\define.hpp" -#include "ui\menu.hpp" -#include "ui\RscTitles.hpp" +#include "CfgWeapons.hpp" +#include "CFgSounds.hpp" +#include "ACE_Medical_Treatments.hpp" +#include "ACE_Settings.hpp" +#include "UI\RscTitles.hpp" diff --git a/addons/medical/equipment/data/Epipen_co.paa b/addons/medical/data/Epipen_co.paa similarity index 100% rename from addons/medical/equipment/data/Epipen_co.paa rename to addons/medical/data/Epipen_co.paa diff --git a/addons/medical/data/atropine.p3d b/addons/medical/data/atropine.p3d new file mode 100644 index 0000000000..582f495291 Binary files /dev/null and b/addons/medical/data/atropine.p3d differ diff --git a/addons/medical/equipment/data/Atropinpen_co.paa b/addons/medical/data/atropine_co.paa similarity index 100% rename from addons/medical/equipment/data/Atropinpen_co.paa rename to addons/medical/data/atropine_co.paa diff --git a/addons/medical/data/background_img.paa b/addons/medical/data/background_img.paa deleted file mode 100644 index de59065e3b..0000000000 Binary files a/addons/medical/data/background_img.paa and /dev/null differ diff --git a/addons/medical/data/black_out.paa b/addons/medical/data/black_out.paa deleted file mode 100644 index c50a106954..0000000000 Binary files a/addons/medical/data/black_out.paa and /dev/null differ diff --git a/addons/medical/data/bleeding.paa b/addons/medical/data/bleeding.paa deleted file mode 100644 index 2e88e1cf3d..0000000000 Binary files a/addons/medical/data/bleeding.paa and /dev/null differ diff --git a/addons/medical/data/body_arms.paa b/addons/medical/data/body_arms.paa deleted file mode 100644 index b4b272f73d..0000000000 Binary files a/addons/medical/data/body_arms.paa and /dev/null differ diff --git a/addons/medical/data/body_background.paa b/addons/medical/data/body_background.paa deleted file mode 100644 index d3f7440e68..0000000000 Binary files a/addons/medical/data/body_background.paa and /dev/null differ diff --git a/addons/medical/data/body_img-arms.paa b/addons/medical/data/body_img-arms.paa deleted file mode 100644 index f469a59359..0000000000 Binary files a/addons/medical/data/body_img-arms.paa and /dev/null differ diff --git a/addons/medical/data/body_img-head.paa b/addons/medical/data/body_img-head.paa deleted file mode 100644 index 2f7d15e1ca..0000000000 Binary files a/addons/medical/data/body_img-head.paa and /dev/null differ diff --git a/addons/medical/data/body_img-legs.paa b/addons/medical/data/body_img-legs.paa deleted file mode 100644 index 35f68d8635..0000000000 Binary files a/addons/medical/data/body_img-legs.paa and /dev/null differ diff --git a/addons/medical/data/body_img-torso.paa b/addons/medical/data/body_img-torso.paa deleted file mode 100644 index cc5ecb9d60..0000000000 Binary files a/addons/medical/data/body_img-torso.paa and /dev/null differ diff --git a/addons/medical/data/body_legs.paa b/addons/medical/data/body_legs.paa deleted file mode 100644 index 9af3adc2ca..0000000000 Binary files a/addons/medical/data/body_legs.paa and /dev/null differ diff --git a/addons/medical/data/bodybag.p3d b/addons/medical/data/bodybag.p3d new file mode 100644 index 0000000000..1fec3a05f0 Binary files /dev/null and b/addons/medical/data/bodybag.p3d differ diff --git a/addons/medical/equipment/data/bodybag.rvmat b/addons/medical/data/bodybag.rvmat similarity index 94% rename from addons/medical/equipment/data/bodybag.rvmat rename to addons/medical/data/bodybag.rvmat index b0e6c2363c..2a1869ad55 100644 --- a/addons/medical/equipment/data/bodybag.rvmat +++ b/addons/medical/data/bodybag.rvmat @@ -8,7 +8,7 @@ PixelShaderID="Super"; VertexShaderID="Super"; class Stage1 { - texture="z\ace\addons\medical\equipment\data\bodybag_nohq.paa"; + texture="z\ace\addons\medical\data\bodybag_nohq.paa"; uvSource="tex"; class uvTransform { @@ -80,7 +80,7 @@ class Stage6 }; class Stage7 { - texture="z\ace\addons\medical\equipment\data\env_co.paa"; + texture="z\ace\addons\medical\data\env_co.paa"; uvSource="tex"; class uvTransform { diff --git a/addons/medical/data/bodybagItem.p3d b/addons/medical/data/bodybagItem.p3d new file mode 100644 index 0000000000..72c8fec886 Binary files /dev/null and b/addons/medical/data/bodybagItem.p3d differ diff --git a/addons/medical/equipment/data/bodybagItem.rvmat b/addons/medical/data/bodybagItem.rvmat similarity index 84% rename from addons/medical/equipment/data/bodybagItem.rvmat rename to addons/medical/data/bodybagItem.rvmat index c72890391b..a373bfaae8 100644 --- a/addons/medical/equipment/data/bodybagItem.rvmat +++ b/addons/medical/data/bodybagItem.rvmat @@ -8,7 +8,7 @@ PixelShaderID="NormalMapSpecularDIMap"; VertexShaderID="NormalMap"; class Stage1 { - texture="z\ace\addons\medical\equipment\data\bodybagItem_nohq.paa"; + texture="z\ace\addons\medical\data\bodybagItem_nohq.paa"; uvSource="tex"; class uvTransform { @@ -20,7 +20,7 @@ class Stage1 }; class Stage2 { - texture="z\ace\addons\medical\equipment\data\bodybagItem_smdi.paa"; + texture="z\ace\addons\medical\data\bodybagItem_smdi.paa"; uvSource="tex"; class uvTransform { diff --git a/addons/medical/equipment/data/bodybagItem_co.paa b/addons/medical/data/bodybagItem_co.paa similarity index 100% rename from addons/medical/equipment/data/bodybagItem_co.paa rename to addons/medical/data/bodybagItem_co.paa diff --git a/addons/medical/equipment/data/bodybagItem_nohq.paa b/addons/medical/data/bodybagItem_nohq.paa similarity index 100% rename from addons/medical/equipment/data/bodybagItem_nohq.paa rename to addons/medical/data/bodybagItem_nohq.paa diff --git a/addons/medical/equipment/data/bodybagItem_smdi.paa b/addons/medical/data/bodybagItem_smdi.paa similarity index 100% rename from addons/medical/equipment/data/bodybagItem_smdi.paa rename to addons/medical/data/bodybagItem_smdi.paa diff --git a/addons/medical/equipment/data/bodybag_co.paa b/addons/medical/data/bodybag_co.paa similarity index 100% rename from addons/medical/equipment/data/bodybag_co.paa rename to addons/medical/data/bodybag_co.paa diff --git a/addons/medical/equipment/data/bodybag_nohq.paa b/addons/medical/data/bodybag_nohq.paa similarity index 100% rename from addons/medical/equipment/data/bodybag_nohq.paa rename to addons/medical/data/bodybag_nohq.paa diff --git a/addons/medical/data/border_arm_left.paa b/addons/medical/data/border_arm_left.paa deleted file mode 100644 index eae1d751cf..0000000000 Binary files a/addons/medical/data/border_arm_left.paa and /dev/null differ diff --git a/addons/medical/data/border_arm_right.paa b/addons/medical/data/border_arm_right.paa deleted file mode 100644 index 0aea4ce20e..0000000000 Binary files a/addons/medical/data/border_arm_right.paa and /dev/null differ diff --git a/addons/medical/data/border_head.paa b/addons/medical/data/border_head.paa deleted file mode 100644 index 3b2e7aaf10..0000000000 Binary files a/addons/medical/data/border_head.paa and /dev/null differ diff --git a/addons/medical/data/border_leg_left.paa b/addons/medical/data/border_leg_left.paa deleted file mode 100644 index 7ff3b170fa..0000000000 Binary files a/addons/medical/data/border_leg_left.paa and /dev/null differ diff --git a/addons/medical/data/border_leg_right.paa b/addons/medical/data/border_leg_right.paa deleted file mode 100644 index bef0f70779..0000000000 Binary files a/addons/medical/data/border_leg_right.paa and /dev/null differ diff --git a/addons/medical/data/border_torso.paa b/addons/medical/data/border_torso.paa deleted file mode 100644 index 2b70076939..0000000000 Binary files a/addons/medical/data/border_torso.paa and /dev/null differ diff --git a/addons/medical/data/buttonDisabled_gradient.paa b/addons/medical/data/buttonDisabled_gradient.paa deleted file mode 100644 index 43b1b8d100..0000000000 Binary files a/addons/medical/data/buttonDisabled_gradient.paa and /dev/null differ diff --git a/addons/medical/data/buttonNormal_gradient.paa b/addons/medical/data/buttonNormal_gradient.paa deleted file mode 100644 index 2210f98741..0000000000 Binary files a/addons/medical/data/buttonNormal_gradient.paa and /dev/null differ diff --git a/addons/medical/data/buttonNormal_gradient2.paa b/addons/medical/data/buttonNormal_gradient2.paa deleted file mode 100644 index cabe6c7fed..0000000000 Binary files a/addons/medical/data/buttonNormal_gradient2.paa and /dev/null differ diff --git a/addons/medical/data/buttonNormal_gradient3.paa b/addons/medical/data/buttonNormal_gradient3.paa deleted file mode 100644 index 7da9fbcf8a..0000000000 Binary files a/addons/medical/data/buttonNormal_gradient3.paa and /dev/null differ diff --git a/addons/medical/data/buttonNormal_gradient_top.paa b/addons/medical/data/buttonNormal_gradient_top.paa deleted file mode 100644 index 904e1a62f7..0000000000 Binary files a/addons/medical/data/buttonNormal_gradient_top.paa and /dev/null differ diff --git a/addons/medical/equipment/data/env_co.paa b/addons/medical/data/env_co.paa similarity index 100% rename from addons/medical/equipment/data/env_co.paa rename to addons/medical/data/env_co.paa diff --git a/addons/medical/data/epinephrine.p3d b/addons/medical/data/epinephrine.p3d new file mode 100644 index 0000000000..a06831867a Binary files /dev/null and b/addons/medical/data/epinephrine.p3d differ diff --git a/addons/medical/data/epinephrine_co.paa b/addons/medical/data/epinephrine_co.paa new file mode 100644 index 0000000000..2a1afe1f33 Binary files /dev/null and b/addons/medical/data/epinephrine_co.paa differ diff --git a/addons/medical/data/hit.paa b/addons/medical/data/hit.paa deleted file mode 100644 index e878efff0b..0000000000 Binary files a/addons/medical/data/hit.paa and /dev/null differ diff --git a/addons/medical/data/icons/advanced_treatment_small.paa b/addons/medical/data/icons/advanced_treatment_small.paa deleted file mode 100644 index 8becb9d2df..0000000000 Binary files a/addons/medical/data/icons/advanced_treatment_small.paa and /dev/null differ diff --git a/addons/medical/data/icons/airway_management_small.paa b/addons/medical/data/icons/airway_management_small.paa deleted file mode 100644 index ab4da47958..0000000000 Binary files a/addons/medical/data/icons/airway_management_small.paa and /dev/null differ diff --git a/addons/medical/data/icons/bandage_fracture_small.paa b/addons/medical/data/icons/bandage_fracture_small.paa deleted file mode 100644 index a869f260ec..0000000000 Binary files a/addons/medical/data/icons/bandage_fracture_small.paa and /dev/null differ diff --git a/addons/medical/data/icons/examine_patient_small.paa b/addons/medical/data/icons/examine_patient_small.paa deleted file mode 100644 index 2e9fc9831d..0000000000 Binary files a/addons/medical/data/icons/examine_patient_small.paa and /dev/null differ diff --git a/addons/medical/data/icons/icon_advanced_treatment.paa b/addons/medical/data/icons/icon_advanced_treatment.paa deleted file mode 100644 index d6bf6effd9..0000000000 Binary files a/addons/medical/data/icons/icon_advanced_treatment.paa and /dev/null differ diff --git a/addons/medical/data/icons/icon_airway_management.paa b/addons/medical/data/icons/icon_airway_management.paa deleted file mode 100644 index f444f5f385..0000000000 Binary files a/addons/medical/data/icons/icon_airway_management.paa and /dev/null differ diff --git a/addons/medical/data/icons/icon_bandage_fracture.paa b/addons/medical/data/icons/icon_bandage_fracture.paa deleted file mode 100644 index df8d1de571..0000000000 Binary files a/addons/medical/data/icons/icon_bandage_fracture.paa and /dev/null differ diff --git a/addons/medical/data/icons/icon_bleeding.paa b/addons/medical/data/icons/icon_bleeding.paa deleted file mode 100644 index d11c2ed496..0000000000 Binary files a/addons/medical/data/icons/icon_bleeding.paa and /dev/null differ diff --git a/addons/medical/data/icons/icon_carry.paa b/addons/medical/data/icons/icon_carry.paa deleted file mode 100644 index 7ebb830b03..0000000000 Binary files a/addons/medical/data/icons/icon_carry.paa and /dev/null differ diff --git a/addons/medical/data/icons/icon_examine_patient.paa b/addons/medical/data/icons/icon_examine_patient.paa deleted file mode 100644 index 12eb06c890..0000000000 Binary files a/addons/medical/data/icons/icon_examine_patient.paa and /dev/null differ diff --git a/addons/medical/data/icons/icon_medication.paa b/addons/medical/data/icons/icon_medication.paa deleted file mode 100644 index 98893ad863..0000000000 Binary files a/addons/medical/data/icons/icon_medication.paa and /dev/null differ diff --git a/addons/medical/data/icons/icon_toggle_self.paa b/addons/medical/data/icons/icon_toggle_self.paa deleted file mode 100644 index 3078eb5dd5..0000000000 Binary files a/addons/medical/data/icons/icon_toggle_self.paa and /dev/null differ diff --git a/addons/medical/data/icons/icon_tourniquet.paa b/addons/medical/data/icons/icon_tourniquet.paa deleted file mode 100644 index 8b34a7bfbb..0000000000 Binary files a/addons/medical/data/icons/icon_tourniquet.paa and /dev/null differ diff --git a/addons/medical/data/icons/icon_tourniquet_small.paa b/addons/medical/data/icons/icon_tourniquet_small.paa deleted file mode 100644 index a457e2c0d5..0000000000 Binary files a/addons/medical/data/icons/icon_tourniquet_small.paa and /dev/null differ diff --git a/addons/medical/data/icons/icon_triage_card.paa b/addons/medical/data/icons/icon_triage_card.paa deleted file mode 100644 index 850ab0f4ce..0000000000 Binary files a/addons/medical/data/icons/icon_triage_card.paa and /dev/null differ diff --git a/addons/medical/data/icons/medication_small.paa b/addons/medical/data/icons/medication_small.paa deleted file mode 100644 index b6acd670c8..0000000000 Binary files a/addons/medical/data/icons/medication_small.paa and /dev/null differ diff --git a/addons/medical/data/icons/toggle_self_small.paa b/addons/medical/data/icons/toggle_self_small.paa deleted file mode 100644 index 73108e5a98..0000000000 Binary files a/addons/medical/data/icons/toggle_self_small.paa and /dev/null differ diff --git a/addons/medical/data/icons/triage_card_small.paa b/addons/medical/data/icons/triage_card_small.paa deleted file mode 100644 index 92eb0f0d20..0000000000 Binary files a/addons/medical/data/icons/triage_card_small.paa and /dev/null differ diff --git a/addons/medical/data/morphine.p3d b/addons/medical/data/morphine.p3d new file mode 100644 index 0000000000..4457c97cc9 Binary files /dev/null and b/addons/medical/data/morphine.p3d differ diff --git a/addons/medical/equipment/data/morphin_co.paa b/addons/medical/data/morphine_co.paa similarity index 100% rename from addons/medical/equipment/data/morphin_co.paa rename to addons/medical/data/morphine_co.paa diff --git a/addons/medical/data/packingbandage.p3d b/addons/medical/data/packingbandage.p3d new file mode 100644 index 0000000000..ccabe2b1f3 Binary files /dev/null and b/addons/medical/data/packingbandage.p3d differ diff --git a/addons/medical/equipment/data/Field-Dressing.rvmat b/addons/medical/data/packingbandage.rvmat similarity index 77% rename from addons/medical/equipment/data/Field-Dressing.rvmat rename to addons/medical/data/packingbandage.rvmat index 9c43af9abf..b90d8469c6 100644 --- a/addons/medical/equipment/data/Field-Dressing.rvmat +++ b/addons/medical/data/packingbandage.rvmat @@ -8,7 +8,7 @@ PixelShaderID="NormalMapSpecularDIMap"; VertexShaderID="NormalMap"; class Stage1 { - texture="z\ace\addons\medical\equipment\data\Field-Dressing_nohq.paa"; + texture="z\ace\addons\medical\data\packingbandage_nohq.paa"; uvSource="tex"; class uvTransform { @@ -20,7 +20,7 @@ class Stage1 }; class Stage2 { - texture="z\ace\addons\medical\equipment\data\Field-Dressing_smdi.paa"; + texture="z\ace\addons\medical\data\packingbandage_smdi.paa"; uvSource="tex"; class uvTransform { diff --git a/addons/medical/equipment/bandages/packingbandage_color.paa b/addons/medical/data/packingbandage_color.paa similarity index 100% rename from addons/medical/equipment/bandages/packingbandage_color.paa rename to addons/medical/data/packingbandage_color.paa diff --git a/addons/medical/equipment/bandages/packingbandage_nohq.paa b/addons/medical/data/packingbandage_nohq.paa similarity index 100% rename from addons/medical/equipment/bandages/packingbandage_nohq.paa rename to addons/medical/data/packingbandage_nohq.paa diff --git a/addons/medical/equipment/bandages/packingbandage_smdi.paa b/addons/medical/data/packingbandage_smdi.paa similarity index 100% rename from addons/medical/equipment/bandages/packingbandage_smdi.paa rename to addons/medical/data/packingbandage_smdi.paa diff --git a/addons/medical/data/painScreen.paa b/addons/medical/data/painScreen.paa deleted file mode 100644 index f629d66280..0000000000 Binary files a/addons/medical/data/painScreen.paa and /dev/null differ diff --git a/addons/medical/data/surgical_kit.p3d b/addons/medical/data/surgical_kit.p3d new file mode 100644 index 0000000000..f820ea6078 Binary files /dev/null and b/addons/medical/data/surgical_kit.p3d differ diff --git a/addons/medical/equipment/data/surgical_kit.rvmat b/addons/medical/data/surgical_kit.rvmat similarity index 91% rename from addons/medical/equipment/data/surgical_kit.rvmat rename to addons/medical/data/surgical_kit.rvmat index 3f0deac2fa..e7db14f08b 100644 --- a/addons/medical/equipment/data/surgical_kit.rvmat +++ b/addons/medical/data/surgical_kit.rvmat @@ -8,7 +8,7 @@ PixelShaderID="Super"; VertexShaderID="Super"; class Stage1 { - texture="z\ace\addons\medical\equipment\data\surgical_kit_nohq.paa"; + texture="z\ace\addons\medical\data\surgical_kit_nohq.paa"; uvSource="tex"; class uvTransform { @@ -80,7 +80,7 @@ class Stage6 }; class Stage7 { - texture="z\ace\addons\medical\equipment\data\env_co.tga"; + texture="z\ace\addons\medical\data\env_co.tga"; uvSource="tex"; class uvTransform { diff --git a/addons/medical/equipment/data/surgical_kit_co.paa b/addons/medical/data/surgical_kit_co.paa similarity index 100% rename from addons/medical/equipment/data/surgical_kit_co.paa rename to addons/medical/data/surgical_kit_co.paa diff --git a/addons/medical/equipment/data/surgical_kit_metal.rvmat b/addons/medical/data/surgical_kit_metal.rvmat similarity index 100% rename from addons/medical/equipment/data/surgical_kit_metal.rvmat rename to addons/medical/data/surgical_kit_metal.rvmat diff --git a/addons/medical/equipment/data/surgical_kit_nohq.paa b/addons/medical/data/surgical_kit_nohq.paa similarity index 100% rename from addons/medical/equipment/data/surgical_kit_nohq.paa rename to addons/medical/data/surgical_kit_nohq.paa diff --git a/addons/medical/equipment/data/Tournequit_co.paa b/addons/medical/data/tournequit_co.paa similarity index 100% rename from addons/medical/equipment/data/Tournequit_co.paa rename to addons/medical/data/tournequit_co.paa diff --git a/addons/medical/data/tourniquet.p3d b/addons/medical/data/tourniquet.p3d new file mode 100644 index 0000000000..e8cb60c9e9 Binary files /dev/null and b/addons/medical/data/tourniquet.p3d differ diff --git a/addons/medical/data/ui_background.paa b/addons/medical/data/ui_background.paa deleted file mode 100644 index f1c42c7d7d..0000000000 Binary files a/addons/medical/data/ui_background.paa and /dev/null differ diff --git a/addons/medical/equipment/Atropin-pen.p3d b/addons/medical/equipment/Atropin-pen.p3d deleted file mode 100644 index a34d11641a..0000000000 Binary files a/addons/medical/equipment/Atropin-pen.p3d and /dev/null differ diff --git a/addons/medical/equipment/Atropin-pen_used.p3d b/addons/medical/equipment/Atropin-pen_used.p3d deleted file mode 100644 index 8d72c3f8dc..0000000000 Binary files a/addons/medical/equipment/Atropin-pen_used.p3d and /dev/null differ diff --git a/addons/medical/equipment/Bandage elastic.p3d b/addons/medical/equipment/Bandage elastic.p3d deleted file mode 100644 index c215842967..0000000000 Binary files a/addons/medical/equipment/Bandage elastic.p3d and /dev/null differ diff --git a/addons/medical/equipment/Bandage-Pack.p3d b/addons/medical/equipment/Bandage-Pack.p3d deleted file mode 100644 index 00a288a57d..0000000000 Binary files a/addons/medical/equipment/Bandage-Pack.p3d and /dev/null differ diff --git a/addons/medical/equipment/Bandage-elastic.p3d b/addons/medical/equipment/Bandage-elastic.p3d deleted file mode 100644 index d7ab5a79e0..0000000000 Binary files a/addons/medical/equipment/Bandage-elastic.p3d and /dev/null differ diff --git a/addons/medical/equipment/Epipen.p3d b/addons/medical/equipment/Epipen.p3d deleted file mode 100644 index 8a1b0e5e35..0000000000 Binary files a/addons/medical/equipment/Epipen.p3d and /dev/null differ diff --git a/addons/medical/equipment/Epipen_used.p3d b/addons/medical/equipment/Epipen_used.p3d deleted file mode 100644 index af1294b0e2..0000000000 Binary files a/addons/medical/equipment/Epipen_used.p3d and /dev/null differ diff --git a/addons/medical/equipment/Morphinpen.p3d b/addons/medical/equipment/Morphinpen.p3d deleted file mode 100644 index 06a39e7d56..0000000000 Binary files a/addons/medical/equipment/Morphinpen.p3d and /dev/null differ diff --git a/addons/medical/equipment/Morphinpen_used.p3d b/addons/medical/equipment/Morphinpen_used.p3d deleted file mode 100644 index 6e6bf06119..0000000000 Binary files a/addons/medical/equipment/Morphinpen_used.p3d and /dev/null differ diff --git a/addons/medical/equipment/Personal-aidkits/MTP.p3d b/addons/medical/equipment/Personal-aidkits/MTP.p3d deleted file mode 100644 index f2313e9652..0000000000 Binary files a/addons/medical/equipment/Personal-aidkits/MTP.p3d and /dev/null differ diff --git a/addons/medical/equipment/Personal-aidkits/data/MTP_co.paa b/addons/medical/equipment/Personal-aidkits/data/MTP_co.paa deleted file mode 100644 index 660ebe3477..0000000000 Binary files a/addons/medical/equipment/Personal-aidkits/data/MTP_co.paa and /dev/null differ diff --git a/addons/medical/equipment/Personal-aidkits/data/Mulitcam.paa b/addons/medical/equipment/Personal-aidkits/data/Mulitcam.paa deleted file mode 100644 index 3e55892c84..0000000000 Binary files a/addons/medical/equipment/Personal-aidkits/data/Mulitcam.paa and /dev/null differ diff --git a/addons/medical/equipment/Personal-aidkits/data/Personalaidkit.rvmat b/addons/medical/equipment/Personal-aidkits/data/Personalaidkit.rvmat deleted file mode 100644 index a071c22c19..0000000000 --- a/addons/medical/equipment/Personal-aidkits/data/Personalaidkit.rvmat +++ /dev/null @@ -1,32 +0,0 @@ -ambient[]={1,1,1,1}; -diffuse[]={0.5,0.5,0.5,1}; -forcedDiffuse[]={0.5,0.5,0.5,0}; -emmisive[]={0,0,0,1}; -specular[]={0.30000001,0.30000001,0.30000001,0}; -specularPower=100; -PixelShaderID="NormalMapSpecularDIMap"; -VertexShaderID="NormalMap"; -class Stage1 -{ - texture="z\ace\addons\medical\equipment\Personal-aidkits\data\Personalaidkit_nohq.paa"; - uvSource="tex"; - class uvTransform - { - aside[]={1,0,0}; - up[]={0,1,0}; - dir[]={0,0,1}; - pos[]={0,0,0}; - }; -}; -class Stage2 -{ - texture="z\ace\addons\medical\equipment\Personal-aidkits\data\Personalaidkit_smdi.paa"; - uvSource="tex"; - class uvTransform - { - aside[]={1,0,0}; - up[]={0,1,0}; - dir[]={0,0,1}; - pos[]={0,0,0}; - }; -}; diff --git a/addons/medical/equipment/Personal-aidkits/data/Personalaidkit_nohq.paa b/addons/medical/equipment/Personal-aidkits/data/Personalaidkit_nohq.paa deleted file mode 100644 index 0d03b45372..0000000000 Binary files a/addons/medical/equipment/Personal-aidkits/data/Personalaidkit_nohq.paa and /dev/null differ diff --git a/addons/medical/equipment/Personal-aidkits/data/Personalaidkit_smdi.paa b/addons/medical/equipment/Personal-aidkits/data/Personalaidkit_smdi.paa deleted file mode 100644 index 2fb8bec533..0000000000 Binary files a/addons/medical/equipment/Personal-aidkits/data/Personalaidkit_smdi.paa and /dev/null differ diff --git a/addons/medical/equipment/QuickClot.p3d b/addons/medical/equipment/QuickClot.p3d deleted file mode 100644 index aa431372bb..0000000000 Binary files a/addons/medical/equipment/QuickClot.p3d and /dev/null differ diff --git a/addons/medical/equipment/Tourniquet.p3d b/addons/medical/equipment/Tourniquet.p3d deleted file mode 100644 index 300a74c166..0000000000 Binary files a/addons/medical/equipment/Tourniquet.p3d and /dev/null differ diff --git a/addons/medical/equipment/bandages/fielddressing.p3d b/addons/medical/equipment/bandages/fielddressing.p3d deleted file mode 100644 index 6b7f94ef9b..0000000000 Binary files a/addons/medical/equipment/bandages/fielddressing.p3d and /dev/null differ diff --git a/addons/medical/equipment/bandages/fielddressing.rvmat b/addons/medical/equipment/bandages/fielddressing.rvmat deleted file mode 100644 index 7eda45da4f..0000000000 --- a/addons/medical/equipment/bandages/fielddressing.rvmat +++ /dev/null @@ -1,32 +0,0 @@ -ambient[]={1,1,1,1}; -diffuse[]={0.5,0.5,0.5,1}; -forcedDiffuse[]={0.5,0.5,0.5,0}; -emmisive[]={0,0,0,1}; -specular[]={0.30000001,0.30000001,0.30000001,0}; -specularPower=57.799999; -PixelShaderID="NormalMapSpecularDIMap"; -VertexShaderID="NormalMap"; -class Stage1 -{ - texture="z\ace\addons\medical\equipment\bandages\fielddressing_nohq.paa"; - uvSource="tex"; - class uvTransform - { - aside[]={1,0,0}; - up[]={0,1,0}; - dir[]={0,0,1}; - pos[]={0,0,0}; - }; -}; -class Stage2 -{ - texture="z\ace\addons\medical\equipment\bandages\fielddressing_smdi.paa"; - uvSource="tex"; - class uvTransform - { - aside[]={1,0,0}; - up[]={0,1,0}; - dir[]={0,0,1}; - pos[]={0,0,0}; - }; -}; diff --git a/addons/medical/equipment/bandages/fielddressing_color.paa b/addons/medical/equipment/bandages/fielddressing_color.paa deleted file mode 100644 index 7d68a365c2..0000000000 Binary files a/addons/medical/equipment/bandages/fielddressing_color.paa and /dev/null differ diff --git a/addons/medical/equipment/bandages/fielddressing_garbage.p3d b/addons/medical/equipment/bandages/fielddressing_garbage.p3d deleted file mode 100644 index 0939de5c08..0000000000 Binary files a/addons/medical/equipment/bandages/fielddressing_garbage.p3d and /dev/null differ diff --git a/addons/medical/equipment/bandages/fielddressing_nohq.paa b/addons/medical/equipment/bandages/fielddressing_nohq.paa deleted file mode 100644 index c66785cf13..0000000000 Binary files a/addons/medical/equipment/bandages/fielddressing_nohq.paa and /dev/null differ diff --git a/addons/medical/equipment/bandages/fielddressing_smdi.paa b/addons/medical/equipment/bandages/fielddressing_smdi.paa deleted file mode 100644 index 96376989f7..0000000000 Binary files a/addons/medical/equipment/bandages/fielddressing_smdi.paa and /dev/null differ diff --git a/addons/medical/equipment/bandages/packingbandage.p3d b/addons/medical/equipment/bandages/packingbandage.p3d deleted file mode 100644 index c1cc09af35..0000000000 Binary files a/addons/medical/equipment/bandages/packingbandage.p3d and /dev/null differ diff --git a/addons/medical/equipment/bandages/packingbandage.rvmat b/addons/medical/equipment/bandages/packingbandage.rvmat deleted file mode 100644 index 3d65ab3b93..0000000000 --- a/addons/medical/equipment/bandages/packingbandage.rvmat +++ /dev/null @@ -1,32 +0,0 @@ -ambient[]={1,1,1,1}; -diffuse[]={0.5,0.5,0.5,1}; -forcedDiffuse[]={0.5,0.5,0.5,0}; -emmisive[]={0,0,0,1}; -specular[]={0.30000001,0.30000001,0.30000001,0}; -specularPower=57.799999; -PixelShaderID="NormalMapSpecularDIMap"; -VertexShaderID="NormalMap"; -class Stage1 -{ - texture="z\ace\addons\medical\equipment\bandages\packingbandage_nohq.paa"; - uvSource="tex"; - class uvTransform - { - aside[]={1,0,0}; - up[]={0,1,0}; - dir[]={0,0,1}; - pos[]={0,0,0}; - }; -}; -class Stage2 -{ - texture="z\ace\addons\medical\equipment\bandages\packingbandage_smdi.paa"; - uvSource="tex"; - class uvTransform - { - aside[]={1,0,0}; - up[]={0,1,0}; - dir[]={0,0,1}; - pos[]={0,0,0}; - }; -}; diff --git a/addons/medical/equipment/bandages/packingbandage_garbage.p3d b/addons/medical/equipment/bandages/packingbandage_garbage.p3d deleted file mode 100644 index cb695caac6..0000000000 Binary files a/addons/medical/equipment/bandages/packingbandage_garbage.p3d and /dev/null differ diff --git a/addons/medical/equipment/bodybag.p3d b/addons/medical/equipment/bodybag.p3d deleted file mode 100644 index 4a6b6e85ab..0000000000 Binary files a/addons/medical/equipment/bodybag.p3d and /dev/null differ diff --git a/addons/medical/equipment/bodybagItem.p3d b/addons/medical/equipment/bodybagItem.p3d deleted file mode 100644 index 11168bf776..0000000000 Binary files a/addons/medical/equipment/bodybagItem.p3d and /dev/null differ diff --git a/addons/medical/equipment/data/Field-Dressing_nohq.paa b/addons/medical/equipment/data/Field-Dressing_nohq.paa deleted file mode 100644 index 6972636a3d..0000000000 Binary files a/addons/medical/equipment/data/Field-Dressing_nohq.paa and /dev/null differ diff --git a/addons/medical/equipment/data/Field-Dressing_smdi.paa b/addons/medical/equipment/data/Field-Dressing_smdi.paa deleted file mode 100644 index f450605958..0000000000 Binary files a/addons/medical/equipment/data/Field-Dressing_smdi.paa and /dev/null differ diff --git a/addons/medical/equipment/data/Field-dressing.paa b/addons/medical/equipment/data/Field-dressing.paa deleted file mode 100644 index 07bae7d595..0000000000 Binary files a/addons/medical/equipment/data/Field-dressing.paa and /dev/null differ diff --git a/addons/medical/equipment/data/Liquid-skin.paa b/addons/medical/equipment/data/Liquid-skin.paa deleted file mode 100644 index fda64304bc..0000000000 Binary files a/addons/medical/equipment/data/Liquid-skin.paa and /dev/null differ diff --git a/addons/medical/equipment/data/bandage-elastic.paa b/addons/medical/equipment/data/bandage-elastic.paa deleted file mode 100644 index 3164b5d4ca..0000000000 Binary files a/addons/medical/equipment/data/bandage-elastic.paa and /dev/null differ diff --git a/addons/medical/equipment/data/quickclot_co.paa b/addons/medical/equipment/data/quickclot_co.paa deleted file mode 100644 index bf0edccd7e..0000000000 Binary files a/addons/medical/equipment/data/quickclot_co.paa and /dev/null differ diff --git a/addons/medical/equipment/field_dressing.p3d b/addons/medical/equipment/field_dressing.p3d deleted file mode 100644 index 39b516c6bc..0000000000 Binary files a/addons/medical/equipment/field_dressing.p3d and /dev/null differ diff --git a/addons/medical/equipment/field_dressing_used.p3d b/addons/medical/equipment/field_dressing_used.p3d deleted file mode 100644 index a29958cca0..0000000000 Binary files a/addons/medical/equipment/field_dressing_used.p3d and /dev/null differ diff --git a/addons/medical/equipment/img/chestseal.paa b/addons/medical/equipment/img/chestseal.paa deleted file mode 100644 index be0f4f77bf..0000000000 Binary files a/addons/medical/equipment/img/chestseal.paa and /dev/null differ diff --git a/addons/medical/equipment/img/liquidSkin.paa b/addons/medical/equipment/img/liquidSkin.paa deleted file mode 100644 index 40e72038ec..0000000000 Binary files a/addons/medical/equipment/img/liquidSkin.paa and /dev/null differ diff --git a/addons/medical/equipment/img/nasopharyngeal_tube.paa b/addons/medical/equipment/img/nasopharyngeal_tube.paa deleted file mode 100644 index 6629605519..0000000000 Binary files a/addons/medical/equipment/img/nasopharyngeal_tube.paa and /dev/null differ diff --git a/addons/medical/equipment/img/splint.paa b/addons/medical/equipment/img/splint.paa deleted file mode 100644 index 87c1cb8686..0000000000 Binary files a/addons/medical/equipment/img/splint.paa and /dev/null differ diff --git a/addons/medical/equipment/skinliquid.p3d b/addons/medical/equipment/skinliquid.p3d deleted file mode 100644 index b3d761e256..0000000000 Binary files a/addons/medical/equipment/skinliquid.p3d and /dev/null differ diff --git a/addons/medical/equipment/splint.p3d b/addons/medical/equipment/splint.p3d deleted file mode 100644 index 42f3ad14b7..0000000000 Binary files a/addons/medical/equipment/splint.p3d and /dev/null differ diff --git a/addons/medical/equipment/surgical_kit.p3d b/addons/medical/equipment/surgical_kit.p3d deleted file mode 100644 index 9f616a100f..0000000000 Binary files a/addons/medical/equipment/surgical_kit.p3d and /dev/null differ diff --git a/addons/medical/functions/fnc_ActionCheckBloodPressureLocal.sqf b/addons/medical/functions/fnc_ActionCheckBloodPressureLocal.sqf deleted file mode 100644 index 9f645e80ad..0000000000 --- a/addons/medical/functions/fnc_ActionCheckBloodPressureLocal.sqf +++ /dev/null @@ -1,58 +0,0 @@ -/** - * fn_checkBloodPressureLocal.sqf - * @Descr: Displays specified units current blood pressure - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_caller","_unit","_bloodPressure","_bloodPressureHigh","_bloodPressureLow","_title","_content"]; -_caller = _this select 0; -_unit = _this select 1; - -_bloodPressure = [_unit] call FUNC(getBloodPressure); -if (!alive _unit) then { - _bloodPressure = [0,0]; -}; - -_bloodPressureHigh = _bloodPressure select 1; -_bloodPressureLow = _bloodPressure select 0; -_output = ""; -_logOutPut = ""; -if ([_caller] call FUNC(isMedic)) then { - _output = "STR_ACE_CHECK_BLOODPRESSURE_OUTPUT_1"; - _logOutPut = format["%1/%2",round(_bloodPressureHigh),round(_bloodPressureLow)]; -} else { - if (_bloodPressureHigh > 20) then { - _output = "STR_ACE_CHECK_BLOODPRESSURE_OUTPUT_2"; - _logOutPut = "Low"; - if (_bloodPressureHigh > 100) then { - _output = "STR_ACE_CHECK_BLOODPRESSURE_OUTPUT_3"; - _logOutPut = "Normal"; - if (_bloodPressureHigh > 160) then { - _output = "STR_ACE_CHECK_BLOODPRESSURE_OUTPUT_4"; - _logOutPut = "High"; - }; - - }; - } else { - if (random(10) > 3) then { - _output = "STR_ACE_CHECK_BLOODPRESSURE_OUTPUT_5"; - _logOutPut = "No Blood Pressure"; - } else { - _output = "STR_ACE_CHECK_BLOODPRESSURE_OUTPUT_6"; - }; - }; -}; - -_title = format["STR_ACE_CHECK_BLOODPRESSURE"]; -_content = ["STR_ACE_CHECK_BLOODPRESSURE_CHECKED_MEDIC", _output]; -[_caller, _title, _content, 0,[[_unit] call EFUNC(common,getName), round(_bloodPressureHigh),round(_bloodPressureLow)] ] call EFUNC(gui,sendDisplayInformationTo); - -if (_logOutPut != "") then { - [_unit,"examine",format["%1 checked Blood Pressure: %2",[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToQuickViewLog); -}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_ActionCheckPulse.sqf b/addons/medical/functions/fnc_ActionCheckPulse.sqf deleted file mode 100644 index 52e9158329..0000000000 --- a/addons/medical/functions/fnc_ActionCheckPulse.sqf +++ /dev/null @@ -1,39 +0,0 @@ -/** - * fn_checkPulse.sqf - * @Descr: Displays specified units current pulse - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - - #include "script_component.hpp" - -private ["_caller","_target","_title","_content"]; -_caller = _this select 0; -_target = _this select 1; - -if ([_caller] call FUNC(isSetTreatmentMutex)) exitwith {}; -[_caller, true] call FUNC(treatmentMutex); - -_title = format["STR_ACE_CHECK_PULSE"]; -_content = ["STR_ACE_CHECK_PULSE_CONTENT"]; -[_caller, _title, _content] call EFUNC(gui,sendDisplayInformationTo); - -_caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller]; -[2 + round(random(1)), - {((vehicle (_this select 0) != (_this select 0)) ||((getPos (_this select 0)) distance ((_this select 0) getvariable QGVAR(StartingPositionHandleTreatment)) < 1))}, // the condition - { - private ["_caller","_target"]; - _caller = _this select 0; - _target = _this select 1; - [[_caller, _target], QUOTE(FUNC(actionCheckPulseLocal)), _target] call EFUNC(common,execRemoteFnc); - [_caller,false] call FUNC(treatmentMutex); - }, // on success - { - [(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo); - [(_this select 0),false] call FUNC(treatmentMutex); - }, // on failure - [_caller, _target] // arguments -] call EFUNC(gui,loadingBar); diff --git a/addons/medical/functions/fnc_ActioncheckBloodPressure.sqf b/addons/medical/functions/fnc_ActioncheckBloodPressure.sqf deleted file mode 100644 index d96ae8b19c..0000000000 --- a/addons/medical/functions/fnc_ActioncheckBloodPressure.sqf +++ /dev/null @@ -1,40 +0,0 @@ -/** - * fn_checkBloodPressure.sqf - * @Descr: Displays specified units current blood pressure - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_caller","_target","_title","_content"]; -_caller = _this select 0; -_target = _this select 1; - -if ([_caller] call FUNC(isSetTreatmentMutex)) exitwith {}; -[_caller, true] call FUNC(treatmentMutex); - -_title = format["STR_ACE_CHECK_BLOODPRESSURE"]; -_content = ["STR_ACE_CHECK_BLOODPRESSURE_CONTENT"]; -[_caller, _title, _content] call EFUNC(gui,sendDisplayInformationTo); - -_caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller]; -[2 + round(random(1)), - {((vehicle (_this select 0) != (_this select 0)) ||((getPos (_this select 0)) distance ((_this select 0) getvariable QGVAR(StartingPositionHandleTreatment)) < 1))}, // the condition - { - private ["_caller","_target"]; - _caller = _this select 0; - _target = _this select 1; - [_this, QUOTE(FUNC(actionCheckBloodPressureLocal)), _target] call EFUNC(common,execRemoteFnc); - [_caller,false] call FUNC(treatmentMutex); - }, // on success - { - [(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo); - [(_this select 0),false] call FUNC(treatmentMutex); - }, // on failure - [_caller, _target] // arguments -] call EFUNC(gui,loadingBar); - diff --git a/addons/medical/functions/fnc_actionCarryUnit.sqf b/addons/medical/functions/fnc_actionCarryUnit.sqf deleted file mode 100644 index d3cfb35aee..0000000000 --- a/addons/medical/functions/fnc_actionCarryUnit.sqf +++ /dev/null @@ -1,95 +0,0 @@ -/* - fnc_carry.sqf - Usage: makes the calling unit start carrying the specified unit - Author: Glowbal - - Arguments: array [caller (object), target (object)] - 1: caller (OBJECT), Object of type Man - 2: target (OBJECT), Object of type Man - Returns: none - - Affects: Caller and target locality - Executes: spawn -*/ - -#include "script_component.hpp" - - -private ["_caller", "_unit", "_positionUnit", "_killOnDrop"]; -_caller = [_this, 0, objNull, [objNull]] call BIS_fnc_param; -_unit = [_this, 1, objNull, [objNull]] call BIS_fnc_param; -_killOnDrop = [_this, 2, false, [false]] call BIS_fnc_param; - -["FUNC(actionDragUnit) has been called",2] call EFUNC(common,debug); - -if ([_caller] call FUNC(isSetTreatmentMutex)) exitwith {}; -[_caller, true] call FUNC(treatmentMutex); - -if (!(_unit isKindOf "CaManBase") || !(_caller isKindOf "CaManBase")) exitwith{ [_caller, false] call FUNC(treatmentMutex);}; -if (vehicle _caller != _caller || vehicle _unit != _unit) exitwith { [_caller, false] call FUNC(treatmentMutex);}; - -if (!([_caller] call EFUNC(common,canInteract)) || {_caller == _unit} || {(([_unit] call EFUNC(common,isAwake)))}) exitwith { - [_caller, false] call FUNC(treatmentMutex); -}; - -if (([_caller] call EFUNC(common,getCarriedObj)) != _unit && !(isNull ([_caller] call EFUNC(common,getCarriedObj))) || {!isNull(_unit getvariable [QGVAR(beingDragged),objNull]) || !isNull(_caller getvariable [QGVAR(dragging),objNull])} || {!isNull(_unit getvariable [QGVAR(beingCarried),objNull]) || !isNull(_caller getvariable [QGVAR(carrying),objNull])}) exitwith { - [_caller,objNull] call EFUNC(common,carryObj); - [_caller, false] call FUNC(treatmentMutex); -}; -_caller action ["WeaponOnBack", _caller]; -_killOnDrop = false; -if (!alive _unit) exitwith { - [_caller, false] call FUNC(treatmentMutex); - [{ - _this call FUNC(actionCarryUnit); - }, [_caller, ([_unit,_caller] call FUNC(makeCopyOfBody_F)), _killOnDrop], 0.25, 0.25] call EFUNC(common,waitAndExecute); -}; - -if !([_caller,_unit] call EFUNC(common,carryObj)) exitwith { - ["couldn't carry object!"] call EFUNC(common,debug); [_caller,false] call FUNC(treatmentMutex); -}; - -if (primaryWeapon _caller == "") then { - _caller addWeapon "ACE_FakePrimaryWeapon"; -}; -_caller selectWeapon (primaryWeapon _caller); - -_unit attachTo [_caller, [0.1, -0.1, -1.25], "LeftShoulder"]; - -[_unit,"AinjPfalMstpSnonWnonDf_carried_dead", 2, true] call EFUNC(common,doAnimation); -[_caller,"acinpercmstpsraswrfldnon", 1] call EFUNC(common,doAnimation); - -_caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller]; -[2, - {((vehicle (_this select 0) != (_this select 0)) ||((getPos (_this select 0)) distance ((_this select 0) getvariable QGVAR(StartingPositionHandleTreatment)) < 1.5))}, // the condition - { - private ["_caller","_target"]; - _caller = _this select 0; - _target = _this select 1; - _killOnDrop = _this select 2; - [_caller, false] call FUNC(treatmentMutex); - - // Registration for drag/carry functions - _target setvariable [QGVAR(beingCarried),_caller,true]; - _caller setvariable [QGVAR(carrying),_unit,true]; - - // Removing any old drop scroll wheel actions - // TODO Do we still want scroll wheel actions? - if (!isnil QGVAR(DROP_ADDACTION)) then { - _caller removeAction GVAR(DROP_ADDACTION); - GVAR(DROP_ADDACTION) = nil; - }; - // Adding the drop scroll wheel action. - GVAR(DROP_ADDACTION) = _caller addAction [format["Drop %1",[_target] call EFUNC(common,getName)], {[_this select 1, _this select 2] call FUNC(actionDropUnit);}]; - - // Raise an event - ["onStartMovingUnit", [_caller], [_caller, _Target, _killOnDrop, false]] call EFUNC(common,targetEvent); - - }, // on success - { - [(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo); - [(_this select 0), false] call FUNC(treatmentMutex); - [(_this select 0), objNull,[0, 0, 0]] call EFUNC(common,carryObj); - }, // on failure - [_caller, _unit, _killOnDrop] // arguments -] call EFUNC(gui,loadingBar); \ No newline at end of file diff --git a/addons/medical/functions/fnc_actionCheckPulseLocal.sqf b/addons/medical/functions/fnc_actionCheckPulseLocal.sqf index ae69f52272..df5966849c 100644 --- a/addons/medical/functions/fnc_actionCheckPulseLocal.sqf +++ b/addons/medical/functions/fnc_actionCheckPulseLocal.sqf @@ -1,51 +1,53 @@ -/** - * fn_checkPulseLocal.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Local callback for checking the pulse of a patient * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: The medic + * 1: The patient + * + * Return Value: + * NONE + * + * Public: No */ #include "script_component.hpp" -private ["_caller","_unit", "_heartRateOutput", "_heartRate","_logOutPut", "_title","_content"]; +private ["_caller","_unit", "_heartRateOutput", "_heartRate","_logOutPut","_content"]; _caller = _this select 0; _unit = _this select 1; -_heartRate = [_unit,QGVAR(heartRate)] call EFUNC(common,getDefinedVariable); +_heartRate = _unit getvariable [QGVAR(heartRate), 80]; if (!alive _unit) then { _heartRate = 0; }; -_heartRateOutput = "STR_ACE_CHECK_PULSE_OUTPUT_5"; +_heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_5"; _logOutPut = "No heart rate"; if (_heartRate > 1.0) then { if ([_caller] call FUNC(isMedic)) then { - _heartRateOutput = "STR_ACE_CHECK_PULSE_OUTPUT_1"; + _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_1"; _logOutPut = format["%1",round(_heartRate)]; } else { // non medical personel will only find a pulse/HR - _heartRateOutput = "STR_ACE_CHECK_PULSE_OUTPUT_2"; + _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_2"; _logOutPut = "Weak"; if (_heartRate > 60) then { if (_heartRate > 100) then { - _heartRateOutput = "STR_ACE_CHECK_PULSE_OUTPUT_3"; + _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_3"; _logOutPut = "Strong"; } else { - _heartRateOutput = "STR_ACE_CHECK_PULSE_OUTPUT_4"; + _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_4"; _logOutPut = "Normal"; }; }; }; }; -_title = "STR_ACE_CHECK_PULSE"; -_content = ["STR_ACE_CHECK_PULSE_CHECKED_MEDIC",_heartRateOutput]; -[_caller, _title, _content, 0, [[_unit] call EFUNC(common,getName), round(_heartRate)]] call EFUNC(gui,sendDisplayInformationTo); +["displayTextStructured", [_caller], [[_heartRateOutput, [_unit] call EFUNC(common,getName), round(_heartRate)], 1.5, _caller]] call EFUNC(common,targetEvent); if (_logOutPut != "") then { - [_unit,"examine",format["%1 checked Heart Rate: %2",[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToQuickViewLog); + [_unit,"examine",format["%1 checked Heart Rate: %2",[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog); }; diff --git a/addons/medical/functions/fnc_actionCheckResponse.sqf b/addons/medical/functions/fnc_actionCheckResponse.sqf index d2201e15f2..5f27e17f4e 100644 --- a/addons/medical/functions/fnc_actionCheckResponse.sqf +++ b/addons/medical/functions/fnc_actionCheckResponse.sqf @@ -1,11 +1,15 @@ -/** - * fn_checkResponse.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Action for checking the response status of the patient * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: The medic + * 1: The patient + * + * Return Value: + * NONE + * + * Public: No */ #include "script_component.hpp" @@ -14,38 +18,13 @@ private ["_caller","_target"]; _caller = _this select 0; _target = _this select 1; -if ([_caller] call FUNC(isSetTreatmentMutex)) exitwith {}; -[_caller, true] call FUNC(treatmentMutex); +_output = ""; +if ([_target] call EFUNC(common,isAwake)) then { + _output = ["STR_ACE_MEDICAL_CHECK_REPONSE_RESPONSIVE",[_target] call EFUNC(common,getName)]; +} else { + _output = ["STR_ACE_MEDICAL_CHECK_REPONSE_UNRESPONSIVE",[_target] call EFUNC(common,getName)]; +}; -_title = format["STR_ACE_CHECK_RESPONSE"]; -_content = ["STR_ACE_CHECK_RESPONSE_CONTENT"]; -[_caller, _title, _content] call EFUNC(gui,sendDisplayInformationTo); +["displayTextStructured", [_caller], [_output, 2, _caller]] call EFUNC(common,targetEvent); -_caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller]; -[2 + round(random(1)), - {((vehicle (_this select 0) != (_this select 0)) ||((getPos (_this select 0)) distance ((_this select 0) getvariable QGVAR(StartingPositionHandleTreatment)) < 1))}, // the condition - { - private ["_caller","_target", "_output", "_title", "_content"]; - _caller = _this select 0; - _target = _this select 1; - - _output = ""; - if ([_target] call EFUNC(common,isAwake)) then { - _output = format[localize "STR_ACE_CHECK_REPONSE_RESPONSIVE",[_target] call EFUNC(common,getName)]; - } else { - _output = format[localize "STR_ACE_CHECK_REPONSE_UNRESPONSIVE",[_target] call EFUNC(common,getName)]; - }; - - _title = format["STR_ACE_CHECK_RESPONSE"]; - _content = [format[localize "STR_ACE_CHECK_REPONSE_YOU_CHECKED",[_target] call EFUNC(common,getName)],_output]; - [_caller, _title, _content] call EFUNC(gui,sendDisplayInformationTo); - [_target,"examine",_output] call FUNC(addToQuickViewLog); - - [_caller,false] call FUNC(treatmentMutex); - }, // on success - { - [(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo); - [(_this select 0),false] call FUNC(treatmentMutex); - }, // on failure - [_caller, _target] // arguments -] call EFUNC(gui,loadingBar); +[_target,"examine",_output] call FUNC(addToLog); diff --git a/addons/medical/functions/fnc_actionDragUnit.sqf b/addons/medical/functions/fnc_actionDragUnit.sqf deleted file mode 100644 index d0fa1c70ea..0000000000 --- a/addons/medical/functions/fnc_actionDragUnit.sqf +++ /dev/null @@ -1,102 +0,0 @@ -/* -fnc_drag.sqf -Usage: makes the calling unit start dragging the specified unit -Author: Glowbal - -Arguments: array [unit (object), unit (object)] - 1: Caller OBJECT. Unit that initiats the dragging - 2: Target OBJECT. Unit that will be dragged -Returns: none - -Affects: Caller and target Locality -Executes: call -*/ - -#include "script_component.hpp" - -private ["_caller", "_unit", "_positionUnit", "_killOnDrop"]; -_caller = [_this, 0, objNull, [objNull]] call BIS_fnc_param; -_unit = [_this, 1, objNull, [objNull]] call BIS_fnc_param; -_killOnDrop = [_this, 2, false, [false]] call BIS_fnc_param; - -["FUNC(actionDragUnit) has been called",2] call EFUNC(common,debug); - -if ([_caller] call FUNC(isSetTreatmentMutex)) exitwith {}; -[_caller, true] call FUNC(treatmentMutex); - -if (!(_unit isKindOf "CaManBase") || !(_caller isKindOf "CaManBase")) exitwith{ [_caller, false] call FUNC(treatmentMutex);}; -if (vehicle _caller != _caller || vehicle _unit != _unit) exitwith { [_caller, false] call FUNC(treatmentMutex);}; - -if (!([_caller] call EFUNC(common,canInteract)) || {_caller == _unit} || {(([_unit] call EFUNC(common,isAwake)))}) exitwith { - [_caller, false] call FUNC(treatmentMutex); -}; - -if (([_caller] call EFUNC(common,getCarriedObj)) != _unit && !(isNull ([_caller] call EFUNC(common,getCarriedObj))) || {!isNull(_unit getvariable [QGVAR(beingDragged),objNull]) || !isNull(_caller getvariable [QGVAR(dragging),objNull])}) exitwith { - [_caller,objNull] call EFUNC(common,carryObj); - [_caller, false] call FUNC(treatmentMutex); -}; - -if (!alive _unit) exitwith { - [_caller, false] call FUNC(treatmentMutex); - [{ - _this call FUNC(actionDragUnit); - }, [_caller, ([_unit,_caller] call FUNC(makeCopyOfBody_F)), _killOnDrop], 0.25, 0.25] call EFUNC(common,waitAndExecute); -}; - -if (primaryWeapon _caller == "") then { - _caller addWeapon "ACE_FakePrimaryWeapon"; -}; -_caller selectWeapon (primaryWeapon _unit); - -_unit setDir (getDir _unit + 180) % 360; -_unit setPos ((getPos _unit) vectorAdd ((vectorDir _caller) vectorMultiply 1.5)); - -if !([_caller,_unit,[0.125, 1.007, 0]] call EFUNC(common,carryObj)) exitwith { - [_caller, false] call FUNC(treatmentMutex); - // well something went horribly wrong here, should never reach this, since we do checks above.. - -}; - -[_unit, "AinjPpneMstpSnonWrflDb", 2, true] call EFUNC(common,doAnimation); - -_caller selectWeapon (primaryWeapon _caller); // if no primairy weapon, add a fake one first -if (currentWeapon _caller == primaryWeapon _caller) then { - [_caller,"AcinPknlMstpSrasWrflDnon", 1] call EFUNC(common,doAnimation); -} else { - [_caller,"AcinPknlMstpSnonWnonDnon", 1] call EFUNC(common,doAnimation); -}; - -_caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller]; -[2, - {((vehicle (_this select 0) != (_this select 0)) ||((getPos (_this select 0)) distance ((_this select 0) getvariable QGVAR(StartingPositionHandleTreatment)) < 1.5))}, // the condition - { - private ["_caller","_target"]; - _caller = _this select 0; - _target = _this select 1; - _killOnDrop = _this select 2; - [_caller, false] call FUNC(treatmentMutex); - - // Registration for drag/carry functions - _target setvariable [QGVAR(beingDragged),_caller,true]; - _caller setvariable [QGVAR(dragging), _target,true]; - - // Removing any old drop scroll wheel actions - // TODO Do we still want scroll wheel actions? - if (!isnil QGVAR(DROP_ADDACTION)) then { - _caller removeAction GVAR(DROP_ADDACTION); - GVAR(DROP_ADDACTION) = nil; - }; - // Adding the drop scroll wheel action. - GVAR(DROP_ADDACTION) = _caller addAction [format["Drop %1",[_target] call EFUNC(common,getName)], {[_this select 1, _this select 2] call FUNC(actionDropUnit);}]; - - // Raise an event - ["onStartMovingUnit", [_caller], [_caller, _Target, _killOnDrop, true]] call EFUNC(common,targetEvent); - - }, // on success - { - [(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo); - [(_this select 0), false] call FUNC(treatmentMutex); - [(_this select 0), objNull,[0, 0, 0]] call EFUNC(common,carryObj); - }, // on failure - [_caller, _unit, _killOnDrop] // arguments -] call EFUNC(gui,loadingBar); diff --git a/addons/medical/functions/fnc_actionDropUnit.sqf b/addons/medical/functions/fnc_actionDropUnit.sqf deleted file mode 100644 index 7154f6a5d5..0000000000 --- a/addons/medical/functions/fnc_actionDropUnit.sqf +++ /dev/null @@ -1,24 +0,0 @@ - -/* - fnc_drop.sqf - Usage: makes the calling unit start dragging the specified unit - Author: Glowbal - - Arguments: array [unit (object), unit (object)] - Returns: none - - Affects: - Executes: -*/ - -#include "script_component.hpp" - -private ["_caller", "_unit","_info","_draggedPerson"]; -_caller = _this select 0; -_unit = _this select 1; - -if (!isnil QGVAR(DROP_ADDACTION)) then { - [_caller,objNull] call EFUNC(common,carryObj); - _caller removeAction GVAR(DROP_ADDACTION); - GVAR(DROP_ADDACTION) = nil; -}; diff --git a/addons/medical/functions/fnc_actionLoadUnit.sqf b/addons/medical/functions/fnc_actionLoadUnit.sqf index cd20140bdb..f88adc02d7 100644 --- a/addons/medical/functions/fnc_actionLoadUnit.sqf +++ b/addons/medical/functions/fnc_actionLoadUnit.sqf @@ -1,31 +1,37 @@ -/** - * fn_load_CMS.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Action for loading an unconscious or dead unit in the nearest vechile * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: The medic + * 1: The patient + * + * Return Value: + * NONE + * + * Public: No */ + #include "script_component.hpp" -private ["_caller", "_unit","_vehicle", "_loaded"]; +private ["_caller", "_target","_vehicle", "_loaded"]; _caller = _this select 0; -_unit = _this select 1; +_target = _this select 1; -if ([_unit] call cse_fnc_isAwake) exitwith { - hintSilent "This person is awake and cannot be loaded"; +if ([_target] call EFUNC(common,isAwake)) exitwith { + // TODO localization + ["displayTextStructured", [_caller], [["This person (%1) is awake and cannot be loaded", [_target] call EFUNC(common,getName)], 1.5, _caller]] call EFUNC(common,targetEvent); }; -[_caller,objNull] call cse_fnc_carryObj; -[_unit,objNull] call cse_fnc_carryObj; +[_caller, objNull] call cse_fnc_carryObj; +[_target, objNull] call cse_fnc_carryObj; -_vehicle = [_caller, _unit] call EFUNC(common,loadPerson_F); +_vehicle = [_caller, _target] call EFUNC(common,loadPerson); if (!isNull _vehicle) then { if (!isnil QGVAR(DROP_ADDACTION)) then { _caller removeAction GVAR(DROP_ADDACTION); GVAR(DROP_ADDACTION) = nil; }; -}; \ No newline at end of file +}; diff --git a/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf b/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf index 8df95c24d9..9cd3bf1bed 100644 --- a/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf +++ b/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf @@ -1,18 +1,22 @@ -/** - * fn_placeInBodyBag.sqf - * @Descr: - * @Author: Glowbal +/* + * Author: Glowbal + * Replace a dead body by a bodybag * - * @Arguments: [] - * @Return: - * @PublicAPI: true + * Arguments: + * 0: The patient + * 1: The new item classname + * + * Return Value: + * nil + * + * Public: Yes */ #include "script_component.hpp" -private ["_unit","_caller"]; -_unit = _this select 0; -_caller = _this select 1; +private ["_target","_caller", "_nameOfUnit", "_onPosition", "_bodyBagCreated"]; +_caller = _this select 0; +_target = _this select 1; if !([_caller, "ACE_itemBodyBag"] call EFUNC(common,hasItem)) exitwith {}; @@ -21,23 +25,15 @@ if !([_caller, "ACE_itemBodyBag"] call EFUNC(common,hasItem)) exitwith {}; _nameOfUnit = [_unit] call EFUNC(common,getName); if (alive _unit) then { // force kill the unit. - [_unit, true] call EFUNC(common,setDead); + [_unit, true] call FUNC(setDead); }; _onPosition = getPos _unit; -_allVariables = [_unit] call EFUNC(common,getAllDefinedSetVariables); deleteVehicle _unit; - _bodyBagCreated = createVehicle ["ACE_bodyBag", _onPosition, [], 0, "NONE"]; -_bodyBagCreated setvariable [QEGVAR(common,nameOfBody), _nameOfUnit, true]; - -{ -// [_bodyBagCreated,_x select 0, _x select 2] call EFUNC(common,setDefinedVariable); -}foreach _allVariables; // reset the position to ensure it is on the correct one. _bodyBagCreated setPos _onPosition; -[[_bodyBagCreated], QEFUNC(common,revealObject_f), true] call BIS_fnc_MP; +// TODO Does this need to be something with QUOTE(DEFUNC)? +[[_bodyBagCreated], QEFUNC(common,revealObject), true] call call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ -_bodyBagCreated setvariable [QEGVAR(logistics,enableDrag), true, true]; - -_bodyBagCreated; \ No newline at end of file +_bodyBagCreated; diff --git a/addons/medical/functions/fnc_actionRemoveTourniquet.sqf b/addons/medical/functions/fnc_actionRemoveTourniquet.sqf index 30363453e2..2944c2f6e2 100644 --- a/addons/medical/functions/fnc_actionRemoveTourniquet.sqf +++ b/addons/medical/functions/fnc_actionRemoveTourniquet.sqf @@ -1,62 +1,41 @@ -/** - * fn_removeTourniquet.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Action for removing the tourniquet on specified selection * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: The medic + * 1: The patient + * 2: SelectionName + * + * Return Value: + * NONE + * + * Public: Yes */ #include "script_component.hpp" -private ["_caller","_target","_part","_selectionName","_removeItem","_tourniquets"]; +private ["_caller","_target","_part","_selectionName","_removeItem","_tourniquets", "_output"]; _caller = _this select 0; _target = _this select 1; _selectionName = _this select 2; -[_caller,"You attempt to remove a tourniquet"] call EFUNC(common,sendHintTo); -if ([_caller] call FUNC(isSetTreatmentMutex)) exitwith {["MUTEX HAS BEEN SET - EXITING"] call EFUNC(common,debug);}; -[_caller,true] call FUNC(treatmentMutex); - -_part = [_selectionName] call FUNC(getBodyPartNumber); -_tourniquets = [_target,QGVAR(tourniquets)] call EFUNC(common,getDefinedVariable); +// grab the required data +_part = [_selectionName] call FUNC(selectionNameToNumber); +_tourniquets = _target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; +// Check if there is a tourniquet on this bodypart if ((_tourniquets select _part) == 0) exitwith { - [_caller, false] call FUNC(treatmentMutex); - [_caller,"There is no tourniquet on this body part!"] call EFUNC(common,sendHintTo); + // TODO localization + _output = "There is no tourniquet on this body part!"; + ["displayTextStructured", [_caller], [_output, 1.5, _caller]] call EFUNC(common,targetEvent); }; -if (vehicle _caller == _caller && (vehicle _target == _target)) then { - [_caller,"AinvPknlMstpSlayWrflDnon_medic", 1] call EFUNC(common,doAnimation); -}; - -_caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller]; -[2.5, - {((vehicle (_this select 0) != (_this select 0)) ||((getPos (_this select 0)) distance ((_this select 0) getvariable QGVAR(StartingPositionHandleTreatment)) < 1))}, // the condition - { - private ["_caller","_target", "_selectionName", "_part","_tourniquets"]; - _caller = _this select 0; - _target = _this select 1; - _selectionName = _this select 2; - - _part = [_selectionName] call FUNC(getBodyPartNumber); - _tourniquets = [_target,QGVAR(tourniquets)] call EFUNC(common,getDefinedVariable); - _tourniquets set[_part,0]; - [_target,QGVAR(tourniquets),_tourniquets] call EFUNC(common,setDefinedVariable); - - _caller addItem "ACE_tourniquet"; - [_caller,false] call FUNC(treatmentMutex); - - [_target,"treatment",format["%1 removed a tourniquet on %2",[_caller] call EFUNC(common,getName),_selectionName]] call FUNC(addActivityToLog); - - [_caller,false] call FUNC(treatmentMutex); - }, // on success - { - [(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo); - [(_this select 0),false] call FUNC(treatmentMutex); - }, // on failure - [_caller, _target, _selectionName] // arguments -] call EFUNC(gui,loadingBar); +// Removing the tourniquet +_tourniquets set[_part, 0]; +_target setvariable [QGVAR(tourniquets), _tourniquets, true]; +// Adding the tourniquet item to the caller +_caller addItem QGVAR(tourniquet); +// "AinvPknlMstpSlayWrflDnon_medic diff --git a/addons/medical/functions/fnc_actionUnloadUnit.sqf b/addons/medical/functions/fnc_actionUnloadUnit.sqf index 6eefb4b138..92c06e176a 100644 --- a/addons/medical/functions/fnc_actionUnloadUnit.sqf +++ b/addons/medical/functions/fnc_actionUnloadUnit.sqf @@ -1,28 +1,33 @@ -/** - * fn_unload_CMS.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Action for unloading an unconscious or dead unit from a vechile * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: The medic + * 1: The patient + * 2: Drag after unload + * + * Return Value: + * NONE + * + * Public: No */ #include "script_component.hpp" -private ["_caller", "_unit","_vehicle", "_drag", "_handle"]; -_caller = [_this, 0, ObjNull,[ObjNull]] call BIS_fnc_Param; -_unit = [_this, 1, ObjNull,[ObjNull]] call BIS_fnc_Param; -_drag = [_this, 2, false, [false]] call BIS_fnc_Param; +private ["_caller", "_target","_vehicle", "_drag", "_handle"]; +_caller = _this select 0; +_target = _this select 1; +_drag = if (count _this > 2) then {_this select 2} else {false}; // cannot unload a unit not in a vehicle. -if (vehicle _unit == _unit) exitwith {}; -if (([_unit] call cse_fnc_isAwake)) exitwith {}; +if (vehicle _target == _target) exitwith {}; +if (([_target] call cse_fnc_isAwake)) exitwith {}; -if ([_caller, _unit] call EFUNC(common,unloadPerson_F)) then { +if ([_caller, _target] call EFUNC(common,unloadPerson)) then { if (_drag) then { if ((vehicle _caller) == _caller) then { - [[_caller,_unit], QUOTE(FUNC(actionDragUnit)), _caller, false] call BIS_fnc_MP; + [[_caller, _target], QUOTE(DFUNC(actionDragUnit)), _caller, false] call BIS_fnc_MP; }; }; -}; \ No newline at end of file +}; diff --git a/addons/medical/functions/fnc_addActivityToLog.sqf b/addons/medical/functions/fnc_addActivityToLog.sqf deleted file mode 100644 index c5fd4b1976..0000000000 --- a/addons/medical/functions/fnc_addActivityToLog.sqf +++ /dev/null @@ -1,46 +0,0 @@ -/** - * fn_addActivityToLog.sqf - * @Descr: adds an item to the activity log - * @Author: Glowbal - * - * @Arguments: [unit OBJECT, type STRING, message STRING] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit","_caller","_type","_activity","_log"]; - -_unit = _this select 0; -_type = _this select 1; -_message = _this select 2; - -if (!local _unit) exitwith { - [_this, QUOTE(FUNC(addActivityToLog)), _unit] call EFUNC(common,execRemoteFnc); -}; -_lastNumber = date select 4; -_moment = format["%1:%2",date select 3, _lastNumber]; -if (_lastNumber < 10) then { - _moment = format["%1:0%2",date select 3, _lastNumber]; -}; - - -_log = [_unit, QGVAR(activityLog)] call EFUNC(common,getDefinedVariable); -if (count _log >= 8) then { - _newLog = []; - _counter = 0; - { - // ensure the first element will not be added - if (_counter > 0) then { - _newLog pushback _x; - } else { - _counter = _counter + 1; - }; - }foreach _log; - _log = _newLog; -}; -_log pushback [_message,_moment,_type]; - -[_unit, QGVAR(activityLog),_log] call EFUNC(common,setDefinedVariable); -["Medical_OnActivityLogChanged", [_unit, _type, _message]] call ace_common_fnc_localEvent; diff --git a/addons/medical/functions/fnc_addHeartRateAdjustment.sqf b/addons/medical/functions/fnc_addHeartRateAdjustment.sqf index 798ec18b0e..dbe0271e99 100644 --- a/addons/medical/functions/fnc_addHeartRateAdjustment.sqf +++ b/addons/medical/functions/fnc_addHeartRateAdjustment.sqf @@ -1,11 +1,17 @@ -/** - * fn_addHeartRateAdjustment.sqf - * @Descr: Increase the Heart Rate of a local unit by given number within given amount of seconds. - * @Author: Glowbal +/* + * Author: Glowbal, KoffeinFlummi + * Increase the Heart Rate of a local unit by given number within given amount of seconds. * - * @Arguments: [unit OBJECT, value NUMBER, time NUMBER (Amount of seconds), callBack CODE (Called when adjustment is completed)] - * @Return: void - * @PublicAPI: true + * Arguments: + * 0: The unit + * 1: value + * 2: time in seconds + * 3: callback + * + * Return Value: + * nil + * + * Public: Yes */ #include "script_component.hpp" @@ -16,7 +22,7 @@ _value = [_this, 1, 0, [0]] call BIS_fnc_Param; _time = [_this, 2, 1, [0]] call BIS_fnc_Param; _callBack = [_this, 3, {}, [{}]] call BIS_fnc_Param; -_adjustment = [_unit, QGVAR(heartRateAdjustments)] call EFUNC(common,getDefinedVariable); +_adjustment = _unit getvariable [QGVAR(heartRateAdjustments), []]; _adjustment pushback [_value, _time, _callBack]; _unit setvariable [QGVAR(heartRateAdjustments), _adjustment ]; -["Medical_onHeartRateAdjustmentAdded", [_unit, _value, _time]] call ace_common_fnc_localEvent; \ No newline at end of file +["Medical_onHeartRateAdjustmentAdded", [_unit, _value, _time]] call ace_common_fnc_localEvent; diff --git a/addons/medical/functions/fnc_addOpenWounds.sqf b/addons/medical/functions/fnc_addOpenWounds.sqf deleted file mode 100644 index 1a87e409f9..0000000000 --- a/addons/medical/functions/fnc_addOpenWounds.sqf +++ /dev/null @@ -1,47 +0,0 @@ -/** - * fn_addOpenWounds.sqf - * @Descr: Add open wounds to unit. - * @Author: Glowbal - * - * @Arguments: [unit OBJECT (The object that will recieve the wound), bodyPart STRING, type STRING (Small, medium or large), amount NUMBER (The amount of open wounds added)] - * @Return: void - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private ["_unit", "_bodyPart", "_type", "_openWounds", "_selection", "_amount", "_newAmount", "_global"]; -_unit = _this select 0; -_bodyPart = _this select 1; -_type = _this select 2; -_amount = _this select 3; -_global = if (count _this > 4) then {_this select 4} else {true}; - -if (typeName _bodyPart == "STRING") then { - _bodyPart = [_bodyPart] call FUNC(getBodyPartNumber); -}; -if (typeName _type == "STRING") then { - _type = switch (toLower _type) do { - case "small": {0}; - case "medium": {1}; - case "large": {2}; - default {-1}; - }; -}; - -if (_type < 0) exitwith { - [format["Adding an injury with an invalid type: %1",_this], 0] call EFUNC(common,debug); -}; - -_openWounds = [_unit,QGVAR(openWounds)] call EFUNC(common,getDefinedVariable); -_selection = _openWounds select _bodyPart; -_newAmount = (_selection select _type) + _amount; -if (_newAmount < 0) then { - _newAmount = 0; -}; -_selection set [ _type, _newAmount]; -_openWounds set [ _bodyPart , _selection]; -[_unit, QGVAR(openWounds),_openWounds, _global] call EFUNC(common,setDefinedVariable); - -[_unit] call FUNC(addToInjuredCollection); -["Medical_onOpenWoundsAdded", [_unit, _bodyPart, _type, _amount]] call ace_common_fnc_localEvent; \ No newline at end of file diff --git a/addons/medical/functions/fnc_addToInjuredCollection.sqf b/addons/medical/functions/fnc_addToInjuredCollection.sqf index f82e0fd5e4..587b4ca1fb 100644 --- a/addons/medical/functions/fnc_addToInjuredCollection.sqf +++ b/addons/medical/functions/fnc_addToInjuredCollection.sqf @@ -1,29 +1,59 @@ -/** - * fnc_addToInjuredCollection.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Enabled the vitals loop for a unit. * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: The Unit + * + * ReturnValue: + * + * + * Public: Yes */ #include "script_component.hpp" private "_unit"; _unit = _this select 0; -if !(local _unit) exitwith{ - [[_unit], QUOTE(FUNC(addToInjuredCollection)), _unit] call EFUNC(common,execRemoteFnc); -}; +_force = if (count _this > 1) then {_this select 1} else {false}; -if !(_unit getvariable[QGVAR(addedToUnitLoop),false]) then{ - _unit setvariable [QGVAR(addedToUnitLoop),true, true]; -}; - -if ([_unit] call FUNC(hasMedicalEnabled)) then { - if (isnil QGVAR(injuredUnitCollection)) then { - GVAR(injuredUnitCollection) = []; +if ([_unit] call FUNC(hasMedicalEnabled) || _force) then { + if ((_unit getvariable[QGVAR(addedToUnitLoop),false] || !alive _unit) && !_force) exitwith{}; + if !(local _unit) exitwith { + [[_unit, _force], QUOTE(DFUNC(addToInjuredCollection)), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ }; - if (_unit in GVAR(injuredUnitCollection)) exitwith {}; - GVAR(injuredUnitCollection) pushback _unit; + _unit setvariable [QGVAR(addedToUnitLoop), true, true]; + + if (isNil QGVAR(InjuredCollection)) then { + GVAR(InjuredCollection) = []; + }; + GVAR(InjuredCollection) pushback _unit; + + [{ + private "_unit"; + _unit = (_this select 0) select 0; + if (!alive _unit || !local _unit) then { + [_this select 1] call CBA_fnc_removePerFrameHandler; + if (!local _unit) then { + if (GVAR(level) >= 2) then { + _unit setvariable [QGVAR(heartRate), _unit getvariable [QGVAR(heartRate), 0], true]; + _unit setvariable [QGVAR(bloodPressure), _unit getvariable [QGVAR(bloodPressure), [0, 0]], true]; + }; + _unit setvariable [QGVAR(bloodVolume), _unit getvariable [QGVAR(bloodVolume), 0], true]; + }; + GVAR(InjuredCollection) = GVAR(InjuredCollection) - [_unit]; + } else { + [_unit] call FUNC(handleUnitVitals); + + private "_pain"; + _pain = _unit getvariable [QGVAR(pain), 0]; + if (_pain > 0) then { + if (_pain > 0.7 && {random(1) > 0.6}) then { + [_unit] call FUNC(setUnconscious); + }; + + [_unit, _pain] call FUNC(playInjuredSound); + }; + }; + }, 1, [_unit]] call CBA_fnc_addPerFrameHandler; }; diff --git a/addons/medical/functions/fnc_addToLog.sqf b/addons/medical/functions/fnc_addToLog.sqf new file mode 100644 index 0000000000..c36d57b482 --- /dev/null +++ b/addons/medical/functions/fnc_addToLog.sqf @@ -0,0 +1,56 @@ +/* + * Author: Glowbal + * Add an entry to the specified log + * + * Arguments: + * 0: The patient + * 1: The log type + * 2: The message + * 3: The arguments for localization + * + * Return Value: + * nil + * + * Public: Yes + */ + +#include "script_component.hpp" + +private ["_unit", "_type", "_message", "_arguments", "_lastNumber", "_moment", "_logVarName", "_log","_newLog"]; +_unit = _this select 0; +_type = _this select 1; +_message = _this select 2; +_arguments = _this select 3; + +if (!local _unit) exitwith { + [_this, QUOTE(DFUNC(addToLog)), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ +}; + +_lastNumber = date select 4; +_moment = format["%1:%2",date select 3, _lastNumber]; +if (_lastNumber < 10) then { + _moment = format["%1:0%2",date select 3, _lastNumber]; +}; +_logVarName = format[QGVAR(logFile_%1), _type]; + +_log = _unit getvariable [_logVarName, []]; +if (count _log >= 8) then { + _newLog = []; + { + // ensure the first element will not be added + if (_foreachIndex > 0) then { + _newLog pushback _x; + }; + }foreach _log; + _log = _newLog; +}; +_log pushback [_message,_moment,_type, _arguments]; + +_unit setvariable [_logVarName, _log, true]; +["medical_onLogEntryAdded", [_unit, _type, _message, _arguments]] call ace_common_fnc_localEvent; + +_logs = _unit getvariable [QGVAR(allLogs), []]; +if !(_logVarName in _logs) then { + _logs pushback _logVarName; + _unit setvariable [QGVAR(allLogs), _logs, true]; +}; diff --git a/addons/medical/functions/fnc_addToQuickViewLog.sqf b/addons/medical/functions/fnc_addToQuickViewLog.sqf deleted file mode 100644 index ddac44c3b2..0000000000 --- a/addons/medical/functions/fnc_addToQuickViewLog.sqf +++ /dev/null @@ -1,45 +0,0 @@ -/** - * fn_addToQuickViewLog.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit","_type","_activity","_log", "_lastNumber", "_message"]; - -_unit = _this select 0; -_type = _this select 1; -_message = _this select 2; - -if (!local _unit) exitwith { - [_this, QUOTE(FUNC(addToQuickViewLog)), _unit] call EFUNC(common,execRemoteFnc); -}; - -_lastNumber = date select 4; -_moment = format["%1:%2",date select 3, _lastNumber]; -if (_lastNumber < 10) then { - _moment = format["%1:0%2",date select 3, _lastNumber]; -}; - -_log = [_unit,QGVAR(quickViewLog)] call EFUNC(common,getDefinedVariable); -if (count _log >= 8) then { - _newLog = []; - _counter = 0; - { - if (_counter > 0) then { - _newLog pushback _x; - } else { - _counter = _counter + 1; - }; - }foreach _log; - _log = _newLog; -}; -_log pushback [_message,_moment,_type]; - -[_unit,QGVAR(quickViewLog),_log] call EFUNC(common,setDefinedVariable); -["Medical_onQuickViewLogChanged", [_unit, _type, _message]] call ace_common_fnc_localEvent; \ No newline at end of file diff --git a/addons/medical/functions/fnc_addToTriageList.sqf b/addons/medical/functions/fnc_addToTriageCard.sqf similarity index 54% rename from addons/medical/functions/fnc_addToTriageList.sqf rename to addons/medical/functions/fnc_addToTriageCard.sqf index ec6fbc7d60..49e642cfc4 100644 --- a/addons/medical/functions/fnc_addToTriageList.sqf +++ b/addons/medical/functions/fnc_addToTriageCard.sqf @@ -1,11 +1,15 @@ -/** - * fn_addToTriageList.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Add an entry to the triage card * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: The patient + * 1: The new item classname + * + * Return Value: + * nil + * + * Public: Yes */ #include "script_component.hpp" @@ -15,10 +19,10 @@ _unit = _this select 0; _newItem = _this select 1; if (!local _unit) exitwith { - [_this, QUOTE(FUNC(addToTriageList)), _unit] call EFUNC(common,execRemoteFnc); + [_this, QUOTE(DFUNC(addToTriageList)), _unit] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ }; -_log = [_unit,QGVAR(triageCard)] call EFUNC(common,getDefinedVariable); +_log = _unit getvariable [QGVAR(triageCard), []]; _inList = false; _amount = 1; { @@ -26,6 +30,7 @@ _amount = 1; private "_info"; _info = _log select _foreachIndex; _info set [1,(_info select 1) + 1]; + _info set [2, time]; _log set [_foreachIndex, _info]; _amount = (_info select 1); @@ -34,8 +39,7 @@ _amount = 1; }foreach _log; if (!_inList) then { - _log pushback [_newItem,1]; + _log pushback [_newItem, 1, time]; }; - -[_unit,QGVAR(triageCard),_log] call EFUNC(common,setDefinedVariable); -["Medical_onItemAddedToTriageCard", [_unit, _newItem, _amount]] call ace_common_fnc_localEvent; \ No newline at end of file +_unit setvariable [QGVAR(triageCard), _log, true]; +["Medical_onItemAddedToTriageCard", [_unit, _newItem, _amount]] call ace_common_fnc_localEvent; diff --git a/addons/medical/functions/fnc_addTreatmentOption.sqf b/addons/medical/functions/fnc_addTreatmentOption.sqf deleted file mode 100644 index 12d5cb1da1..0000000000 --- a/addons/medical/functions/fnc_addTreatmentOption.sqf +++ /dev/null @@ -1,31 +0,0 @@ -/** - * fnc_addTreatmentOption.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_displayName","_tooltip","_condition","_code", "_category","_options"]; -_displayName = _this select 0; -_tooltip = _this select 1; -_condition = _this select 2; -_code = _this select 3; -_category = _this select 4; - -if (isLocalized _displayName) then { - _displayName = localize _displayName; -}; - -if (isLocalized _tooltip) then { - _tooltip = localize _tooltip; -}; - -_options = missionNamespace getvariable [QGVAR(registeredTreatmentOptions_)+_category, []]; -_options pushback [_displayName, _tooltip, _condition, _code]; - -missionNamespace setvariable [QGVAR(registeredTreatmentOptions_)+_category, _options]; diff --git a/addons/medical/functions/fnc_addUnconsciousCondition.sqf b/addons/medical/functions/fnc_addUnconsciousCondition.sqf new file mode 100644 index 0000000000..579a55ca1f --- /dev/null +++ b/addons/medical/functions/fnc_addUnconsciousCondition.sqf @@ -0,0 +1,25 @@ +/* + * Author: Glowbal + * Adds new condition for the unconscious state. Conditions are not actively checked for units unless unit is in unconscious state. + * + * Arguments: + * 0: Code, should return a boolean + * + * ReturnValue: + * + * + * Public: Yes + */ + +#include "script_component.hpp" + +if (isnil QGVAR(unconsciousConditions)) then { + GVAR(unconsciousConditions) = []; +}; +if (typeName _this == typeName []) then { + { + if (typeName _x == typeName {}) then { + GVAR(unconsciousConditions) pushback _x; + }; + }foreach _this; +}; diff --git a/addons/medical/functions/fnc_canAccessMedicalEquipment.sqf b/addons/medical/functions/fnc_canAccessMedicalEquipment.sqf index d0522a79dd..4b1940b7e3 100644 --- a/addons/medical/functions/fnc_canAccessMedicalEquipment.sqf +++ b/addons/medical/functions/fnc_canAccessMedicalEquipment.sqf @@ -1,18 +1,22 @@ -/** - * fn_canAccessMedicalEquipment.sqf - * @Descr: Check if caller can access targets medical equipment, based upon accessLevel - * @Author: Glowbal +/* + * Author: Glowbal + * Check if caller can access targets medical equipment, based upon accessLevel. * - * @Arguments: [target OBJECT, caller OBJECT] - * @Return: BOOL - * @PublicAPI: true + * Arguments: + * 0: The caller + * 1: The target + * + * ReturnValue: + * Can Treat + * + * Public: Yes */ #include "script_component.hpp" private ["_target", "_caller", "_accessLevel", "_return"]; -_target = _this select 0; -_caller = _this select 1; +_caller = _this select 0; +_target = _this select 1; _accessLevel = _target getvariable [QGVAR(allowSharedEquipmentAccess), -1]; diff --git a/addons/medical/functions/fnc_canGoUnconsciousState.sqf b/addons/medical/functions/fnc_canGoUnconsciousState.sqf deleted file mode 100644 index 6eaf983e31..0000000000 --- a/addons/medical/functions/fnc_canGoUnconsciousState.sqf +++ /dev/null @@ -1,17 +0,0 @@ -/** - * fn_canGoUnconsciousState.sqf - * @Descr: Checks if an object can move into unconscious state - * @Author: Glowbal - * - * @Arguments: [unit OBJECT] - * @Return: BOOL true if object can move into unconscious state - * @PublicAPI: true - */ - - -#include "script_component.hpp" - -private ["_unit"]; -_unit = _this select 0; - -(!(isNull _unit) && {(_unit isKindOf "CaManBase") && ([_unit] call EFUNC(common,isAwake))}) \ No newline at end of file diff --git a/addons/medical/functions/fnc_canPutInBodyBag.sqf b/addons/medical/functions/fnc_canPutInBodyBag.sqf deleted file mode 100644 index 07626c0d21..0000000000 --- a/addons/medical/functions/fnc_canPutInBodyBag.sqf +++ /dev/null @@ -1,17 +0,0 @@ -/** - * fn_canPutInBodyBag.sqf - * @Descr: - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private ["_unit","_caller"]; -_caller = _this select 0; -_target = _this select 1; - -([_caller, "ACE_itemBodyBag"] call EFUNC(common,hasItem) && {(!(alive _target) || (_target getvariable [QEGVAR(common,isDead),false]) || (_target getvariable ["ACE_inReviveState", false]))} && {(_target distance _caller) < 7.5} && (vehicle _target == _unit)); // return \ No newline at end of file diff --git a/addons/medical/functions/fnc_canTreat.sqf b/addons/medical/functions/fnc_canTreat.sqf new file mode 100644 index 0000000000..0c48222977 --- /dev/null +++ b/addons/medical/functions/fnc_canTreat.sqf @@ -0,0 +1,67 @@ +/* + * Author: Glowbal + * Check if the treatment action can be performed. + * + * Arguments: + * 0: The caller + * 1: The target + * 2: Selection name + * 3: ACE_Medical_Treatments Classname + * + * ReturnValue: + * Can Treat + * + * Public: Yes + */ + +#include "script_component.hpp" + +private ["_caller", "_target", "_selectionName", "_className", "_config", "_availableLevels", "_medicRequired", "_items", "_locations", "_return", "_condition"]; +_caller = _this select 0; +_target = _this select 1; +_selectionName = _this select 2; +_className = _this select 3; + +if !(_target isKindOf "CAManBase") exitWith {false}; + +_config = (ConfigFile >> "ACE_Medical_Actions" >> "Basic" >> _className); +if (GVAR(level)>=2) then { + _config = (ConfigFile >> "ACE_Medical_Actions" >> "Advanced" >> _className); +}; +if !(isClass _config) exitwith {false}; + +_medicRequired = getNumber (_config >> "requiredMedic"); +if !([_caller, _medicRequired] call FUNC(isMedic)) exitwith {false}; + +_items = getArray (_config >> "items"); +if (count _items > 0 && {!([_caller, _target, _items] call FUNC(hasItems))}) exitwith {false}; + +_locations = getArray (_config >> "treatmentLocations"); + +_return = true; +if (isText (_config >> "Condition")) then { + _condition = getText(_config >> "condition"); + if (_condition != "") then { + if (isnil _condition) then { + _condition = compile _condition; + } else { + _condition = missionNamespace getvariable _condition; + }; + if (typeName _condition == "BOOL") then { + _return = _condition; + } else { + _return = [_caller, _target, _selectionName, _className] call _condition; + }; + }; +}; +if (!_return) exitwith {false}; + +if ("All" in _locations) exitwith {true}; + +{ + if (_x == "field") exitwith {_return = true;}; + if (_x == "MedicalFacility" && {[_caller, _target] call FUNC(inMedicalFacility)}) exitwith {_return = true;}; + if (_x == "MedicalVehicle" && {[_caller, _target] call FUNC(inMedicalVehicle)}) exitwith {_return = true;}; +}foreach _locations; + +_return; diff --git a/addons/medical/functions/fnc_checkDamage.sqf b/addons/medical/functions/fnc_checkDamage.sqf deleted file mode 100644 index 67495c25de..0000000000 --- a/addons/medical/functions/fnc_checkDamage.sqf +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Author: KoffeinFlummi - * - * Checks the unit for leg and arm damage, and removes orphan structural damage. - * - * Arguments: - + 0: Unit - * 1: Leg Damage - * 2: Arm Damage - * 3: Remove orphan damage? (Bool; optional, default No) - * - * Return Value: - * None - */ - -#define LEGDAMAGETRESHOLD1 1 -#define LEGDAMAGETRESHOLD2 1.7 -#define ARMDAMAGETRESHOLD1 1 -#define ARMDAMAGETRESHOLD2 1.7 - -private ["_unit", "_legdamage", "_armdamage", "_damagesum"]; - -_unit = _this select 0; -_legdamage = _this select 1; -_armdamage = _this select 2; - -// Leg Damage -// lightly wounded, only limit walking speed (forceWalk is for suckers) -if (_legdamage >= LEGDAMAGETRESHOLD1) then { - if (_unit getHitPointDamage "HitLegs" != 1) then {_unit setHitPointDamage ["HitLegs", 1]}; -} else { - if (_unit getHitPointDamage "HitLegs" != 0) then {_unit setHitPointDamage ["HitLegs", 0]}; -}; -// @ŧodo: force prone for completely fucked up legs. - -// Arm Damage -// fx only -if (_armdamage >= ARMDAMAGETRESHOLD1) then { - if (_unit getHitPointDamage "HitHands" != 1) then {_unit setHitPointDamage ["HitHands", 1]}; -} else { - if (_unit getHitPointDamage "HitHands" != 0) then {_unit setHitPointDamage ["HitHands", 0]}; -}; - -// remove leftover structural damage if unit is already fully healed -if (count _this > 3 and _this select 3) then { - _damagesum = (_unit getHitPointDamage "HitHead") + - (_unit getHitPointDamage "HitBody") + - (_unit getHitPointDamage "HitLeftArm") + - (_unit getHitPointDamage "HitRightArm") + - (_unit getHitPointDamage "HitLeftLeg") + - (_unit getHitPointDamage "HitRightLeg"); - if (_damagesum <= 0.06) then { - _unit setDamage 0; - }; -}; diff --git a/addons/medical/functions/fnc_cleanUpCopyOfBody_f.sqf b/addons/medical/functions/fnc_cleanUpCopyOfBody_f.sqf deleted file mode 100644 index b20169e9f5..0000000000 --- a/addons/medical/functions/fnc_cleanUpCopyOfBody_f.sqf +++ /dev/null @@ -1,26 +0,0 @@ -/** - * fn_cleanUpCopyOfBody_f.sqf - * @Descr: Called from a custom eventhandler to ensure that any copies of bodies are cleaned up. - * @Author: Glowbal - * - * @Arguments: [unit OBJECT] - * @Return: BOOL - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private ["_unit", "_copy"]; -_unit = _this select 0; - -_copy = _unit getvariable QGVAR(copyOfBody_f); -if (isnil "_copy") exitwith {false}; -[format["Cleaning up a copy of Body: %1 %2", _unit, _copy]] call EFUNC(common,debug); -// lets clean it up -_unit setvariable [QGVAR(originalCopy_f), nil, true]; -_unit setvariable [QGVAR(copyOfBody_f), nil, true]; -if (!isNull _copy) then { - deleteVehicle _copy; -}; - -true; \ No newline at end of file diff --git a/addons/medical/functions/fnc_determineIfFatal.sqf b/addons/medical/functions/fnc_determineIfFatal.sqf index b14822efeb..978aa16b2b 100644 --- a/addons/medical/functions/fnc_determineIfFatal.sqf +++ b/addons/medical/functions/fnc_determineIfFatal.sqf @@ -10,23 +10,24 @@ #include "script_component.hpp" -private ["_unit","_part","_damageThreshold"]; +private ["_unit","_part","_damageThreshold", "_withDamage"]; _unit = _this select 0; _part = _this select 1; +_withDamage = if (count _this > 2) then { _this select 2} else {0}; if (!alive _unit) exitwith {true}; - +if (_part < 0 || _part > 5) exitwith {}; if ((vehicle _unit != _unit) && {!alive (vehicle _unit)}) exitwith { true }; // Find the correct Damage threshold for unit. _damageThreshold = [1,1,1]; if (isPlayer _unit) then { - _damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(damageThreshold_Players), GVAR(damageThreshold_Players), GVAR(damageThreshold_Players) * 1.7]]; + //_damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(damageThreshold_Players), GVAR(damageThreshold_Players), GVAR(damageThreshold_Players) * 1.7]]; } else { - _damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(damageThreshold_AI), GVAR(damageThreshold_AI), GVAR(damageThreshold_AI) * 1.7]]; + //_damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(damageThreshold_AI), GVAR(damageThreshold_AI), GVAR(damageThreshold_AI) * 1.7]]; }; -_damageBodyPart = ([_unit,QGVAR(bodyPartStatus),[0,0,0,0,0,0]] call EFUNC(common,getDefinedVariable)) select _part; +_damageBodyPart = ((_unit getvariable [QGVAR(bodyPartStatus),[0, 0, 0, 0, 0, 0]]) select _part) + _withDamage; // Check if damage to body part is higher as damage head if (_part == 0) exitwith { diff --git a/addons/medical/functions/fnc_determineIfUnconscious.sqf b/addons/medical/functions/fnc_determineIfUnconscious.sqf deleted file mode 100644 index ebc3af26eb..0000000000 --- a/addons/medical/functions/fnc_determineIfUnconscious.sqf +++ /dev/null @@ -1,40 +0,0 @@ -/** - * fn_determineIfUnconscious.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit","_part","_damageThreshold"]; -_unit = _this select 0; -_part = _this select 1; - -if (!alive _unit) exitwith { true }; - -if ((vehicle _unit != _unit) && {!alive (vehicle _unit)}) exitwith { true }; - -// Find the correct Damage threshold for unit. -_damageThreshold = if (isPlayer _unit) then { - missionNamespace getvariable[QGVAR(unitDamageThreshold), [GVAR(damageThreshold_Players), GVAR(damageThreshold_Players), GVAR(damageThreshold_Players)]]; -} else { - missionNamespace getvariable[QGVAR(unitDamageThreshold), [GVAR(damageThreshold_AI), GVAR(damageThreshold_AI), GVAR(damageThreshold_AI)]]; -}; - -_damageBodyPart = ([_unit,QGVAR(bodyPartStatus),[0,0,0,0,0,0]] call EFUNC(common,getDefinedVariable)) select _part; - -// Check if damage to body part is higher as damage head -if (_part == 0) exitwith { - ((_damageBodyPart * GVAR(setting_medicalDifficulty)) >= ((_damageThreshold select 0) * 0.7) && {(random(1) > 0.35)}); -}; - -// Check if damage to body part is higher as damage torso -if (_part == 1) exitwith { - ((_damageBodyPart * GVAR(setting_medicalDifficulty)) >= ((_damageThreshold select 1) * 0.5) && {(random(1) > 0.4)}); -}; -// Check if damage to body part is higher as damage limbs -((_damageBodyPart * GVAR(setting_medicalDifficulty)) >= ((_damageThreshold select 2) * 0.8) && {(random(1) > 0.7)}); \ No newline at end of file diff --git a/addons/medical/functions/fnc_displayPatientInformation.sqf b/addons/medical/functions/fnc_displayPatientInformation.sqf new file mode 100644 index 0000000000..36a1e39511 --- /dev/null +++ b/addons/medical/functions/fnc_displayPatientInformation.sqf @@ -0,0 +1,152 @@ +/* + * Author: Glowbal + * Displays the patient information for given unit. + * + * Arguments: + * 0: The Unit + * 1: Show + * + * ReturnValue: + * nil + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_target", "_show"]; +_target = _this select 0; +_show = if (count _this > 1) then {_this select 1} else {true}; +GVAR(currentSelectedSelectionN) = if (count _this > 2) then {_this select 2} else {0}; + +GVAR(displayPatientInformationTarget) = if (_show) then {_target} else {ObjNull}; + +if (_show) then { + ("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutRsc [QGVAR(DisplayInformation),"PLAIN"]; + + [{ + private ["_target", "_display", "_alphaLevel", "_damaged", "_availableSelections", "_openWounds", "_selectionBloodLoss", "_red", "_green", "_blue", "_alphaLevel", "_allInjuryTexts", "_lbCtrl", "_genericMessages"]; + _target = (_this select 0) select 0; + if (GVAR(displayPatientInformationTarget) != _target) exitwith { + [_this select 1] call CBA_fnc_removePerFrameHandler; + }; + + disableSerialization; + _display = uiNamespace getvariable QGVAR(DisplayInformation); + if (isnil "_display") exitwith { + [_this select 1] call CBA_fnc_removePerFrameHandler; + }; + + _allInjuryTexts = []; + _genericMessages = []; + if (_target getvariable[QGVAR(isBleeding), false]) then { + _genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_BLEEDING", [1, 0.1, 0.1, 1]]; + }; + if (_target getvariable[QGVAR(hasLostBlood), false]) then { + _genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_LOST_BLOOD", [1, 0.1, 0.1, 1]]; + }; + + if (((_target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]) select GVAR(currentSelectedSelectionN)) > 0) then { + _genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_TOURNIQUET_APPLIED", [0.5, 0.5, 0, 1]]; + }; + if (_target getvariable[QGVAR(hasPain), false]) then { + _genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_PAIN", [1, 1, 1, 1]]; + }; + + _selectionBloodLoss = [0,0,0,0,0,0]; + if (GVAR(level) >= 2) then { + _openWounds = _target getvariable [QGVAR(openWounds), []]; + private "_amountOf"; + { + _amountOf = _x select 3; + // Find how much this bodypart is bleeding + _selectionBloodLoss set [(_x select 2), (_selectionBloodLoss select (_x select 2)) + (15 * ((_x select 4) * _amountOf))]; + if (GVAR(currentSelectedSelectionN) == (_x select 2)) then { + // Collect the text to be displayed for this injury [ Select injury class type definition - select the classname DisplayName (6th), amount of injuries for this] + if (_amountOf > 0) then { + if (_amountOf >= 1) then { + // TODO localization + _allInjuryTexts pushback format["%2x %1", (GVAR(AllWoundInjuryTypes) select (_x select 1)) select 6, _amountOf]; + } else { + // TODO localization + _allInjuryTexts pushback format["Partial %1", (GVAR(AllWoundInjuryTypes) select (_x select 1)) select 6]; + }; + }; + }; + }foreach _openWounds; + } else { + // TODO handle basic medical colors for body part selections here + + + }; + + // Handle the body image coloring + _damaged = [false, false, false, false, false, false]; + _availableSelections = [50,51,52,53,54,55]; + { + private ["_red", "_green", "_blue"]; + _total = _x; + + _red = 1; + _green = 1; + _blue = 1; + if (_total >0) then { + _green = 0.9 - _total; + if (_green < 0.0) then { + _green = 0.0; + }; + _blue = _green; + _damaged set[_foreachIndex, true]; + }; + (_display displayCtrl (_availableSelections select _foreachIndex)) ctrlSetTextColor [_red, _green, _blue, 1.0]; + }foreach _selectionBloodLoss; + + // TODO fill the lb with the appropiate information for the patient + _lbCtrl = (_display displayCtrl 200); + lbClear _lbCtrl; + { + _lbCtrl lbAdd (_x select 0); + _lbCtrl lbSetColor [_foreachIndex, _x select 1]; + }foreach _genericMessages; + { + _lbCtrl lbAdd _x; + }foreach _allInjuryTexts; + if (count _genericMessages == 0 && {count _allInjuryTexts == 0}) then { + _lbCtrl lbAdd "No injuries on this bodypart.."; + }; + + _logCtrl = (_display displayCtrl 302); + lbClear _logCtrl; + + private ["_logs", "_log", "_message", "_moment", "_arguments", "_lbCtrl"]; + _logs = _target getvariable [QGVAR(allLogs), []]; + { + _log = _target getvariable [_x, []]; + { + // [_message,_moment,_type, _arguments] + _message = _x select 0; + _moment = _x select 1; + _arguments = _x select 3; + if (isLocalized _message) then { + _message = localize _message; + }; + + { + if (typeName _x == "STRING" && {isLocalized _x}) then { + _arguments set [_foreachIndex, localize _x]; + }; + }foreach _arguments; + _message = format([_message] + _arguments); + _logCtrl lbAdd format["%1 %2", _moment, _message]; + }foreach _log; + }foreach _logs; + + _triageStatus = [_target] call FUNC(getTriageStatus); + (_display displayCtrl 303) ctrlSetText (_triageStatus select 0); + (_display displayCtrl 303) ctrlSetBackgroundColor (_triageStatus select 2); + + }, 0, [_target]] call CBA_fnc_addPerFrameHandler; + +} else { + ("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutText ["","PLAIN"]; +}; diff --git a/addons/medical/functions/fnc_effectBlackOut.sqf b/addons/medical/functions/fnc_effectBlackOut.sqf deleted file mode 100644 index 1ffa75fff9..0000000000 --- a/addons/medical/functions/fnc_effectBlackOut.sqf +++ /dev/null @@ -1,29 +0,0 @@ -/** - * fn_effectBlackOut.sqf - * @Descr: Displays the blacked out effect for clients. - * @Author: Glowbal - * - * @Arguments: [displayEffect BOOL] - * @Return: void - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private ["_displayEffect","_effect"]; -_displayEffect = [_this, 0, false,[false]] call bis_fnc_param; - -if (!hasInterface) exitwith {}; - -disableSerialization; -_effect = uiNamespace getVariable QGVAR(ScreenEffectsBlack); -if (isNil "_effect") then { - 45 cutRsc [QGVAR(ScreenEffectsBlack),"PLAIN"]; - _effect = uiNamespace getVariable QGVAR(ScreenEffectsBlack); -}; - -if (_displayEffect) then { - (_effect displayCtrl 11112) ctrlSetTextColor [0.0,0.0,0.0,0.9]; -} else { - (_effect displayCtrl 11112) ctrlSetTextColor [0.0,0.0,0.0,0.0]; -}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_effectBleeding.sqf b/addons/medical/functions/fnc_effectBleeding.sqf deleted file mode 100644 index 0882267df1..0000000000 --- a/addons/medical/functions/fnc_effectBleeding.sqf +++ /dev/null @@ -1,36 +0,0 @@ -/** - * fn_effectBleeding.sqf - * @Descr: Displays the ACE Bleeding effect - * @Author: Glowbal - * - * @Arguments: [bloodLoss NUMBER] - * @Return: void - * @PublicAPI: true - */ - -#include "script_component.hpp" - -if (isnil QGVAR(DisplayingBleedingEffect)) then { - GVAR(DisplayingBleedingEffect) = false; -}; -if (GVAR(DisplayingBleedingEffect)) exitwith {}; -private ["_bloodLoss","_time"]; -_bloodLoss = _this select 0; -if (!(_bloodLoss > 0)) exitwith{}; - -_time = 10 - _bloodLoss; -if (_time < 1.5) then { - _time = 1.5; -}; -GVAR(DisplayingBleedingEffect) = true; -47 cutRsc [QGVAR(ScreenEffectsBleeding),"PLAIN"]; - -[{ - if !(isnil QGVAR(DisplayingBleedingEffect_ran)) then { - GVAR(DisplayingBleedingEffect_ran) = nil; - GVAR(DisplayingBleedingEffect) = false; - [(_this select 1)] call cba_fnc_removePerFrameHandler; - } else { - GVAR(DisplayingBleedingEffect_ran) = true; - }; -}, _time, [] ] call CBA_fnc_addPerFrameHandler; diff --git a/addons/medical/functions/fnc_effectPain.sqf b/addons/medical/functions/fnc_effectPain.sqf deleted file mode 100644 index 595d4ea6a0..0000000000 --- a/addons/medical/functions/fnc_effectPain.sqf +++ /dev/null @@ -1,32 +0,0 @@ -/** - * fn_effectPain.sqf - * @Descr: Displays the ACE Pain effect - * @Author: Glowbal - * - * @Arguments: [painRatio NUMBER] - * @Return: void - * @PublicAPI: true - */ - -#include "script_component.hpp" - -if (isnil QGVAR(DisplayingPainEffect)) then { - GVAR(DisplayingPainEffect) = false; -}; - -if (GVAR(DisplayingPainEffect)) exitwith {}; - -private ["_ratio","_time"]; -_ratio = _this select 0; -if (!(_ratio > 0)) exitwith{}; - _time = 6 - _ratio; -if (_time <1.5) then { - _time = 1.5; -}; -GVAR(DisplayingPainEffect) = true; -46 cutRsc [QGVAR(ScreenEffectsPain),"PLAIN"]; - -[{ - GVAR(DisplayingPainEffect) = false; - [(_this select 1)] call cba_fnc_removePerFrameHandler; -}, _time, [] ] call CBA_fnc_addPerFrameHandler; diff --git a/addons/medical/functions/fnc_fromNumberToBodyPart.sqf b/addons/medical/functions/fnc_fromNumberToBodyPart.sqf deleted file mode 100644 index a556ea1211..0000000000 --- a/addons/medical/functions/fnc_fromNumberToBodyPart.sqf +++ /dev/null @@ -1,39 +0,0 @@ -/** - * fn_fromNumberToBodyPart.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_selectionName","_part"]; -_part = _this select 0; -_selectionName = ""; -_selectionName = switch (_part) do { - case 0: { - "head" - }; - case 1: { - "body" - }; - case 2: { - "hand_l" - }; - case 3: { - "hand_r" - }; - case 4: { - "leg_l" - }; - case 5: { - "leg_r" - }; - default { - "" - }; -}; -_selectionName \ No newline at end of file diff --git a/addons/medical/functions/fnc_getActivityLog.sqf b/addons/medical/functions/fnc_getActivityLog.sqf deleted file mode 100644 index 5f5f1ba6de..0000000000 --- a/addons/medical/functions/fnc_getActivityLog.sqf +++ /dev/null @@ -1,23 +0,0 @@ -/** - * fn_getActivityLog.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private["_unit"]; -_unit = _this select 0; -_log = [_unit,QGVAR(activityLog)] call EFUNC(common,getDefinedVariable); - -if (isnil "_log") then { - _log = []; -}; -if (typeName _log != typeName []) then { - _log = []; -}; -_log diff --git a/addons/medical/functions/fnc_getBloodLoss.sqf b/addons/medical/functions/fnc_getBloodLoss.sqf index 929ca2b856..ef0a97ea35 100644 --- a/addons/medical/functions/fnc_getBloodLoss.sqf +++ b/addons/medical/functions/fnc_getBloodLoss.sqf @@ -1,36 +1,45 @@ -/** - * fn_getBloodLoss.sqf - * @Descr: Calculate the total blood loss of a unit. - * @Author: Glowbal +/* + * Author: Glowbal + * Calculate the total blood loss of a unit. * - * @Arguments: [unit OBJECT] - * @Return: NUMBER Total blood loss of unit - * @PublicAPI: true + * Arguments: + * 0: The Unit + * + * ReturnValue: + * Total blood loss of unit + * + * Public: No */ #include "script_component.hpp" -#define BLOODLOSS_SMALL_WOUNDS 0.025 -#define BLOODLOSS_MEDIUM_WOUNDS 0.05 -#define BLOODLOSS_LARGE_WOUNDS 0.1 - -/** -* The default cardiac output when all stats are set to normal is 5.25. -*/ -#define DEFAULT_CARDIAC_OUTPUT 5.25 - -private ["_totalBloodLoss","_tourniquets","_openWounds", "_value", "_cardiacOutput"]; - +private ["_totalBloodLoss","_tourniquets","_openWounds", "_value", "_cardiacOutput", "_internalWounds"]; +// TODO Only use this calculation if medium or higher, otherwise use vanilla calculations (for basic medical). _totalBloodLoss = 0; -_tourniquets = [_this, QGVAR(tourniquets)] call EFUNC(common,getDefinedVariable); -_openWounds = [_this, QGVAR(openWounds)] call EFUNC(common,getDefinedVariable); -_cardiacOutput = [_this] call FUNC(getCardiacOutput); -{ - if ((_tourniquets select _foreachIndex) < 1) then { - _totalBloodLoss = _totalBloodLoss + (((BLOODLOSS_SMALL_WOUNDS * (_x select 0))) + ((BLOODLOSS_MEDIUM_WOUNDS * (_x select 1))) + ((BLOODLOSS_LARGE_WOUNDS * (_x select 2))) * (_cardiacOutput / DEFAULT_CARDIAC_OUTPUT)); - }; -}foreach _openWounds; +// Advanced medical bloodloss handling +if (GVAR(level) >= 2) then { + _tourniquets = _this getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; + _openWounds = _this getvariable [QGVAR(openWounds), []]; + //_cardiacOutput = [_this] call FUNC(getCardiacOutput); -// cap the blood loss to be no greater as the current cardiac output -(_totalBloodLoss min _cardiacOutput); \ No newline at end of file + { + if ((_tourniquets select (_x select 2)) == 0) then { + // total bleeding ratio * percentage of injury left + _totalBloodLoss = _totalBloodLoss + ((_x select 4) * (_x select 3)); + + // (((BLOODLOSS_SMALL_WOUNDS * (_x select 0))) + ((BLOODLOSS_MEDIUM_WOUNDS * (_x select 1))) + ((BLOODLOSS_LARGE_WOUNDS * (_x select 2))) * (_cardiacOutput / DEFAULT_CARDIAC_OUTPUT)); + }; + }foreach _openWounds; + + _internalWounds = _this getvariable [QGVAR(internalWounds), []]; + { + _totalBloodLoss = _totalBloodLoss + ((_x select 4) * (_x select 3)); + }foreach _internalWounds; + + // cap the blood loss to be no greater as the current cardiac output + //(_totalBloodLoss min _cardiacOutput); +} else { + // TODO basic medical +}; +_totalBloodLoss * GVAR(bleedingCoefficient); diff --git a/addons/medical/functions/fnc_getBloodPressure.sqf b/addons/medical/functions/fnc_getBloodPressure.sqf index 620b8d541d..f5012c8735 100644 --- a/addons/medical/functions/fnc_getBloodPressure.sqf +++ b/addons/medical/functions/fnc_getBloodPressure.sqf @@ -1,11 +1,14 @@ -/** - * fn_getBloodPressure.sqf - * @Descr: Calculate the current blood pressure of a unit. - * @Author: Glowbal +/* + * Author: Glowbal + * Calculates the blood volume change and decreases the IVs given to the unit. * - * @Arguments: [unit OBJECT (The unit to get the blood pressure from.)] - * @Return: ARRAY Blood Pressure. Format [low NUMBER, high NUMBER] - * @PublicAPI: true + * Arguments: + * 0: The Unit + * + * ReturnValue: + * Blood Pressuret ,> + * + * Public: No */ #include "script_component.hpp" @@ -23,9 +26,9 @@ private ["_unit", "_bloodPressureLow", "_bloodPressureHigh", "_cardiacOutput", "_resistance"]; _unit = _this select 0; _cardiacOutput = [_unit] call FUNC(getCardiacOutput); -_resistance = [_unit, QGVAR(peripheralResistance)] call EFUNC(common,getDefinedVariable); +_resistance = _unit getvariable [QGVAR(peripheralResistance), 100]; _bloodPressureHigh = (_cardiacOutput * MODIFIER_BP_HIGH) * _resistance; _bloodPressureLow = (_cardiacOutput * MODIFIER_BP_LOW) * _resistance; -[_bloodPressureLow, _bloodPressureHigh]; \ No newline at end of file +[_bloodPressureLow, _bloodPressureHigh]; diff --git a/addons/medical/functions/fnc_getBloodVolumeChange.sqf b/addons/medical/functions/fnc_getBloodVolumeChange.sqf index 69b240b1d7..92b4408fbf 100644 --- a/addons/medical/functions/fnc_getBloodVolumeChange.sqf +++ b/addons/medical/functions/fnc_getBloodVolumeChange.sqf @@ -1,11 +1,14 @@ -/** - * fn_getBloodVolumeChange.sqf - * @Descr: Calculates the blood volume change and decreases the IVs given to the unit. - * @Author: Glowbal +/* + * Author: Glowbal + * Calculates the blood volume change and decreases the IVs given to the unit. * - * @Arguments: [] - * @Return: NUMBER Bloodvolume change - * @PublicAPI: false + * Arguments: + * 0: The Unit + * + * ReturnValue: + * Current cardiac output + * + * Public: No */ #include "script_component.hpp" @@ -38,11 +41,6 @@ if (_bloodVolume < 100.0) then { _bloodVolumeChange = _bloodVolumeChange + BLOOD_CHANGE_PER_SECOND; _ivVolume = (_unit getvariable [QGVAR(salineIVVolume), 0]) + IV_CHANGE_PER_SECOND; _unit setvariable [QGVAR(salineIVVolume),_ivVolume]; - if ([QEGVAR(fieldRations,module)] call EFUNC(common,isModuleEnabled_F)) then { - if ([_unit] call EFUNC(fieldRations,canDrink)) then { - _unit setvariable [QEGVAR(fieldRations,drinkStatus), (_unit getvariable [QEGVAR(fieldRations,drinkStatus), 100]) + 0.2]; - }; - }; }; if ((_unit getvariable [QGVAR(plasmaIVVolume), 0]) > 0) then { _bloodVolumeChange = _bloodVolumeChange + BLOOD_CHANGE_PER_SECOND; @@ -56,4 +54,4 @@ if (_bloodVolume < 100.0) then { }; }; -_bloodVolumeChange +_bloodVolumeChange; diff --git a/addons/medical/functions/fnc_getBodyPartNumber.sqf b/addons/medical/functions/fnc_getBodyPartNumber.sqf deleted file mode 100644 index 6bfc041c80..0000000000 --- a/addons/medical/functions/fnc_getBodyPartNumber.sqf +++ /dev/null @@ -1,54 +0,0 @@ -/** - * fn_getBodyPartNumber.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_selectionName","_part"]; -_selectionName = _this select 0; - - _part = -1; - _part = switch (_selectionName) do { - case "head": { - 0 - }; - case "body": { - 1 - }; - case "hands": { - if (random(1)>=0.5) then { - 2 - } else { - 3 - }; - }; - case "hand_l": { - 2 - }; - case "hand_r": { - 3 - }; - case "legs": { - if (random(1)>=0.5) then { - 4 - } else { - 5 - }; - }; - case "leg_l": { - 4 - }; - case "leg_r": { - 5 - }; - default { - -1 - }; - }; -_part \ No newline at end of file diff --git a/addons/medical/functions/fnc_getCardiacOutput.sqf b/addons/medical/functions/fnc_getCardiacOutput.sqf index a22bb3d5d9..a44e8a8e29 100644 --- a/addons/medical/functions/fnc_getCardiacOutput.sqf +++ b/addons/medical/functions/fnc_getCardiacOutput.sqf @@ -1,11 +1,14 @@ -/** - * fn_getCardiacOutput.sqf - * @Descr: Get the cardiac output from the Heart, based on current Heart Rate and Blood Volume. - * @Author: Glowbal +/* + * Author: Glowbal + * Get the cardiac output from the Heart, based on current Heart Rate and Blood Volume. * - * @Arguments: [unit OBJECT] - * @Return: NUMBER Current cardiac output. - * @PublicAPI: true + * Arguments: + * 0: The Unit + * + * ReturnValue: + * Current cardiac output + * + * Public: No */ #include "script_component.hpp" @@ -22,4 +25,4 @@ private "_unit"; _unit = _this select 0; -((_unit getvariable [QGVAR(bloodVolume), 100])/MODIFIER_CARDIAC_OUTPUT) + ((_unit getvariable [QGVAR(heartRate), 80])/80-1); \ No newline at end of file +((_unit getvariable [QGVAR(bloodVolume), 100])/MODIFIER_CARDIAC_OUTPUT) + ((_unit getvariable [QGVAR(heartRate), 80])/80-1); diff --git a/addons/medical/functions/fnc_getCurrentSelectedInjuryData.sqf b/addons/medical/functions/fnc_getCurrentSelectedInjuryData.sqf deleted file mode 100644 index 93e2a6c871..0000000000 --- a/addons/medical/functions/fnc_getCurrentSelectedInjuryData.sqf +++ /dev/null @@ -1,19 +0,0 @@ -/** - * fn_getCurrentSelectedInjuryData.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_return", "_current"]; -_return = ""; -if (dialog) then { - _current = lbCurSel 213; - _return = lbData [213,_current]; -}; -_return; \ No newline at end of file diff --git a/addons/medical/functions/fnc_getHeartRateChange.sqf b/addons/medical/functions/fnc_getHeartRateChange.sqf index a3c0c239cd..e7bc9407d2 100644 --- a/addons/medical/functions/fnc_getHeartRateChange.sqf +++ b/addons/medical/functions/fnc_getHeartRateChange.sqf @@ -1,11 +1,14 @@ -/** - * fn_getHeartRateChange.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Get the change in the heart rate. Used for the vitals calculations. Calculated in one seconds. * - * @Arguments: [] - * @Return: void - * @PublicAPI: false + * Arguments: + * 0: The Unit + * + * ReturnValue: + * Change in heart Rate + * + * Public: No */ #include "script_component.hpp" @@ -31,7 +34,7 @@ if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then { _change = (_values / _time); _hrIncrease = _hrIncrease + _change; - if ( (_time - 1) < 0) then { + if ( (_time - 1) <= 0) then { _time = 0; _adjustment set [_foreachIndex, ObjNull]; [_unit] call _callBack; @@ -40,7 +43,8 @@ if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then { _adjustment set [_foreachIndex, [_values - _change, _time]]; }; } else { - _adjustment set [_foreachIndex, ObjNull]; + _adjustment set [_foreachIndex, ObjNull]; + [_unit] call _callBack; }; }foreach _adjustment; diff --git a/addons/medical/functions/fnc_getNewDamageBodyPart.sqf b/addons/medical/functions/fnc_getNewDamageBodyPart.sqf deleted file mode 100644 index ec1efcab9f..0000000000 --- a/addons/medical/functions/fnc_getNewDamageBodyPart.sqf +++ /dev/null @@ -1,28 +0,0 @@ -/** - * fnc_getNewDamageBodyPart.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit","_selectionName","_newDamage", "_previousDamage", "_origDamage", "_number"]; -_unit = _this select 0; -_amountOfDamage = _this select 1; -_number = _this select 2; - -_previousDamage = _unit getvariable [QGVAR(bodyPartStatusPrevious), [0,0,0,0,0,0]]; -_newDamage = _amountOfDamage - (_previousDamage select _number); -_previousDamage set [_number, _newDamage]; -[_unit,QGVAR(bodyPartStatusPrevious),_previousDamage] call EFUNC(common,setDefinedVariable); - - -_origDamage = [_unit,QGVAR(bodyPartStatus),[0,0,0,0,0,0]] call EFUNC(common,getDefinedVariable); -_origDamage set [_number, (_origDamage select _number) + _newDamage]; /* We are storing the total Damage done on a body part for determining the damage properly */ -[_unit,QGVAR(bodyPartStatus),_origDamage] call EFUNC(common,setDefinedVariable); - -_newDamage \ No newline at end of file diff --git a/addons/medical/functions/fnc_getQuickViewLog.sqf b/addons/medical/functions/fnc_getQuickViewLog.sqf deleted file mode 100644 index 356c08391e..0000000000 --- a/addons/medical/functions/fnc_getQuickViewLog.sqf +++ /dev/null @@ -1,22 +0,0 @@ -/** - * fn_getQuickViewLog.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private["_unit"]; -_unit = _this select 0; -_log = [_unit,QGVAR(quickViewLog)] call EFUNC(common,getDefinedVariable); -if (isnil "_log") then { - _log = []; -}; -if (typeName _log != typeName []) then { - _log = []; -}; -_log diff --git a/addons/medical/functions/fnc_getSelectedBodyPart.sqf b/addons/medical/functions/fnc_getSelectedBodyPart.sqf deleted file mode 100644 index 6e018c2aac..0000000000 --- a/addons/medical/functions/fnc_getSelectedBodyPart.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/** - * fn_getSelectedBodyPart.sqf - * @Descr: Get the current selected body part for client - * @Author: Glowbal - * - * @Arguments: [] - * @Return: STRING bodyPart selected - * @PublicAPI: true - */ - -#include "script_component.hpp" - -if (isnil QGVAR(selectedBodyPart)) then { - GVAR(selectedBodyPart) = "head"; -}; -GVAR(selectedBodyPart) \ No newline at end of file diff --git a/addons/medical/functions/fnc_getTreatmentOptions.sqf b/addons/medical/functions/fnc_getTreatmentOptions.sqf deleted file mode 100644 index b2bd75dc78..0000000000 --- a/addons/medical/functions/fnc_getTreatmentOptions.sqf +++ /dev/null @@ -1,49 +0,0 @@ -/** - * fnc_getTreatmentOptions.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - - -private ["_caller","_target","_category", "_result", "_nameCaller", "_nameTarget"]; -_caller = _this select 0; -_target = _this select 1; -_category = _this select 2; - -if ((_category == "advanced" || _category == "airway") && (_caller == _target)) exitwith { - []; -}; - -if (!([_caller] call EFUNC(common,canInteract))) exitwith { - []; -}; - -if (([_caller] call EFUNC(common,beingCarried))) exitwith { - []; -}; - -if (!(isNull([_caller] call EFUNC(common,getCarriedObj))) && _category != "drag") exitwith { - []; -}; - -_nameCaller = [_caller] call EFUNC(common,getName); -_nameTarget = [_Target] call EFUNC(common,getName); - -_result = []; -{ - if ([_caller, _target] call (_x select 2)) then { - - private ["_caller", "_target", "_category"]; - - // title, code, tooltip - _result pushback [format[_x select 0, _nameCaller, _nameTarget], _x select 3, format[_x select 1, _nameCaller, _nameTarget]]; - }; -}foreach (missionNamespace getvariable [QGVAR(registeredTreatmentOptions_)+_category, []]); - -_result; \ No newline at end of file diff --git a/addons/medical/functions/fnc_getTriageList.sqf b/addons/medical/functions/fnc_getTriageList.sqf deleted file mode 100644 index 89660d7c97..0000000000 --- a/addons/medical/functions/fnc_getTriageList.sqf +++ /dev/null @@ -1,22 +0,0 @@ -/** - * fn_getTriageList.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private["_unit"]; -_unit = _this select 0; -_log = [_unit,QGVAR(triageCard)] call EFUNC(common,getDefinedVariable); -if (isnil "_log") then { - _log = []; -}; -if (typeName _log != typeName []) then { - _log = []; -}; -_log diff --git a/addons/medical/functions/fnc_getTriageStatus.sqf b/addons/medical/functions/fnc_getTriageStatus.sqf index 58b2f3f0d5..d80cbe5d64 100644 --- a/addons/medical/functions/fnc_getTriageStatus.sqf +++ b/addons/medical/functions/fnc_getTriageStatus.sqf @@ -1,11 +1,14 @@ -/** - * fn_getTriageStatus.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Get the triage status and information from a unit * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: The unit + * + * Return Value: + * Triage status from the unit. Name, statusID, color > + * + * Public: Yes */ #include "script_component.hpp" @@ -14,11 +17,10 @@ private ["_unit","_return","_status"]; _unit = _this select 0; _status = _unit getvariable [QGVAR(triageLevel), -1]; _return = switch (_status) do { - case 0: {["None",0,[0,0,0,0.7]]}; // none - case 1: {["Minor",1,[0,0.5,0,0.7]]}; - case 2: {["Delayed",2,[0.77,0.51,0.08,0.7]]}; - case 3: {["Immediate",3,[1,0.2,0.2,0.7]]}; - case 4: {["Deceased",4,[0,0,0,0.7]]}; - default {["None",0,[0,0,0,0.7]]}; + case 1: {[localize "STR_ACE_MEDICAL_TRIAGE_STATUS_MINOR", 1, [0, 0.5, 0, 0.9]]}; + case 2: {[localize "STR_ACE_MEDICAL_TRIAGE_STATUS_DELAYED", 2, [0.7, 0.5, 0, 0.9]]}; + case 3: {[localize "STR_ACE_MEDICAL_TRIAGE_STATUS_IMMEDIATE", 3, [0.4, 0.07, 0.07, 0.9]]}; + case 4: {[localize "STR_ACE_MEDICAL_TRIAGE_STATUS_DECEASED", 4, [0, 0, 0, 0.9]]}; + default {[localize "STR_ACE_MEDICAL_TRIAGE_STATUS_NONE", 0, [0, 0, 0, 0.9]]}; }; -_return \ No newline at end of file +_return; diff --git a/addons/medical/functions/fnc_getTypeOfDamage.sqf b/addons/medical/functions/fnc_getTypeOfDamage.sqf index 80bbb0c972..1037f8514d 100644 --- a/addons/medical/functions/fnc_getTypeOfDamage.sqf +++ b/addons/medical/functions/fnc_getTypeOfDamage.sqf @@ -1,11 +1,14 @@ -/** - * fn_getTypeOfDamage.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Get the type of damage based upon the projectile. * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: The projectile classname or object + * + * ReturnValue: + * Type of damage + * + * Public: No */ #include "script_component.hpp" @@ -13,6 +16,7 @@ private ["_typeOfProjectile","_typeOfInjury"]; _typeOfProjectile = _this select 0; _typeOfInjury = switch (true) do { + case (_typeOfProjectile isKindOf "Backblast"): {"backblast"}; case (_typeOfProjectile iskindof "BulletBase"): {"Bullet"}; case (_typeOfProjectile iskindof "GrenadeCore"): {"Grenade"}; case (_typeOfProjectile iskindof "TimeBombCore"): {"Explosive"}; @@ -27,4 +31,5 @@ _typeOfInjury = switch (true) do { case (_typeOfProjectile == "VehicleCrash"): {"VehicleCrash"}; default {"Unknown"}; }; -_typeOfInjury \ No newline at end of file +// TODO replace the capitalization on the switch results instead.. +toLower _typeOfInjury; diff --git a/addons/medical/functions/fnc_getUnconsciousCondition.sqf b/addons/medical/functions/fnc_getUnconsciousCondition.sqf index 097a5682ec..83955f7bd1 100644 --- a/addons/medical/functions/fnc_getUnconsciousCondition.sqf +++ b/addons/medical/functions/fnc_getUnconsciousCondition.sqf @@ -1,11 +1,14 @@ -/** - * fn_getUnconsciousCondition.sqf - * @Descr: get whatever or not a unit should be or stay unconscious - * @Author: Glowbal +/* + * Author: Glowbal + * Get whatever or not a unit should be or stay unconscious. * - * @Arguments: [unit OBJECT] - * @Return: BOOL True when the unit should be unconscious - * @PublicAPI: true + * Arguments: + * 0: The Unit + * + * ReturnValue: + * Should the unit stay unconscious? + * + * Public: Yes */ #include "script_component.hpp" @@ -13,17 +16,16 @@ private ["_unit","_return"]; _unit = _this select 0; -if (isnil QGVAR(unconsciousConditions_F)) then { - GVAR(unconsciousConditions_F) = []; +if (GVAR(level) == 1) exitwith {true}; +if (isnil QGVAR(unconsciousConditions)) then { + GVAR(unconsciousConditions) = []; }; _return = false; { - if (typeName _x == typeName {}) then { - if (([_unit] call _x)) then { - _return = true; - }; + if (typeName _x == typeName {} && {([_unit] call _x)}) exitwith { + _return = true; }; - if (_return) exitwith{}; -}foreach GVAR(unconsciousConditions_F); -_return \ No newline at end of file +}foreach GVAR(unconsciousConditions); + +_return; diff --git a/addons/medical/functions/fnc_handleBandageOpening.sqf b/addons/medical/functions/fnc_handleBandageOpening.sqf deleted file mode 100644 index cc27dbdee7..0000000000 --- a/addons/medical/functions/fnc_handleBandageOpening.sqf +++ /dev/null @@ -1,83 +0,0 @@ -/** - * fn_handleBandageOpening.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -#define CFG_DEFAULT_WAITING_TIME 900 + random(120) -#define WAITINGTIME 1 -#define RATIO 2 -#define CHANCE 3 - -private ["_person","_amount","_bodyPart","_woundClass","_item","_config","_found", "_waitingTime", "_selectedConfig"]; -_person = _this select 0; -_amount = _this select 1; -_bodyPart = _this select 2; -_woundClass = _this select 3; -_item = _this select 4; - -// classname, waiting time until wound opens, ratio in which it start bleeding again, chance of the wound ever opening up // -_config = [ - ["ACE_bandage_basic", 900 + random (120), 0.75, 0.4], - ["ACE_packing_bandage", 1200 + random (120), 0.5, 0.6], - ["ACE_bandageElastic", 900 + random (900), 0.75, 0.2], - ["ACE_quikclot", 1, 0.1, 0], - ["default", 1, CFG_DEFAULT_WAITING_TIME, 1] -]; -_selectedConfig = _config select (count _config - 1); -_waitingTime = -1; - -_found = false; -{ - if (_item == _x select 0) exitwith { - _found = true; - if (random(1)> (1 - (_x select CHANCE))) then { - - _waitingTime = (_x select WAITINGTIME); - _selectedConfig = _x; - }; - }; -}foreach _config; - -if (!_found && (random(1)>0.2)) then { - _waitingTime = CFG_DEFAULT_WAITING_TIME; -}; - -if (_waitingTime > 0) then { - [{ - private ["_params", "_config", "_person", "_amount","_bodyPart","_woundClass","_item", "_bandagedWounds","_bandagedBodyPart","_bandagedWoundClass","_openWounds", "_openWoundsBodyPart","_openWoundClass"]; - _params = _this select 0; - _config = _this select 1; - - _person = _params select 0; - _amount = _params select 1; - _bodyPart = _params select 2; - _woundClass = _params select 3; - _item = _params select 4; - - _bandagedWounds = [_person,QGVAR(bandagedWounds)] call EFUNC(common,getDefinedVariable); - _bandagedBodyPart = _bandagedWounds select _bodyPart; - _bandagedWoundClass = _bandagedBodyPart select _woundClass; - if (_bandagedWoundClass >= _amount) then { - _openWounds =[_person,QGVAR(openWounds)] call EFUNC(common,getDefinedVariable); - _openWoundsBodyPart = _openWounds select _bodyPart; - _openWoundClass = _openWoundsBodyPart select _woundClass; - - _bandagedBodyPart set [_woundClass,_bandagedWoundClass - (_amount * (_config select RATIO))]; - _openWoundsBodyPart set [_woundClass,_openWoundClass + (_amount * (_config select RATIO))]; - - _bandagedWounds set[_bodyPart,_bandagedBodyPart]; - _openWounds set[_bodyPart,_openWoundsBodyPart]; - [_person,QGVAR(openWounds),_openWounds] call EFUNC(common,setDefinedVariable); - [_person,QGVAR(bandagedWounds),_bandagedWounds] call EFUNC(common,setDefinedVariable); - - ["Medical_onWoundsReopened", [_person, (_amount * (_config select RATIO)), _bodyPart, _woundClass, _item]] call ace_common_fnc_localEvent; - }; - }, [_this, _selectedConfig], _waitingTime, _waitingTime] call EFUNC(common,waitAndExecute); -}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index a157a0b2ae..959dce7b50 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -1,93 +1,73 @@ -/** - * fn_handleDamage.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: KoffeinFlummi, Glowbal + * Main HandleDamage EH function. * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: Unit That Was Hit + * 1: Name Of Hit Selection + * 2: Amount Of Damage + * 3: Shooter + * 4: Projectile + * + * Return Value: + * Damage To Be Inflicted + * + * Public: No */ #include "script_component.hpp" -private ["_unit","_selectionName","_amountOfDamage","_sourceOfDamage", "_typeOfProjectile","_bodyPartn","_newDamage","_typeOfDamage","_caliber", "_hitPointName", "_returnDamage", "_varCheck"]; -_unit = _this select 0; -_selectionName = _this select 1; -_amountOfDamage = _this select 2; -_sourceOfDamage = _this select 3; -_typeOfProjectile = _this select 4; -_returnDamage = _amountOfDamage; +private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn", "_hitPoints", "_typeOfDamage"]; +_unit = _this select 0; +_selection = _this select 1; +_damage = _this select 2; +_shooter = _this select 3; +_projectile = _this select 4; -// do not function on non local units -if (!local _unit) exitwith { - nil; +if !(local _unit) exitWith {nil}; + +if !([_unit] call FUNC(hasMedicalEnabled)) exitwith {}; + +if (typeName _projectile == "OBJECT") then { + _projectile = typeOf _projectile; + _this set [4, _projectile]; }; -_bodyPartn = [_selectionName] call FUNC(getBodyPartNumber); +// If the damage is being weird, we just tell it to fuck off. +_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; +if !(_selection in (_hitSelections + [""])) exitWith {0}; -// Check for vehicle crash -if (vehicle _unit != _unit && {_bodyPartn < 0} && {isNull _sourceOfDamage} && {_typeOfProjectile == ""} && {_selectionName == ""}) then { - if (GVAR(setting_allowVehicleCrashInjuries)) then { - _bodyPartn = if (random(1)>=0.5) then { 0 } else { 1 }; - _typeOfProjectile = "VehicleCrash"; - }; +_damageReturn = _damage; +if (GVAR(level) == 1) then { + _damageReturn = (_this + [_damageReturn]) call FUNC(handleDamage_basic); }; -// If it is not a valid bodyPart number, exit because we cannot do anything with it. -if (_bodyPartn < 0) exitwith {0}; +if (GVAR(level) >= 2) then { + [_unit, _selection, _damage, _source, _projectile, _damageReturn] call FUNC(handleDamage_caching); -// Most likely taking exessive fire damage. Lets exit. -if (isNull _sourceOfDamage && (_selectionName == "head" || isBurning _unit) && _typeOfProjectile == "" && vehicle _unit == _unit) exitwith { - 0 -}; // Prefent excessive fire damage - -// Ensure damage is being handled correctly. -_newDamage = [_unit, _amountOfDamage, _bodyPartn] call FUNC(getNewDamageBodyPart); -[_unit] call FUNC(setDamageBodyPart); - -if ([_unit] call FUNC(hasMedicalEnabled)) then { - _returnDamage = 0; - if (_amountOfDamage < 0) then { - _amountOfDamage = 0; - }; - - // figure out the type of damage so we can use that to determine what injures should be given. - _typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage); - - [_unit, _newDamage, _typeOfDamage, _bodyPartn] call FUNC(onInjury_assignOpenWounds); - - if ((missionNamespace getvariable[QGVAR(setting_AdvancedLevel), 0]) > 0) then { - if (GVAR(setting_allowAirwayInjuries)) then { - [_unit, _amountOfDamage, _typeOfDamage, _bodyPartn] call FUNC(onInjury_assignAirwayStatus); + if (_damageReturn > 0.9) then { + _hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; + _newDamage = _damage - (damage _unit); + if (_selection in _hitSelections) then { + _newDamage = _damage - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selection))); }; - }; - [_unit, _newDamage, _bodyPartn] call FUNC(increasePain); - - if (([_unit, _bodyPartn] call FUNC(determineIfFatal)) || !(alive (vehicle _unit))) then { - [_unit] call FUNC(setDead); - _returnDamage = 1; - } else { - [_unit] call FUNC(addToInjuredCollection); - if ([_unit, _bodyPartn] call FUNC(determineIfUnconscious)) then { - [_unit] call FUNC(setUnconsciousState); + if ([_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)) then { + if ([_unit] call FUNC(setDead)) then { + _damageReturn = 1; + }; } else { - [_unit,_newDamage] call FUNC(handleReactionHit); + _damageReturn = 0.89; }; }; +}; +[_unit] call FUNC(addToInjuredCollection); - if (!(alive (vehicle _unit))) then { - _returnDamage = 1; - [_unit] call FUNC(setDead); - }; - ["Medical_onHandleDamage", _this] call ace_common_fnc_localEvent; -} else { - if (_returnDamage > 0.957) then { - _returnDamage = 0.957; - }; - if (([_unit, _bodyPartn] call FUNC(determineIfFatal)) || !(alive (vehicle _unit))) then { - [_unit] call FUNC(setDead); - _returnDamage = 1; +if (_unit getVariable [QGVAR(preventDeath), false] && {_damageReturn >= 0.9} && {_selection in ["", "head", "body"]}) exitWith { + if (vehicle _unit != _unit and {damage _vehicle >= 1}) then { + // @todo + // [_unit] call FUNC(unload); }; + 0.89 }; -_returnDamage; +_damageReturn diff --git a/addons/medical/functions/fnc_handleDamage_advanced.sqf b/addons/medical/functions/fnc_handleDamage_advanced.sqf new file mode 100644 index 0000000000..0158608067 --- /dev/null +++ b/addons/medical/functions/fnc_handleDamage_advanced.sqf @@ -0,0 +1,67 @@ +/* + * Author: Glowbal + * Advanced HandleDamage EH function. + * + * Arguments: + * 0: Unit That Was Hit + * 1: Name Of Hit Selection + * 2: Amount Of Damage + * 3: Shooter + * 4: Projectile + * 5: Current damage to be returned + * 6: Type of Damage + * + * Return Value: + * Damage To Be Inflicted + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_unit","_selectionName","_amountOfDamage","_sourceOfDamage","_typeOfProjectile","_typeOfDamage", "_part", "_damageBodyParts", "_newDamage", "_hitPoints"]; +_unit = _this select 0; +_selectionName = _this select 1; +_amountOfDamage = _this select 2; +_sourceOfDamage = _this select 3; +_typeOfProjectile = _this select 4; +_returnDamage = _this select 5; + +// Most likely taking exessive fire damage. Lets exit. +if (isNull _sourceOfDamage && (_selectionName == "head" || isBurning _unit) && _typeOfProjectile == "" && vehicle _unit == _unit) exitwith { + 0 +}; + +_typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage); +_part = [_selectionName] call FUNC(selectionNameToNumber); + +_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; +// Sorting out the damage +_damageBodyParts = _unit getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]]; +_newDamage = _amountOfDamage - (_unit getHitPointDamage (_hitPoints select _part)); +_damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage]; +_unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true]; +[_unit] call FUNC(handleDamage_advancedSetDamage); + +[_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(handleDamage_wounds); + +if (GVAR(enableAirway)) then { + [_unit,_selectionName,_newDamage,_sourceOfDamage, _typeOfDamage] call FUNC(handleDamage_airway); +}; +if (GVAR(enableFractures)) then { + [_unit,_selectionName,_newDamage,_sourceOfDamage, _typeOfDamage] call FUNC(handleDamage_fractures); +}; +if (GVAR(enableInternalBleeding)) then { + [_unit,_selectionName,_newDamage,_sourceOfDamage, _typeOfDamage] call FUNC(handleDamage_internalInjuries); +}; + +if (alive _unit && {!(_unit getvariable ["ACE_isUnconscious", false])}) then { + [_unit, _newDamage] call FUNC(reactionToDamage); + + // If it reaches this, we can assume that the hit did not kill this unit, as this function is called 3 frames after the damage has been passed. + if ([_unit, _part, if (_part > 1) then {_newDamage * 1.3} else {_newDamage * 2}] call FUNC(determineIfFatal)) then { + [_unit] call FUNC(setUnconscious); + }; +}; + +_returnDamage; diff --git a/addons/medical/functions/fnc_setDamageBodyPart.sqf b/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf similarity index 80% rename from addons/medical/functions/fnc_setDamageBodyPart.sqf rename to addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf index 828bd93c7e..74db6029d2 100644 --- a/addons/medical/functions/fnc_setDamageBodyPart.sqf +++ b/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf @@ -1,11 +1,14 @@ -/** - * fnc_setDamageBodyPart.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Sets the hitpoint damage for au nit to the correct values * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: Unit for which the hitpoint damage will be sorted out + * + * Return Value: + * nil + * + * Public: No */ #include "script_component.hpp" @@ -17,7 +20,7 @@ if (!local _unit) exitwith { // execute only local }; -_bodyStatus = [_unit,QGVAR(bodyPartStatus),[0,0,0,0,0,0]] call EFUNC(common,getDefinedVariable); +_bodyStatus = _unit getvariable [QGVAR(bodyPartStatus),[0,0,0,0,0,0]]; // ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"] _headDamage = _bodyStatus select 0; if (_headDamage > 0.95) then { diff --git a/addons/medical/functions/fnc_handleDamage_airway.sqf b/addons/medical/functions/fnc_handleDamage_airway.sqf new file mode 100644 index 0000000000..bc220eaad9 --- /dev/null +++ b/addons/medical/functions/fnc_handleDamage_airway.sqf @@ -0,0 +1,36 @@ +/* + * Author: Glowbal + * Handling of the airway injuries upon the handleDamage eventhandler. + * + * Arguments: + * 0: Unit That Was Hit + * 1: Name Of Hit Selection + * 2: Amount Of Damage + * 3: Shooter or source of the damage + * 4: Type of the damage done + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn"]; +_unit = _this select 0; +_selectionName = _this select 1; +_amountOfDamage = _this select 2; +_sourceOfDamage = _this select 3; +_typeOfDamage = _this select 4; +_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber); + +if (_bodyPartn > 1) exitwith {}; + +if (_amountOfDamage > 0.5) then { + if (random(1) >= 0.8) then { + if !(_unit getvariable[QGVAR(airwayCollapsed), false]) then { + _unit setvariable [QGVAR(airwayCollapsed), true, true]; + }; + }; +}; diff --git a/addons/medical/functions/fnc_handleDamage_basic.sqf b/addons/medical/functions/fnc_handleDamage_basic.sqf new file mode 100644 index 0000000000..f31c9f186d --- /dev/null +++ b/addons/medical/functions/fnc_handleDamage_basic.sqf @@ -0,0 +1,182 @@ +/* + * Author: KoffeinFlummi + * Basic HandleDamage EH function. + * + * Arguments: + * 0: Unit That Was Hit + * 1: Name Of Hit Selection + * 2: Amount Of Damage + * 3: Shooter + * 4: Projectile + * 5: Current damage to be returned + * + * Return Value: + * Damage To Be Inflicted + * + * Public: No + */ + +#include "script_component.hpp" + +#define LEGDAMAGETRESHOLD1 1 +#define LEGDAMAGETRESHOLD2 1.7 +#define ARMDAMAGETRESHOLD1 1 +#define ARMDAMAGETRESHOLD2 1.7 +#define UNCONSCIOUSNESSTRESHOLD 0.7 + +private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn"]; + +_unit = _this select 0; +_selection = _this select 1; +_damage = _this select 2; +_shooter = _this select 3; +_projectile = _this select 4; +_damageReturn = _this select 5; + + +// This is a new hit, reset variables. +// Note: sometimes handleDamage spans over 2 or even 3 frames. +if (diag_frameno > (_unit getVariable [QGVAR(frameNo), -3]) + 2) then { + _unit setVariable [QGVAR(frameNo), diag_frameno]; + _unit setVariable [QGVAR(isFalling), false]; + _unit setVariable [QGVAR(projectiles), []]; + _unit setVariable [QGVAR(hitPoints), []]; + _unit setVariable [QGVAR(damages), []]; + _unit setVariable [QGVAR(structDamage), 0]; + _unit setVariable [QGVAR(preventDeath), false]; +}; + + +_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; +_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; + +_newDamage = _damageReturn - (damage _unit); +if (_selection in _hitSelections) then { + _newDamage = _damageReturn - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selection))); +}; + +_damageReturn = _damageReturn - _newDamage; + + +// Exclude falling damage to everything other than legs and reduce it overall. +if (((velocity _unit) select 2 < -5) and (vehicle _unit == _unit)) then { + _unit setVariable [QGVAR(isFalling), true]; +}; +if (_unit getVariable [QGVAR(isFalling), false] and !(_selectionName in ["", "leg_l", "leg_r"])) exitWith { + (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selectionName))) max 0.01; +}; +if (_unit getVariable [QGVAR(isFalling), false]) then { + _newDamage = _newDamage * 0.7; +}; + + +// Make sure there's only one damaged selection per projectile per frame. +if (_selectionName != "" and !(_unit getVariable QGVAR(isFalling))) then { + _cache_projectiles = _unit getVariable QGVAR(projectiles); + _cache_hitpoints = _unit getVariable QGVAR(hitPoints); + _cache_damages = _unit getVariable QGVAR(damages); + if (_projectile in _cache_projectiles) then { + _index = _cache_projectiles find _projectile; + _otherDamage = (_cache_damages select _index); + if (_otherDamage > _newDamage) then { + _newDamage = 0; + } else { + _hitPoint = _cache_hitpoints select _index; + _restore = ((_unit getHitPointDamage _hitPoint) - _otherDamage) max 0; + _unit setHitPointDamage [_hitPoint, _restore]; + // Make entry unfindable + _cache_projectiles set [_index, objNull]; + _cache_projectiles pushBack _projectile; + _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); + _cache_damages pushBack _newDamage; + }; + } else { + _cache_projectiles pushBack _projectile; + _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); + _cache_damages pushBack _newDamage; + }; + _unit setVariable [QGVAR(projectiles), _cache_projectiles]; + _unit setVariable [QGVAR(hitPoints), _cache_hitpoints]; + _unit setVariable [QGVAR(damages), _cache_damages]; +}; + +// Get rid of double structural damage (seriously arma, what the fuck?) +if (_selection == "") then { + _cache_structDamage = _unit getVariable QGVAR(structDamage); + if (_newDamage > _cache_structDamage) then { + _unit setVariable [QGVAR(structDamage), _newDamage]; + _newDamage = _newDamage - _cache_structDamage; + } else { + _newDamage = 0; + }; +}; + + +// Assign orphan structural damage to torso; +// @todo + + +if (_selection == "") then { + _damageReturn = _damageReturn + (_unit getVariable QGVAR(structDamage)); +} else { + _damageReturn = _damageReturn + _newDamage; +}; + + +// Leg Damage +_legdamage = (_unit getHitPointDamage "HitLeftLeg") + (_unit getHitPointDamage "HitRightLeg"); +if (_selectionName == "leg_l") then { + _legdamage = _damageReturn + (_unit getHitPointDamage "HitRightLeg"); +}; +if (_selectionName == "leg_r") then { + _legdamage = (_unit getHitPointDamage "HitLeftLeg") + _damageReturn; +}; + +if (_legdamage >= LEGDAMAGETRESHOLD1) then { + if (_unit getHitPointDamage "HitLegs" != 1) then {_unit setHitPointDamage ["HitLegs", 1]}; +} else { + if (_unit getHitPointDamage "HitLegs" != 0) then {_unit setHitPointDamage ["HitLegs", 0]}; +}; +// @ŧodo: force prone for completely fucked up legs. + + +// Arm Damage +_armdamage = (_unit getHitPointDamage "HitLeftArm") + (_unit getHitPointDamage "HitRightArm"); +if (_selectionName == "hand_l") then { + _armdamage = _damageReturn + (_unit getHitPointDamage "HitRightArm"); +}; +if (_selectionName == "hand_r") then { + _armdamage = (_unit getHitPointDamage "HitLeftArm") + _damageReturn; +}; + +if (_armdamage >= ARMDAMAGETRESHOLD1) then { + if (_unit getHitPointDamage "HitHands" != 1) then {_unit setHitPointDamage ["HitHands", 1]}; +} else { + if (_unit getHitPointDamage "HitHands" != 0) then {_unit setHitPointDamage ["HitHands", 0]}; +}; +// @todo: Drop weapon for full damage. + + +// Set Pain +if (_selection == "") then { + _pain = _unit getVariable [QGVAR(pain), 0]; + _pain = _pain + _newDamage * (1 - (_unit getVariable [QGVAR(morphine), 0])); + _unit setVariable [QGVAR(pain), _pain min 1, true]; +}; + + +// Unconsciousness +if (_selection == "" and + _damageReturn >= UNCONSCIOUSNESSTRESHOLD and + _damageReturn < 1 and + !(_unit getVariable [QGVAR(isUnconscious), False] +)) then { + // random chance to kill AI instead of knocking them out + if (_unit getVariable [QGVAR(allowUnconscious), ([_unit] call EFUNC(common,isPlayer)) or random 1 > 0.5]) then { + hint "unconscious"; // @todo + } else { + _damageReturn = 1; + }; +}; + +_damageReturn diff --git a/addons/medical/functions/fnc_cacheHandleDamageCall.sqf b/addons/medical/functions/fnc_handleDamage_caching.sqf similarity index 85% rename from addons/medical/functions/fnc_cacheHandleDamageCall.sqf rename to addons/medical/functions/fnc_handleDamage_caching.sqf index b692c2e871..1657d65b25 100644 --- a/addons/medical/functions/fnc_cacheHandleDamageCall.sqf +++ b/addons/medical/functions/fnc_handleDamage_caching.sqf @@ -1,14 +1,21 @@ -/** - * fnc_cacheHandleDamageCall.sqf - * @Descr: Cache a handleDamage call to execute it 3 frames later - * @Author: KoffeinFlummi +/* + * Author: KoffeinFlummi, Glowbal + * Cache a handleDamage call to execute it 3 frames later * - * @Arguments: [unit OBJECT, selection STRING, damagE NUMBER, source OBJECT, projectile STRING (Could be an OBJECT on occasion)] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: Unit That Was Hit + * 1: Name Of Hit Selection + * 2: Amount Of Damage + * 3: Shooter + * 4: Projectile + * 5: Current damage to be returned + * + * Return Value: + * + * + * Public: No */ - #include "script_component.hpp" private ["_unit", "_selectionName","_damage", "_source","_projectile","_hitSelections","_hitPoints","_newDamage","_cache_hitpoints","_cache_projectiles","_cache_params","_cache_damages"]; @@ -17,6 +24,7 @@ _selectionName = _this select 1; _damage = _this select 2; _source = _this select 3; _projectile = _this select 4; +_returnDamage = _this select 5; _hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; _hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; @@ -27,14 +35,24 @@ if (_selectionName in _hitSelections) then { _newDamage = _damage - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selectionName))); }; + // we want to move damage to another selection; have to do it ourselves. // this is only the case for limbs, so this will not impact the killed EH. if (_selectionName != (_this select 1)) then { _unit setHitPointDamage [_hitPoints select (_hitSelections find _selectionName), _damage + _newDamage]; _newDamage = 0; }; +// ?????? _damage = _damage + _newDamage; +// Check for vehicle crash +if (vehicle _unit != _unit && !(vehicle _unit isKindOf "StaticWeapon") && {isNull _source} && {_projectile == ""} && {_selectionName == ""}) then { + if (missionNamespace getvariable [QGVAR(allowVehicleCrashDamage), true]) then { + _selectionName = _hitSelections select (floor(random(count _hitSelections))); + _projectile = "vehiclecrash"; + }; +}; + // From AGM medical: // Exclude falling damage to everything other than legs; reduce structural damage. if (((velocity _unit) select 2 < -5) && (vehicle _unit == _unit)) then { @@ -64,7 +82,7 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) t _cache_params = _unit getVariable [QGVAR(cachedHandleDamageParams), []]; { if (typeName _x == typeName "") then { - (_cache_params select _foreachIndex) call FUNC(handleDamage); + (_cache_params select _foreachIndex) call FUNC(handleDamage_advanced); }; }foreach _cache_projectiles; [(_this select 1)] call cba_fnc_removePerFrameHandler; @@ -110,14 +128,14 @@ if (_selectionName != "") then { _cache_projectiles pushBack _projectile; _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); _cache_damages pushBack _newDamage; - _cache_params pushBack [_unit, _selectionName, _damage, _source, _projectile]; + _cache_params pushBack [_unit, _selectionName, _damage, _source, _projectile, _returnDamage]; }; } else { // This is an unhandled projectile _cache_projectiles pushBack _projectile; _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); _cache_damages pushBack _newDamage; - _cache_params pushBack [_unit, _selectionName, _damage, _source, _projectile]; + _cache_params pushBack [_unit, _selectionName, _damage, _source, _projectile, _returnDamage]; }; }; diff --git a/addons/medical/functions/fnc_handleDamage_fractures.sqf b/addons/medical/functions/fnc_handleDamage_fractures.sqf new file mode 100644 index 0000000000..0a22365044 --- /dev/null +++ b/addons/medical/functions/fnc_handleDamage_fractures.sqf @@ -0,0 +1,74 @@ +/* + * Author: Glowbal + * Handling of the fracture injuries upon the handleDamage eventhandler. + * + * Arguments: + * 0: Unit That Was Hit + * 1: Name Of Hit Selection + * 2: Amount Of Damage + * 3: Shooter or source of the damage + * 4: Type of the damage done + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn", "_fractures", "_fractureType"]; +_unit = _this select 0; +_selectionName = _this select 1; +_amountOfDamage = _this select 2; +_sourceOfDamage = _this select 3; +_typeOfDamage = _this select 4; +_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber); + +_fractureType = 1; +if (_amountOfDamage > 0.05) then { + + // TODO specify fractures based off typeOfInjury details better. + switch (_typeOfDamage) do { + case "Bullet": { + _fractureType = round(random(2)); + }; + case "Grenade": { + _fractureType = round(random(2)); + if (_fractureType < 1) then { + _fractureType = 1; + }; + }; + case "Explosive": { + _fractureType = round(random(2)); + if (_fractureType < 1) then { + _fractureType = 1; + }; + }; + case "Shell": { + _fractureType = round(random(2)); + if (_fractureType < 1) then { + _fractureType = 1; + }; + }; + case "Unknown": { + _fractureType = round(random(1)); + }; + case "VehicleCrash": { + _fractureType = round(random(0)); + }; + default { + _fractureType = round(random(1)); + }; + }; + + private ["_fractures", "_fractureID", "_amountOf"]; + _fractures = _unit getvariable[QGVAR(fractures), []]; + _fractureID = 1; + _amountOf = count _fractures; + if (_amountOf > 0) then { + _fractureID = (_fractures select (_amountOf - 1) select 0) + 1; + }; + _fractures pushback [_fractureID, _fractureType, _bodyPartn, 1 /* percentage treated */]; + _unit setvariable [GVAR(fractures), _fractures, true]; +}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleDamage_internalInjuries.sqf b/addons/medical/functions/fnc_handleDamage_internalInjuries.sqf new file mode 100644 index 0000000000..6ee256a977 --- /dev/null +++ b/addons/medical/functions/fnc_handleDamage_internalInjuries.sqf @@ -0,0 +1,28 @@ +/* + * Author: Glowbal + * Handling of the internal injuries upon the handleDamage eventhandler. + * + * Arguments: + * 0: Unit That Was Hit + * 1: Name Of Hit Selection + * 2: Amount Of Damage + * 3: Shooter or source of the damage + * 4: Type of the damage done + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn"]; +_unit = _this select 0; +_selectionName = _this select 1; +_amountOfDamage = _this select 2; +_sourceOfDamage = _this select 3; +_typeOfDamage = _this select 4; +_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber); + +// TODO implement internal injuries diff --git a/addons/medical/functions/fnc_handleDamage_wounds.sqf b/addons/medical/functions/fnc_handleDamage_wounds.sqf new file mode 100644 index 0000000000..ceac7c5f60 --- /dev/null +++ b/addons/medical/functions/fnc_handleDamage_wounds.sqf @@ -0,0 +1,140 @@ +/* + * Author: Glowbal + * Handling of the open wounds & injuries upon the handleDamage eventhandler. + * + * Arguments: + * 0: Unit That Was Hit + * 1: Name Of Hit Selection + * 2: Amount Of Damage + * 3: Shooter or source of the damage + * 4: Type of the damage done + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage", "_bodyPartn", "_woundType", "_injuryTypeInfo", "_allInjuriesForDamageType", "_allPossibleInjuries", "_highestPossibleDamage", "_highestPossibleSpot", "_minDamage", "_openWounds", "_woundID", "_toAddInjury", "_painToAdd"]; +_unit = _this select 0; +_selectionName = _this select 1; +_damage = _this select 2; +_typeOfProjectile = _this select 3; +_typeOfDamage = _this select 4; + +// Convert the selectionName to a number and ensure it is a valid selection. +_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber); +if (_bodyPartn < 0) exitwith {}; + +// Get the injury type information. Format: [typeDamage thresholds, selectionSpecific, woundTypes] +_injuryTypeInfo = missionNamespace getvariable [format[QGVAR(woundInjuryType_%1), _typeOfDamage],[[], false, []]]; + +// This are the available injuries for this damage type. Format [[classtype, selections, bloodloss, minimalDamage, pain], ..] +_allInjuriesForDamageType = _injuryTypeInfo select 2; + +// find the available injuries for this damage type and damage amount +_highestPossibleSpot = -1; +_highestPossibleDamage = -1; +_allPossibleInjuries = []; +{ + _damageLevels = _x select 4; + _minDamage = _damageLevels select 0; + _maxDamage = _damageLevels select 1; + + // Check if the damage is higher as the min damage for the specific injury + if (_damage >= _minDamage && {_damage <= _maxDamage || _maxDamage < 0}) then { + _classType = _x select 0; + _selections = _x select 1; + _bloodLoss = _x select 2; + _pain = _x select 3; + + // Check if the injury can be applied to the given selection name + if ("All" in _selections || _selectionName in _selections) then { + + // Find the wound which has the highest minimal damage, so we can use this later on for adding the correct injuries + if (_minDamage > _highestPossibleDamage) then { + _highestPossibleSpot = _foreachIndex; + _highestPossibleDamage = _minDamage; + }; + + // Store the valid possible injury for the damage type, damage amount and selection + _allPossibleInjuries pushback _x; + }; + }; +}foreach _allInjuriesForDamageType; + +// No possible wounds available for this damage type or damage amount. +if (_highestPossibleSpot < 0) exitwith { + // It appears we are dealing with an unknown type of damage. + if (count _allInjuriesForDamageType == 0) then { + + }; +}; + +// Administration for open wounds and ids +_openWounds = _unit getvariable[QGVAR(openWounds), []]; +_woundID = _unit getvariable[QGVAR(lastUniqueWoundID), 1]; + +_painToAdd = 0; +_woundsCreated = []; +{ + if (_x select 0 <= _damage) exitwith { + for "_i" from 0 to (1+ floor(random(_x select 1)-1)) /* step +1 */ do { + + // Find the injury we are going to add. Format [ classID, allowdSelections, bloodloss, painOfInjury, minimalDamage] + _toAddInjury = if (random(1) >= 0.5) then {_allInjuriesForDamageType select _highestPossibleSpot} else {_allPossibleInjuries select (floor(random (count _allPossibleInjuries)));}; + _toAddClassID = _toAddInjury select 0; + _foundIndex = -1; + + _bodyPartNToAdd = if (_injuryTypeInfo select 1) then {_bodyPartn} else {floor(random(6))}; + // If the injury type is selection part specific, we will check if one of those injury types already exists and find the spot for it.. + if ((_injuryTypeInfo select 1)) then { + { + // Check if we have an id of the given class on the given bodypart already + if (_x select 1 == _toAddClassID && {_x select 2 == _bodyPartNToAdd}) exitwith { + _foundIndex = _foreachIndex; + }; + }foreach _openWounds; + }; + + _injury = []; + if (_foundIndex < 0) then { + // Create a new injury. Format [ID, classID, bodypart, percentage treated, bloodloss rate] + _injury = [_woundID, _toAddInjury select 0, _bodyPartNToAdd, 1, _toAddInjury select 2]; + + // Since it is a new injury, we will have to add it to the open wounds array to store it + _openWounds pushback _injury; + + // New injuries will also increase the wound ID + _woundID = _woundID + 1; + } else { + // We already have one of these, so we are just going to increase the number that we have of it with a new one. + _injury = _openWounds select _foundIndex; + _injury set [3, (_injury select 3) + 1]; + }; + // Store the injury so we can process it later correctly. + _woundsCreated pushback _injury; + + // Collect the pain that is caused by this injury + _painToAdd = _painToAdd + (_toAddInjury select 3); + }; + }; +}foreach (_injuryTypeInfo select 0); + +_unit setvariable [QGVAR(openWounds), _openWounds]; + +// Only update if new wounds have been created +if (count _woundsCreated > 0) then { + _unit setvariable [QGVAR(lastUniqueWoundID), _woundID, true]; +}; + +// TODO Should this be done in a single broadcast? +// Broadcast the new injuries across the net in parts. One broadcast per injury. Prevents having to broadcast one massive array of injuries. +{ + ["medical_propagateWound", [_unit, _x]] call EFUNC(common,globalEvent); +}foreach _woundsCreated; + +_painLevel = _unit getvariable [QGVAR(pain), 0]; +_unit setvariable [QGVAR(pain), _painLevel + _painToAdd]; diff --git a/addons/medical/functions/fnc_handleDisplayEffects.sqf b/addons/medical/functions/fnc_handleDisplayEffects.sqf deleted file mode 100644 index b640532cac..0000000000 --- a/addons/medical/functions/fnc_handleDisplayEffects.sqf +++ /dev/null @@ -1,83 +0,0 @@ -/** - * fn_handleDisplayEffects.sqf - * @Descr: displays visual effects to user - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -if (!hasInterface) exitwith{}; -45 cutRsc [QGVAR(ScreenEffectsBlack),"PLAIN"]; - -FUNC(hb_effect) = { - _heartRate = _this select 0; - if (_heartRate < 0.1) exitwith {}; - _hbSoundsFast = ["ACE_heartbeat_fast_1", "ACE_heartbeat_fast_2", "ACE_heartbeat_fast_3", "ACE_heartbeat_norm_1", "ACE_heartbeat_norm_2"]; - _hbSoundsNorm = ["ACE_heartbeat_norm_1", "ACE_heartbeat_norm_2"]; - _hbSoundsSlow = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2", "ACE_heartbeat_norm_1", "ACE_heartbeat_norm_2"]; - - if (GVAR(playingHeartBeatSound)) exitwith {}; - GVAR(playingHeartBeatSound) = true; - - _sleep = 60 / _heartRate; - if (_heartRate < 60) then { - _sound = _hbSoundsSlow select (random((count _hbSoundsSlow) -1)); - playSound _sound; - - [{ - GVAR(playingHeartBeatSound) = false; - }, [], _sleep, _sleep] call EFUNC(common,waitAndExecute); - } else { - if (_heartRate > 120) then { - _sound = _hbSoundsFast select (random((count _hbSoundsFast) -1)); - playSound _sound; - [{ - GVAR(playingHeartBeatSound) = false; - }, [], _sleep, _sleep] call EFUNC(common,waitAndExecute); - }; - }; -}; - -GVAR(playingHeartBeatSound) = false; -GVAR(BloodLevel_CC) = ppEffectCreate ["ColorCorrections", 4208]; -GVAR(BloodLevel_CC) ppEffectForceInNVG true; -GVAR(BloodLevel_CC) ppEffectAdjust [1,1,0, [0,0,0,0], [1,1,1,1], [0.2,0.2,0.2,0]]; -GVAR(BloodLevel_CC) ppEffectCommit 0; - -[{ - private ["_unit","_bloodLoss", "_bloodVolume"]; - _unit = ACE_player; - - if (isNull(findDisplay 312)) then { - if ([_unit] call EFUNC(common,isAwake) && false) then { - _bloodLoss = _unit call FUNC(getBloodLoss); - if (_bloodLoss >0) then { - [_bloodLoss] call FUNC(effectBleeding); - }; - - [{ - [((_this select 0) getvariable[QGVAR(amountOfPain), 0])] call FUNC(effectPain); - }, [_unit], 0.25, 0.25] call EFUNC(common,waitAndExecute); - - [(_unit getvariable[QGVAR(heartRate), 70])] call FUNC(hb_effect); - ["medicalEffectsLoop", [_unit]] call ace_common_fnc_localEvent - }; - - // Blood Level Effect - _bloodVolume = _unit getVariable [QGVAR(bloodVolume), 100]; - if (_bloodVolume > 99 || !alive _unit) then { - GVAR(BloodLevel_CC) ppEffectEnable false; - } else { - GVAR(BloodLevel_CC) ppEffectEnable true; - GVAR(BloodLevel_CC) ppEffectAdjust [1, 1, 0, [0.0, 0.0, 0.0, 0.0], [1, 1, 1,_bloodVolume/100], [0.2, 0.2, 0.2, 0]]; - GVAR(BloodLevel_CC) ppEffectCommit 0; - }; - } else { - GVAR(BloodLevel_CC) ppEffectEnable false; - }; - - } , 0.5, [] ] call CBA_fnc_addPerFrameHandler; diff --git a/addons/medical/functions/fnc_handleDropUnit.sqf b/addons/medical/functions/fnc_handleDropUnit.sqf deleted file mode 100644 index c82fe8ce79..0000000000 --- a/addons/medical/functions/fnc_handleDropUnit.sqf +++ /dev/null @@ -1,88 +0,0 @@ -/** - * fnc_handleDropUnit.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - - -#include "script_component.hpp" - - -private ["_caller","_target","_killOnDrop","_dragging"]; -_caller = _params select 0; -_target = _params select 1; -_killOnDrop = _params select 2; -_dragging = _params select 3; - -[format["fnc_handleDropUnit: %1",_this]] call EFUNC(common,debug); - -if ((isNull ([_caller] call EFUNC(common,getCarriedObj))) || !([_caller] call EFUNC(common,isAwake)) || (vehicle _caller != _caller)) then { - - if (primaryWeapon _caller == "ACE_FakePrimaryWeapon") then { - _caller removeWeapon "ACE_FakePrimaryWeapon"; - }; - - [_target, false] call EFUNC(common,disableAI_f); - _caller setvariable[QGVAR(onStartMovingUnitParams), nil]; - - // handle the drag & carry administration - if (_dragging) then { - _target setvariable [QGVAR(beingDragged),nil,true]; - _caller setvariable [QGVAR(dragging),nil,true]; - } else { - _target setvariable [QGVAR(beingCarried),nil,true]; - _caller setvariable [QGVAR(carrying),nil,true]; - }; - - // This is for good messure, the object should already have been dropped if it ever reaches this - [_caller,ObjNull] call EFUNC(common,carryObj); - - // handle the drag & carry animiations - if ([_caller] call EFUNC(common,isAwake) && (vehicle _caller == _caller)) then { - [_caller,"amovpercmstpsraswrfldnon_amovpknlmstpslowwrfldnon", 1] call EFUNC(common,doAnimation); - }; - - if (vehicle _target == _target) then { - if (_dragging) then { - [_target,"AinjPpneMstpSnonWrflDb_release", 2, true] call EFUNC(common,doAnimation); - } else { - [_target,"AinjPfalMstpSnonWrflDnon_carried_Down", 2, true] call EFUNC(common,doAnimation); - }; - } else { - if ([_target] call EFUNC(common,isAwake)) then { - [_target,"", 2] call EFUNC(common,doAnimation); // TODO play animation for the current seat instead - } else { - // this might not work properly - [_target,([_target] call EFUNC(common,getDeathAnim)), 1] call EFUNC(common,doAnimation); - }; - }; - - // Ensure that the unit does not get dropped through the floor of a building - if (!surfaceIsWater getPos _caller) then { - [{ - EXPLODE_3_PVT(_this,_caller,_target,_killOnDrop); - if (vehicle _target == _target && (vehicle _caller == _caller)) then { - // This will set the target body/unit on the correct position, so it doesn't fall through floors. - _positionUnit = getPosATL _target; - _positionUnit set [2, (getPosATL _caller) select 2]; - _target setPosATL _positionUnit; - }; - - if (_killOnDrop) then { - _unit setDamage 1; - }; - [format["fnc_handleDropUnit: %1 - passed setPosATL fix", _caller]] call EFUNC(common,debug); - }, [_caller,_target,_killOnDrop], 0.5, 0.5] call EFUNC(common,waitAndExecute); - } else { - if (_killOnDrop) then { - _unit setDamage 1; - }; - }; - - ["onDropInjured", [_caller], [_caller, _unit, 0]] call EFUNC(common,targetEvent); - -}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleHeal.sqf b/addons/medical/functions/fnc_handleHeal.sqf deleted file mode 100644 index 04e17a5d4c..0000000000 --- a/addons/medical/functions/fnc_handleHeal.sqf +++ /dev/null @@ -1,29 +0,0 @@ -/** - * fn_handleHeal.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit",'_healer']; -_unit = _this select 0; -_healer = _this select 1; - -if (!(isPlayer _healer) && GVAR(setting_allowAIFullHeal) && !([_unit] call EFUNC(common,isUnconscious))) then { - [_unit, QGVAR(openWounds),[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]] call EFUNC(common,setDefinedVariable); - [_unit, QGVAR(bandagedWounds),[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]] call EFUNC(common,setDefinedVariable); - - if (_unit != _healer) then { - [_unit,"STR_ACE_BANDAGED","STR_ACE_IS_BANDAGING_YOU", 0, [[_healer] call EFUNC(common,getName)]] call EFUNC(gui,sendDisplayMessageTo); - }; - [_unit,"treatment",format["%1 has patched up the patient",[_healer] call EFUNC(common,getName)]] call FUNC(addActivityToLog); - - ["Medical_onHandleHeal", _this] call ace_common_fnc_localEvent; -}; - -true; \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleKilled.sqf b/addons/medical/functions/fnc_handleKilled.sqf new file mode 100644 index 0000000000..c156a842c5 --- /dev/null +++ b/addons/medical/functions/fnc_handleKilled.sqf @@ -0,0 +1,25 @@ +/* + * Author: Glowbal + * Called when a unit is killed + * + * Arguments: + * 0: The Unit + * + * ReturnValue: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +private["_unit"]; +_unit = _this select 0; +if (!local _unit) exitwith {}; + +_unit setvariable [QGVAR(pain), 0]; +if (GVAR(level) >= 2) then { + _unit setvariable [QGVAR(heartRate), 0]; + _unit setvariable [QGVAR(bloodPressure), [0, 0]]; + _unit setvariable [QGVAR(airwayStatus), 0]; +}; diff --git a/addons/medical/functions/fnc_handleLocal.sqf b/addons/medical/functions/fnc_handleLocal.sqf new file mode 100644 index 0000000000..5d9c5865a4 --- /dev/null +++ b/addons/medical/functions/fnc_handleLocal.sqf @@ -0,0 +1,25 @@ +/* + * Author: Glowbal + * Called when a unit switched locality + * + * Arguments: + * 0: The Unit + * 1: Is local + * + * ReturnValue: + * None + * + * Public: No + */ + + +#include "script_component.hpp" + +private["_unit", "_local"]; +_unit = _this select 0; +_local = _this select 1; +if (_local) then { + if (_unit getvariable[QGVAR(addedToUnitLoop),false]) then { + [_unit, true] call FUNC(addToInjuredCollection); + }; +}; diff --git a/addons/medical/functions/fnc_handleTreatment.sqf b/addons/medical/functions/fnc_handleTreatment.sqf deleted file mode 100644 index 929dcfdbb0..0000000000 --- a/addons/medical/functions/fnc_handleTreatment.sqf +++ /dev/null @@ -1,72 +0,0 @@ -/** - * fnc_handleTreatment.sqf - * @Descr: entry point for all treatment actions. Handles the syncronization between treatment actions and equipment usages. Will pass on the the treatment action to their category handlers. - * When using an undefined category, the caller is responsible for cleaning up, including unlocking the treatment mutex. - * @Author: Glowbal - * - * @Arguments: [caller OBJECT, target OBJECT, selectionName STRING, removeItem STRING, category STRING] - * @Return: nil - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_treatingPerson","_injuredPerson","_selectionName","_removeItem","_attributes","_patient", "_continue", "_prevAnim"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; -_category = _this select 4; - -if (!local _caller) exitwith { - [[_caller, _target, _selectionName, _removeItem, _category], QUOTE(FUNC(handleTreatment)), _caller] call EFUNC(common,execRemoteFnc); - false; -}; - -if ([_caller] call FUNC(isSetTreatmentMutex)) exitwith { - if (_caller == ACE_player) then { - // display a message - currently occupied with treatment already - }; - false -}; -[_caller, true] call FUNC(treatmentMutex); - -if (!([_caller, _target, _removeItem] call FUNC(hasEquipment)) && _removeItem != "") exitwith { - [_caller, false] call FUNC(treatmentMutex); - false; -}; - -if (primaryWeapon _caller == "") then { - _caller addWeapon "ACE_FakePrimaryWeapon"; -}; -_caller selectWeapon (primaryWeapon _caller); - -// TODO make dynamic -switch (toLower _category) do { - case "bandage": { - ([_caller, _target, _selectionName, _removeItem] call FUNC(handleTreatment_Category_Bandaging)); - }; - case "medication": { - ([_caller, _target, _selectionName, _removeItem] call FUNC(handleTreatment_Category_Medication)); - }; - case "advanced": { - ([_caller, _target, _selectionName, _removeItem] call FUNC(handleTreatment_Category_Advanced)); - }; - case "airway": { - ([_caller, _target, _selectionName, _removeItem] call FUNC(handleTreatment_Category_Airway)); - }; - default { - // Do not handle the request - false; - }; -}; - -// Entry point for any un supported treatment actions. -// Expected to have one of the local events call the treatment completed event. -["Medical_performingTreatment", [_caller, _target, _selectionName, _removeItem, _category]] call ace_common_fnc_localEvent; - -if ([_target] call FUNC(hasMedicalEnabled)) then { - [_target] call FUNC(addToInjuredCollection); -}; - -true; diff --git a/addons/medical/functions/fnc_handleTreatment_Action_AdvancedLocal.sqf b/addons/medical/functions/fnc_handleTreatment_Action_AdvancedLocal.sqf deleted file mode 100644 index 1afb25f44c..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Action_AdvancedLocal.sqf +++ /dev/null @@ -1,45 +0,0 @@ -/** - * fnc_handleTreatment_Action_AdvancedLocal.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit", "_caller", "_selectionName", "_removeItem", "_prevAnim", "_value"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; -_prevAnim = _this select 4; - -// TODO old code, has to be replaced by something more dynamic. -_attributes = switch (_removeItem) do { - case "ACE_blood_iv": {[QGVAR(bloodIVVolume),1000,"Blood IV"]}; - case "ACE_saline_iv": {[QGVAR(salineIVVolume),1000,"Saline IV"]}; - case "ACE_plasma_iv": {[QGVAR(plasmaIVVolume),1000,"Plasma IV"]}; - - case "ACE_blood_iv_500": {[QGVAR(bloodIVVolume),500,"Blood IV"]}; - case "ACE_saline_iv_500": {[QGVAR(salineIVVolume),500,"Saline IV"]}; - case "ACE_plasma_iv_500": {[QGVAR(plasmaIVVolume),500,"Plasma IV"]}; - - case "ACE_blood_iv_250": {[QGVAR(bloodIVVolume),250,"Blood IV"]}; - case "ACE_saline_iv_250": {[QGVAR(salineIVVolume),250,"Saline IV"]}; - case "ACE_plasma_iv_250": {[QGVAR(plasmaIVVolume),250,"Plasma IV"]}; - - default {[]}; -}; - -if (count _attributes > 1) then { - _value = [_target,(_attributes select 0)] call EFUNC(common,getDefinedVariable); - _value = _value + (_attributes select 1); - [_target,(_attributes select 0),_value] call EFUNC(common,setDefinedVariable); - - // TODO localization - [_target,"treatment",format["%1 has given %4 a %2(%3ml)",[_caller] call EFUNC(common,getName),_attributes select 2,_attributes select 1,_target]] call FUNC(addActivityToLog); - [_target,_removeItem] call FUNC(addToTriageList); -}; diff --git a/addons/medical/functions/fnc_handleTreatment_Action_AirwayLocal.sqf b/addons/medical/functions/fnc_handleTreatment_Action_AirwayLocal.sqf deleted file mode 100644 index a140f74f6b..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Action_AirwayLocal.sqf +++ /dev/null @@ -1,36 +0,0 @@ -/** - * fn_treatmentAirwayLocal.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_caller","_target","_selectedData", "_selectionName", "_prevAnim", "_displayingIcon", "_part"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; - - -if (!local _target) exitwith{}; - -[_target,"STR_ACE_AIRWAY","STR_ACE_IS_TREATING_YOUR_AIRWAY",0, [([_caller] call EFUNC(common,getName))]] call EFUNC(gui,sendDisplayMessageTo); -[_target,_removeItem] call FUNC(addToTriageList); - - -_airwayStatus = [_target,QGVAR(airway)] call EFUNC(common,getDefinedVariable); -if (_airwayStatus > 0) then { - if (!([_treatingPerson] call FUNC(isMedic))) then { - _target setvariable [QGVAR(airwayTreated), true, true]; - } else { - if (random (1) >= 0.35) then { - _target setvariable [QGVAR(airwayTreated), true, true]; - }; - }; -}; -true \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleTreatment_Action_BandageLocal.sqf b/addons/medical/functions/fnc_handleTreatment_Action_BandageLocal.sqf deleted file mode 100644 index c6a09fa4de..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Action_BandageLocal.sqf +++ /dev/null @@ -1,143 +0,0 @@ -/** - * fn_bandageLocal.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_caller","_Target","_selectionName","_removeItem","_part","_openWounds","_woundsArray","_highest_amount","_highestSpot","_collectiveImpact", "_highestTotal","_totalNumber", "_selectedData"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; - -// TODO figure this out later on -//_selectedData = [_this, 4, "", [""]] call BIS_fnc_Param; - -if (!local _target) exitwith{ - ["fnc_bandageLocal called on non local machine",3] call EFUNC(common,debug); -}; - -if (_caller != _target) then { - [_target,"STR_ACE_BANDAGING", "STR_ACE_IS_BANDAGING_YOU", 0, [[_treatingPerson] call EFUNC(common,getName)]] call EFUNC(gui,sendDisplayMessageTo); -}; - -[_target,_removeItem] call FUNC(addToTriageList); - -// TODO make dynamic -_collectiveImpact = switch (_removeItem) do { - case "ACE_packing_bandage": {[1.0, 1.5, 1.2]}; - case "ACE_bandageElastic": {[1.3, 0.9, 0.9]}; - case "ACE_bandage_basic": {[1.5, 1.0, 0.6]}; - case "ACE_stitching": {[2.0, 2.0, 2.0]}; - case "ACE_quikclot": {[0.9, 0.3, 0.3]}; - default {[0.9, 0.5, 0.5]}; -}; - -_part = [_selectionName] call FUNC(getBodyPartNumber); - -_openWounds = [_target,QGVAR(openWounds)] call EFUNC(common,getDefinedVariable); -_woundsArray = _openWounds select _part; - -// Find the type of which we have the most injures and the amount of this for the selected bodypart. -_highestSpot = 0; -_highest_amount = 0; -{ - if (_x > _highest_amount) then { - _highestSpot = _foreachIndex; - _highest_amount = _x; - }; -}foreach _woundsArray; - -// If we have bandaging aid enabled (on easy difficulty), we will find the body part with the most injuries and use that instead. -if (GVAR(setting_enableBandagingAid)) then { - _highestTotal = 0; - { - // find out how many injuries this bodypart has - _totalNumber = 0; - { - _totalNumber = _totalNumber + _x; - }foreach _x; - - // Check if this body part has the highest amount of injuries - if (_totalNumber > _highestTotal) then { - _part = _foreachIndex; - _highestTotal = _totalNumber; - }; - }foreach _openWounds; - - // Find the type of which we have the most injures and the amount of this for the selected bodypart. - _woundsArray = _openWounds select _part; - _highestSpot = 0; - _highest_amount = 0; - { - if (_x > _highest_amount) then { - _highestSpot = _foreachIndex; - _highest_amount = _x; - }; - }foreach _woundsArray; -}; - -// Find the amount of impact the used bandage has for the injury -_impactOfBandage = (_collectiveImpact select _highestSpot); - -_wounds = _highest_amount; -_amountOfInpact = 0; - -// if we have wounds, log that we have bandaged those and find the real impact of the bandage -if (_wounds > 0) then { - [_target,"treatment",format["%2 has bandaged a wound on %1",[_part] call FUNC(fromNumberToBodyPart),[_caller] call EFUNC(common,getName)]] call FUNC(addActivityToLog); - - _amountOfInpact = _impactOfBandage; - if (_impactOfBandage > _wounds) then { - _amountOfInpact = _wounds; - }; -}; - -// Decrease the impact -_wounds = (_wounds - _impactOfBandage); -if (_wounds < 0) then { - _wounds = 0; -}; -// Adjust the wounds value for the unit -_woundsArray set[_highestSpot, _wounds]; -_openWounds set [_part, _woundsArray]; -[_target,QGVAR(openWounds),_openWounds] call EFUNC(common,setDefinedVariable); - - -// Check if we have wounds opening enabled -if (isnil QGVAR(setting_advancedWoundsSetting)) then { - GVAR(setting_advancedWoundsSetting) = true; -}; -if (_amountOfInpact > 0.0 && GVAR(setting_advancedWoundsSetting)) then { - - // Find the bandaged body part - _bandagedWounds = [_target,QGVAR(bandagedWounds)] call EFUNC(common,getDefinedVariable); - _bandagedPart = _bandagedWounds select _part; - - // Increase the amount of bandaged wounds - _bandagedWound = _bandagedPart select _highestSpot; - _bandagedPart set [_highestSpot,_bandagedWound + _amountOfInpact]; - _bandagedWounds set[_part,_bandagedPart]; - - // Store the new bandaged wounds - [_target,QGVAR(bandagedWounds),_bandagedWounds] call EFUNC(common,setDefinedVariable); - - // Do not provide the possibility for small injuries to open again - if (_highestSpot > 0) then { - [_target, _amountOfInpact,_part,_highestSpot, _removeItem] call FUNC(handleBandageOpening); - }; -}; - -// If all wounds have been bandaged, we will reset all damage to 0. -if (!([_target] call FUNC(hasOpenWounds))) then { - _target setDamage 0; - // TODO also set hitpoints to 0 -}; - -true \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleTreatment_Action_CPR.sqf b/addons/medical/functions/fnc_handleTreatment_Action_CPR.sqf deleted file mode 100644 index 61e12687a7..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Action_CPR.sqf +++ /dev/null @@ -1,71 +0,0 @@ -/** - * fn_performCPR.sqf - * @Descr: Start the CPR action from CMS. Caller unit will attempt to restart the targets heart using CPR. - * @Author: Glowbal - * - * @Arguments: [unit OBJECT (The unit that cPR will be performed upon), caller OBJECT (The unit that does the CPR action)] - * @Return: void - * @PublicAPI: true - */ - -#include "script_component.hpp" - -#define CPR_TIME 25 // time in seconds - -private ["_caller","_target", "_selectionName", "_prevAnim"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; -_prevAnim = _this select 4; - -// only allow CPR once -if (_caller getvariable[QGVAR(isProvidingCPR), false]) exitwith {true}; - -_caller setvariable[QGVAR(isProvidingCPR), true, true]; - -[_this] call EFUNC(common,debug); -[_caller] call FUNC(treatmentMutex); - -if (_target == _caller) exitwith{[_caller,"You cannot give yourself CPR"] call EFUNC(common,sendHintTo); true}; - -[_caller,"You start providing CPR"] call EFUNC(common,sendHintTo); - -if (vehicle _target == _target) then { - [_unit,"AinjPpneMstpSnonWrflDnon_rolltoback", 1] call EFUNC(common,doAnimation); -}; - -_caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller]; -[CPR_TIME, - {((vehicle (_this select 0) != (_this select 0)) ||((getPos (_this select 0)) distance ((_this select 0) getvariable QGVAR(StartingPositionHandleTreatment)) < 1)) && (_caller getvariable[QGVAR(isProvidingCPR), false])}, // the condition - { - private ["_caller","_target", "_selectionName", "_prevAnim"]; - _caller = _this select 0; - _target = _this select 1; - _selectionName = _this select 2; - _removeItem = _this select 3; - - [[_caller, _target], QUOTE(FUNC(handleTreatment_Action_CPRLocal)), _target] call EFUNC(common,execRemoteFnc); - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - - _caller setvariable[QGVAR(isProvidingCPR), nil, true]; - ["Medical_handleTreatment_CPR", [_caller, _target, _selectionName, _removeItem, true]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - }, // on success - { - private ["_caller","_target", "_selectionName", "_prevAnim"]; - [(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo); - - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - _caller setvariable[QGVAR(isProvidingCPR), nil, true]; - ["Medical_handleTreatment_CPR", [_caller, _target, _selectionName, _removeItem, false]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - }, // on failure - [_caller, _target, _selectionName, _removeItem, _prevAnim] // arguments -] call EFUNC(gui,loadingBar); - -true; \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleTreatment_Action_MedicationLocal.sqf b/addons/medical/functions/fnc_handleTreatment_Action_MedicationLocal.sqf deleted file mode 100644 index d10bce389a..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Action_MedicationLocal.sqf +++ /dev/null @@ -1,182 +0,0 @@ -/** - * fnc_handleTreatment_Action_MedicationLocal.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_caller","_target","_selectionName","_removeItem","_attributes"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; - -_attributes = switch (_removeItem) do { - case "ACE_morphine": { - [QGVAR(givenMorphine),"Morphine"] - }; - case "ACE_atropine": { - [QGVAR(givenAtropine),"Atropine"] - }; - case "ACE_epinephrine": { - [QGVAR(givenEpinephrine),"Epinephrine"] - }; - default {[]}; -}; - -if (count _attributes > 1) then { - private ["_value","_patient"]; - [_target] call FUNC(addToInjuredCollection); - _value = [_target,(_attributes select 0)] call EFUNC(common,getDefinedVariable); - [_target,(_attributes select 0),_value + 1] call EFUNC(common,setDefinedVariable); - - _patient = "patient"; - if (_target == _caller) then { - _patient = "himself"; - }; - [_target,"treatment",format["%1 has given %3 %2",[_caller] call EFUNC(common,getName), (_attributes select 1),_patient]] call FUNC(addActivityToLog); - [_target,_removeItem] call FUNC(addToTriageList); - - _usedMedication = { - private ["_target","_var","_usedMed","_morphineUsed","_epiUsed","_atroUsed","_totalUsed"]; - _target = _this select 0; - _var = _this select 1; - _overDose = 5; - _wearOff = 120; - - if (!alive _target) exitwith{}; - if (count _this > 2) then { - _overDose = _this select 2; - if (count _this > 3) then { - _wearOff = _this select 3; - }; - }; - _usedMed = [_target, _var, 0] call EFUNC(common,getDefinedVariable); - if (isnil "_usedMed") then { - _usedMed = 0; - }; - if (_usedMed > (_overDose + round(random(2)))) then { - [_target] call EFUNC(common,setDead); - }; - - _morphineUsed = _target getvariable [QGVAR(givenMorphine), 0]; - _epiUsed = _target getvariable [QGVAR(givenEpinephrine), 0]; - _atroUsed = _target getvariable [QGVAR(givenAtropine), 0]; - _totalUsed = _morphineUsed + _epiUsed + _atroUsed; - - if (_totalUsed > 10) then { - [_target] call EFUNC(common,setDead); - }; - _wearOff = _wearOff + (round(random(30))); - - [{ - _target = _this select 0; - _wearOff = _this select 1; - _var = _this select 2; - - _amountDecreased = 0; - _usedMed = [_this select 0, _this select 2] call EFUNC(common,getDefinedVariable); - if (typeName _usedMed != typeName 0) then { - _usedMed = 0; - }; - - if (_usedMed > 0) then { - [{ - _args = _this select 0; - _amountDecreased = _args select 3; - _usedMed = ([_args select 0, _args select 2] call EFUNC(common,getDefinedVariable)); - [_args select 0, _args select 2,_usedMed - 0.001] call EFUNC(common,setDefinedVariable); - _amountDecreased = _amountDecreased + 0.001; - - if (_amountDecreased >= 1 || (_usedMed - 0.001 <= 0)) then { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - _args set [3, _amountDecreased]; - }, 1, [_target, _wearOff,_var, 0] ] call CBA_fnc_addPerFrameHandler; - }; - }, [_target, _wearOff, _var], _wearOff, _wearOff] call EFUNC(common,waitAndExecute); - - }; - - private ["_heartRate","_pain"]; - - switch (_removeItem) do { - case "ACE_atropine": { - - _heartRate = [_target, QGVAR(heartRate)] call EFUNC(common,getDefinedVariable); - //_heartRate = [_target, QGVAR(heartRate)] call EFUNC(common,getDefinedVariable); - if (alive _target) then { - if (_heartRate > 0) then { - if (_heartRate <= 40) then { - [_target, -(10 + random(20)), 30] call FUNC(addHeartRateAdjustment); - }; - - if (_heartRate > 40) then { - if (_heartRate > 120) then { - [_target, -(10 + random(50)), 30] call FUNC(addHeartRateAdjustment); - } else { - [_target, -(10 + random(40)), 30] call FUNC(addHeartRateAdjustment); - }; - }; - }; - //[_target, QGVAR(heartRate),_heartRate] call EFUNC(common,setDefinedVariable); - [_target,(_attributes select 0),5] call _usedMedication; - }; - }; - case "ACE_epinephrine": { - _heartRate = [_target, QGVAR(heartRate)] call EFUNC(common,getDefinedVariable); - if (alive _target) then { - if (_heartRate > 0) then { - if (_heartRate <= 40) then { - [_target, (10 + random(20)), 30] call FUNC(addHeartRateAdjustment); - }; - - if (_heartRate > 40) then { - if (_heartRate > 120) then { - [_target, (10 + random(50)), 30] call FUNC(addHeartRateAdjustment); - } else { - [_target, (10 + random(40)), 30, {}] call FUNC(addHeartRateAdjustment); - }; - }; - }; - [_target,(_attributes select 0),3] call _usedMedication; - }; - }; - case "ACE_morphine": { - private ["_usedMorphine"]; - _pain = [_target, QGVAR(amountOfPain)] call EFUNC(common,getDefinedVariable); - _pain = 0; - //_pain = _pain - 35; - if (_pain <= 0) then { - _pain = 0; - }; - _heartRate = [_target, QGVAR(heartRate)] call EFUNC(common,getDefinedVariable); - [format["used morphine: %1",_heartRate]] call EFUNC(common,debug); - if (alive _target) then { - if (_heartRate > 0) then { - if (_heartRate <= 40) then { - [_target, -(10 + random(20)), 40] call FUNC(addHeartRateAdjustment); - }; - if (_heartRate > 40) then { - if (_heartRate > 120) then { - [_target, -(10 + random(50)), 40] call FUNC(addHeartRateAdjustment); - } else { - [_target, -(10 + random(40)), 40] call FUNC(addHeartRateAdjustment); - }; - }; - }; - }; - [_target, QGVAR(amountOfPain),_pain] call EFUNC(common,setDefinedVariable); - [_target,(_attributes select 0),4,120] call _usedMedication; - }; - default { - - }; - }; -}; -true \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleTreatment_Action_Stitching.sqf b/addons/medical/functions/fnc_handleTreatment_Action_Stitching.sqf deleted file mode 100644 index a6e9156966..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Action_Stitching.sqf +++ /dev/null @@ -1,104 +0,0 @@ -/** - * fn_performStitching.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -#define WAITING_TIME_SMALL 2.5 -#define WAITING_TIME_MEDIUM 3.5 -#define WAITING_TIME_LARGE 4.5 - -#define WAITING_TIMES_WOUNDS [WAITING_TIME_SMALL, WAITING_TIME_MEDIUM, WAITING_TIME_LARGE] - -private ["_injuredPerson", "_treatingPerson", "_selectionName", "_removeItem", "_prevAnim", "_bandagedWounds", "_bodyPartN", "_allWounds", "_totalWoundsCount", "_totalTime", "_startTimeOfStitching", "_indexStitch", "_woundstoStitchOf", "_afterStitchingWoundsCount", "_waitingTime", "_i", "_startTime", "_messageSend"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; -_prevAnim = _this select 4; - -[_caller,"STR_ACE_STITCHING","STR_ACE_START_STITCHING_INJURIES", 0, [[_injuredPerson] call EFUNC(common,getName),_selectionName]] call EFUNC(gui,sendDisplayMessageTo); - -_bandagedWounds = [_injuredPerson,QGVAR(bandagedWounds)] call EFUNC(common,getDefinedVariable); -_bodyPartN = [_selectionName] call FUNC(getBodyPartNumber); - -_allWounds = _bandagedWounds select _bodyPartN; -_totalTime = ((_allWounds select 0) * WAITING_TIME_MEDIUM) + ((_allWounds select 1) * WAITING_TIME_MEDIUM) + ((_allWounds select 2) * WAITING_TIME_MEDIUM); - - -// Get the current position for the treatment person -_caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller]; - -_caller setvariable [QGVAR(lastStichPerformed), diag_tickTime]; -[{ - private ["_caller","_target", "_selectionName", "_prevAnim", "_removeItem","_args"]; - _args = _this select 0; - _caller = _args select 0; - _target = _args select 1; - _selectionName = _args select 2; - _removeItem = _args select 3; - _prevAnim = _args select 4; - - if ((vehicle _caller != _caller) || ((getPos _caller) distance (_caller getvariable GVAR(ORIGINAL_POSITION_PLAYER))) >= 1) then { - [(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo); - - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - [QGVAR(treatmentIconID), false, QUOTE(PATHTOF(data\icons\icon_advanced_treatment.paa)), [1,1,1,1]] call EFUNC(gui,displayIcon); - ["Medical_handleTreatment_Stitching", [_caller, _target, _selectionName, _removeItem, false]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - if (diag_tickTime - (_caller getvariable [QGVAR(lastStichPerformed), diag_tickTime - WAITING_TIME_MEDIUM]) >= WAITING_TIME_MEDIUM) then { - _caller setvariable [QGVAR(lastStichPerformed), diag_tickTime]; - - _bandagedWounds = [_target,QGVAR(bandagedWounds)] call EFUNC(common,getDefinedVariable); - _allWounds = _bandagedWounds select _bodyPartN; - { - if (_x > 0) exitwith { - _value = _x - 1; - if (_value < 0) then { - _value = 0; - }; - - _allWounds set[_foreachIndex, _value]; - }; - }foreach _allWounds; - - _bandagedWounds set [_bodyPartN, _allWounds]; - [_target, QGVAR(bandagedWounds), _bandagedWounds] call EFUNC(common,setDefinedVariable); - - if (((_allWounds select 0) * 2.5) + ((_allWounds select 1) * 3.5) + ((_allWounds select 2) * 4.5) <= 0) then { - [_target,"treatment",format["%1 has stitched up some bandages wounds",[_caller] call EFUNC(common,getName)]] call FUNC(addActivityToLog); - - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - [QGVAR(treatmentIconID), false, QUOTE(PATHTOF(data\icons\icon_advanced_treatment.paa)), [1,1,1,1]] call EFUNC(gui,displayIcon); - ["Medical_handleTreatment_Stitching", [_caller, _target, _selectionName, _removeItem, true]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - }; -}, 0.1, [_caller, _target, _selectionName, _removeItem, _prevAnim] ] call CBA_fnc_addPerFrameHandler; - - -// Necessary for showing the loading bar along side -[_totalTime, // the time to wait - {_caller = _this select 0; ((vehicle _caller != _caller) ||((getPos _caller) distance GVAR(ORIGINAL_POSITION_PLAYER)) < 1)}, // the condition, called every frame - {}, // on success - {}, // on failure - [_caller] // arguments -] call EFUNC(gui,loadingBar); - -true; \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleTreatment_Action_fullHeal.sqf b/addons/medical/functions/fnc_handleTreatment_Action_fullHeal.sqf deleted file mode 100644 index 53f82f74f0..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Action_fullHeal.sqf +++ /dev/null @@ -1,74 +0,0 @@ -/** - * fn_heal.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit", "_caller", "_selectionName", "_removeItem", "_prevAnim"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; -_prevAnim = _this select 4; - -if !((GVAR(setting_aidKitRestrictions) == 0 && ([_caller] call FUNC(inMedicalFacility))) || (GVAR(setting_aidKitRestrictions) == 1 && ([_caller] call FUNC(inMedicalFacility)) && (!([_unit] call FUNC(hasOpenWounds)))) || (GVAR(setting_aidKitRestrictions) == 2) || (GVAR(setting_aidKitRestrictions) == 3 && (!([_unit] call FUNC(hasOpenWounds))))) exitwith {false}; - - -// Get the current position for the treatment person -_caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller]; - -[7, // the time to wait - {((vehicle (_this select 0) != (_this select 0)) ||((getPos (_this select 0)) distance ((_this select 0) getvariable QGVAR(StartingPositionHandleTreatment)) < 1))}, // the condition, called every frame - { - private ["_caller","_target", "_selectionName", "_prevAnim", "_removeItem"]; - _caller = _this select 0; - _target = _this select 1; - _selectionName = _this select 2; - _removeItem = _this select 3; - _prevAnim = _this select 4; - - if (GVAR(setting_removeAidKitOnUse)) then { - [_caller, _target, _removeItem] call FUNC(useEquipment); - }; - [[_caller, _target], QUOTE(FUNC(handleTreatment_Action_HealLocal)), _target] call EFUNC(common,execRemoteFnc); - - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - - [QGVAR(treatmentIconID), false, "", [1,1,1,1]] call EFUNC(gui,displayIcon); - ["Medical_handleTreatment_FullHeal", [_caller, _target, _selectionName, _removeItem, true]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - }, // on success - { - private ["_caller","_target", "_selectionName", "_prevAnim", "_removeItem"]; - _caller = _this select 0; - _target = _this select 1; - _selectionName = _this select 2; - _removeItem = _this select 3; - _prevAnim = _this select 4; - - [(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo); - - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - - [QGVAR(treatmentIconID), false, "", [1,1,1,1]] call EFUNC(gui,displayIcon); - ["Medical_handleTreatment_FullHeal", [_caller, _target, _selectionName, _removeItem, false]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - }, // on failure - [_caller, _target, _selectionName, _removeItem, _prevAnim] // arguments -] call EFUNC(gui,loadingBar); - - -if (!(_unit getvariable [QEGVAR(common,isDead),false]) && alive _unit) then { - [[_unit,_caller], QUOTE(FUNC(healLocal)), _unit] call EFUNC(common,execRemoteFnc); -}; -true; \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleTreatment_Action_fullHealLocal.sqf b/addons/medical/functions/fnc_handleTreatment_Action_fullHealLocal.sqf deleted file mode 100644 index 1d08a00e23..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Action_fullHealLocal.sqf +++ /dev/null @@ -1,67 +0,0 @@ -/** - * fn_healLocal.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit", "_caller"]; -_unit = _this select 0; -_caller = _this select 1; - -if (alive _unit) exitwith { - [_unit,"treatment",format["%1 used a personal aid kit",[_caller] call EFUNC(common,getName)]] call FUNC(addActivityToLog); - - // Public variables - [_unit,QGVAR(openWounds),[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]] call EFUNC(common,setDefinedVariable); - [_unit,QGVAR(bandagedWounds),[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]] call EFUNC(common,setDefinedVariable); - - if (GVAR(setting_AdvancedLevel) > 0) then { - [_unit,QGVAR(fractures),[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]] call EFUNC(common,setDefinedVariable); - [_unit,QGVAR(airway),0] call EFUNC(common,setDefinedVariable); - [_unit,QGVAR(splints),0] call EFUNC(common,setDefinedVariable); - }; - - [_unit,QGVAR(tourniquets),[0,0,0,0,0,0]] call EFUNC(common,setDefinedVariable); - - //[QGVAR(activityLog),[]] call EFUNC(common,setDefinedVariable); - [_unit,QGVAR(triageLevel),0] call EFUNC(common,setDefinedVariable); - [_unit,QGVAR(triageCard),[]] call EFUNC(common,setDefinedVariable); - - // Private variables - [_unit,QGVAR(bloodVolume),100] call EFUNC(common,setDefinedVariable); - [_unit,QGVAR(bloodIVVolume),0] call EFUNC(common,setDefinedVariable); - [_unit,QGVAR(plasmaIVVolume),0] call EFUNC(common,setDefinedVariable); - [_unit,QGVAR(salineIVVolume),0] call EFUNC(common,setDefinedVariable); - - if (GVAR(setting_AdvancedLevel) > 0) then { - [_unit,QGVAR(heartRate),80] call EFUNC(common,setDefinedVariable); - [_unit,QGVAR(andrenaline),0] call EFUNC(common,setDefinedVariable); - [_unit,QGVAR(bloodPressure),[80,120]] call EFUNC(common,setDefinedVariable); - }; - [_unit,QGVAR(amountOfPain),0] call EFUNC(common,setDefinedVariable); - - [_unit,QGVAR(givenMorphine),0] call EFUNC(common,setDefinedVariable); - [_unit,QGVAR(givenAtropine),0] call EFUNC(common,setDefinedVariable); - [_unit,QGVAR(givenEpinephrine),0] call EFUNC(common,setDefinedVariable); - - [_unit,QGVAR(bodyPartStatus),[0,0,0,0,0,0]] call EFUNC(common,setDefinedVariable); - - // Resetting damage - _unit setDamage 0; - - // Resetting potential revive state - [_unit,QEGVAR(common,ENABLE_REVIVE_SETDEAD_F), 0] call EFUNC(common,setDefinedVariable); - [_unit,QEGVAR(common,ENABLE_REVIVE_COUNTER), 0] call EFUNC(common,setDefinedVariable); - - - ["Medical_onFullyHealed", [_unit, true]] call ace_common_fnc_localEvent; - [format["Completed healLocal %1", _this]] call EFUNC(common,debug); -}; - -["Medical_onFullyHealed", [_unit, false]] call ace_common_fnc_localEvent; \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleTreatment_Action_tourniquet.sqf b/addons/medical/functions/fnc_handleTreatment_Action_tourniquet.sqf deleted file mode 100644 index 6b9e9b3f5d..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Action_tourniquet.sqf +++ /dev/null @@ -1,36 +0,0 @@ -/** - * fnc_handleTreatment_Action_tourniquet.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_caller","_target","_part","_selectionName","_removeItem", "_tourniquets"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; - -_part = [_selectionName] call FUNC(getBodyPartNumber); -if (_part == 0 || _part == 1) exitwith { - [_caller,"You cannot apply a CAT on this body part!"] call EFUNC(common,sendHintTo); - false; -}; - -[_caller, _target, _removeItem] call FUNC(useEquipment); - -_tourniquets = [_target, QGVAR(tourniquets)] call EFUNC(common,getDefinedVariable); -if ((_tourniquets select _part) > 0) exitwith { - [_caller,"There is already a tourniquet on this body part!"] call EFUNC(common,sendHintTo); - false; -}; - -[_caller, _unit,_removeItem] call FUNC(useEquipment); -[[_caller, _target, _selectionName, _removeItem], QUOTE(FUNC(handleTreatment_Action_TourniquetLocal)), _unit] call EFUNC(common,execRemoteFnc); - -true \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleTreatment_Action_tourniquetLocal.sqf b/addons/medical/functions/fnc_handleTreatment_Action_tourniquetLocal.sqf deleted file mode 100644 index f2ce6ff6a5..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Action_tourniquetLocal.sqf +++ /dev/null @@ -1,56 +0,0 @@ -/** - * fnc_handleTreatment_Action_tourniquetLocal.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_caller","_target","_part","_selectionName","_removeItem", "_tourniquets", "_applyingTo"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; - - -[_target,"treatment",format["%1 applied a tourniquet on %2",[_caller] call EFUNC(common,getName),_selectionName]] call FUNC(addActivityToLog); -[_target,_removeItem] call FUNC(addToTriageList); -[_target] call FUNC(addToInjuredCollection); - - -_part = [_selectionName] call FUNC(getBodyPartNumber); - -// Place a tourniquet on the bodypart -_tourniquets = [_target, QGVAR(tourniquets)] call EFUNC(common,getDefinedVariable); -_applyingTo = (_tourniquets select _part) + 1 + round(random(100)); -_tourniquets set[_part, _applyingTo]; -[_target, QGVAR(tourniquets), _tourniquets] call EFUNC(common,setDefinedVariable); - -[{ - private ["_args","_target","_applyingTo","_part", "_tourniquets"]; - _args = _this select 0; - _target = _args select 0; - _applyingTo = _args select 1; - _part = _args select 2; - - if (!alive _target) exitwith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _tourniquets = [_injuredPerson,QGVAR(tourniquets)] call EFUNC(common,getDefinedVariable); - if !((_tourniquets select _part) == _applyingTo) exitwith { - // Tourniquet has been removed - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; - - _pain = [_target, QGVAR(amountOfPain)] call EFUNC(common,getDefinedVariable); - _pain = _pain + 0.005; - [_target, QGVAR(amountOfPain),_pain] call EFUNC(common,setDefinedVariable); - -}, 5, [_target, _applyingTo, _part] ] call CBA_fnc_addPerFrameHandler; - -true \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleTreatment_Category_Advanced.sqf b/addons/medical/functions/fnc_handleTreatment_Category_Advanced.sqf deleted file mode 100644 index 2189a57a29..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Category_Advanced.sqf +++ /dev/null @@ -1,94 +0,0 @@ -/** - * fnc_handleTreatment_Category_Advanced.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -// Time in seconds -#define ADVANCED_TREATMENT_TIME 5 - -private ["_caller","_target","_selectedData", "_selectionName", "_prevAnim", "_displayingIcon"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; - -// TODO add fake weapon for treatment, in case no primairy weapon is present -// Handle the animations -_prevAnim = ""; -if (vehicle _caller == _caller && (vehicle _target == _target) && !(stance _caller == "PRONE")) then { - if (primaryWeapon _caller == "") then { - _prevAnim = animationState _caller; - }; - [_caller,"AinvPknlMstpSlayWrflDnon_medic", 1] call EFUNC(common,doAnimation); -}; - -if (ACE_player == _caller) then { - // Displaying the treatment icon action - [QGVAR(treatmentIconID), true, QUOTE(PATHTOF(data\icons\icon_advanced_treatment.paa)), [1,1,1,1]] call EFUNC(gui,displayIcon); -}; - -_isHandled = switch (_removeItem) do { - case "ACE_personal_aid_kit": { - ([_caller, _target, _selectionName, _removeItem, _prevAnim] call FUNC(handleTreatment_Action_FullHeal)); - }; - case "ACE_surgical_kit": { - ([_caller, _target, _selectionName, _removeItem, _prevAnim] call FUNC(handleTreatment_Action_Stitching)); - }; - case "ACE_CPR": { - ([_caller, _target, _selectionName, _removeItem, _prevAnim] call FUNC(handleTreatment_Action_CPR)); - }; - default { - // handle it ourself - - // Get the current position for the treatment person - _caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller]; - - [ADVANCED_TREATMENT_TIME, // the time to wait - {((vehicle (_this select 0) != (_this select 0)) ||((getPos (_this select 0)) distance ((_this select 0) getvariable QGVAR(StartingPositionHandleTreatment)) < 1))}, // the condition, called every frame - { - private ["_caller","_target", "_selectionName", "_prevAnim", "_removeItem"]; - _caller = _this select 0; - _target = _this select 1; - _selectionName = _this select 2; - _removeItem = _this select 3; - _prevAnim = _this select 4; - - [_caller, _target, _removeItem] call FUNC(useEquipment); - [[_caller, _target, _selectionName, _removeItem], QUOTE(FUNC(handleTreatment_Action_AdvancedLocal)), _target] call EFUNC(common,execRemoteFnc); - - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - - ["Medical_handleTreatment_Advanced", [_caller, _target, _selectionName, _removeItem, true]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - }, // on success - { - private ["_caller","_target", "_selectionName", "_prevAnim", "_removeItem"]; - _caller = _this select 0; - _target = _this select 1; - _selectionName = _this select 2; - _removeItem = _this select 3; - _prevAnim = _this select 4; - [(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo); - - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - - ["Medical_handleTreatment_Advanced", [_caller, _target, _selectionName, _removeItem, false]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - }, // on failure - [_caller, _target, _selectionName, _removeItem, _prevAnim] // arguments - ] call EFUNC(gui,loadingBar); - true; - }; -}; -_isHandled; diff --git a/addons/medical/functions/fnc_handleTreatment_Category_Airway.sqf b/addons/medical/functions/fnc_handleTreatment_Category_Airway.sqf deleted file mode 100644 index 3456e6df18..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Category_Airway.sqf +++ /dev/null @@ -1,77 +0,0 @@ -/** - * fnc_handleTreatment_Category_Airway.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_caller","_target","_selectedData", "_selectionName", "_prevAnim", "_displayingIcon", "_part"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; - -// we can only treat the head or torso for this -_part = [_selectionName] call FUNC(getBodyPartNumber); -if (_part == 0 || _part == 1) exitwith { - // TODO add fake weapon for treatment, in case no primairy weapon is present - // Handle the animations - _prevAnim = ""; - if (vehicle _caller == _caller && (vehicle _target == _target) && !(stance _caller == "PRONE")) then { - if (primaryWeapon _caller == "") then { - _prevAnim = animationState _caller; - }; - [_caller,"AinvPknlMstpSlayWrflDnon_medic", 1] call EFUNC(common,doAnimation); - }; - - if (ACE_player == _caller) then { - // Displaying the treatment icon action - [QGVAR(treatmentIconID), true, QUOTE(PATHTOF(data\icons\icon_airway_management.paa)), [1,1,1,1]] call EFUNC(gui,displayIcon); - }; - - // Get the current position for the treatment person - _caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller]; - - [5, // the time to wait - {((vehicle (_this select 0) != (_this select 0)) ||((getPos (_this select 0)) distance ((_this select 0) getvariable QGVAR(StartingPositionHandleTreatment)) < 1))}, // the condition - { - private ["_caller","_target", "_selectionName", "_prevAnim"]; - _caller = _this select 0; - _target = _this select 1; - _selectionName = _this select 2; - _removeItem = _this select 3; - [_caller, _target, _removeItem] call FUNC(useEquipment); - - [[_caller, _target, _selectionName, _removeItem], QUOTE(FUNC(handleTreatment_Action_AirwayLocal)), _target] call EFUNC(common,execRemoteFnc); - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - - ["Medical_handleTreatment_Airway", [_caller, _target, _selectionName, _removeItem, true]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - }, // on success - { - private ["_caller","_target", "_selectionName", "_prevAnim"]; - [(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo); - - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - - ["Medical_handleTreatment_Airway", [_caller, _target, _selectionName, _removeItem, false]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - }, // on failure - [_caller, _target, _selectionName, _removeItem, _prevAnim] // arguments - ] call EFUNC(gui,loadingBar); - true; -}; -// TODO display message to caller - -["Medical_handleTreatment_Airway", [_caller, _target, _selectionName, _removeItem, false]] call ace_common_fnc_localEvent; - -false; \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleTreatment_Category_Bandaging.sqf b/addons/medical/functions/fnc_handleTreatment_Category_Bandaging.sqf deleted file mode 100644 index c1113166f5..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Category_Bandaging.sqf +++ /dev/null @@ -1,97 +0,0 @@ -/** - * fnc_handleTreatment_Category_Bandaging.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_caller","_target","_selectedData", "_selectionName", "_prevAnim", "_displayingIcon"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; - -// TODO find selected data/wound in menu -_selectedData = [_this, 4, "", [""]] call BIS_fnc_Param; - - -// TODO add fake weapon for treatment, in case no primairy weapon is present -// Handle the animations -_prevAnim = ""; -if (vehicle _caller == _caller && (vehicle _target == _target) && !(stance _caller == "PRONE")) then { - if (primaryWeapon _caller == "") then { - _prevAnim = animationState _caller; - }; - [_caller,"AinvPknlMstpSlayWrflDnon_medic", 1] call EFUNC(common,doAnimation); -}; - -if (ACE_player == _caller) then { - switch (_removeItem) do { - case "ACE_tourniquet": { - - }; - case "ACE_splint": { - - }; - default { - [_caller, "STR_ACE_BANDAGING", "STR_ACE_APPLY_BANDAGE", 0, [[_target] call EFUNC(common,getName), _selectionName]] call EFUNC(gui,sendDisplayMessageTo); - }; - }; - // Displaying the treatment icon action - [QGVAR(treatmentIconID), true, QUOTE(PATHTOF(data\icons\bandage_fracture_small.paa)), [1,1,1,1]] call EFUNC(gui,displayIcon); -}; - -// Get the current position for the treatment person -_caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller]; - -if (isnil QGVAR(setting_bandageWaitingTime)) then { - GVAR(setting_bandageWaitingTime) = 5; -}; - -[GVAR(setting_bandageWaitingTime), // the time to wait - {((vehicle (_this select 0) != (_this select 0)) ||((getPos (_this select 0)) distance ((_this select 0) getvariable QGVAR(StartingPositionHandleTreatment)) < 1))}, // the condition - { - private ["_caller","_target","_selectedData", "_selectionName", "_prevAnim"]; - _caller = _this select 0; - _target = _this select 1; - _selectionName = _this select 2; - _removeItem = _this select 3; - - switch (_removeItem) do { - case "ACE_tourniquet": { - [_caller, _target, _selectionName, _removeItem] call FUNC(handleTreatment_Action_tourniquet); - }; - case "ACE_splint": { - // TODO implement splints - }; - default { - [[_caller, _target, _selectionName, _removeItem], QUOTE(FUNC(handleTreatment_Action_BandageLocal)), _target] call EFUNC(common,execRemoteFnc); - [_caller, _target, _removeItem] call FUNC(useEquipment); - }; - }; - - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - ["Medical_handleTreatment_Bandaging", [_caller, _target, _selectionName, _removeItem, true]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - }, // on success - { - private ["_caller","_target","_selectedData", "_selectionName", "_prevAnim"]; - [(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo); - - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - ["Medical_handleTreatment_Bandaging", [_caller, _target, _selectionName, _removeItem, false]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - }, // on failure - [_caller, _target, _selectionName, _removeItem, _prevAnim] // arguments -] call EFUNC(gui,loadingBar); - -true; \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleTreatment_Category_Medication.sqf b/addons/medical/functions/fnc_handleTreatment_Category_Medication.sqf deleted file mode 100644 index f57ab20783..0000000000 --- a/addons/medical/functions/fnc_handleTreatment_Category_Medication.sqf +++ /dev/null @@ -1,69 +0,0 @@ -/** - * fnc_handleTreatment_Category_Medication.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_caller","_target","_selectedData", "_selectionName", "_prevAnim", "_displayingIcon"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; - -// TODO add fake weapon for treatment, in case no primairy weapon is present -// Handle the animations -_prevAnim = ""; -if (vehicle _caller == _caller && (vehicle _target == _target) && !(stance _caller == "PRONE")) then { - if (primaryWeapon _caller == "") then { - _prevAnim = animationState _caller; - }; - [_caller,"AinvPknlMstpSlayWrflDnon_medic", 1] call EFUNC(common,doAnimation); -}; - -if (ACE_player == _caller) then { - // Displaying the treatment icon action - [QGVAR(treatmentIconID), true, QUOTE(PATHTOF(data\icons\medication_small.paa)), [1,1,1,1]] call EFUNC(gui,displayIcon); -}; - -// Get the current position for the treatment person -_caller setvariable [QGVAR(StartingPositionHandleTreatment), getPos _caller]; - -[4, // the time to wait - {((vehicle (_this select 0) != (_this select 0)) ||((getPos (_this select 0)) distance ((_this select 0) getvariable QGVAR(StartingPositionHandleTreatment)) < 1))}, // the condition - { - private ["_caller","_target", "_selectionName", "_prevAnim"]; - _caller = _this select 0; - _target = _this select 1; - _selectionName = _this select 2; - _removeItem = _this select 3; - [_caller, _target, _removeItem] call FUNC(useEquipment); - - [[_caller, _target, _selectionName, _removeItem], QUOTE(FUNC(handleTreatment_Action_MedicationLocal)), _target] call EFUNC(common,execRemoteFnc); - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - - ["Medical_handleTreatment_Medication", [_caller, _target, _selectionName, _removeItem, true]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - }, // on success - { - private ["_caller","_target", "_selectionName", "_prevAnim"]; - [(_this select 0), "STR_ACE_CANCELED", ["STR_ACE_ACTION_CANCELED","STR_ACE_YOU_MOVED_AWAY"]] call EFUNC(gui,sendDisplayInformationTo); - - if (_prevAnim != "") then { - [_caller,_prevAnim, 0] call EFUNC(common,doAnimation); - }; - - ["Medical_handleTreatment_Medication", [_caller, _target, _selectionName, _removeItem, false]] call ace_common_fnc_localEvent; - ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _removeItem]] call ace_common_fnc_localEvent; - }, // on failure - [_caller, _target, _selectionName, _removeItem, _prevAnim] // arguments -] call EFUNC(gui,loadingBar); - -true; diff --git a/addons/medical/functions/fnc_handleUI_DisplayOptions.sqf b/addons/medical/functions/fnc_handleUI_DisplayOptions.sqf deleted file mode 100644 index f56bbbf699..0000000000 --- a/addons/medical/functions/fnc_handleUI_DisplayOptions.sqf +++ /dev/null @@ -1,85 +0,0 @@ -/** - * fn_displayOptions.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -#define START_IDC 20 -#define END_IDC 27 -#define AMOUNT_OF_ENTRIES (count _entries) - -private ["_name","_entries","_display","_newTarget","_counter","_card","_ctrl","_code"]; -_name = _this select 0; -if (!hasInterface) exitwith{}; - -disableSerialization; -_display = uiNamespace getVariable QGVAR(medicalMenu); -if (isNil "_display") exitwith {}; // no valid dialog present - -if ((_name == "toggle")) exitwith { - - if (GVAR(INTERACTION_TARGET) != ACE_player) then { - _newTarget = ACE_player; - } else { - _newTarget = GVAR(INTERACTION_TARGET_PREVIOUS); - }; - - GVAR(INTERACTION_TARGET_PREVIOUS) = GVAR(INTERACTION_TARGET); - [_newTarget] spawn { - closeDialog 0; - sleep 0.1; - [_this select 0] call FUNC(openMenu); - }; -}; - -// Clean the dropdown options list from all actions -for [{_x=START_IDC},{_x <= END_IDC},{_x=_x+1}] do { - _ctrl = (_display displayCtrl (_x)); - _ctrl ctrlSetText ""; - _ctrl ctrlShow false; - _ctrl ctrlSetEventHandler ["ButtonClick",""]; - _ctrl ctrlSetTooltip ""; - _ctrl ctrlCommit 0; -}; - -GVAR(LatestDisplayOptionMenu) = _name; - -// The triage card has no options available -lbClear 212; -if (_name == "triage") exitwith { - ctrlEnable[212,true]; - _card = ([GVAR(INTERACTION_TARGET)] call FUNC(getTriageList)); - { - lbadd[212,format["%1 x%2", getText(configFile >> "CfgWeapons" >> (_x select 0) >> "displayName"), _x select 1]]; - }foreach _card; - if (count _card == 0) then { - lbadd[212,"No Entries"]; - }; -}; - -ctrlEnable[212,false]; - -_entries = [ACE_player, GVAR(INTERACTION_TARGET),_name] call FUNC(getTreatmentOptions); - -{ - //player sidechat format["TRIGGERED: %1",_x]; - if (_foreachIndex > END_IDC) exitwith {}; - _ctrl = (_display displayCtrl (START_IDC + _foreachIndex)); - if (!(_foreachIndex > AMOUNT_OF_ENTRIES)) then { - _ctrl ctrlSetText (_x select 0); - _code = format["[ACE_player, ACE_medical_INTERACTION_TARGET] call %1;",(_x select 1)]; - _ctrl ctrlSetEventHandler ["ButtonClick", _code]; - _ctrl ctrlSetTooltip (_x select 2); - _ctrl ctrlShow true; - } else { - _ctrl ctrlSetText ""; - _ctrl ctrlSetEventHandler ["ButtonClick",""]; - }; - _ctrl ctrlCommit 0; -}foreach _entries; diff --git a/addons/medical/functions/fnc_handleUI_dropDownTriageCard.sqf b/addons/medical/functions/fnc_handleUI_dropDownTriageCard.sqf deleted file mode 100644 index 2d895cae70..0000000000 --- a/addons/medical/functions/fnc_handleUI_dropDownTriageCard.sqf +++ /dev/null @@ -1,28 +0,0 @@ -/** - * fn_handleUI_dropDownTriageCard.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_display","_pos","_ctrl","_curPos","_idc"]; -disableSerialization; -_display = uiNamespace getVariable QGVAR(medicalMenu); -_pos = [ 0,0,0,0]; -_curPos = ctrlPosition (_display displayCtrl 2002); -if ((_curPos select 0) == 0 && (_curPos select 1) == 0) then { - _pos = ctrlPosition (_display displayCtrl 2001); -}; - -for "_idc" from 2002 to 2006 step 1 do { - _pos set [1, (_pos select 1) + (_pos select 3)]; - _ctrl = (_display displayCtrl _idc); - _ctrl ctrlSetPosition _pos; - _ctrl ctrlCommit 0; -}; - diff --git a/addons/medical/functions/fnc_handleUnitVitals.sqf b/addons/medical/functions/fnc_handleUnitVitals.sqf index 7ced1ec393..e7c55d5d08 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -1,24 +1,32 @@ -/** - * fn_handleUnitVitals.sqf - * @Descr: Updates the vitals. Is expected to be called every second. - * @Author: Glowbal +/* + * Author: Glowbal + * Updates the vitals. Is expected to be called every second. * - * @Arguments: [unit OBJECT] - * @Return: void - * @PublicAPI: false + * Arguments: + * 0: The Unit + * + * ReturnValue: + * + * + * Public: No */ #include "script_component.hpp" -private ["_unit", "_heartRate","_bloodPressure","_bloodVolume","_painStatus"]; +private ["_unit", "_heartRate","_bloodPressure","_bloodVolume","_painStatus", "_lastTimeValuesSynced", "_syncValues"]; _unit = _this select 0; -_bloodVolume = ([_unit, QGVAR(bloodVolume)] call EFUNC(common,getDefinedVariable)) + ([_unit] call FUNC(getBloodVolumeChange)); +_lastTimeValuesSynced = _unit getvariable [QGVAR(lastMomentValuesSynced), 0]; +_syncValues = time - _lastTimeValuesSynced >= (10 + floor(random(10))); +if (_syncValues) then { + _unit setvariable [QGVAR(lastMomentValuesSynced), time]; +}; + +_bloodVolume = (_unit getvariable [QGVAR(bloodVolume), 0]) + ([_unit] call FUNC(getBloodVolumeChange)); if (_bloodVolume <= 0) then { _bloodVolume = 0; }; -_unit setvariable [QGVAR(bloodVolume), _bloodVolume]; - +_unit setvariable [QGVAR(bloodVolume), _bloodVolume, _syncValues]; // Set variables for synchronizing information across the net if (_bloodVolume < 90) then { @@ -41,7 +49,7 @@ if ((_unit call FUNC(getBloodLoss)) > 0) then { }; }; -_painStatus = [_unit,QGVAR(amountOfPain),0] call EFUNC(common,getDefinedVariable); +_painStatus = _unit getvariable [QGVAR(pain), 0]; if (_painStatus > 0) then { if !(_unit getvariable [QGVAR(hasPain), false]) then { _unit setvariable [QGVAR(hasPain), true, true]; @@ -60,70 +68,75 @@ if (_bloodVolume < 30) exitwith { if ([_unit] call EFUNC(common,isAwake)) then { if (_bloodVolume < 60) then { if (random(1) > 0.9) then { - [_unit] call FUNC(setUnconsciousState); + [_unit] call FUNC(setUnconscious); }; }; }; // handle advanced medical, with vitals -if ((missionNamespace getvariable[QGVAR(setting_AdvancedLevel), 0]) > 0) exitwith { +if (GVAR(level) >= 2) then { // Set the vitals - _heartRate = ([_unit, QGVAR(heartRate)] call EFUNC(common,getDefinedVariable)) + ([_unit] call FUNC(getHeartRateChange)); - _unit setvariable [QGVAR(heartRate), _heartRate]; + _heartRate = (_unit getvariable [QGVAR(heartRate), 0]) + ([_unit] call FUNC(getHeartRateChange)); + _unit setvariable [QGVAR(heartRate), _heartRate, _syncValues]; _bloodPressure = [_unit] call FUNC(getBloodPressure); - _unit setvariable [QGVAR(bloodPressure), _bloodPressure]; + _unit setvariable [QGVAR(bloodPressure), _bloodPressure, _syncValues]; // Handle airway if (GVAR(setting_allowAirwayInjuries)) then { _airwayStatus = _unit getvariable [QGVAR(airwayStatus), 100]; if (((_unit getvariable [QGVAR(airwayOccluded), false]) || (_unit getvariable [QGVAR(airwayCollapsed), false])) && !((_unit getvariable [QGVAR(airwaySecured), false]))) then { if (_airwayStatus >= 0.5) then { - _unit setvariable [QGVAR(airwayStatus), _airwayStatus - 0.5]; + _unit setvariable [QGVAR(airwayStatus), _airwayStatus - 0.5, _syncValues]; }; } else { if !((_unit getvariable [QGVAR(airwayOccluded), false]) || (_unit getvariable [QGVAR(airwayCollapsed), false])) then { - if (_airwayStatus <= 98.5) then { - _unit setvariable [QGVAR(airwayStatus), _airwayStatus + 1.5]; + if (_airwayStatus < 100) then { + _unit setvariable [QGVAR(airwayStatus), (_airwayStatus + 1.5) min 100, _syncValues]; }; }; }; + if (_airwayStatus < 80) then { + [_unit] call FUNC(setUnconscious); + if (_airwayStatus <= 0) then { + [_unit, true] call FUNC(setDead); + }; + }; }; // Check vitals for medical status // TODO check for in revive state instead of variable - if ((_unit getvariable[QEGVAR(common,ENABLE_REVIVE_SETDEAD_F),0]) == 0) then { - _bloodPressureL = _bloodPressure select 0; - _bloodPressureH = _bloodPressure select 1; + // TODO Implement cardiac arrest. + _bloodPressureL = _bloodPressure select 0; + _bloodPressureH = _bloodPressure select 1; - if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then { - if (_heartRate < 10 || _bloodPressureH < 30 || _bloodVolume < 20) then { - [_unit] call FUNC(setUnconsciousState); // safety check to ensure unconsciousness for units if they are not dead already. - }; + if (!(_unit getvariable [QGVAR(inCardiacArrest),false])) then { + if (_heartRate < 10 || _bloodPressureH < 30 || _bloodVolume < 20) then { + [_unit] call FUNC(setUnconscious); // safety check to ensure unconsciousness for units if they are not dead already. + }; - if (_bloodPressureH > 260) then { - if (random(1) > 0.7) then { - [_unit] call FUNC(setCardiacArrest); - }; - }; - if (_bloodPressureL < 40 && _heartRate > 190) then { - if (random(1) > 0.7) then { - [_unit] call FUNC(setCardiacArrest); - }; - }; - if (_bloodPressureH > 145 && _heartRate > 150) then { - if (random(1) > 0.7) then { - [_unit] call FUNC(setCardiacArrest); - }; - }; - if (_heartRate > 200) then { - [_unit] call FUNC(setCardiacArrest); - }; - - if (_heartRate < 20) then { + if (_bloodPressureH > 260) then { + if (random(1) > 0.7) then { [_unit] call FUNC(setCardiacArrest); }; }; + if (_bloodPressureL < 40 && _heartRate > 190) then { + if (random(1) > 0.7) then { + [_unit] call FUNC(setCardiacArrest); + }; + }; + if (_bloodPressureH > 145 && _heartRate > 150) then { + if (random(1) > 0.7) then { + [_unit] call FUNC(setCardiacArrest); + }; + }; + if (_heartRate > 200) then { + [_unit] call FUNC(setCardiacArrest); + }; + + if (_heartRate < 20) then { + [_unit] call FUNC(setCardiacArrest); + }; }; }; diff --git a/addons/medical/functions/fnc_hasEquipment.sqf b/addons/medical/functions/fnc_hasItem.sqf similarity index 67% rename from addons/medical/functions/fnc_hasEquipment.sqf rename to addons/medical/functions/fnc_hasItem.sqf index bdf652fd30..d02abb9187 100644 --- a/addons/medical/functions/fnc_hasEquipment.sqf +++ b/addons/medical/functions/fnc_hasItem.sqf @@ -1,11 +1,16 @@ -/** - * fn_hasEquipment.sqf - * @Descr: Check if the medic or patient have the right equipment for treatment. - * @Author: Glowbal +/* + * Author: Glowbal + * Check if the item is present between the patient and the medic * - * @Arguments: [medic OBJECT, patient OBJECT, item STRING (Classname of the item. Expects magazine type.)] - * @Return: BOOL - * @PublicAPI: false + * Arguments: + * 0: Medic + * 1: Patient + * 2: Item + * + * ReturnValue: + * + * + * Public: Yes */ #include "script_component.hpp" @@ -30,10 +35,10 @@ _return = false; if ([vehicle _medic] call FUNC(isMedicalVehicle) && {(vehicle _medic != _medic)}) then { _crew = crew vehicle _medic; { - if ([_x, _medic] call FUNC(canAccessMedicalEquipment) && {([_x, _item] call EFUNC(common,hasItem))}) exitwith { + if ([_medic, _x] call FUNC(canAccessMedicalEquipment) && {([_x, _item] call EFUNC(common,hasItem))}) exitwith { _return = true; }; }foreach _crew; }; -_return \ No newline at end of file +_return; diff --git a/addons/medical/functions/fnc_hasItems.sqf b/addons/medical/functions/fnc_hasItems.sqf new file mode 100644 index 0000000000..ea16edebc4 --- /dev/null +++ b/addons/medical/functions/fnc_hasItems.sqf @@ -0,0 +1,34 @@ +/* + * Author: Glowbal + * Check if all items are present between the patient and the medic. + * + * Arguments: + * 0: Medic + * 1: Patient + * 2: Items > + * + * ReturnValue: + * Has the items + * + * Public: Yes + */ + +#include "script_component.hpp" + +private ["_medic", "_patient", "_items", "_return"]; +_medic = _this select 0; +_patient = _this select 1; +_items = _this select 2; + +_return = true; +{ + // + if (typeName _x == "ARRAY" && {({[_medic, _patient, _x] call FUNC(hasItem)}count _x == 0)}) exitwith { + _return = false; + }; + if (typeName _x == "STRING" && {!([_medic, _patient, _x] call FUNC(hasItem))}) exitwith { + _return = false; + }; +}foreach _items; + +_return; diff --git a/addons/medical/functions/fnc_hasMedicalEnabled.sqf b/addons/medical/functions/fnc_hasMedicalEnabled.sqf index 7a14d97c51..ee433c1715 100644 --- a/addons/medical/functions/fnc_hasMedicalEnabled.sqf +++ b/addons/medical/functions/fnc_hasMedicalEnabled.sqf @@ -15,7 +15,7 @@ _unit = _this select 0; _medicalEnabled = _unit getvariable QGVAR(enableMedical); if (isnil "_medicalEnabled") exitwith { - (((GVAR(setting_enableForUnits) == 0 && (isPlayer _unit || (_unit getvariable [QEGVAR(common,isDeadPlayer), false])))) || (GVAR(setting_enableForUnits) == 1)); + (((GVAR(enabledFor) == 0 && (isPlayer _unit || (_unit getvariable [QEGVAR(common,isDeadPlayer), false])))) || (GVAR(enabledFor) == 1)); }; _medicalEnabled; diff --git a/addons/medical/functions/fnc_hasOpenWounds.sqf b/addons/medical/functions/fnc_hasOpenWounds.sqf deleted file mode 100644 index fdfef6883f..0000000000 --- a/addons/medical/functions/fnc_hasOpenWounds.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/** - * fn_hasOpenWounds.sqf - * @Descr: Check if unit has open wounds - * @Author: Glowbal - * - * @Arguments: [unit OBJECT (The unit to check)] - * @Return: BOOL - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private "_openWounds"; -_openWounds = [_this select 0,QGVAR(openWounds)] call EFUNC(common,getDefinedVariable); - -({(((_x select 0) + (_x select 1) + (_x select 2)) > 0)}count _openWounds > 0); \ No newline at end of file diff --git a/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf b/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf index ee6cd5fd61..6183854e45 100644 --- a/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf +++ b/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf @@ -1,13 +1,21 @@ -/** - * fnc_hasTourniquetAppliedTo.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Check if unit has a tourniquet applied to the specified bodypart * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: The Unit + * 1: SelectionName + * + * ReturnValue: + * Has tourniquet applied + * + * Public: Yes */ #include "script_component.hpp" -((([(_this select 0),QGVAR(tourniquets)] call EFUNC(common,getDefinedVariable)) select ([(_this select 1)] call FUNC(getBodyPartNumber))) > 0); \ No newline at end of file +private ["_target", "_selectionName"]; +_target = _this select 0; +_selectionName = _this select 1; + +(((_target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]) select ([_selectionName] call FUNC(selectionNameToNumber))) > 0); diff --git a/addons/medical/functions/fnc_increasePain.sqf b/addons/medical/functions/fnc_increasePain.sqf deleted file mode 100644 index 64a29989e4..0000000000 --- a/addons/medical/functions/fnc_increasePain.sqf +++ /dev/null @@ -1,46 +0,0 @@ -/** - * fn_increasePain.sqf - * @Descr: Increase the pain level of a unit - * @Author: Glowbal - * - * @Arguments: [unit OBJECT, amount NUMBER, sectionName NUMBER (Also supports string representation of bodyparts)] - * @Return: nil - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private ["_unit","_amountOfDamage","_selectionName","_sourceOfDamage","_painStatus"]; -_unit = _this select 0; -_amountOfDamage = _this select 1; -_selectionName = _this select 2; - -if (!alive _unit || (_amountOfDamage <= 0)) exitwith{}; -_painStatus = [_unit,QGVAR(amountOfPain),0] call EFUNC(common,getDefinedVariable); - -if (typeName _selectionName == "STRING") then { - _selectionName = [_selectionName] call FUNC(getBodyPartNumber); -}; - -_amountOfDamage = _amountOfDamage * 10; - -_painStatus = switch (_selectionName) do { - case 0: { - _painStatus + (_amountOfDamage*1.5); - }; - case 1: { - _painStatus + (_amountOfDamage*0.9); - }; - case 2: { - _painStatus + (_amountOfDamage*0.8); - }; - case 3: { - _painStatus + (_amountOfDamage*0.7); - }; - default {_painStatus}; -}; - -[_unit,QGVAR(amountOfPain),_painStatus] call EFUNC(common,setDefinedVariable); -["Medical_onPainIncreased", [_unit, _selectionName, _painStatus]] call ace_common_fnc_localEvent; - -nil; \ No newline at end of file diff --git a/addons/medical/functions/fnc_init.sqf b/addons/medical/functions/fnc_init.sqf new file mode 100644 index 0000000000..c58cccedb4 --- /dev/null +++ b/addons/medical/functions/fnc_init.sqf @@ -0,0 +1,76 @@ +/* + * Author: KoffeinFlummi + * Initializes unit variables. + * + * Arguments: + * 0: The Unit + * + * ReturnValue: + * nil + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_unit", "_allUsedMedication", "_logs"]; + +_unit = _this select 0; + +_unit setVariable [QGVAR(pain), 0, true]; +_unit setVariable [QGVAR(morphine), 0, true]; +_unit setVariable [QGVAR(bloodVolume), 100, true]; + +// tourniquets +_unit setvariable [QGVAR(tourniquets), [0,0,0,0,0,0], true]; + +// wounds and injuries +_unit setvariable [QGVAR(openWounds), [], true]; +_unit setVariable [QGVAR(internalWounds), [], true]; + +// vitals +_unit setVariable [QGVAR(heartRate), 80]; +_unit setvariable [QGVAR(heartRateAdjustments), []]; +_unit setvariable [QGVAR(bloodPressure), [80, 120]]; +_unit setVariable [QGVAR(peripheralResistance), 100]; + +// fractures +_unit setVariable [QGVAR(fractures), []]; + +// triage card and logs +_unit setvariable [QGVAR(triageLevel), 0, true]; +_unit setvariable [QGVAR(triageCard), [], true]; + +// IVs +_unit setVariable [QGVAR(salineIVVolume), 0]; +_unit setVariable [QGVAR(plasmaIVVolume), 0]; +_unit setVariable [QGVAR(bloodIVVolume), 0]; + +// damage storage +_unit setvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0], true]; + +// airway +_unit setvariable [QGVAR(airwayStatus), 0, true]; +_unit setVariable [QGVAR(airwayOccluded), false, true]; +_unit setvariable [QGVAR(airwayCollapsed), false, true]; + +// generic medical admin +_unit setvariable [QGVAR(addedToUnitLoop), false, true]; +_unit setvariable [QGVAR(inCardiacArrest), false, true]; +_unit setVariable [QGVAR(isUnconscious), false, true]; +_unit setvariable [QGVAR(hasLostBlood), false, true]; +_unit setvariable [QGVAR(isBleeding), false, true]; +_unit setvariable [QGVAR(hasPain), false, true]; + +// medication +_allUsedMedication = _unit getVariable [QGVAR(allUsedMedication), []]; +{ + _unit setvariable [_x select 0, nil]; +} foreach _allUsedMedication; +_unit setVariable [QGVAR(allUsedMedication), []]; + +_logs = _unit getvariable [QGVAR(allLogs), []]; +{ + _unit setvariable [_x, nil, true]; +} foreach _logs; +_unit setvariable [QGVAR(allLogs), [], true]; diff --git a/addons/medical/functions/fnc_initalizeModuleCMS.sqf b/addons/medical/functions/fnc_initalizeModuleCMS.sqf deleted file mode 100644 index 40e50c6fb0..0000000000 --- a/addons/medical/functions/fnc_initalizeModuleCMS.sqf +++ /dev/null @@ -1,71 +0,0 @@ -/* -init.sqf -Usage: -Author: Glowbal - -Arguments: -Returns: - -Affects: Local -Executes: call -*/ - -#include "script_component.hpp" - -private ["_logic"]; -_logic = _this select 0; - -if (isNull _logic) exitwith {}; - -// Damage thresholds only in case the damge threshold module hasn't been placed down. -if (isnil QGVAR(damageThreshold_AI)) then { - GVAR(damageThreshold_AI) = 1; -}; - -if (isnil QGVAR(damageThreshold_Players)) then { - GVAR(damageThreshold_Players) = 1; -}; - -GVAR(setting_allowInstantDead) = _logic getvariable["setting_allowInstantDead", true]; -GVAR(setting_AdvancedLevel) = _logic getvariable["advancedLevel", 0]; -GVAR(setting_advancedWoundsSetting) = _logic getvariable["openingOfWounds", true]; -GVAR(setting_advancedMedicRoles) = _logic getvariable["medicSetting", false]; -GVAR(setting_medicalDifficulty) = _logic getvariable["difficultySetting", 1]; -GVAR(setting_enableBandagingAid) = _logic getvariable["bandagingAid", GVAR(setting_AdvancedLevel) == 0]; -GVAR(setting_allowAIFullHeal) = _logic getvariable["allowAIFullHeal", false]; -GVAR(setting_enableForUnits) = _logic getvariable["enableFor", 1]; -GVAR(setting_allowAirwayInjuries) = (_logic getvariable["enableAirway", 0]) == 1; -GVAR(setting_aidKitRestrictions) = _logic getvariable["aidKitRestrictions", 0]; -GVAR(setting_removeAidKitOnUse) = _logic getvariable["aidKitUponUsage", false]; -GVAR(setting_aidKitMedicsOnly) = _logic getvariable["aidKitMedicsOnly", false]; -GVAR(setting_bandageWaitingTime) = _logic getvariable["bandageTime", 5]; -GVAR(setting_allowVehicleCrashInjuries) = _logic getvariable["vehCrashes", true]; -GVAR(setting_allowStitching) = _logic getvariable["stitchingMedicsOnly", 0]; - -if (GVAR(setting_AdvancedLevel) == -1) exitwith{}; -GVAR(isEnabled) = true; - - -waituntil{!isnil "ACE_gui" && !isnil "ACE_common"}; - - -if (GVAR(setting_AdvancedLevel) > 0) then { - [ - {(([_this select 0,QGVAR(heartRate)] call EFUNC(common,getDefinedVariable)) < 20)} - ] call FUNC(registerUnconsciousCondition); - - if (GVAR(setting_allowAirwayInjuries)) then { - [ - {(([_this select 0,QGVAR(airway)] call EFUNC(common,getDefinedVariable)) > 2)} - ] call FUNC(registerUnconsciousCondition); - }; -}; - -if (!hasInterface) exitwith{}; - -{ - if(_x == "FirstAidKit" || {_x == "Medikit"}) then { - player removeItem _x; - }; -}foreach (items player); - diff --git a/addons/medical/functions/fnc_inMedicalFacility.sqf b/addons/medical/functions/fnc_isInMedicalFacility.sqf similarity index 84% rename from addons/medical/functions/fnc_inMedicalFacility.sqf rename to addons/medical/functions/fnc_isInMedicalFacility.sqf index 8f86fbab8b..b1521b288b 100644 --- a/addons/medical/functions/fnc_inMedicalFacility.sqf +++ b/addons/medical/functions/fnc_isInMedicalFacility.sqf @@ -1,11 +1,14 @@ -/** - * fn_inMedicalFacility.sqf - * @Descr: Checks if a unit is in a designated medical facility - * @Author: Glowbal +/* + * Author: Glowbal + * Checks if a unit is in a designated medical facility * - * @Arguments: [unit OBJECT] - * @Return: BOOL true if unit is in a building or under a roof. - * @PublicAPI: true + * Arguments: + * 0: The Unit + * + * ReturnValue: + * Is in medical facility + * + * Public: Yes */ #include "script_component.hpp" @@ -48,4 +51,4 @@ if (!_isInBuilding) then { }; }foreach _objects; }; -_isInBuilding \ No newline at end of file +_isInBuilding; diff --git a/addons/medical/functions/fnc_isMedic.sqf b/addons/medical/functions/fnc_isMedic.sqf index ef824c06f1..d3ece4c8b0 100644 --- a/addons/medical/functions/fnc_isMedic.sqf +++ b/addons/medical/functions/fnc_isMedic.sqf @@ -1,33 +1,35 @@ -/** - * fn_medicClass.sqf - * @Descr: Check if a unit is any medical class above normal. - * @Author: Glowbal +/* + * Author: Glowbal + * Check if a unit is any medical class * - * @Arguments: [unit OBJECT] - * @Return: BOOL - * @PublicAPI: true + * Arguments: + * 0: The Unit + * 1: Class + * + * ReturnValue: + * Is in of medic class + * + * Public: Yes */ #include "script_component.hpp" private ["_unit","_class","_return"]; -_unit = [_this, 0, objNull,[ObjNull]] call BIS_fnc_Param; - -if (isnil QGVAR(setting_advancedMedicRoles)) exitwith { - true; -}; - -if (GVAR(setting_advancedMedicRoles)) then { - _class = [_unit,QGVAR(medicClass)] call EFUNC(common,getDefinedVariable); - _return = switch (_class) do { - case 0: {false}; - case 1: {true}; - case 2: {true}; - default {false}; +_unit = _this select 0; +_medicN = if (count _this > 1) then {_this select 1} else {1}; +_return = false; +if (GVAR(medicSetting) >= 1) then { + _class = _unit getvariable [QGVAR(medicClass), 0]; + if (GVAR(medicSetting) == 1) then { + _return = _class > 0; + } else { + if (_class >= _medicN) then { + _return = true; + }; }; } else { _return = true; }; -_return \ No newline at end of file +_return; diff --git a/addons/medical/functions/fnc_isMedicalVehicle.sqf b/addons/medical/functions/fnc_isMedicalVehicle.sqf index 9489c518b7..bf13c51a6a 100644 --- a/addons/medical/functions/fnc_isMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_isMedicalVehicle.sqf @@ -1,17 +1,19 @@ -/** - * fn_isMedicalVehicle.sqf - * @Descr: Check if vehicle is a medical vehicle - * @Author: Glowbal +/* + * Author: Glowbal + * Check if vehicle is a medical vehicle * - * @Arguments: [vehicle OBJECT] - * @Return: BOOL - * @PublicAPI: true + * Arguments: + * 0: The Vehicle + * + * ReturnValue: + * Is in of medic class + * + * Public: Yes */ - #include "script_component.hpp" private ["_veh"]; _veh = _this select 0; if !(_veh getvariable [QGVAR(isMedicalVehicle), true]) exitwith {false}; // exit in case the false is set. -((getNumber(configFile >> "CfgVehicles" >> typeOf _veh >> QGVAR(isMedicalVehicle)) == 1) || (_veh getvariable [QGVAR(isMedicalVehicle), false])); \ No newline at end of file +((getNumber(configFile >> "CfgVehicles" >> typeOf _veh >> QGVAR(isMedicalVehicle)) == 1) || (_veh getvariable [QGVAR(isMedicalVehicle), false])); diff --git a/addons/medical/functions/fnc_isMovingUnit.sqf b/addons/medical/functions/fnc_isMovingUnit.sqf deleted file mode 100644 index 326a7b1e97..0000000000 --- a/addons/medical/functions/fnc_isMovingUnit.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/** - * fnc_isMovingUnit.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private "_unit"; -_unit = _this select 0; - -(!(isNull(_unit getvariable [QGVAR(carrying),objNull])) || !(isNull(_unit getvariable [QGVAR(dragging),objNull]))) diff --git a/addons/medical/functions/fnc_isSetTreatmentMutex.sqf b/addons/medical/functions/fnc_isSetTreatmentMutex.sqf deleted file mode 100644 index 2280b066df..0000000000 --- a/addons/medical/functions/fnc_isSetTreatmentMutex.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/** - * fn_isSetTreatmentMutex.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -// Max locked time is 2 minutes. -#define MAX_LOCKED_TIME 120 - -(time - ((_this select 0) getvariable [QGVAR(PerformingTreatmentMutex), -MAX_LOCKED_TIME]) <= MAX_LOCKED_TIME); \ No newline at end of file diff --git a/addons/medical/functions/fnc_isUnconscious.sqf b/addons/medical/functions/fnc_isUnconscious.sqf deleted file mode 100644 index a4293cf13b..0000000000 --- a/addons/medical/functions/fnc_isUnconscious.sqf +++ /dev/null @@ -1,13 +0,0 @@ -/** - * fn_isUnconscious.sqf - * @Descr: Checks whatever given object is in the unconscious state - * @Author: Glowbal - * - * @Arguments: [unit OBJECT] - * @Return: BOOL True when object is in unconscious state - * @PublicAPI: true - */ - -#include "script_component.hpp" - -((_this select 0) getvariable ["ACE_isUnconscious",false]); \ No newline at end of file diff --git a/addons/medical/functions/fnc_makeCopyOfBody_f.sqf b/addons/medical/functions/fnc_makeCopyOfBody_f.sqf deleted file mode 100644 index cee0631862..0000000000 --- a/addons/medical/functions/fnc_makeCopyOfBody_f.sqf +++ /dev/null @@ -1,75 +0,0 @@ -/** - * fn_makeCopyOfBody_f.sqf - * @Descr: Makes a copy of a dead body. For handling dead bodies for actions such as load and carry. - * @Author: Glowbal - * - * @Arguments: [oldBody OBJECT, caller OBJECT] - * @Return: newUnit OBJECT Returns the copy of the unit. If no copy could be made, returns the oldBody - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_oldBody","_newUnit","_class","_group","_position","_side","_allVariables"]; -_oldBody = _this select 0; -_caller = _this select 1; - - if (alive _oldBody) exitwith {_oldBody}; // we only want to do this for dead bodies - _name = _oldBody getvariable ["ACE_name","unknown"]; - _class = typeof _oldBody; - _side = side _caller; - _group = createGroup _side; - _position = getPos _oldBody; - - _newUnit = _group createUnit [typeof _oldBody, _position, [], 0, "NONE"]; - - _allVariables = [_oldBody] call EFUNC(common,getAllDefinedSetVariables); - // [NAME (STRING), TYPENAME (STRING), VALUE (ANY), DEFAULT GLOBAL (BOOLEAN)] - { - [_newUnit,_x select 0, _x select 2] call EFUNC(common,setDefinedVariable); - }foreach _allVariables; - _newUnit setVariable ["ACE_name",_name,true]; - - _newUnit disableAI "TARGET"; - _newUnit disableAI "AUTOTARGET"; - _newUnit disableAI "MOVE"; - _newUnit disableAI "ANIM"; - _newUnit disableAI "FSM"; - _newUnit setvariable ["ACE_isDead",true,true]; - - removeallweapons _newUnit; - removeallassigneditems _newUnit; - removeUniform _newUnit; - removeHeadgear _newUnit; - removeBackpack _newUnit; - removeVest _newUnit; - - _newUnit addHeadgear (headgear _oldBody); - _newUnit addBackpack (backpack _oldBody); - clearItemCargoGlobal (backpackContainer _newUnit); - clearMagazineCargoGlobal (backpackContainer _newUnit); - clearWeaponCargoGlobal (backpackContainer _newUnit); - - _newUnit addVest (vest _oldBody); - clearItemCargoGlobal (backpackContainer _newUnit); - clearMagazineCargoGlobal (backpackContainer _newUnit); - clearWeaponCargoGlobal (backpackContainer _newUnit); - - _newUnit addUniform (uniform _oldBody); - clearItemCargoGlobal (backpackContainer _newUnit); - clearMagazineCargoGlobal (backpackContainer _newUnit); - clearWeaponCargoGlobal (backpackContainer _newUnit); - - {_newUnit addMagazine _x} count (magazines _oldBody); - {_newUnit addWeapon _x} count (weapons _oldBody); - {_newUnit addItem _x} count (items _oldBody); - - _newUnit selectWeapon (primaryWeapon _newUnit); - //_newUnit playMoveNow ([_newUnit] call FUNC(getDeathAnim)); - - deleteVehicle _oldBody; - - // TODO sometimes the old body does not get cleaned up properly. Look into garbage collection. - - _newUnit setDamage 0.9; -_newUnit \ No newline at end of file diff --git a/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf b/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf index 2236d30fce..1c26eb53d4 100644 --- a/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf +++ b/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf @@ -1,27 +1,30 @@ -/** - * fn_assignMedicRoles.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Assign a medical role to a unit * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: The module logic + * 1: units + * 2: activated + * + * Return Value: + * None + * + * Public: No */ #include "script_component.hpp" -private ["_logic","_setting","_objects"]; +private ["_logic","_setting","_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"]; _logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; - [format["AssignMedicalRoles called. Arguments are: %1 %2", _this]] call EFUNC(common,debug); - if (!isNull _logic) then { _list = _logic getvariable ["EnableList",""]; _splittedList = [_list, ","] call BIS_fnc_splitString; _nilCheckPassedList = ""; { - _x = [_x] call EFUNC(common,string_removeWhiteSpace); + _x = [_x] call EFUNC(common,stringRemoveWhiteSpace); if !(isnil _x) then { if (_nilCheckPassedList == "") then { _nilCheckPassedList = _x; @@ -33,15 +36,14 @@ if (!isNull _logic) then { _list = "[" + _nilCheckPassedList + "]"; _parsedList = [] call compile _list; - _setting = _logic getvariable ["class",0]; + _setting = _logic getvariable ["role",0]; _objects = synchronizedObjects _logic; if (!(_objects isEqualTo []) && _parsedList isEqualTo []) then { - [["synchronizedObjects for the 'Assign Medic Role' Module is deprecated. Please use the enable for list instead!"], 1] call EFUNC(common,debug); { if (!isnil "_x") then { if (typeName _x == typeName objNull) then { if (local _x) then { - [_x,_setting] call FUNC(setMedicRole); + _x setvariable [QGVAR(medicClass), _setting, true]; }; }; }; @@ -51,7 +53,7 @@ if (!isNull _logic) then { if (!isnil "_x") then { if (typeName _x == typeName objNull) then { if (local _x) then { - [_x,_setting] call FUNC(setMedicRole); + _x setvariable [QGVAR(medicClass), _setting, true]; }; }; }; diff --git a/addons/medical/functions/fnc_moduleAssignMedicalEquipment.sqf b/addons/medical/functions/fnc_moduleAssignMedicalEquipment.sqf deleted file mode 100644 index f26cfd9ffc..0000000000 --- a/addons/medical/functions/fnc_moduleAssignMedicalEquipment.sqf +++ /dev/null @@ -1,81 +0,0 @@ -/** - * fn_assignMedicalEquipment.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ -#define ALL_PLAYERS 0 -#define ONLY_MEDICS 1 - - -// TODO add amount of to defines -#define BASIC_BANDAGES "ACE_bandage_basic" -#define PACKING_BANDAGES "ACE_packing_bandage" - -#include "script_component.hpp" - -private ["_logic","_setting","_objects", "_medicsLoadout", "_nonMedics", "_code"]; -_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; -if (!isNull _logic) then { - _setting = _logic getvariable ["equipment",0]; - waituntil {!isnil "ACE_gui"}; // ensure the player unit is available. - waituntil {time>0}; - - _start = diag_tickTime; - - // TODO Create functions for adding multiple magazines to a unit - // TODO Check if unit can store more magazines (ie backpack/vest/uniform are not full) - - _medicsLoadout = { - for "_i" from 1 to 8 do { - player addItem BASIC_BANDAGES; - player addItem PACKING_BANDAGES; - }; - for "_i" from 1 to 3 do { - player addItem "ACE_tourniquet"; - }; - for "_i" from 1 to 3 do { - player addItem "ACE_morphine"; - }; - for "_i" from 1 to 2 do { - player addItem "ACE_epinephrine"; - }; - }; - - _nonMedics = { - for "_i" from 1 to 3 do { - player addItem BASIC_BANDAGES; - }; - player addItem "ACE_tourniquet"; - player addItem "ACE_morphine"; - }; - - // TODO make this neat code. - switch (_setting) do { - case ALL_PLAYERS: { - _code = if ([player] call FUNC(isMedic)) then { - _medicsLoadout; - } else { - _nonMedics; - }; - - call _code; - player addEventhandler["Respawn", _code]; - }; - case ONLY_MEDICS: { - _code = if ([player] call FUNC(isMedic)) then { - _medicsLoadout; - } else { - {}; - }; - call _code; - player addEventhandler["Respawn", _code]; - }; - default {}; - }; - }; - -true \ No newline at end of file diff --git a/addons/medical/functions/fnc_moduleAssignMedicalFacility.sqf b/addons/medical/functions/fnc_moduleAssignMedicalFacility.sqf index 92ac746303..c08d737f4b 100644 --- a/addons/medical/functions/fnc_moduleAssignMedicalFacility.sqf +++ b/addons/medical/functions/fnc_moduleAssignMedicalFacility.sqf @@ -1,11 +1,16 @@ -/** - * fn_assignMedicalFacility.sqf - * @Descr: Register synchronized objects from passed object as a medical facility for CMS. - * @Author: Glowbal +/* + * Author: Glowbal + * Register synchronized objects from passed object as a medical facility * - * @Arguments: [logic OBJECT] - * @Return: BOOL - * @PublicAPI: true + * Arguments: + * 0: The module logic + * 1: units + * 2: activated + * + * Return Value: + * None + * + * Public: No */ #include "script_component.hpp" @@ -22,4 +27,4 @@ if (!isNull _logic) then { }foreach _objects; }; -true \ No newline at end of file +true; diff --git a/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf b/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf index 485eaba63b..ef6d7dfecf 100644 --- a/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf @@ -1,28 +1,31 @@ -/** - * fn_assignMedicalVehicle.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * Assign vehicle as a medical vehicle * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: The module logic + * 1: units + * 2: activated + * + * Return Value: + * None + * + * Public: No */ + #include "script_component.hpp" -private ["_logic","_setting", "_list", "_parsedList", "_splittedList","_nilCheckPassedList", "_objects"]; +private ["_logic","_setting","_objects", "_list", "_splittedList", "_nilCheckPassedList", "_parsedList"]; _logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; - [format["AssignMedicalRoles called. Arguments are: %1 %2", _this]] call EFUNC(common,debug); - if (!isNull _logic) then { _list = _logic getvariable ["EnableList",""]; - _setting = _logic getvariable ["enabled",0]; _splittedList = [_list, ","] call BIS_fnc_splitString; _nilCheckPassedList = ""; { - _x = [_x] call EFUNC(common,string_removeWhiteSpace); + _x = [_x] call EFUNC(common,stringRemoveWhiteSpace); if !(isnil _x) then { if (_nilCheckPassedList == "") then { _nilCheckPassedList = _x; @@ -34,29 +37,28 @@ if (!isNull _logic) then { _list = "[" + _nilCheckPassedList + "]"; _parsedList = [] call compile _list; - + _setting = _logic getvariable ["enabled", false]; _objects = synchronizedObjects _logic; - { - // assign the medical vehicle role for non man type objects that are local only. - if !(_x isKindOf "CAManBase") then { - if (local _x) then { - _x setvariable [QGVAR(isMedicalVehicle), _setting, true]; - }; - }; - }foreach _objects; - - { - if (!isnil "_x") then { - if (typeName _x == typeName objNull) then { - // assign the medical vehicle role for non man type objects that are local only. - if !(_x isKindOf "CAManBase") then { + if (!(_objects isEqualTo []) && _parsedList isEqualTo []) then { + { + if (!isnil "_x") then { + if (typeName _x == typeName objNull) then { if (local _x) then { _x setvariable [QGVAR(isMedicalVehicle), _setting, true]; }; }; }; + }foreach _objects; + }; + { + if (!isnil "_x") then { + if (typeName _x == typeName objNull) then { + if (local _x) then { + _x setvariable [QGVAR(isMedicalVehicle), _setting, true]; + }; + }; }; }foreach _parsedList; }; -true \ No newline at end of file +true; diff --git a/addons/medical/functions/fnc_moduleBasicRevive.sqf b/addons/medical/functions/fnc_moduleBasicRevive.sqf deleted file mode 100644 index b02d873313..0000000000 --- a/addons/medical/functions/fnc_moduleBasicRevive.sqf +++ /dev/null @@ -1,24 +0,0 @@ -/** - * fn_moduleEnableBasicRevive.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_logic"]; -_logic = _this select 0; - -GVAR(Module) = true; - -[_logic, QGVAR(ENABLE_REVIVE_F), "enableFor" ] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(REVIVE_TIMER_MAX_F), "timer" ] call EFUNC(common,readSettingFromModule); -[_logic, QGVAR(REVIVE_NUMBER_MAX_F), "amountOf" ] call EFUNC(common,readSettingFromModule); - -[ - {(((_this select 0) getvariable[QGVAR(ENABLE_REVIVE_SETDEAD_F),0]) > 0)} -] call FUNC(registerUnconsciousCondition); diff --git a/addons/medical/functions/fnc_moduleDamageSettings.sqf b/addons/medical/functions/fnc_moduleDamageSettings.sqf deleted file mode 100644 index 9040d2ff81..0000000000 --- a/addons/medical/functions/fnc_moduleDamageSettings.sqf +++ /dev/null @@ -1,20 +0,0 @@ -/** - * fnc_moduleDamageSettings.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_logic","_setting","_objects"]; -_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; -if (!isNull _logic) then { - GVAR(damageThreshold_AI) = _logic getvariable ["damageThresholdAI", 1]; - GVAR(damageThreshold_Players) = _logic getvariable ["damageThresholdPlayers", 1]; -}; - -true \ No newline at end of file diff --git a/addons/medical/functions/fnc_moduleMedicalSettings.sqf b/addons/medical/functions/fnc_moduleMedicalSettings.sqf new file mode 100644 index 0000000000..003cf2afcf --- /dev/null +++ b/addons/medical/functions/fnc_moduleMedicalSettings.sqf @@ -0,0 +1,34 @@ +/* + * Author: Glowbal + * Module for adjusting the medical damage settings + * + * Arguments: + * 0: The module logic + * 1: units + * 2: activated + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_logic", "_units", "_activated"]; +_logic = _this select 0; +_units = _this select 1; +_activated = _this select 2; + +if !(_activated) exitWith {}; + +[_logic, QGVAR(level), "level"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(enableFor), "enableFor"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(enableAirway), "enableAirway"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(enableFractures), "enableFractures"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(enableAdvancedWounds), "enableAdvancedWounds"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(enableScreams), "enableScreams"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(playerDamageThreshold), "playerDamageThreshold"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(AIDamageThreshold), "AIDamageThreshold"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(enableUnsconsiousnessAI), "enableUnsconsiousnessAI"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(preventInstaDeath), "preventInstaDeath"] call EFUNC(common,readSettingFromModule); diff --git a/addons/medical/functions/fnc_moduleTreatmentConfiguration.sqf b/addons/medical/functions/fnc_moduleTreatmentConfiguration.sqf new file mode 100644 index 0000000000..74d663ba1e --- /dev/null +++ b/addons/medical/functions/fnc_moduleTreatmentConfiguration.sqf @@ -0,0 +1,30 @@ +/* + * Author: Glowbal + * Module for adjusting the medical treatment settings + * + * Arguments: + * 0: The module logic + * 1: units + * 2: activated + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_logic", "_units", "_activated"]; +_logic = _this select 0; +_units = _this select 1; +_activated = _this select 2; + +if !(_activated) exitWith {}; + +[_logic, QGVAR(medicSetting), "medicSetting"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(maxRevives), "maxRevives"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(enableOverdosing), "enableOverdosing"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(bleedingCoefficient), "bleedingCoefficient"] call EFUNC(common,readSettingFromModule); + + diff --git a/addons/medical/functions/fnc_onCarryObjectDropped.sqf b/addons/medical/functions/fnc_onCarryObjectDropped.sqf deleted file mode 100644 index 4b7dd14a59..0000000000 --- a/addons/medical/functions/fnc_onCarryObjectDropped.sqf +++ /dev/null @@ -1,21 +0,0 @@ -/** - * fnc_onCarryObjectDropped.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit","_params"]; -_unit = _this select 0; - -[format["fnc_onCarryObjectDropped: %1",_this]] call EFUNC(common,debug); - -_params = _unit getvariable QGVAR(onStartMovingUnitParams); -if (!isnil "_params") then { - _params call FUNC(handleDropUnit); -}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_onDamage.sqf b/addons/medical/functions/fnc_onDamage.sqf deleted file mode 100644 index 489759f9b6..0000000000 --- a/addons/medical/functions/fnc_onDamage.sqf +++ /dev/null @@ -1,88 +0,0 @@ -/** - * fnc_onDamage.sqf - * @Descr: Called when some dude gets shot. Or stabbed. Or blown up. Or pushed off a cliff. Or hit by a car. Or burnt. Or poisoned. Or gassed. Or cut. You get the idea. - * @Author: KoffeinFlummi - * - * @Arguments: [unit OBJECT, selection STRING, damagE NUMBER, source OBJECT, projectile STRING (Could be an OBJECT on occasion)] - * @Return: damage value to be inflicted - * @PublicAPI: false - */ - -#include "script_component.hpp" - -#define ARMOURCOEF 2 - -private ["_unit", "_selectionName", "_damage", "_source", "_source", "_projectile", "_hitSelections", "_hitPoints", "_newDamage", "_found", "_cache_projectiles", "_cache_hitpoints", "_cache_damages"]; -_unit = _this select 0; -_selectionName = _this select 1; -_damage = _this select 2; -_source = _this select 3; -_projectile = _this select 4; - -if (!([_unit] call FUNC(hasMedicalEnabled))) exitwith { - call FUNC(handleDamage); // let it run through the damage threshold script -}; - -// Otherwise we carry on with collecting the necessary information - -if (typeName _projectile == "OBJECT") then { - _projectile = typeOf _projectile; -}; - -// This seems to only show up in MP too, but since it doesn't -// collide with anything, I'll check it in SP as well. -if (_selectionName == "r_femur_hit") then { - _selectionName = "leg_r"; -}; - -// If the damage is being weird, we just tell it to fuck off. -if !(_selectionName in ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]) exitWith {0.01}; - -// Cache the handleDamage call -[_unit, _selectionName, _damage, _source, _projectile] call FUNC(cacheHandledamageCall); - -// Check if a unit would die from this hit -if (alive (vehicle _unit)) then { - _bodyPartn = [_selectionName] call FUNC(getBodyPartNumber); - - // Find the correct Damage threshold for unit. - _damageThreshold = [1,1,1]; - if (isPlayer _unit) then { - _damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(damageThreshold_Players), GVAR(damageThreshold_Players), GVAR(damageThreshold_Players) * 1.7]]; - } else { - _damageThreshold =_unit getvariable[QGVAR(unitDamageThreshold), [GVAR(damageThreshold_AI), GVAR(damageThreshold_AI), GVAR(damageThreshold_AI) * 1.7]]; - }; - _damageBodyPart = ([_unit,QGVAR(bodyPartStatus),[0,0,0,0,0,0]] call EFUNC(common,getDefinedVariable)) select _bodyPartn; - - _hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; - _hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; - - // Calculate change in damage. - _previousDamage = _unit getvariable [QGVAR(bodyPartStatusPrevious), [0,0,0,0,0,0]]; - _newDamage = _damage - (_previousDamage select _bodyPartn); - - // Check if damage to body part is higher as damage head - if (_bodyPartn == 0) exitwith { - if (_damageBodyPart >= ((_damageThreshold select 0) + _newDamage) && {(random(1) > 0.2)}) then { - _damage = 1; - }; - }; - - // Check if damage to body part is higher as damage torso - if (_bodyPartn == 1) exitwith { - if (_damageBodyPart >= ((_damageThreshold select 1) + _newDamage) && {(random(1) > 0.2)}) then { - _damage = 1; - }; - }; - // Check if damage to body part is higher as damage limbs - if (_damageBodyPart >= ((_damageThreshold select 2) + _newDamage) && {(random(1) > 0.95)}) exitwith { - _damage = 1; - }; - // Checking if we should return full damage or not - if (_damage > 0.975) then { - _damage = 0.975; - }; -} else { - _damage = 1; -}; -_damage diff --git a/addons/medical/functions/fnc_onInitForUnit.sqf b/addons/medical/functions/fnc_onInitForUnit.sqf deleted file mode 100644 index 596dc38b98..0000000000 --- a/addons/medical/functions/fnc_onInitForUnit.sqf +++ /dev/null @@ -1,31 +0,0 @@ -/** - * fn_onInitForUnit.sqf - * @Descr: Deprecated. Is no longer used, as we dropped init eventhandler methods. - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit","_handler"]; -_unit = _this select 0; - -if (!local _unit) exitwith {}; -if !(_unit isKindOf "CAManBase") exitwith{}; - -_unit addEventhandler["handleDamage", { - if ((missionNamespace getvariable[QGVAR(setting_AdvancedLevel), 0]) >= 0) then { - call FUNC(onDamage); // cache damage and pass it to handleDamage function - }; -}]; - -_unit addEventHandler["handleHeal", { - if ((missionNamespace getvariable[QGVAR(setting_AdvancedLevel), 0]) >= 0) then { - call FUNC(handleHeal) - }; -}]; - -["medical_onInitForUnit", [_unit]] call ace_common_fnc_localEvent; diff --git a/addons/medical/functions/fnc_onInjury_assignAirwayStatus.sqf b/addons/medical/functions/fnc_onInjury_assignAirwayStatus.sqf deleted file mode 100644 index df233be89d..0000000000 --- a/addons/medical/functions/fnc_onInjury_assignAirwayStatus.sqf +++ /dev/null @@ -1,26 +0,0 @@ -/** - * fn_assignAirwayStatus.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit", "_amountOfDamage", "_typeOfInjury", "_bodyPartn","_airwayItem","_airwayStatus","_selection", "_airwayIncrease"]; -_unit = _this select 0; -_amountOfDamage = _this select 1; -_typeOfInjury = _this select 2; -_bodyPartn = _this select 3; - -// only the head -if (_bodyPartn != 0) exitwith {}; - -if (_amountOfDamage > 0.4) then { - if (random(1) >= 0.8) then { - _unit setvariable [QGVAR(airwayCollapsed), true, true]; - }; -}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_onInjury_assignFractures.sqf b/addons/medical/functions/fnc_onInjury_assignFractures.sqf deleted file mode 100644 index 19b4e95858..0000000000 --- a/addons/medical/functions/fnc_onInjury_assignFractures.sqf +++ /dev/null @@ -1,70 +0,0 @@ -/** - * fn_assignFractures.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit", "_amountOfDamage", "_typeOfInjury", "_bodyPartn","_amountOfBrokenBones","_fractures","_size","_selection"]; -_unit = _this select 0; -_amountOfDamage = _this select 1; -_typeOfInjury = _this select 2; -_bodyPartn = _this select 3; -_amountOfBrokenBones = 1; -_size = 1; -if (_amountOfDamage > 0.05) then { - switch (_typeOfInjury) do { - case "Bullet": { - _amountOfBrokenBones = 1; - _size = round(random(2)); - }; - case "Grenade": { - _amountOfBrokenBones = 1; - _size = round(random(2)); - if (_size < 1) then { - _size = 1; - }; - }; - case "Explosive": { - _amountOfBrokenBones = 1; - _size = round(random(2)); - if (_size < 1) then { - _size = 1; - }; - }; - case "Shell": { - _amountOfBrokenBones = 1; - _size = round(random(2)); - if (_size < 1) then { - _size = 1; - }; - }; - case "Unknown": { - _amountOfBrokenBones = 1; - _size = round(random(1)); - }; - case "Crash": { - _amountOfBrokenBones = 0; - _size = round(random(0)); - }; - default { - _amountOfBrokenBones = 1; - _size = round(random(1)); - }; - }; - if (_size > 2) then { - _size = 3; - }; - - _fractures = [_unit,QGVAR(fractures)] call EFUNC(common,getDefinedVariable); - _selection = _fractures select _bodyPartn; - _selection set [ _size, (_selection select _size) + _amountOfBrokenBones ]; - _fractures set [ _bodyPartn , _selection]; - - [_unit, QGVAR(fractures),_fractures] call EFUNC(common,setDefinedVariable); -}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_onInjury_assignOpenWounds.sqf b/addons/medical/functions/fnc_onInjury_assignOpenWounds.sqf deleted file mode 100644 index f03f4c7abe..0000000000 --- a/addons/medical/functions/fnc_onInjury_assignOpenWounds.sqf +++ /dev/null @@ -1,70 +0,0 @@ -/** - * fn_assignOpenWounds.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" -#define ADD_INJURY(BODYPART,TYPE,AMOUNT) _selection = _openWounds select BODYPART; \ - _newAmount = (_selection select TYPE) + AMOUNT; \ - _selection set [ TYPE, _newAmount]; \ - _openWounds set [BODYPART , _selection]; - - -private ["_unit", "_amountOfDamage", "_typeOfInjury", "_bodyPartn", "_openWounds","_newAmount","_selection"]; -_unit = _this select 0; -_amountOfDamage = _this select 1; -_typeOfInjury = _this select 2; -_bodyPartn = _this select 3; - -if (_amountOfDamage > 0.05) exitwith { - _openWounds = [_unit,QGVAR(openWounds)] call EFUNC(common,getDefinedVariable); - switch (toLower _typeOfInjury) do { - case "bullet": { - ADD_INJURY(_bodyPartn, round(random(2)), 1); - }; - case "grenade": { - ADD_INJURY(_bodyPartn, round(random(2)), 1); - for "_i" from 0 to round(random(3)) /* step +1 */ do { - ADD_INJURY(round(random(6)), round(random(2)), 1); - }; - }; - case "explosive": { - ADD_INJURY(_bodyPartn, round(random(2)), 1); - for "_i" from 0 to round(random(4)) /* step +1 */ do { - ADD_INJURY(round(random(6)), round(random(2)), 1); - }; - }; - case "shell": { - ADD_INJURY(_bodyPartn, round(random(2)), 1); - for "_i" from 0 to round(random(5)) /* step +1 */ do { - ADD_INJURY(round(random(6)), round(random(2)), 1); - }; - }; - case "backblast": { - if (random(1)>=0.5) then{ - ADD_INJURY(_bodyPartn, round(random(2)), 1); - }; - }; - case "unknown": { - ADD_INJURY(_bodyPartn, round(random(1)), 1); - }; - case "vehiclecrash": { - if (random(1)>=0.5) then{ - ADD_INJURY(_bodyPartn, round(random(1)), 1); - }; - }; - default { - ADD_INJURY(_bodyPartn, round(random(1)), 1); - }; - }; - [_unit, QGVAR(openWounds),_openWounds] call EFUNC(common,setDefinedVariable); - - true; -}; - -false; \ No newline at end of file diff --git a/addons/medical/functions/fnc_onKilled.sqf b/addons/medical/functions/fnc_onKilled.sqf deleted file mode 100644 index e3609a57e5..0000000000 --- a/addons/medical/functions/fnc_onKilled.sqf +++ /dev/null @@ -1,12 +0,0 @@ -#include "script_component.hpp" - -private["_unit"]; -_unit = _this select 0; -if (!local _unit) exitwith {}; -[_unit, QGVAR(amountOfPain),0,true] call EFUNC(common,setDefinedVariable); -[_unit, QGVAR(heartRate),0,true] call EFUNC(common,setDefinedVariable); -[_unit, QGVAR(bloodPressure), [0,0],true] call EFUNC(common,setDefinedVariable); -if (_unit getvariable[QEGVAR(common,unconscious_non_captive_f),false]) then { - _unit setCaptive false; - _unit setvariable[QEGVAR(common,unconscious_non_captive_f),nil]; -}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_onLocal.sqf b/addons/medical/functions/fnc_onLocal.sqf deleted file mode 100644 index 83611baa04..0000000000 --- a/addons/medical/functions/fnc_onLocal.sqf +++ /dev/null @@ -1,10 +0,0 @@ -#include "script_component.hpp" - -private["_unit", "_local"]; -_unit = _this select 0; -_local = _this select 1; -if (_local) then { - if (_unit getvariable[QGVAR(addedToUnitLoop),false]) then { - [_unit] call FUNC(addToInjuredCollection); - }; -}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_onMedicationUsage.sqf b/addons/medical/functions/fnc_onMedicationUsage.sqf new file mode 100644 index 0000000000..a95a9e0e8e --- /dev/null +++ b/addons/medical/functions/fnc_onMedicationUsage.sqf @@ -0,0 +1,109 @@ +/* + * Author: Glowbal + * Handles the medication given to a patient. + * + * Arguments: + * 0: The patient + * 1: Medication Treatment classname + * 2: The medication treatment variablename + * 3: Max dosage + * 4: The time in the system + * 5: Incompatable medication > + * + * Return Value: + * NONE + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_target", "_className", "_variable", "_maxDosage", "_timeInSystem", "_incompatabileMeds", "_foundEntry", "_allUsedMedication","_allMedsFromClassname", "_usedMeds", "_hasOverDosed", "_med", "_limit", "_classNamesUsed", "_decreaseAmount", "_viscosityChange", "_viscosityAdjustment", "_medicationConfig", "_onOverDose"]; +_target = _this select 0; +_className = _this select 1; +_variable = _this select 2; +_maxDosage = _this select 3; +_timeInSystem = _this select 4; +_incompatabileMeds = _this select 5; +_viscosityChange = _this select 6; + +_foundEntry = false; +_allUsedMedication = _target getvariable [QGVAR(allUsedMedication), []]; +{ + if (_x select 0 == _variable) exitwith { + _allMedsFromClassname = _x select 1; + if !(_className in _allMedsFromClassname) then { + _allMedsFromClassname pushback _className; + _x set [1, _allMedsFromClassname]; + _allUsedMedication set [_foreachIndex, _x]; + _target setvariable [QGVAR(allUsedMedication), _allUsedMedication]; + }; + _foundEntry = true; + }; +} foreach _allUsedMedication; + +if (!_foundEntry) then { + _allUsedMedication pushback [_variable, [_className]]; + _target setvariable [QGVAR(allUsedMedication), _allUsedMedication]; +}; + + +_usedMeds = _target getvariable [_variable, 0]; +if (_usedMeds >= floor (_maxDosage + round(random(2))) && _maxDosage >= 1) then { + [_target] call FUNC(setDead); +}; + +_hasOverDosed = 0; +{ + _med = _x select 0; + _limit = _x select 1; + { + _classNamesUsed = _x select 1; + if ({_x == _med} count _classNamesUsed > _limit) then { + _hasOverDosed = _hasOverDosed + 1; + }; + }foreach _allUsedMedication; +}foreach _incompatabileMeds; + +if (_hasOverDosed > 0) then { + _medicationConfig = (configFile >> "ACE_Medical_Advanced" >> "Treatment" >> "Medication"); + _onOverDose = getText (_medicationConfig >> "onOverDose"); + if (isClass (_medicationConfig >> _className)) then { + _medicationConfig = (_medicationConfig >> _className); + if (isText (_medicationConfig >> "onOverDose")) then { _onOverDose = getText (_medicationConfig >> "onOverDose"); }; + }; + if (isNil _onOverDose) then { + _onOverDose = compile _onOverDose; + } else { + _onOverDose = missionNamespace getvariable _onOverDose; + }; + [_target, _className] call _onOverDose; +}; + +_decreaseAmount = 1 / _timeInSystem; +_viscosityAdjustment = _viscosityChange / _timeInSystem; + +[{ + private ["_args", "_target", "_timeInSystem", "_variable", "_amountDecreased","_decreaseAmount", "_usedMeds", "_viscosityAdjustment"]; + _args = _this select 0; + _target = _args select 0; + _timeInSystem = _args select 1; + _variable = _args select 2; + _amountDecreased = _args select 3; + _decreaseAmount = _args select 4; + _viscosityAdjustment = _args select 5; + + _usedMeds = _target getvariable [_variable, 0]; + _usedMeds = _usedMeds - _decreaseAmount; + _target setvariable [_variable, _usedMeds]; + + _amountDecreased = _amountDecreased + _decreaseAmount; + + // Restoring the viscosity while the medication is leaving the system + _target setvariable [QGVAR(peripheralResistance), ((_target getvariable [QGVAR(peripheralResistance), 100]) - _viscosityAdjustment) max 0]; + + if (_amountDecreased >= 1 || (_usedMeds <= 0) || !alive _target) then { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + _args set [3, _amountDecreased]; +}, 1, [_target, _timeInSystem, _variable, 0, _decreaseAmount, _viscosityAdjustment] ] call CBA_fnc_addPerFrameHandler; diff --git a/addons/medical/functions/fnc_onMenuOpen.sqf b/addons/medical/functions/fnc_onMenuOpen.sqf deleted file mode 100644 index 5597dacce1..0000000000 --- a/addons/medical/functions/fnc_onMenuOpen.sqf +++ /dev/null @@ -1,76 +0,0 @@ -/** - * fn_onMenuOpen.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -if (isnil QGVAR(LatestDisplayOptionMenu)) then { - GVAR(LatestDisplayOptionMenu) = "triage"; -} else { - if (GVAR(LatestDisplayOptionMenu) == "toggle") then { - GVAR(LatestDisplayOptionMenu) = "triage"; - GVAR(INTERACTION_TARGET) = GVAR(INTERACTION_TARGET_PREVIOUS); - }; -}; - -private ["_display","_target"]; -_target = GVAR(INTERACTION_TARGET); -if (isnil QGVAR(INTERACTION_TARGET_PREVIOUS)) then { - GVAR(INTERACTION_TARGET_PREVIOUS) = _target; -}; -[GVAR(LatestDisplayOptionMenu)] call FUNC(handleUI_DisplayOptions); - -[] call FUNC(updateActivityLog); -[_target] call FUNC(updateUIInfo); - -// 11 till 18 -disableSerialization; -_display = _this select 0; //uiNamespace getVariable QGVAR(medicalMenu); -if (isnil "_display") exitwith { - -}; - -(_display displayCtrl 11) ctrlSetTooltip localize "STR_ACE_UI_VIEW_TRIAGE_CARD"; -(_display displayCtrl 12) ctrlSetTooltip localize "STR_ACE_UI_EXAMINE_PATIENT"; -(_display displayCtrl 13) ctrlSetTooltip localize "STR_ACE_UI_BANDAGE_FRACTURES"; -(_display displayCtrl 14) ctrlSetTooltip localize "STR_ACE_UI_MEDICATION"; -(_display displayCtrl 15) ctrlSetTooltip localize "STR_ACE_UI_AIRWAY_MANAGEMENT"; -(_display displayCtrl 16) ctrlSetTooltip localize "STR_ACE_UI_ADVANCED_TREATMENT"; -(_display displayCtrl 17) ctrlSetTooltip localize "STR_ACE_UI_DRAG_CARRY"; -(_display displayCtrl 18) ctrlSetTooltip localize "STR_ACE_UI_TOGGLE_SELF"; - -(_display displayCtrl 301) ctrlSetTooltip localize "STR_ACE_UI_SELECT_HEAD"; -(_display displayCtrl 302) ctrlSetTooltip localize "STR_ACE_UI_SELECT_TORSO"; -(_display displayCtrl 303) ctrlSetTooltip localize "STR_ACE_UI_SELECT_ARM_R"; -(_display displayCtrl 304) ctrlSetTooltip localize "STR_ACE_UI_SELECT_ARM_L"; -(_display displayCtrl 305) ctrlSetTooltip localize "STR_ACE_UI_SELECT_LEG_R"; -(_display displayCtrl 306) ctrlSetTooltip localize "STR_ACE_UI_SELECT_LEG_L"; -(_display displayCtrl 2001) ctrlSetTooltip localize "STR_ACE_UI_SELECT_TRIAGE_STATUS"; - - -(_display displayCtrl 1) ctrlSetText format["%1",[_target] call EFUNC(common,getName)]; -setMousePosition [ 0.4, 0.4]; - -[QGVAR(onMenuOpen), "onEachFrame", { - if (isNull GVAR(INTERACTION_TARGET)) then { - GVAR(INTERACTION_TARGET) = ACE_player; - }; - [GVAR(INTERACTION_TARGET)] call FUNC(updateUIInfo); - [GVAR(INTERACTION_TARGET)] call FUNC(updateIcons); - [GVAR(LatestDisplayOptionMenu)] call FUNC(handleUI_DisplayOptions); - - [] call FUNC(updateActivityLog); - - _status = [GVAR(INTERACTION_TARGET)] call FUNC(getTriageStatus); - ((_this select 0) displayCtrl 2000) ctrlSetText (_status select 0); - ((_this select 0) displayCtrl 2000) ctrlSetBackgroundColor (_status select 2); - - }, [_display]] call BIS_fnc_addStackedEventHandler; - - ["Medical_onMenuOpen", [ACE_player, _interactionTarget]] call ace_common_fnc_localEvent; diff --git a/addons/medical/functions/fnc_onPropagateWound.sqf b/addons/medical/functions/fnc_onPropagateWound.sqf new file mode 100644 index 0000000000..762afa762c --- /dev/null +++ b/addons/medical/functions/fnc_onPropagateWound.sqf @@ -0,0 +1,37 @@ +/* + * Author: Glowbal + * Adds a new injury to the wounds collection from remote clients. Is used to split up the large collection of injuries broadcasting across network. + * + * Arguments: + * 0: The remote unit + * 1: injury + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_unit", "_injury", "_openWounds", "_injuryID", "_exists"]; +_unit = _this select 0; +_injury = _this select 1; + +if (!local _unit) then { + _openWounds = _unit getvariable[QGVAR(openWounds), []]; + _injuryID = _injury select 0; + + _exists = false; + { + if (_x select 0 == _injuryID) exitwith { + _exists = true; + _openWounds set [_foreachIndex, _injury]; + }; + }foreach _openWounds; + + if (!_exists) then { + _openWounds pushback _injury; + }; + _unit setvariable [GVAR(openWounds), _openWounds]; +}; diff --git a/addons/medical/functions/fnc_onStartMovingUnit.sqf b/addons/medical/functions/fnc_onStartMovingUnit.sqf deleted file mode 100644 index 7fe3dd8d65..0000000000 --- a/addons/medical/functions/fnc_onStartMovingUnit.sqf +++ /dev/null @@ -1,25 +0,0 @@ -/** - * fnc_onStartMovingUnit.sqf - * @Descr: is called when a unit start to move another unit through either carry or drag actions. - * - * @Author: Glowbal - * - * @Arguments: [caller OBJECT, unit OBJECT, killOnDrop BOOL (Should the unit be killed when being dropped), dragging BOOL (true means the dragging animations should be played, false will play carry animations)] - * @Return: nil - * @PublicAPI: false - */ - -#include "script_component.hpp" - - -private ["_caller","_target","_killOnDrop","_dragging"]; -_caller = _this select 0; -_target = _this select 1; -_killOnDrop = _this select 2; -_dragging = _this select 3; - -_caller setvariable[QGVAR(onStartMovingUnitParams), [_caller, _target, _killOnDrop, _dragging]]; - -[_target, true] call EFUNC(common,disableAI_f); - -nil; \ No newline at end of file diff --git a/addons/medical/functions/fnc_onTreatmentCompleted.sqf b/addons/medical/functions/fnc_onTreatmentCompleted.sqf deleted file mode 100644 index 4505575f00..0000000000 --- a/addons/medical/functions/fnc_onTreatmentCompleted.sqf +++ /dev/null @@ -1,26 +0,0 @@ -/** - * fnc_handleTreatmentCompleted.sqf - * @Descr: Called when a treatment action has been completed. - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_caller", "_target","_selectionName","_removeItem"]; -_caller = _this select 0; -_target = _this select 1; -_selectionName = _this select 2; -_removeItem = _this select 3; - -if (primaryWeapon _caller == "ACE_FakePrimaryWeapon") then { - _caller removeWeapon "ACE_FakePrimaryWeapon"; -}; - -[_caller,false] call FUNC(treatmentMutex); - -// TODO: BUG: if AI finishes treatment, it will also hide the icon for the player -[QGVAR(treatmentIconID), false, "", [1,1,1,1]] call EFUNC(gui,displayIcon); diff --git a/addons/medical/functions/fnc_onUnconscious.sqf b/addons/medical/functions/fnc_onUnconscious.sqf deleted file mode 100644 index b18f55c099..0000000000 --- a/addons/medical/functions/fnc_onUnconscious.sqf +++ /dev/null @@ -1,23 +0,0 @@ -/** - * fnc_onUnconscious.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit", "_state"]; -_unit = _this select 0; -_state = _this select 1; - -if (_state) then { - if (GVAR(setting_allowAirwayInjuries)) then { - if (random(1) >= 0.3) then { - _unit setvariable [QGVAR(airwayOccluded), true, true]; - }; - }; -}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_onWoundUpdateRequest.sqf b/addons/medical/functions/fnc_onWoundUpdateRequest.sqf new file mode 100644 index 0000000000..8204ed2539 --- /dev/null +++ b/addons/medical/functions/fnc_onWoundUpdateRequest.sqf @@ -0,0 +1,27 @@ +/* + * Author: Glowbal + * Enabled the vitals loop for a unit. + * + * Arguments: + * 0: The Unit + * 1: the last known ID + * 2: Origin object + * + * ReturnValue: + * + * + * Public: Yes + */ + +#include "script_component.hpp" +private ["_unit", "_lastId", "_openWounds"]; +_unit = _this select 0; +_lastId = _this select 1; +_originOfrequest = _this select 2; + +_openWounds = _unit getvariable [QGVAR(openWounds), []]; +if (count _openWounds > _lastId) then { + { + ["medical_propagateWound", [_originOfrequest], [_unit, _x]] call EFUNC(common,targetEvent); + }foreach _openWounds; +}; diff --git a/addons/medical/functions/fnc_openMenu.sqf b/addons/medical/functions/fnc_openMenu.sqf deleted file mode 100644 index 5e0b488ff5..0000000000 --- a/addons/medical/functions/fnc_openMenu.sqf +++ /dev/null @@ -1,44 +0,0 @@ -/** - * fn_openMenu.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - - -if (dialog) exitwith { - disableSerialization; - - private "_display"; - _display = uiNamespace getVariable QGVAR(medicalMenu); - if (!isnil "_display") then { - closeDialog 314412; - }; - -}; - -private ["_interactionTarget"]; -_interactionTarget = objNull; -if (count _this > 0) then { - _interactionTarget = _this select 0; - -} else { - _interactionTarget = cursortarget; - if (isNull _interactionTarget) then { - _interactionTarget = ACE_player; - }; - if (_interactionTarget distance ACE_player > 5 || !(_interactionTarget isKindOf "CaManBase")) then { - _interactionTarget = ACE_player; - }; -}; - -if (isNull _interactionTarget) then { - _interactionTarget = ACE_player; -}; -GVAR(INTERACTION_TARGET) = _interactionTarget; -createDialog QGVAR(medicalMenu); diff --git a/addons/medical/functions/fnc_parseConfigForInjuries.sqf b/addons/medical/functions/fnc_parseConfigForInjuries.sqf new file mode 100644 index 0000000000..9e56784a0d --- /dev/null +++ b/addons/medical/functions/fnc_parseConfigForInjuries.sqf @@ -0,0 +1,112 @@ +/* + * Author: Glowbal + * Parse the ACE_Medical_Advanced config for all injury types. + * + * Arguments: + * + * ReturnValue: + * + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_injuriesRootConfig", "_woundsConfig", "_allWoundClasses", "_amountOf", "_entry","_classType", "_selections", "_bloodLoss", "_pain","_minDamage","_causes", "_allTypes", "_damageTypesConfig", "_thresholds", "_typeThresholds", "_selectionSpecific", "_selectionSpecificType", "_classDisplayName", "_subClassDisplayName", "_maxDamage", "_subClassmaxDamage"]; + +_injuriesRootConfig = (configFile >> "ACE_Medical_Advanced" >> "Injuries"); +_allTypes = ["stab", "grenade", "bullet", "explosive", "shell", "punch", "vehiclecrash", "backblast", "falling", "bite", "ropeburn"]; + +// Collect all available damage types from the config +_allFoundDamageTypes = []; +_configDamageTypes = (_injuriesRootConfig >> "damageTypes"); +for "_i" from 0 to (count _configDamageTypes -1) /* step +1 */ do { + // Only get the subclasses in damageType class + if (isClass(_configDamageTypes select _i)) then { + _allFoundDamageTypes pushback (configName (_configDamageTypes select _i)); + }; +}; +GVAR(allAvailableDamageTypes) = _allFoundDamageTypes; +GVAR(woundClassNames) = []; +GVAR(fractureClassNames) = []; + + +// Parsing the wounds +// function for parsing a sublcass of an injury +_parseForSubClassWounds = { + _subClass = _this select 0; + if (isClass (_entry >> _subClass)) exitwith { + _subClassConfig = (_entry >> _subClass); + _subClasstype = _classType + (configName _subClassConfig); + _subClassselections = if (isArray(_subClassConfig >> "selections")) then { getArray(_subClassConfig >> "selections");} else { _selections }; + _subClassbloodLoss = if (isNumber(_subClassConfig >> "bleedingRate")) then { getNumber(_subClassConfig >> "bleedingRate");} else { _bloodLoss }; + _subClasspain = if (isNumber(_subClassConfig >> "pain")) then { getNumber(_subClassConfig >> "pain");} else { _pain }; + _subClassminDamage = if (isNumber(_subClassConfig >> "minDamage")) then { getNumber(_subClassConfig >> "minDamage");} else { _minDamage }; + _subClassmaxDamage = if (isNumber(_subClassConfig >> "maxDamage")) then { getNumber(_subClassConfig >> "maxDamage");} else { _maxDamage }; + _subClasscauses = if (isArray(_subClassConfig >> "causes")) then { getArray(_subClassConfig >> "causes");} else { _causes }; + _subClassDisplayName = if (isText(_subClassConfig >> "name")) then { getText(_subClassConfig >> "name");} else {_classDisplayName + " " + _subClass}; + if (count _selections > 0 && {count _causes > 0}) then { + GVAR(woundClassNames) pushback _subClasstype; + _allWoundClasses pushback [_classID, _subClassselections, _subClassbloodLoss, _subClasspain, [_subClassminDamage, _subClassmaxDamage], _subClasscauses, _subClassDisplayName]; + _classID = _classID + 1; + }; + true; + }; + false; +}; + +// TODO classTypes are strings currently. Convert them to unqiue IDs instead. +_woundsConfig = (_injuriesRootConfig >> "wounds"); +_allWoundClasses = []; +_classID = 0; +if (isClass _woundsConfig) then { + _amountOf = count _woundsConfig; + for "_i" from 0 to (_amountOf -1) /* step +1 */ do { + _entry = _woundsConfig select _i; + if (isClass _entry) then { + _classType = (ConfigName _entry); + _selections = if (isArray(_entry >> "selections")) then { getArray(_entry >> "selections");} else {[]}; + _bloodLoss = if (isNumber(_entry >> "bleedingRate")) then { getNumber(_entry >> "bleedingRate");} else {0}; + _pain = if (isNumber(_entry >> "pain")) then { getNumber(_entry >> "pain");} else {0}; + _minDamage = if (isNumber(_entry >> "minDamage")) then { getNumber(_entry >> "minDamage");} else {0}; + _maxDamage = if (isNumber(_entry >> "maxDamage")) then { getNumber(_entry >> "maxDamage");} else {-1}; + _causes = if (isArray(_entry >> "causes")) then { getArray(_entry >> "causes");} else {[]}; + _classDisplayName = if (isText(_entry >> "name")) then { getText(_entry >> "name");} else {_classType}; + + // TODO instead of hardcoding minor, medium and large just go through all sub classes recursively until none are found + if (["Minor"] call _parseForSubClassWounds || ["Medium"] call _parseForSubClassWounds || ["Large"] call _parseForSubClassWounds) exitwith {}; // continue to the next one + + // There were no subclasses, so we will add this one instead. + if (count _selections > 0 && count _causes > 0) then { + GVAR(woundClassNames) pushback _classType; + _allWoundClasses pushback [_classID, _selections, _bloodLoss, _pain, [_minDamage, _maxDamage], _causes, _classDisplayName]; + _classID = _classID + 1; + }; + true; + }; + }; +}; +GVAR(AllWoundInjuryTypes) = _allWoundClasses; + +// Linking injuries to the woundInjuryType variables. +_damageTypesConfig = (configFile >> "ACE_Medical_Advanced" >> "Injuries" >> "damageTypes"); +_thresholds = getArray(_damageTypesConfig >> "thresholds"); +_selectionSpecific = getNumber(_damageTypesConfig >> "selectionSpecific"); +{ + _varName = format[QGVAR(woundInjuryType_%1),_x]; + _woundTypes = []; + _type = _x; + { + // Check if this type is in the causes of a wound class, if so, we will store the wound types for this damage type + if (_type in (_x select 5)) then { + _woundTypes pushback _x; + }; + }foreach _allWoundClasses; + _typeThresholds = _thresholds; + _selectionSpecificType = _selectionSpecific; + if (isClass(_damageTypesConfig >> _x)) then { + if (isArray(_damageTypesConfig >> _x >> "thresholds")) then { _typeThresholds = getArray(_damageTypesConfig >> _x >> "thresholds");}; + if (isNumber(_damageTypesConfig >> _x >> "selectionSpecific")) then { _selectionSpecificType = getNumber(_damageTypesConfig >> _x >> "selectionSpecific");}; + }; + missionNamespace setvariable [_varName, [_typeThresholds, _selectionSpecificType > 0, _woundTypes]]; +}foreach _allFoundDamageTypes; diff --git a/addons/medical/functions/fnc_playInjuredSound.sqf b/addons/medical/functions/fnc_playInjuredSound.sqf index f514f8ddae..16a7d69116 100644 --- a/addons/medical/functions/fnc_playInjuredSound.sqf +++ b/addons/medical/functions/fnc_playInjuredSound.sqf @@ -1,69 +1,63 @@ -/** - * fn_playInjuredSound.sqf - * @Descr: Play the injured sound for a unit if the unit is damaged. The sound broadcasted across MP. +/* + * Author: Glowbal + * Play the injured sound for a unit if the unit is damaged. The sound broadcasted across MP. * Will not play if the unit has already played a sound within to close a time frame. - * Delay: With minimal damage (below 1), the delay is (10 + random(50)) seconds. Otherwise it is 60 seconds / damage. - * - * @Author: Glowbal + * Delay: With minimal damage (below 1), the delay is (10 + random(50)) seconds. Otherwise it is 60 seconds / damage. * - * @Arguments: [unit OBJECT] - * @Return: nil - * @PublicAPI: false + * Arguments: + * 0: The Unit + * + * ReturnValue: + * + * + * Public: No */ #include "script_component.hpp" private ["_unit","_amountOfDamage","_bodyPartStatus","_availableSounds_A","_availableSounds_B","_availableSounds_C","_sound"]; _unit = _this select 0; -if (!local _unit) exitwith{}; +_pain = _this select 1; +if (!local _unit || !GVAR(enableScreams)) exitwith{}; // Lock if the unit is already playing a sound. if ((_unit getvariable [QGVAR(playingInjuredSound),false])) exitwith {}; _unit setvariable [QGVAR(playingInjuredSound),true]; -// Classnames of the available sounds. -_availableSounds_A = [ - "WoundedGuyA_01", - "WoundedGuyA_02", - "WoundedGuyA_03", - "WoundedGuyA_04", - "WoundedGuyA_05", - "WoundedGuyA_06", - "WoundedGuyA_07", - "WoundedGuyA_08" -]; -_availableSounds_B = [ - "WoundedGuyB_01", - "WoundedGuyB_02", - "WoundedGuyB_03", - "WoundedGuyB_04", - "WoundedGuyB_05", - "WoundedGuyB_06", - "WoundedGuyB_07", - "WoundedGuyB_08" -]; -_availableSounds_C = [ - "WoundedGuyC_01", - "WoundedGuyC_02", - "WoundedGuyC_03", - "WoundedGuyC_04", - "WoundedGuyC_05" -]; - -// TODO Maybe base this off hitpoint damage -// Find the amount of damage for this unit, based upon body part status. -_bodyPartStatus = [_unit,QGVAR(bodyPartStatus)] call EFUNC(common,getDefinedVariable); -_amountOfDamage = 0; -{ - _amountOfDamage = _amountOfDamage + _x; -}foreach _bodyPartStatus; - // Play the sound if there is any damage present. -if (_amountOfDamage > 0) exitwith { +if (_pain > 0 && {[_unit] call EFUNC(common,isAwake)}) exitwith { + // Classnames of the available sounds. + _availableSounds_A = [ + "WoundedGuyA_01", + "WoundedGuyA_02", + "WoundedGuyA_03", + "WoundedGuyA_04", + "WoundedGuyA_05", + "WoundedGuyA_06", + "WoundedGuyA_07", + "WoundedGuyA_08" + ]; + _availableSounds_B = [ + "WoundedGuyB_01", + "WoundedGuyB_02", + "WoundedGuyB_03", + "WoundedGuyB_04", + "WoundedGuyB_05", + "WoundedGuyB_06", + "WoundedGuyB_07", + "WoundedGuyB_08" + ]; + _availableSounds_C = [ + "WoundedGuyC_01", + "WoundedGuyC_02", + "WoundedGuyC_03", + "WoundedGuyC_04", + "WoundedGuyC_05" + ]; _sound = ""; - + // Select the to be played sound based upon damage amount. - if (_amountOfDamage > 1) then { + if (_pain > 0.5) then { if (random(1) > 0.5) then { _sound = _availableSounds_A select (round(random((count _availableSounds_A) - 1))); } else { @@ -72,19 +66,13 @@ if (_amountOfDamage > 0) exitwith { } else { _sound = _availableSounds_B select (round(random((count _availableSounds_B) - 1))); }; - // Play the sound - playSound3D [((getArray(configFile >> "CfgSounds" >> _sound >> "sound") select 0)), _unit, false, getPos _unit, 2, 1, 15]; // +2db, 15 meters. - + playSound3D [(getArray(configFile >> "CfgSounds" >> _sound >> "sound") select 0) + ".wss", objNull, false, getPos _unit, 15, 1, 25]; // +2db, 15 meters. + // Figure out what the delay will be before it is possible to play a sound again. private "_delay"; - _delay = 1; - if (_amountOfDamage < 1) then { - _delay = 10 + random(50); - } else { - _delay = (60 / _amountOfDamage); - }; - + _delay = (30 - (random(25) * _pain)) max (3.5 + random(2)); + // Clean up the lock [{ (_this select 0) setvariable [QGVAR(playingInjuredSound),nil]; diff --git a/addons/medical/functions/fnc_handleReactionHit.sqf b/addons/medical/functions/fnc_reactionToDamage.sqf similarity index 82% rename from addons/medical/functions/fnc_handleReactionHit.sqf rename to addons/medical/functions/fnc_reactionToDamage.sqf index 2128fa65c6..b8c9256bde 100644 --- a/addons/medical/functions/fnc_handleReactionHit.sqf +++ b/addons/medical/functions/fnc_reactionToDamage.sqf @@ -11,11 +11,12 @@ #include "script_component.hpp" private ["_unit","_amountOfDamage"]; -_unit = _this select 0; +_unit = _this select 0; _amountOfDamage = _this select 1; if (_amountOfDamage > 0.2) then { - // [_unit] call FUNC(playInjuredSound); + + [_unit] call FUNC(playInjuredSound); if ((vehicle _unit) isKindOf "StaticWeapon") exitwith { if (_amountOfDamage > 1) then { _unit action ["eject", vehicle _unit]; @@ -38,14 +39,14 @@ if (_amountOfDamage > 0.2) then { [_unit] call EFUNC(common,setProne); }; }; - if (isPlayer _unit) then { - 76 cutRsc [QGVAR(ScreenEffectsHit),"PLAIN"]; + if (_unit == ACE_player) then { + //76 cutRsc [QGVAR(ScreenEffectsHit),"PLAIN"]; addCamShake [3, 5, _amountOfDamage + random 10]; }; } else { if (_amountOfDamage > 0) then { - if (isPlayer _unit) then { - 76 cutRsc [QGVAR(ScreenEffectsHit),"PLAIN"]; + if (_unit == ACE_player) then { + // 76 cutRsc [QGVAR(ScreenEffectsHit),"PLAIN"]; }; }; -}; \ No newline at end of file +}; diff --git a/addons/medical/functions/fnc_registerUnconsciousCondition.sqf b/addons/medical/functions/fnc_registerUnconsciousCondition.sqf deleted file mode 100644 index f34d05b57d..0000000000 --- a/addons/medical/functions/fnc_registerUnconsciousCondition.sqf +++ /dev/null @@ -1,22 +0,0 @@ -/** - * fn_registerUnconsciousCondition.sqf - * @Descr: Register new condition for the unconscious state. Conditions are not actively checked for units unless unit is in unconscious state. - * @Author: Glowbal - * - * @Arguments: [code CODE] - * @Return: void - * @PublicAPI: true - */ - -#include "script_component.hpp" - -if (isnil QGVAR(unconsciousConditions_F)) then { - GVAR(unconsciousConditions_F) = []; -}; -if (typeName _this == typeName []) then { - { - if (typeName _x == typeName {}) then { - GVAR(unconsciousConditions_F) pushback _x; - }; - }foreach _this; -}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_selectionNameToNumber.sqf b/addons/medical/functions/fnc_selectionNameToNumber.sqf new file mode 100644 index 0000000000..1e8d79183f --- /dev/null +++ b/addons/medical/functions/fnc_selectionNameToNumber.sqf @@ -0,0 +1,16 @@ +/* + * Author: Glowbal + * Get the number representation of a selection name. + * + * Arguments: + * 0: The selection name of a unit + * + * ReturnValue: + * Number representation. -1 if invalid. + * + * Public: yes + */ + +#include "script_component.hpp" + +(["head","body","hand_l","hand_r","leg_l","leg_r"] find (_this select 0)); diff --git a/addons/medical/functions/fnc_setCaptiveSwitch.sqf b/addons/medical/functions/fnc_setCaptiveSwitch.sqf deleted file mode 100644 index 378f42e5d4..0000000000 --- a/addons/medical/functions/fnc_setCaptiveSwitch.sqf +++ /dev/null @@ -1,33 +0,0 @@ -/** - * fn_setCaptiveSwitch.sqf - * @Descr: Register a unit as captive for the unconscious state - * @Author: Glowbal - * - * @Arguments: [unit OBJECT, setCaptive BOOL] - * @Return: BOOL True if unit is put as set captive, otherwise false - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit", "_captiveSwitch", "_setCaptive"]; -_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param; -_setCaptive = [_this, 1, false, [false]] call BIS_fnc_Param; - - -_captiveSwitch = true; -if (_setCaptive) then { - if (captive _unit) then { - _captiveSwitch = false; - } else { - _unit setCaptive true; - }; -} else { - if (captive _unit) then { - _unit setCaptive false; - } else { - _captiveSwitch = false; - }; -}; - -_captiveSwitch \ No newline at end of file diff --git a/addons/medical/functions/fnc_setCardiacArrest.sqf b/addons/medical/functions/fnc_setCardiacArrest.sqf index 090af82b49..03b9835fd7 100644 --- a/addons/medical/functions/fnc_setCardiacArrest.sqf +++ b/addons/medical/functions/fnc_setCardiacArrest.sqf @@ -1,11 +1,15 @@ -/** - * fn_setCardiacArrest.sqf - * @Descr: Triggers a unit into the Cardiac Arrest state from CMS. Will put the unit in an unconscious state and run a countdown timer until unit dies.
Timer is a random value between 120 and 720 seconds. - * @Author: Glowbal +/* + * Author: Glowbal + * Triggers a unit into the Cardiac Arrest state from CMS. Will put the unit in an unconscious state and run a countdown timer until unit dies. + * Timer is a random value between 120 and 720 seconds. * - * @Arguments: [unit OBJECT (The unit that will be put in cardiac arrest state)] - * @Return: void - * @PublicAPI: true + * Arguments: + * 0: The unit that will be put in cardiac arrest state + * + * ReturnValue: + * + * + * Public: yes */ #include "script_component.hpp" @@ -14,13 +18,12 @@ private ["_unit", "_modifier","_timer","_counter", "_heartRate"]; _unit = _this select 0; if (_unit getvariable [QGVAR(inCardiacArrest),false]) exitwith {}; -[format["%1 is put into cardiac arrest",_unit]] call EFUNC(common,debug); _unit setvariable [QGVAR(inCardiacArrest), true,true]; -[_unit,QGVAR(heartRate), 0] call EFUNC(common,setDefinedVariable); +_unit setvariable [QGVAR(heartRate), 0]; ["Medical_onEnteredCardiacArrest", [_unit]] call ace_common_fnc_localEvent; -[_unit] call FUNC(setUnconsciousState); +[_unit] call FUNC(setUnconscious); _counter = 120 + round(random(600)); _timer = 0; @@ -31,13 +34,12 @@ _timer = 0; _timer = _args select 1; _counter = _args select 2; - _heartRate = [_unit,QGVAR(heartRate)] call EFUNC(common,getDefinedVariable); + _heartRate = _unit getvariable [QGVAR(heartRate), 0]; if (_heartRate > 0 || !alive _unit) exitwith { _unit setvariable [QGVAR(inCardiacArrest), nil,true]; [(_this select 1)] call cba_fnc_removePerFrameHandler; }; if (_counter - _timer < 1) exitwith { - [_unit] call FUNC(setDead); [(_this select 1)] call cba_fnc_removePerFrameHandler; _unit setvariable [QGVAR(inCardiacArrest), nil,true]; diff --git a/addons/medical/functions/fnc_setDead.sqf b/addons/medical/functions/fnc_setDead.sqf index d43c1e1afc..e448554d59 100644 --- a/addons/medical/functions/fnc_setDead.sqf +++ b/addons/medical/functions/fnc_setDead.sqf @@ -1,17 +1,18 @@ -/** - * fn_setDead.sqf - * @Descr: Kills a unit - * @Author: Glowbal +/* + * Author: Glowbal + * Either kills a unit or puts the unit in a revivable state, depending on the settings. * - * @Arguments: [unit OBJECT] - * @Return: void - * @PublicAPI: true + * Arguments: + * 0: The unit that will be killed + * + * ReturnValue: + * + * + * Public: yes */ #include "script_component.hpp" -#define TIME_BETWEEN_REVIVE_RUNS 0.5 - private ["_unit"]; _unit = _this select 0; _force = false; @@ -21,65 +22,34 @@ if (count _this >= 2) then { if (!alive _unit) exitwith{}; if (!local _unit) exitwith { - [[_unit, _force], QUOTE(FUNC(setDead)), _unit, false] call BIS_fnc_MP; + [[_unit, _force], QUOTE(DFUNC(setDead)), _unit, false] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ }; -if (isnil QGVAR(ENABLE_REVIVE_F)) then { - GVAR(ENABLE_REVIVE_F) = 0; -}; - -if (((GVAR(ENABLE_REVIVE_F) == 1 && isPlayer _unit) || (GVAR(ENABLE_REVIVE_F) == 2)) && !_force && (alive (vehicle _unit))) exitwith { - // enter revive state - _unit setvariable ["ACE_inReviveState", true, true]; - - // Remain unconscious while in revive state - [_unit] call FUNC(setUnconsciousState); - - // setting the revive default values - if (isnil QGVAR(REVIVE_TIMER_F)) then { - GVAR(REVIVE_TIMER_F) = 10; - }; - if (isnil QGVAR(REVIVE_NUMBER_MAX_F)) then { - GVAR(REVIVE_NUMBER_MAX_F) = -1; - }; +if (GVAR(preventInstaDeath) && !_force) exitwith { + if (_unit getvariable [QGVAR(inReviveState), false]) exitwith {}; // already in revive state + _unit setvariable [QGVAR(inReviveState), true, true]; + [_unit] call FUNC(setUnconscious); [{ - private ["_unit","_playerDead","_counter"]; - _unit = (_this select 0) select 0; - _playerDead = (_this select 0) select 1; + private ["_args","_unit","_startTime"]; + _args = _this select 0; + _unit = _args select 0; + _startTime = _args select 1; - // Check if a unit woke up or was already killed - if (!([_unit] call FUNC(isUnconscious)) || !alive _unit) exitwith { + if (time - _startTime > GVAR(maxReviveTime)) exitwith { [(_this select 1)] call cba_fnc_removePerFrameHandler; - - // Cleaning up the variables, as we no longer need them. - _unit setvariable ["ACE_reviveCounterValue", nil]; - _unit setvariable ["ACE_inReviveState", nil, true]; + [_unit, true] call FUNC(setDead); + _unit setvariable [QGVAR(inReviveState), nil, true]; }; - _counter = _unit getvariable ["ACE_reviveCounterValue", 0]; - if (_counter >= GVAR(REVIVE_TIMER_F)) exitwith{ - if (isPlayer _unit) then { - titleText ["You died..","PLAIN DOWN"]; - }; - [_unit,"ACE_isDead", true, true] call EFUNC(common,setDefinedVariable); - if (_playerDead) then { - [_unit,QGVAR(isDeadPlayer),true,true] call EFUNC(common,setDefinedVariable); - }; - - _unit setdamage 1; // killing a unit will automatically clean up all variables. - + if !(_unit getvariable [QGVAR(inReviveState), false]) exitwith { [(_this select 1)] call cba_fnc_removePerFrameHandler; }; - _unit setvariable ["ACE_reviveCounterValue",_counter + TIME_BETWEEN_REVIVE_RUNS]; - - }, TIME_BETWEEN_REVIVE_RUNS, [_unit, isPlayer _unit] ] call CBA_fnc_addPerFrameHandler; - + }, 1, [_unit, time] ] call CBA_fnc_addPerFrameHandler; }; -[_unit,"ACE_isDead",true,true] call EFUNC(common,setDefinedVariable); +_unit setvariable ["ACE_isDead", true, true]; if (isPLayer _unit) then { - [_unit,QGVAR(isDeadPlayer),true,true] call EFUNC(common,setDefinedVariable); + _unit setvariable ["isDeadPlayer", true, true]; }; - _unit setdamage 1; diff --git a/addons/medical/functions/fnc_setHitPointDamage.sqf b/addons/medical/functions/fnc_setHitPointDamage.sqf new file mode 100644 index 0000000000..473852b159 --- /dev/null +++ b/addons/medical/functions/fnc_setHitPointDamage.sqf @@ -0,0 +1,78 @@ +/* + * Author: KoffeinFlummi + * My very own setHitPointDamage since BIS's one is buggy when affecting a remote unit. + * It also doesn't change the overall damage. This does. + * + * Arguments: + * 0: Unit + * 1: HitPoint + * 2: Damage + * 3: Disable overall damage adjustment (optional) + * + * Return Value: + * nil + * + * Public: Yes + */ + +#include "script_component.hpp" + +private ["_unit", "_selection", "_damage", "_selections", "_damages", "_damageOld", "_damageSumOld", "_damageNew", "_damageSumNew", "_damageFinal"]; + +_unit = _this select 0; +_selection = _this select 1; +_damage = _this select 2; + +// Unit isn't local, give function to machine where it is. +if !(local _unit) exitWith { + [_this, "ace_medical_fnc_setHitPointDamage", _unit] call EFUNC(common,execRemoteFnc); +}; + +// Check if overall damage adjustment is disabled +if (count _this > 3 && {_this select 3}) exitWith { + _unit setHitPointDamage [_selection, _damage]; +}; + +_selections = [ + "HitHead", + "HitBody", + "HitLeftArm", + "HitRightArm", + "HitLeftLeg", + "HitRightLeg" +]; + +if !(_selection in _selections) exitWith { + _unit setHitPointDamage [_selection, _damage]; +}; + +GVAR(unit) = _unit; +_damages = [_selections, {GVAR(unit) getHitPointDamage _this}] call EFUNC(common,map); + +_damageOld = damage _unit; +_damageSumOld = 0; +{ + _damageSumOld = _damageSumOld + _x; +} forEach _damages; +_damageSumOld = _damageSumOld max 0.001; + +_damages set [_selections find _selection, _damage]; + +_damageSumNew = 0; +{ + _damageSumNew = _damageSumNew + _x; +} forEach _damages; + +_damageNew = _damageSumNew / 6; +if (_damageOld > 0) then { + _damageNew = _damageOld * (_damageSumNew / _damageSumOld); +}; + +// @todo: prevent death + +_unit setDamage _damageNew; + +{ + _damageFinal = (_damages select _forEachIndex); + _unit setHitPointDamage [_x, _damageFinal]; +} forEach _selections; diff --git a/addons/medical/functions/fnc_setMedicRole.sqf b/addons/medical/functions/fnc_setMedicRole.sqf deleted file mode 100644 index 5c8a67539a..0000000000 --- a/addons/medical/functions/fnc_setMedicRole.sqf +++ /dev/null @@ -1,23 +0,0 @@ -/** - * fn_setMedicRole.sqf - * @Descr: Register a unit as a medic - * @Author: Glowbal - * - * @Arguments: [unit OBJECT (Any unit of type CAManBase), value NUMBER (0 is normal. 1 or above is medic)] - * @Return: void - * @PublicAPI: true - */ - -#include "script_component.hpp" - -private ["_unit","_value"]; -_unit = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; -_value = [_this, 1, false,[false]] call BIS_fnc_param; - -if (_unit isKindOf "CaManBase") then { - if (_value) then { - _unit setvariable [QGVAR(medicClass), 1, true]; - } else { - _unit setvariable [QGVAR(medicClass), 0, true]; - } -}; diff --git a/addons/medical/functions/fnc_setTriageStatus.sqf b/addons/medical/functions/fnc_setTriageStatus.sqf deleted file mode 100644 index c37a636c14..0000000000 --- a/addons/medical/functions/fnc_setTriageStatus.sqf +++ /dev/null @@ -1,21 +0,0 @@ -/** - * fn_setTriageStatus.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit","_caller","_type","_activity","_status"]; - -_unit = _this select 0; -_status = _this select 1; - -if (!local _unit) exitwith { - [_this, QUOTE(FUNC(setTriageStatus)), _unit] call EFUNC(common,execRemoteFnc); -}; -[_unit,QGVAR(triageLevel),_status] call EFUNC(common,setDefinedVariable); \ No newline at end of file diff --git a/addons/medical/functions/fnc_setUnconsciousState.sqf b/addons/medical/functions/fnc_setUnconscious.sqf similarity index 52% rename from addons/medical/functions/fnc_setUnconsciousState.sqf rename to addons/medical/functions/fnc_setUnconscious.sqf index 3f53e629e9..890f4d2787 100644 --- a/addons/medical/functions/fnc_setUnconsciousState.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -1,88 +1,93 @@ -/** - * fn_setUnconsciousState.sqf - * @Descr: Sets a unit in the unconscious state - * @Author: Glowbal +/* + * Author: Glowbal + * Sets a unit in the unconscious state. * - * @Arguments: [unit OBJECT] - * @Return: void - * @PublicAPI: true + * Arguments: + * 0: The unit that will be put in an unconscious state + * + * ReturnValue: + * nil + * + * Public: yes */ #include "script_component.hpp" -private ["_unit", "_animState", "_dAnim"]; +private ["_unit", "_set", "_animState", "_originalPos", "_captiveSwitch", "_startingTime","_minWaitingTime"]; _unit = _this select 0; +_set = if (count _this > 1) then {_this select 1} else {true}; -if !([_unit] call FUNC(canGoUnconsciousState)) exitwith{ - [format["Exit setUnconscious: %1", _this]] call EFUNC(common,debug); +if !(_set) exitwith { + _unit setvariable ["ACE_isUnconscious", false,true]; }; +if !(!(isNull _unit) && {(_unit isKindOf "CaManBase") && ([_unit] call EFUNC(common,isAwake))}) exitwith{}; + // We only want this function to work on local machines if (!local _unit) exitwith { - [[_unit], QUOTE(FUNC(setUnconsciousState)), _unit, false] call EFUNC(common,execRemoteFnc); - [format["Exit setUnconscious: %1", _this]] call EFUNC(common,debug); + [[_unit], QUOTE(DFUNC(setUnconscious)), _unit, false] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ }; -// get rid of the object we are carrying, before we go unconscious. +// Get rid of the object we are carrying, before we go unconscious. [_unit, ObjNull, [0,0,0]] call EFUNC(common,carryObj); // Set the unit in the unconscious state. -_unit setvariable ["ACE_isUnconscious",true,true]; +_unit setvariable ["ACE_isUnconscious", true, true]; _unit setUnconscious true; // If a unit has the launcher out, it will sometimes start selecting the primairy weapon while unconscious, // therefor we force it to select the primairy weapon before going unconscious -[_unit] call FUNC(setWeaponsCorrectUnconscious); - +if ((vehicle _unit) isKindOf "StaticWeapon") then { + moveOut _unit; + unassignVehicle _unit; + //_unit action ["eject", vehicle _unit]; +}; +if (animationState _unit in ["ladderriflestatic","laddercivilstatic"]) then { + _unit action ["ladderOff", (nearestBuilding _unit)]; +}; +if (vehicle _unit == _unit) then { + if (primaryWeapon _unit == "") then { + _unit addWeapon "ACE_fakeWeapon"; + }; + _unit selectWeapon (primaryWeapon _unit); + _unit switchMove ""; + _unit playmoveNow ""; +}; // We are storing the current animation, so we can use it later on when waking the unit up inside a vehicle _animState = animationState _unit; _originalPos = unitPos _unit; -// Handle the on screen effects -if (isPlayer _unit) then { - [] call EFUNC(common,closeAllDialogs_f); - [true] call FUNC(effectBlackOut); - ["unconscious", true] call EFUNC(common,setDisableUserInputStatus); - [false] call EFUNC(common,setVolume_f); -} else { - _unit setUnitPos "DOWN"; - [_unit, true] call EFUNC(common,disableAI_F); -}; +_unit setUnitPos "DOWN"; +[_unit, true] call EFUNC(common,disableAI); // So the AI does not get stuck, we are moving the unit to a temp group on its own. -[_unit, true, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide_f); +[_unit, true, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); -_captiveSwitch = [_unit, true] call EFUNC(common,setCaptiveSwitch); +[_unit, QGVAR(unconscious), true] call EFUNC(common,setCaptivityStatus); [_unit, [_unit] call EFUNC(common,getDeathAnim), 1, true] call EFUNC(common,doAnimation); - -[format["Unit moving into unconscious: %1", _this]] call EFUNC(common,debug); - - _startingTime = time; _minWaitingTime = (round(random(10)+5)); [{ - private ["_unit", "_vehicleOfUnit","_lockSwitch","_minWaitingTime", "_oldAnimation", "_captiveSwitch"]; + private ["_unit", "_vehicleOfUnit","_minWaitingTime", "_oldAnimation", "_captiveSwitch", "_hasMovedOut"]; _args = _this select 0; _unit = _args select 0; _oldAnimation = _args select 1; - _captiveSwitch = _args select 2; - _originalPos = _args select 3; - _startingTime = _args select 4; - _minWaitingTime = _args select 5; - + _originalPos = _args select 2; + _startingTime = _args select 3; + _minWaitingTime = _args select 4; + _hasMovedOut = _args select 5; // Since the unit is no longer alive, get rid of this PFH. if (!alive _unit) exitwith { - [format["%1 Unit no longer alive, exiting"], _unit] call EFUNC(common,debug); // EXIT PFH [(_this select 1)] call cba_fnc_removePerFrameHandler; }; // In case the unit is no longer in an unconscious state, we are going to check if we can already reset the animation - if !([_unit] call FUNC(isUnconscious)) exitwith { - [format["%1 Unit no longer unconscious, handling exit and animation"], _unit] call EFUNC(common,debug); + if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith { + // TODO, handle this with carry instead, so we can remove the PFH here. // Wait until the unit isn't being carried anymore, so we won't end up with wierd animations if !([_unit] call EFUNC(common,beingCarried)) then { if (vehicle _unit == _unit) then { @@ -96,35 +101,30 @@ _minWaitingTime = (round(random(10)+5)); // EXIT PFH [(_this select 1)] call cba_fnc_removePerFrameHandler; }; + if (!_hasMovedOut) then { + // Reset the unit back to the previous captive state. + [_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus); + + // Swhich the unit back to its original group + [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); + + [_unit, false] call EFUNC(common,disableAI_F); + _unit setUnitPos _originalPos; // This is not position but stance (DOWN, MIDDLE, UP) + + _unit setUnconscious false; + ["medical_onUnconscious", [_unit], [_unit, false]] call EFUNC(common,targetEvent); + // ensure this statement runs only once + _args set [6, true]; + }; }; + // Ensure we are waiting at least a minimum period before checking if we can wake up the unit again, allows for temp knock outs if ((time - _startingTime) >= _minWaitingTime) exitwith { // Wait until the unit is no longer unconscious if (!([_unit] call FUNC(getUnconsciousCondition))) then { - [format["%1 No unconscious condition valid anymore, moving uit out of unconsciousState"], _unit] call EFUNC(common,debug); - // Reset the unit back to the previous captive state. - if (_captiveSwitch) then { - [_unit, false] call FUNC(setCaptiveSwitch); - }; - _unit setUnconscious false; - - // Swhich the unit back to its original group - [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide_f); - - // Reset any visual and audio effects for players, or enable everything again for AI. - if (isPlayer _unit) then { - [false] call FUNC(effectBlackOut); - [true] call EFUNC(common,setVolume_f); - ["unconscious", false] call EFUNC(common,setDisableUserInputStatus); - } else { - [_unit, false] call EFUNC(common,disableAI_F); - _unit setUnitPos _originalPos; // This is not position but stance (DOWN, MIDDLE, UP) - }; - // Move unit out of unconscious state _unit setvariable ["ACE_isUnconscious", false, true]; - [format["%1 Unit no longer unconsicous"], _unit] call EFUNC(common,debug); }; }; @@ -132,8 +132,8 @@ _minWaitingTime = (round(random(10)+5)); // TODO: Might no longer be necessary: Have to test this in MP. if (vehicle _unit == _unit && {animationState _unit != "deadState" && animationState _unit != "unconscious"} && {(isNull ([_unit] call EFUNC(common,getCarriedBy)))} && (time - _startingTime >= 0.5)) then { [_unit,([_unit] call FUNC(getDeathAnim)), 1, true] call EFUNC(common,doAnimation); // Reset animations if unit starts doing wierd things. - [format["%1 Had to reset an animation for unconscious"], _unit] call EFUNC(common,debug); }; -}, 0.1, [_unit,_animState, _captiveSwitch, _originalPos, _startingTime, _minWaitingTime] ] call CBA_fnc_addPerFrameHandler; +}, 0.1, [_unit,_animState, _originalPos, _startingTime, _minWaitingTime, false] ] call CBA_fnc_addPerFrameHandler; +["medical_onUnconscious", [_unit], [_unit, true]] call EFUNC(common,targetEvent); diff --git a/addons/medical/functions/fnc_setWeaponsCorrectUnconscious.sqf b/addons/medical/functions/fnc_setWeaponsCorrectUnconscious.sqf deleted file mode 100644 index bdd4fde460..0000000000 --- a/addons/medical/functions/fnc_setWeaponsCorrectUnconscious.sqf +++ /dev/null @@ -1,38 +0,0 @@ -/** - * fn_setWeaponsCorrectUnconscious.sqf - * @Descr: Ensures the weapon of a unit is selected correctly for the unconscious state. Prefents wierd animation behaviour - * @Author: Glowbal - * - * @Arguments: [unit OBJECT] - * @Return: void - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit"]; -_unit = _this select 0; - -if ((vehicle _unit) isKindOf "StaticWeapon") then { - moveOut _unit; - unassignVehicle _unit; - //unassignVehicle _unit; - //_unit action ["eject", vehicle _unit]; -}; -if (vehicle _unit == _unit) then { - if (currentWeapon _unit == secondaryWeapon _unit) then { - reload _unit; - }; -}; - -if (animationState _unit in ["ladderriflestatic","laddercivilstatic"]) then { - _unit action ["ladderOff", (nearestBuilding _unit)]; -}; - -if (vehicle _unit == _unit) then { - if (currentWeapon _unit == secondaryWeapon _unit) then { - _unit selectWeapon (primaryWeapon _unit); - _unit switchMove ""; - _unit playmoveNow ""; - }; -}; diff --git a/addons/medical/functions/fnc_treatment.sqf b/addons/medical/functions/fnc_treatment.sqf new file mode 100644 index 0000000000..cf5115fea5 --- /dev/null +++ b/addons/medical/functions/fnc_treatment.sqf @@ -0,0 +1,138 @@ +/* + * Author: Glowbal, KoffeinFlummi + * Starts the treatment process + * + * Arguments: + * 0: The medic + * 1: The patient + * 2: SelectionName + * 3: Treatment classname + * + * Return Value: + * Succesful treatment started + * + * Public: Yes + */ + +#include "script_component.hpp" + +private ["_caller", "_target", "_selectionName", "_className", "_config", "_availableLevels", "_medicRequired", "_items", "_locations", "_return", "_callbackSuccess", "_callbackFailure", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return"]; +_caller = _this select 0; +_target = _this select 1; +_selectionName = _this select 2; +_className = _this select 3; + +if !(_target isKindOf "CAManBase") exitWith {false}; + +_config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className); +if (GVAR(level) >= 2) then { + _config = (configFile >> "ACE_Medical_Actions" >> "Advanced" >> _className); +}; +if !(isClass _config) exitwith {false}; + +// Check for required class +_medicRequired = getNumber (_config >> "requiredMedic"); +if !([_caller, _medicRequired] call FUNC(isMedic)) exitwith {false}; + +// Check item +_items = getArray (_config >> "items"); +if (count _items > 0 && {!([_caller, _target, _items] call FUNC(hasItems))}) exitwith {false}; + +// Check allowed locations +_locations = getArray (_config >> "treatmentLocations"); + +_return = true; +if (isText (_config >> "Condition")) then { + _condition = getText(_config >> "condition"); + if (_condition != "") then { + if (isnil _condition) then { + _condition = compile _condition; + } else { + _condition = missionNamespace getvariable _condition; + }; + if (typeName _condition == "BOOL") then { + _return = _condition; + } else { + _return = [_caller, _target, _selectionName, _className] call _condition; + }; + }; +}; +if (!_return) exitwith {false}; + +if ("All" in _locations) then { + _return = true; +} else { + { + if (_x == "field") exitwith {_return = true;}; + if (_x == "MedicalFacility" && {([_caller] call FUNC(isInMedicalFacility)) || ([_target] call FUNC(isInMedicalFacility))}) exitwith {_return = true;}; + if (_x == "MedicalVehicle" && {([vehicle _caller] call FUNC(isMedicalVehicle)) || ([vehicle _target] call FUNC(isMedicalVehicle))}) exitwith {_return = true;}; + }foreach _locations; +}; + +if !(_return) exitwith {false}; + + +// Parse the config for the progress callback +_callbackProgress = getText (_config >> "callbackProgress"); +if (_callbackProgress == "") then { + _callbackProgress = "true"; +}; +if (isNil _callbackProgress) then { + _callbackProgress = compile _callbackProgress; +} else { + _callbackProgress = missionNamespace getvariable _callbackProgress; +}; + +// Patient Animation +_patientAnim = getText (_confg >> "animationPatient"); +if (_caller != _target && {vehicle _target == _target} && {_patientAnim != ""}) then { + [_target, _patientAnim] call EFUNC(common,doAnimation); +}; + +// Player Animation +_callerAnim = [getText (_config >> "animationCaller"), getText (_config >> "animationCallerProne")] select (stance _caller == "PRONE"); +if (_caller == _target) then { + _callerAnim = [getText (_config >> "animationCallerSelf"), getText (_config >> "animationCallerSelfProne")] select (stance _caller == "PRONE"); +}; +_wpn = ["non", "rfl", "pst"] select (["", primaryWeapon _caller, handgunWeapon _caller] find (currentWeapon _caller)); +_callerAnim = [_callerAnim, "[wpn]", _wpn] call CBA_fnc_replace; +if (vehicle _caller == _caller && {_callerAnim != ""}) then { + if (primaryWeapon _caller == "") then { + _caller addWeapon "ACE_FakePrimaryWeapon"; + }; + _caller selectWeapon (primaryWeapon _caller); + _caller setvariable [QGVAR(treatmentPrevAnimCaller), animationState _caller]; + [_caller, _callerAnim] call EFUNC(common,doAnimation); +}; + +// Start treatment +_treatmentTime = getNumber (_config >> "treatmentTime"); +[ + _treatmentTime, + [_caller, _target, _selectionName, _className, _items], + DFUNC(treatment_success), + DFUNC(treatment_failure), + getText (_config >> "displayNameProgress"), + _callbackProgress +] call EFUNC(common,progressBar); + +// Display Icon +_iconDisplayed = getText (_config >> "actionIconPath"); +if (_iconDisplayed != "") then { + [QGVAR(treatmentActionIcon), true, _iconDisplayed, [1,1,1,1], getNumber(_config >> "actionIconDisplayTime")] call EFUNC(common,displayIcon); +}; + +// handle display of text/hints +_displayText = ""; +if (_target != _caller) then { + _displayText = getText(_config >> "displayTextOther"); +} else { + _displayText = getText(_config >> "displayTextSelf"); +}; + +if (_displayText != "") then { + ["displayTextStructured", [_caller], [[_displayText, [_caller] call EFUNC(common,getName), [_target] call EFUNC(common,getName)], 1.5, _caller]] call EFUNC(common,targetEvent); +}; + + +true; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf b/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf new file mode 100644 index 0000000000..ee3f51f549 --- /dev/null +++ b/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf @@ -0,0 +1,29 @@ +/* + * Author: Glowbal + * Callback for the CPR treatment action on success. + * + * Arguments: + * 0: The medic + * 1: The patient + * 2: SelectionName + * 3: Treatment classname + * + * Return Value: + * Succesful treatment started + * + * Public: Yes + */ + +#include "script_component.hpp" + +private ["_caller", "_target", "_selectionName", "_className", "_items", "_removeItem"]; +_caller = _this select 0; +_target = _this select 1; +_selectionName = _this select 2; +_className = _this select 3; +_items = _this select 4; + +// TODO replace by event system instead +[[_caller, _target], QUOTE(DFUNC(treatmentAdvanced_CPRLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ + +true; diff --git a/addons/medical/functions/fnc_handleTreatment_Action_CPRLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_CPRLocal.sqf similarity index 56% rename from addons/medical/functions/fnc_handleTreatment_Action_CPRLocal.sqf rename to addons/medical/functions/fnc_treatmentAdvanced_CPRLocal.sqf index 537fd85088..4bb14e1139 100644 --- a/addons/medical/functions/fnc_handleTreatment_Action_CPRLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_CPRLocal.sqf @@ -1,11 +1,15 @@ -/** - * fnc_handleTreatment_Action_CPRLocal.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal + * local Callback for the CPR treatment action on success. * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * Arguments: + * 0: The medic + * 1: The patient + * + * Return Value: + * Succesful treatment started + * + * Public: Yes */ #include "script_component.hpp" @@ -14,7 +18,6 @@ private ["_caller","_target", "_n"]; _caller = _this select 0; _target = _this select 1; - _n = _target getvariable [QEGVAR(common,ENABLE_REVIVE_COUNTER),0]; if (_n > 0) then { _n = _n - random(20); @@ -25,11 +28,9 @@ if (_n > 0) then { }; if (random(1)>= 0.6) exitwith { - [_caller,"CPR Success"] call cse_fnc_sendHintTo; _target setvariable [QGVAR(inCardiacArrest), nil,true]; - - [_target, QGVAR(heartRate),40] call EFUNC(common,setDefinedVariable); - [_target, QGVAR(bloodPressure),[50,70]] call EFUNC(common,setDefinedVariable); + _target setvariable [QGVAR(heartRate), 40]; + _target setvariable [QGVAR(bloodPressure), [50,70]]; }; -true; \ No newline at end of file +true; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf b/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf new file mode 100644 index 0000000000..91d7678f93 --- /dev/null +++ b/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf @@ -0,0 +1,42 @@ +/* + * Author: Glowbal + * IV Treatment callback + * + * Arguments: + * 0: The medic + * 1: The patient + * 2: SelectionName + * 3: Treatment classname + * + * + * Return Value: + * Succesful treatment started + * + * Public: Yes + */ + +#include "script_component.hpp" + +private ["_caller", "_target", "_selectionName", "_className", "_items", "_removeItem"]; +_caller = _this select 0; +_target = _this select 1; +_selectionName = _this select 2; +_className = _this select 3; +_items = _this select 4; +_specificSpot = if (count _this > 5) then {_this select 5} else {-1}; + +if (count _items == 0) exitwith {}; + +if ([_caller, _target, _items] call FUNC(useItems)) then { + [[_target, _className, _selectionName, _specificSpot], QUOTE(DFUNC(treatmentAdvanced_bandageLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ +/* { + if (_x != "") then { + [_target, _x] call FUNC(addToTriageCard); + }; + }foreach _items;*/ + + ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _className, true]] call ace_common_fnc_localEvent; + [_target, "activity", "STR_ACE_HAS_BANDAGED_ACTIVITY", [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); +}; + +true; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf new file mode 100644 index 0000000000..39eab67fb8 --- /dev/null +++ b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf @@ -0,0 +1,104 @@ +/* + * Author: Glowbal + * Handles the bandage of a patient. + * + * Arguments: + * 0: The patient + * 1: Treatment classname + * + * + * Return Value: + * Succesful treatment started + * + * Public: Yes + */ + +#include "script_component.hpp" + +private ["_target", "_bandage", "_part", "_selectionName", "_openWounds", "_config", "_effectiveness","_mostEffectiveInjury", "_mostEffectiveSpot", "_woundEffectivenss", "_mostEffectiveInjury", "_impact", "_exit"]; +_target = _this select 0; +_bandage = _this select 1; +_selectionName = _this select 2; +_specificClass = if (count _this > 3) then {_this select 3} else { -1 }; + +// Ensure it is a valid bodypart +_part = [_selectionName] call FUNC(selectionNameToNumber); +if (_part < 0) exitwith {}; + +// Get the open wounds for this unit +_openWounds = _target getvariable [QGVAR(openWounds), []]; +if (count _openWounds == 0) exitwith {}; // nothing to do here! + +// Get the default effectiveness for the used bandage +_config = (ConfigFile >> "ACE_Medical_Advanced" >> "Treatment" >> "Bandaging"); +_effectiveness = getNumber (_config >> "effectiveness"); +if (isClass (_config >> _bandage)) then { + _config = (_config >> _bandage); + if (isNumber (_config >> "effectiveness")) then { _effectiveness = getNumber (_config >> "effectiveness");}; +}; + +// Figure out which injury for this bodypart is the best choice to bandage +_mostEffectiveSpot = 0; +_effectivenessFound = -1; +_mostEffectiveInjury = _openWounds select 0; +_exit = false; +{ + // Only parse injuries that are for the selected bodypart. + if (_x select 2 == _part) then { + _woundEffectivenss = _effectiveness; + _classID = (_x select 1); + + // Select the classname from the wound classname storage + _className = GVAR(woundClassNames) select _classID; + // Check if this wound type has attributes specified for the used bandage + if (isClass (_config >> _className)) then { + // Collect the effectiveness from the used bandage for this wound type + _woundTreatmentConfig = (_config >> _className); + if (isNumber (_woundTreatmentConfig >> "effectiveness")) then { + _woundEffectivenss = getNumber (_woundTreatmentConfig >> "effectiveness"); + }; + }; + + if (_specificClass == _classID) exitwith { + _effectivenessFound = _woundEffectivenss; + _mostEffectiveSpot = _foreachIndex; + _mostEffectiveInjury = _x; + _exit = true; + }; + + // Check if this is the currently most effective found. + if (_woundEffectivenss * ((_x select 4) * (_x select 3)) > _effectivenessFound * ((_mostEffectiveInjury select 4) * (_mostEffectiveInjury select 3))) then { + _effectivenessFound = _woundEffectivenss; + _mostEffectiveSpot = _foreachIndex; + _mostEffectiveInjury = _x; + }; + }; + if (_exit) exitwith {}; +}foreach _openWounds; + +if (_effectivenessFound == -1) exitwith {}; // Seems everything is patched up on this body part already.. + + +// TODO refactor this part +// Find the impact this bandage has and reduce the amount this injury is present +_impact = if ((_mostEffectiveInjury select 3) >= _effectivenessFound) then {_effectivenessFound} else { (_mostEffectiveInjury select 3) }; +_mostEffectiveInjury set [ 3, ((_mostEffectiveInjury select 3) - _effectivenessFound) max 0]; +_openWounds set [_mostEffectiveSpot, _mostEffectiveInjury]; + +_target setvariable [QGVAR(openWounds), _openWounds]; + +["medical_propagateWound", [_unit, _mostEffectiveInjury]] call EFUNC(common,globalEvent); + +// Handle the reopening of bandaged wounds +if (_impact > 0) then { + // TODO handle reopening of bandaged wounds + // [_target, _impact, _part,_highestSpot, _removeItem] call FUNC(handleBandageOpening); +}; + +// If all wounds have been bandaged, we will reset all damage to 0, so the unit is not showing any blood on the model anymore. +if (count _openWounds == 0) then { + _target setDamage 0; + // TODO also set hitpoints to 0 +}; + +true; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf new file mode 100644 index 0000000000..807be828e8 --- /dev/null +++ b/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf @@ -0,0 +1,23 @@ +/** + * fn_heal.sqf + * @Descr: N/A + * @Author: Glowbal + * + * @Arguments: [] + * @Return: + * @PublicAPI: false + */ + +#include "script_component.hpp" + +private ["_unit", "_caller", "_selectionName", "_className", "_items"]; +_caller = _this select 0; +_target = _this select 1; +_selectionName = _this select 2; +_className = _this select 3; +_items = _this select 4; + +// TODO replace by event system +[[_caller, _target], QUOTE(DFUNC(treatmentAdvanced_fullHealLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ + +true; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf new file mode 100644 index 0000000000..5125a93bd0 --- /dev/null +++ b/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf @@ -0,0 +1,68 @@ +/** + * fn_healLocal.sqf + * @Descr: N/A + * @Author: Glowbal + * + * @Arguments: [] + * @Return: + * @PublicAPI: false + */ + +#include "script_component.hpp" + +private ["_unit", "_caller", "_allUsedMedication"]; +_unit = _this select 0; +_caller = _this select 1; + +if (alive _unit) exitwith { + + _unit setVariable [QGVAR(pain), 0, true]; + _unit setVariable [QGVAR(morphine), 0, true]; + _unit setVariable [QGVAR(bloodVolume), 100, true]; + + // tourniquets + _unit setvariable [QGVAR(tourniquets), [0,0,0,0,0,0], true]; + + // wounds and injuries + _unit setvariable [QGVAR(openWounds), [], true]; + _unit setVariable [QGVAR(internalWounds), [], true]; + + // vitals + _unit setVariable [QGVAR(heartRate), 80]; + _unit setvariable [QGVAR(heartRateAdjustments), []]; + _unit setvariable [QGVAR(bloodPressure), [80, 120]]; + _unit setVariable [QGVAR(peripheralResistance), 100]; + + // fractures + _unit setVariable [QGVAR(fractures), []]; + + // IVs + _unit setVariable [QGVAR(salineIVVolume), 0]; + _unit setVariable [QGVAR(plasmaIVVolume), 0]; + _unit setVariable [QGVAR(bloodIVVolume), 0]; + + // damage storage + _unit setvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0], true]; + + // airway + _unit setvariable [QGVAR(airwayStatus), 0, true]; + _unit setVariable [QGVAR(airwayOccluded), false, true]; + _unit setvariable [QGVAR(airwayCollapsed), false, true]; + + // generic medical admin + _unit setvariable [QGVAR(addedToUnitLoop), false, true]; + _unit setvariable [QGVAR(inCardiacArrest), false, true]; + _unit setVariable [QGVAR(isUnconscious), false, true]; + _unit setvariable [QGVAR(hasLostBlood), false, true]; + _unit setvariable [QGVAR(isBleeding), false, true]; + _unit setvariable [QGVAR(hasPain), false, true]; + + // medication + _allUsedMedication = _unit getVariable [QGVAR(allUsedMedication), []]; + { + _unit setvariable [_x select 0, nil]; + }foreach _allUsedMedication; + + // Resetting damage + _unit setDamage 0; +}; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf b/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf new file mode 100644 index 0000000000..38f522bc7d --- /dev/null +++ b/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf @@ -0,0 +1,41 @@ +/* + * Author: Glowbal + * IV Treatment callback + * + * Arguments: + * 0: The medic + * 1: The patient + * 2: SelectionName + * 3: Treatment classname + * + * + * Return Value: + * Succesful treatment started + * + * Public: Yes + */ + +#include "script_component.hpp" + +private ["_caller", "_target", "_selectionName", "_className", "_items", "_removeItem"]; +_caller = _this select 0; +_target = _this select 1; +_selectionName = _this select 2; +_className = _this select 3; +_items = _this select 4; + +if (count _items == 0) exitwith {}; + +if ([_caller, _target, _items] call FUNC(useItems)) then { + [[_target, _className], QUOTE(DFUNC(treatmentAdvanced_medicationLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ + { + if (_x != "") then { + [_target, _x] call FUNC(addToTriageCard); + }; + }foreach _items; + + ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _className, true]] call ace_common_fnc_localEvent; + [_target, "activity", "STR_ACE_HAS_MEDICATION_ACTIVITY", [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); +}; + +true; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf new file mode 100644 index 0000000000..a3d3e26d1d --- /dev/null +++ b/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf @@ -0,0 +1,89 @@ +/* + * Author: Glowbal + * Handles the medication given to a patient. + * + * Arguments: + * 0: The patient + * 1: Treatment classname + * + * + * Return Value: + * Succesful treatment started + * + * Public: Yes + */ + +#include "script_component.hpp" + +private ["_target", "_className", "_currentInSystem", "_medicationConfig", "_painReduce", "_hrIncreaseLow", "_hrIncreaseNorm", "_hrIncreaseHigh", "_maxDose", "_inCompatableMedication", "_timeInSystem", "_heartRate", "_pain", "_resistance", "_hrCallback"]; +_target = _this select 0; +_className = _this select 1; + +// We have added a new dose of this medication to our system, so let's increase it +_varName = format[QGVAR(%1_inSystem), _className]; +_currentInSystem = _target getvariable [_varName, 0]; +_currentInSystem = _currentInSystem + 1; +_target setvariable [_varName, _currentInSystem]; + +// Find the proper attributes for the used medication +_medicationConfig = (configFile >> "ACE_Medical_Advanced" >> "Treatment" >> "Medication"); +_painReduce = getNumber (_medicationConfig >> "painReduce"); +_hrIncreaseLow = getArray (_medicationConfig >> "hrIncreaseLow"); +_hrIncreaseNorm = getArray (_medicationConfig >> "hrIncreaseNormal"); +_hrIncreaseHigh = getArray (_medicationConfig >> "hrIncreaseHigh"); +_timeInSystem = getNumber (_medicationConfig >> "timeInSystem"); +_maxDose = getNumber (_medicationConfig >> "maxDose"); +_viscosityChange = getNumber (_medicationConfig >> "viscosityChange"); +_hrCallback = getText (_medicationConfig >> "hrCallback"); + +_inCompatableMedication = []; +if (isClass (_medicationConfig >> _className)) then { + _medicationConfig = (_medicationConfig >> _className); + if (isNumber (_medicationConfig >> "painReduce")) then { _painReduce = getNumber (_medicationConfig >> "painReduce");}; + if (isArray (_medicationConfig >> "hrIncreaseLow")) then { _hrIncreaseLow = getArray (_medicationConfig >> "hrIncreaseLow"); }; + if (isArray (_medicationConfig >> "hrIncreaseNormal")) then { _hrIncreaseNorm = getArray (_medicationConfig >> "hrIncreaseNormal"); }; + if (isArray (_medicationConfig >> "hrIncreaseHigh")) then { _hrIncreaseHigh = getArray (_medicationConfig >> "hrIncreaseHigh"); }; + if (isNumber (_medicationConfig >> "timeInSystem")) then { _timeInSystem = getNumber (_medicationConfig >> "timeInSystem"); }; + if (isNumber (_medicationConfig >> "maxDose")) then { _maxDose = getNumber (_medicationConfig >> "maxDose"); }; + if (isArray (_medicationConfig >> "inCompatableMedication")) then { _inCompatableMedication = getArray (_medicationConfig >> "inCompatableMedication"); }; + if (isNumber (_medicationConfig >> "viscosityChange")) then { _viscosityChange = getNumber (_medicationConfig >> "viscosityChange"); }; + if (isText (_medicationConfig >> "hrCallback")) then { _hrCallback = getText (_medicationConfig >> "hrCallback"); }; +}; +if (isNil _hrCallback) then { + _hrCallback = compile _hrCallback; +} else { + _hrCallback = missionNamespace getvariable _hrCallback; +}; + +// Adjust the heart rate based upon config entry +_heartRate = _target getvariable [QGVAR(heartRate), 70]; +if (alive _target) then { + if (_heartRate > 0) then { + if (_heartRate <= 45) then { + [_target, ((_hrIncreaseLow select 0) + random((_hrIncreaseLow select 1))), (_hrIncreaseLow select 2), _hrCallback] call FUNC(addHeartRateAdjustment); + } else { + if (_heartRate > 120) then { + [_target, ((_hrIncreaseHigh select 0) + random((_hrIncreaseHigh select 1))), (_hrIncreaseHigh select 2), _hrCallback] call FUNC(addHeartRateAdjustment); + } else { + [_target, ((_hrIncreaseNorm select 0) + random((_hrIncreaseNorm select 1))), (_hrIncreaseNorm select 2), _hrCallback] call FUNC(addHeartRateAdjustment); + }; + }; + }; +}; + +// Reduce the pain level +_pain = _target getvariable [QGVAR(pain), 0]; +_pain = _pain * _painReduce; +if (_pain <= 0) then { + _pain = 0; +}; +_target setvariable [QGVAR(pain), _pain]; + +_resistance = _unit getvariable [QGVAR(peripheralResistance), 100]; +_resistance = _resistance + _viscosityChange; +_unit setvariable [QGVAR(peripheralResistance), _resistance max 0]; + +// Call back to ensure that the medication is decreased over time +[_target, _classname, _varName, _maxDose, _timeInSystem, _inCompatableMedication, _viscosityChange] call FUNC(onMedicationUsage); + +true diff --git a/addons/medical/functions/fnc_treatmentBasic_bandage.sqf b/addons/medical/functions/fnc_treatmentBasic_bandage.sqf new file mode 100644 index 0000000000..39b910d6e4 --- /dev/null +++ b/addons/medical/functions/fnc_treatmentBasic_bandage.sqf @@ -0,0 +1,37 @@ +/* + * Author: KoffeinFlummi + * Callback when the bandaging treatment is complete + * + * Arguments: + * 0: The medic + * 1: The patient + * 2: Selection Name + * 3: Treatment classname + * + * Return Value: + * nil + * + * Public: No + */ + +#include "script_component.hpp" +#define BANDAGEHEAL 0.8 + +private ["_caller", "_target","_selection","_className","_target","_hitSelections","_hitPoints","_point"]; +_caller = _this select 0; +_target = _this select 1; +_selection = _this select 2; +_className = _this select 3; + +if (_selection == "all") then { + _target setDamage ((damage _target - BANDAGEHEAL) max 0); +} else { + _hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; + _hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; + _point = _hitPoints select (_hitSelections find _selection); + + _damage = ((_target getHitPointDamage _point) - BANDAGEHEAL) max 0; + [_target, _point, _damage] call FUNC(setHitPointDamage); + + // @todo: leg/arm damage - in setHitPointDamage? +}; diff --git a/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf b/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf new file mode 100644 index 0000000000..57563ad8fc --- /dev/null +++ b/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf @@ -0,0 +1,26 @@ +/* + * Author: KoffeinFlummi + * Callback when the bloodbag treatment is complete + * + * Arguments: + * 0: The medic + * 1: The patient + * 2: Selection Name + * 3: Treatment classname + * + * Return Value: + * nil + * + * Public: No + */ + +#include "script_component.hpp" +#define BLOODBAGHEAL 70 + +private ["_caller", "_target","_className","_blood"]; +_caller = _this select 0; +_target = _this select 1; +_className = _this select 3; + +_blood = ((_target getVariable [QGVAR(bloodVolume), 100]) + BLOODBAGHEAL) min 100; +_target setVariable [QGVAR(bloodVolume), _blood, true]; diff --git a/addons/medical/functions/fnc_treatmentBasic_epipen.sqf b/addons/medical/functions/fnc_treatmentBasic_epipen.sqf new file mode 100644 index 0000000000..e616327673 --- /dev/null +++ b/addons/medical/functions/fnc_treatmentBasic_epipen.sqf @@ -0,0 +1,25 @@ +/* + * Author: KoffeinFlummi + * Callback when the epipen treatment is complete + * + * Arguments: + * 0: The medic + * 1: The patient + * 2: Selection Name + * 3: Treatment classname + * + * Return Value: + * nil + * + * Public: No + */ + +#include "script_component.hpp" +#define BLOODBAGHEAL 70 + +private ["_caller", "_target","_className"]; +_caller = _this select 0; +_target = _this select 1; +_className = _this select 3; + +[_target, false] call FUNC(setUnconscious); diff --git a/addons/medical/functions/fnc_treatmentBasic_morphine.sqf b/addons/medical/functions/fnc_treatmentBasic_morphine.sqf new file mode 100644 index 0000000000..30c87b6f05 --- /dev/null +++ b/addons/medical/functions/fnc_treatmentBasic_morphine.sqf @@ -0,0 +1,33 @@ +/* + * Author: KoffeinFlummi + * Callback when the morphine treatment is complete + * + * Arguments: + * 0: The medic + * 1: The patient + * 2: Selection Name + * 3: Treatment classname + * + * Return Value: + * nil + * + * Public: No + */ + +#include "script_component.hpp" +#define MORPHINEHEAL 0.4 + +private ["_caller", "_target","_className","_blood","_morphine","_pain"]; +_caller = _this select 0; +_target = _this select 1; +_className = _this select 3; + +// reduce pain, pain sensitivity +_morphine = (_target getVariable [QGVAR(morphine), 0] + MORPHINEHEAL) min 1; +_target setVariable [QGVAR(morphine), _morphine, true]; +_pain = ((_target getVariable [QGVAR(pain), 0]) - MORPHINEHEAL) max 0; +_target setVariable [QGVAR(pain), _pain, true]; + +// @todo overdose + +// @todo pain, painkiller reduction diff --git a/addons/medical/functions/fnc_treatmentIV.sqf b/addons/medical/functions/fnc_treatmentIV.sqf new file mode 100644 index 0000000000..2581c1f0d2 --- /dev/null +++ b/addons/medical/functions/fnc_treatmentIV.sqf @@ -0,0 +1,35 @@ +/* + * Author: Glowbal + * Patient IV Treatment callback + * + * Arguments: + * 0: The medic + * 1: The patient + * 2: SelectionName + * 3: Treatment classname + * + * + * Return Value: + * + * + * Public: Yes + */ + +#include "script_component.hpp" + +private ["_caller", "_target", "_selectionName", "_className", "_items", "_removeItem", "_attributes"]; +_caller = _this select 0; +_target = _this select 1; +_selectionName = _this select 2; +_className = _this select 3; +_items = _this select 4; + +if (count _items == 0) exitwith {}; + +if ([_caller, _target, _items] call FUNC(useItems)) then { + _removeItem = _items select 0; + [[_target, _removeItem], QUOTE(DFUNC(treatmentIVLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ + ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _className, true]] call ace_common_fnc_localEvent; + [_target, _removeItem] call FUNC(addToTriageCard); + [_target, "activity", "STR_ACE_HAS_GIVEN_IV_ACTIVITY", [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); +}; diff --git a/addons/medical/functions/fnc_treatmentIVLocal.sqf b/addons/medical/functions/fnc_treatmentIVLocal.sqf new file mode 100644 index 0000000000..190498a8a6 --- /dev/null +++ b/addons/medical/functions/fnc_treatmentIVLocal.sqf @@ -0,0 +1,38 @@ +/* + * Author: Glowbal + * IV Treatment local callback + * + * Arguments: + * 0: The medic + * 1: Item used classname + * + * + * Return Value: + * nil + * + * Public: Yes + */ + +#include "script_component.hpp" + +private ["_target", "_ivItem", "_config", "_volumeAdded", "_typeOf", "_varName"]; +_target = _this select 0; +_ivItem = _this select 1; + +// Find the proper attributes for the used IV +_config = (configFile >> "ACE_Medical_Advanced" >> "Treatment" >> "IV"); +_volumeAdded = getNumber (_medicationConfig >> "volume"); +_typeOf = getText (_medicationConfig >> "type"); + +if (isClass (_config >> _className)) then { + _config = (_config >> _className); + if (isNumber (_config >> "volume")) then { _volumeAdded = getNumber (_config >> "volume");}; + if (isText (_config >> "type")) then { _typeOf = getText (_config >> "type"); }; +}; + +_varName = format["ACE_Medical_IVVolume_%1",_typeOf]; +_target setvariable [_varName, (_target getvariable [_varName, 0]) + _volumeAdded]; + +// TODO localization +//[_target,"treatment",format["%1 has given %4 a %2(%3ml)",[_caller] call EFUNC(common,getName),_attributes select 2,_attributes select 1,_target]] call FUNC(addActivityToLog); +//[_target,_removeItem] call FUNC(addToTriageList); diff --git a/addons/medical/functions/fnc_treatmentMutex.sqf b/addons/medical/functions/fnc_treatmentMutex.sqf deleted file mode 100644 index af27737b49..0000000000 --- a/addons/medical/functions/fnc_treatmentMutex.sqf +++ /dev/null @@ -1,23 +0,0 @@ -/** - * fn_treatmentMutex.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [client OBJECT, action STRING ("release" releases the mutex if it has been set. "set" for setting the mutex)] - * @Return: void - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit", "_set"]; - -_unit = _this select 0; -_set = if (count _this > 1) then {_this select 1} else {true}; - -if (_set) exitwith { - _unit setvariable [QGVAR(PerformingTreatmentMutex), time, true]; -}; - -// Max locked time is 2 minutes. -_unit setvariable [QGVAR(PerformingTreatmentMutex), -120, true]; \ No newline at end of file diff --git a/addons/medical/functions/fnc_treatmentTourniquet.sqf b/addons/medical/functions/fnc_treatmentTourniquet.sqf new file mode 100644 index 0000000000..cd1e9f72e7 --- /dev/null +++ b/addons/medical/functions/fnc_treatmentTourniquet.sqf @@ -0,0 +1,50 @@ +/* + * Author: Glowbal + * Apply a tourniquet to the patient + * + * Arguments: + * 0: The medic + * 1: The patient + * 2: SelectionName + * 3: Treatment classname + * + * + * Return Value: + * + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_caller","_target","_part","_selectionName","_removeItem", "_tourniquets", "_items", "_output"]; +_caller = _this select 0; +_target = _this select 1; +_selectionName = _this select 2; +_className = _this select 3; +_items = _this select 4; + +if (count _items == 0) exitwith {}; + +_part = [_selectionName] call FUNC(selectionNameToNumber); +if (_part == 0 || _part == 1) exitwith { + // [_caller,"You cannot apply a CAT on this body part!"] call EFUNC(common,sendHintTo); + false; +}; + +_tourniquets = _target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; +if ((_tourniquets select _part) > 0) exitwith { + _output = "There is already a tourniquet on this body part!"; // TODO localization + ["displayTextStructured", [_caller], [_output, 1.5, _caller]] call EFUNC(common,targetEvent); + false; +}; + +if ([_caller, _target, _items] call FUNC(useItems)) then { + _removeItem = _items select 0; + [[_target, _removeItem], QUOTE(DFUNC(treatmentTourniquetLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ + ["Medical_treatmentCompleted", [_caller, _target, _selectionName, _className, true]] call ace_common_fnc_localEvent; + [_target, _removeItem] call FUNC(addToTriageCard); + [_target, "activity", "STR_ACE_HAS_APPLIED_TOURNIQUET_ACTIVITY", [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); +}; + +true; diff --git a/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf new file mode 100644 index 0000000000..064761aea0 --- /dev/null +++ b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf @@ -0,0 +1,54 @@ +/* + * Author: Glowbal + * Apply a tourniquet to the patient, local callback. + * + * Arguments: + * 0: The patient + * 1: Item used classname + * + * Return Value: + * nil + * + * Public: No + */ +#include "script_component.hpp" + +private ["_target", "_tourniquetItem", "_part", "_tourniquets", "_applyingTo"]; +_target = _this select 0; +_tourniquetItem = _this select 1; + +//[_target,"treatment",format["%1 applied a tourniquet on %2",[_caller] call EFUNC(common,getName),_selectionName]] call FUNC(addActivityToLog); +//[_target,_removeItem] call FUNC(addToTriageList); +[_target] call FUNC(addToInjuredCollection); + + +_part = [_selectionName] call FUNC(selectionNameToNumber); + +// Place a tourniquet on the bodypart +_tourniquets = _target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; +_applyingTo = (_tourniquets select _part) + 1 + round(random(100)); +_tourniquets set[_part, _applyingTo]; +_target setvariable [QGVAR(tourniquets), _tourniquets, true]; + +[{ + private ["_args","_target","_applyingTo","_part", "_tourniquets"]; + _args = _this select 0; + _target = _args select 0; + _applyingTo = _args select 1; + _part = _args select 2; + _time = _args select 3; + if (!alive _target) exitwith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + _tourniquets = _target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; + if !((_tourniquets select _part) == _applyingTo) exitwith { + // Tourniquet has been removed + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + if (time - _time > 120) then { + _target setvariable [QGVAR(pain), (_target getvariable [QGVAR(pain), 0]) + 0.005]; + }; +}, 5, [_target, _applyingTo, _part, time] ] call CBA_fnc_addPerFrameHandler; + +true; diff --git a/addons/medical/functions/fnc_treatment_failure.sqf b/addons/medical/functions/fnc_treatment_failure.sqf new file mode 100644 index 0000000000..e60b4d9bad --- /dev/null +++ b/addons/medical/functions/fnc_treatment_failure.sqf @@ -0,0 +1,49 @@ +/* + * Author: KoffeinFlummi, Glowbal + * Callback when the treatment fails + * + * Arguments: + * 0: The medic + * 1: The patient + * 2: SelectionName + * 3: Treatment classname + * 4: Items available > + * + * Return Value: + * nil + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_caller", "_target","_selectionName","_className","_config","_callback"]; + +_args = _this select 0; +_caller = _args select 0; +_target = _args select 1; +_selectionName = _args select 2; +_className = _args select 3; + +if (primaryWeapon _caller == "ACE_FakePrimaryWeapon") then { + _caller removeWeapon "ACE_FakePrimaryWeapon"; +}; +[_caller, _caller getvariable [QGVAR(treatmentPrevAnimCaller), ""], 1] call EFUNC(common,doAnimation); +_caller setvariable [QGVAR(treatmentPrevAnimCaller), nil]; + +// @todo remove item? + +// Record specific callback +_config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className); +if (GVAR(level) >= 2) then { + _config = (configFile >> "ACE_Medical_Actions" >> "Advanced" >> _className); +}; + +_callback = getText (_config >> "callbackFailure"); +if (isNil _callback) then { + _callback = compile _callback; +} else { + _callback = missionNamespace getvariable _callback; +}; + +_args call _callback diff --git a/addons/medical/functions/fnc_treatment_success.sqf b/addons/medical/functions/fnc_treatment_success.sqf new file mode 100644 index 0000000000..fa553c168d --- /dev/null +++ b/addons/medical/functions/fnc_treatment_success.sqf @@ -0,0 +1,49 @@ +/* + * Author: KoffeinFlummi, Glowbal + * Callback when the treatment is completed + * + * Arguments: + * 0: The medic + * 1: The patient + * 2: SelectionName + * 3: Treatment classname + * 4: Items available > + * + * Return Value: + * nil + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_caller", "_target","_selectionName","_className","_config","_callback"]; + +_args = _this select 0; +_caller = _args select 0; +_target = _args select 1; +_selectionName = _args select 2; +_className = _args select 3; + +if (primaryWeapon _caller == "ACE_FakePrimaryWeapon") then { + _caller removeWeapon "ACE_FakePrimaryWeapon"; +}; +[_caller, _caller getvariable [QGVAR(treatmentPrevAnimCaller), ""], 1] call EFUNC(common,doAnimation); +_caller setvariable [QGVAR(treatmentPrevAnimCaller), nil]; + +// @todo remove item + +// Record specific callback +_config = (configFile >> "ACE_Medical_Actions" >> "Basic" >> _className); +if (GVAR(level) >= 2) then { + _config = (configFile >> "ACE_Medical_Actions" >> "Advanced" >> _className); +}; + +_callback = getText (_config >> "callbackSuccess"); +if (isNil _callback) then { + _callback = compile _callback; +} else { + _callback = missionNamespace getvariable _callback; +}; + +_args call _callback diff --git a/addons/medical/functions/fnc_updateActivityLog.sqf b/addons/medical/functions/fnc_updateActivityLog.sqf deleted file mode 100644 index 58179a8392..0000000000 --- a/addons/medical/functions/fnc_updateActivityLog.sqf +++ /dev/null @@ -1,44 +0,0 @@ -/** - * fn_updateActivityLog.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -_log = [GVAR(INTERACTION_TARGET)] call FUNC(getActivityLog); -_counter = 0; -lbclear 214; -{ - //[_caller,_moment,_activity,_type] - lbadd[214, _x select 1]; // moment - lbadd[214, _x select 0]; // name, caller - //lbadd[214, _x select 2]; // activity - lbSetData [214,_counter,_x select 2]; - - _counter = _counter + 1; -}foreach _log; -if (count _log < 1) then { - lbadd[214, "No Activity recorded.."]; - lbadd[214, ""]; -}; - -_log = [GVAR(INTERACTION_TARGET)] call FUNC(getQuickViewLog); -_counter = 0; -lbclear 215; -{ - - //[_caller,_moment,_activity,_type] - lbadd[215, _x select 1]; // moment - lbadd[215, _x select 0]; // name, caller - lbSetData [215,_counter,_x select 2]; - _counter = _counter + 1; -}foreach _log; -if (count _log < 1) then { - lbadd[215, "No Data recorded.."]; - lbadd[215, ""]; -}; diff --git a/addons/medical/functions/fnc_updateBodyImg.sqf b/addons/medical/functions/fnc_updateBodyImg.sqf deleted file mode 100644 index 194d2b6e08..0000000000 --- a/addons/medical/functions/fnc_updateBodyImg.sqf +++ /dev/null @@ -1,71 +0,0 @@ -/** - * fn_updateBodyImg.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_unit", "_interactionDialog", "_openWounds", "_part", "_total", "_amountOfWoundsSmall", "_amountOfWoundsMedium", "_amountOfWoundsLarge", "_bandagedWounds","_alphaLevel", "_damaged"]; -_openWounds = _this select 0; -_bandagedWounds = _this select 1; - -disableSerialization; -_interactionDialog = uiNamespace getvariable QGVAR(medicalMenu); -if (isnil "_interactionDialog") exitwith {}; - -_colorCalculationsOpenWounds = { - if (_total >0) then { - _green = 0.9; - _blue = 0.9; - for [{_i = 0},{ _i < round(_total)},{ _i = _i +1;}] do { - _green = _green - 0.75; - _blue = _blue - 0.75; - }; - if (_green < 0.0) then { - _green = 0.0; - _blue = 0.0; - }; - _damaged set[_part,true]; - }; -}; -_alphaLevel = 1.0; -_damaged = [false,false,false,false,false,false]; -_availableSelections = [50,51,52,53,54,55]; -_part = 0; - -{ - private ["_red", "_green", "_blue"]; - _amountOfWoundsSmall = (_x select 0); - _amountOfWoundsMedium = (_x select 1); - _amountOfWoundsLarge = (_x select 2); - _total = (_amountOfWoundsSmall) + _amountOfWoundsMedium + (_amountOfWoundsLarge); - - _red = 1; - _green = 1; - _blue = 1; - call _colorCalculationsOpenWounds; - (_interactionDialog displayCtrl (_availableSelections select _part)) ctrlSetTextColor [_red,_green,_blue,_alphaLevel]; - _part = _part + 1; -}foreach _openWounds; - -{ - if (!(_damaged select _foreachIndex)) then { - _amountOfWoundsSmall = (_x select 0); - _amountOfWoundsMedium = (_x select 1); - _amountOfWoundsLarge = (_x select 2); - - _total = (_amountOfWoundsSmall) + _amountOfWoundsMedium + (_amountOfWoundsLarge); - if (_total>0) then { - private ["_red", "_green", "_blue"]; - _red = 1.0; - _green = 0.7; - _blue = 0.7; - (_interactionDialog displayCtrl (_availableSelections select _foreachIndex)) ctrlSetTextColor [_red,_green,_blue,_alphaLevel]; - }; - }; -}foreach _bandagedWounds; diff --git a/addons/medical/functions/fnc_updateIcons.sqf b/addons/medical/functions/fnc_updateIcons.sqf deleted file mode 100644 index 81c071efca..0000000000 --- a/addons/medical/functions/fnc_updateIcons.sqf +++ /dev/null @@ -1,27 +0,0 @@ -/** - * fn_updateIcons.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_display","_startIDC","_idc","_options","_name","_amount"]; -disableSerialization; -_display = uiNamespace getVariable QGVAR(medicalMenu); - -_startIDC = 111; - -_options = ["triage" , "examine", "bandage", "medication", "airway", "advanced", "drag", "toggle"]; -for "_idc" from _startIDC to 118 step 1 do { - _amount = [ACE_player, GVAR(INTERACTION_TARGET), _options select (_idc - 111)] call FUNC(getTreatmentOptions); - if ((count _amount) > 0 || _idc == 111 || _idc == 118) then { - (_display displayCtrl _idc) ctrlSettextColor [1,1,1,1]; - } else { - (_display displayCtrl _idc) ctrlSettextColor [0.4,0.4,0.4,1]; - }; -}; \ No newline at end of file diff --git a/addons/medical/functions/fnc_updateUIInfo.sqf b/addons/medical/functions/fnc_updateUIInfo.sqf deleted file mode 100644 index 4ac6b463f1..0000000000 --- a/addons/medical/functions/fnc_updateUIInfo.sqf +++ /dev/null @@ -1,215 +0,0 @@ -/** - * fn_updateUIInfo.sqf - * @Descr: N/A - * @Author: Glowbal - * - * @Arguments: [] - * @Return: - * @PublicAPI: false - */ - -#include "script_component.hpp" - -private ["_targetObj","_bodyPartText","_bodyPartN","_openWounds","_bandagedWounds","_fractures","_listOfWounds","_listOfBandagedWounds","_listOfFractures","_counter","_nameEntry","_untreatedWounds" ,"_remainder", "_numberOf", "_airwayStatus", "_airwayTreated"]; -_targetObj = _this select 0; - -_bodyPartText = (call FUNC(getSelectedBodyPart)); -_bodyPartN = [_bodyPartText] call FUNC(getBodyPartNumber); - -if (_bodyPartN < 0 || _bodyPartN > 5) exitwith {}; - -_openWounds = [_targetObj,QGVAR(openWounds)] call EFUNC(common,getDefinedVariable); -_bandagedWounds = [_targetObj,QGVAR(bandagedWounds)] call EFUNC(common,getDefinedVariable); -_fractures = [_targetObj,QGVAR(fractures)] call EFUNC(common,getDefinedVariable); -_airwayStatus = [_targetObj,QGVAR(airway)] call EFUNC(common,getDefinedVariable); - -if (count _this > 1) then { - switch (_this select 1) do { - case QGVAR(openWounds): { _openWounds = _this select 2; }; - case QGVAR(bandagedWounds): { _bandagedWounds = _this select 2; }; - case QGVAR(fractures): { _fractures = _this select 2; }; - }; -}; - -[_openWounds,_bandagedWounds] call FUNC(updateBodyImg); -_listOfWounds = _openWounds select _bodyPartN; -_listOfBandagedWounds = _bandagedWounds select _bodyPartN; -_listOfFractures = _fractures select _bodyPartN; - -// TODO collect all information first, then clear the lb and fill in with details. Also; use ctrl instead of IDC. -_numberOf = 0; -lbClear 213; - -_displayBodyPartText = switch (_bodyPartText) do { - case "head": { - localize "STR_ACE_UI_HEAD"; - }; - case "body": { - localize "STR_ACE_UI_TORSO"; - }; - case "hand_r": { - localize "STR_ACE_UI_ARM_R"; - }; - case "hand_l": { - localize "STR_ACE_UI_ARM_L"; - }; - case "leg_r": { - localize "STR_ACE_UI_LEG_R"; - }; - case "leg_l": { - localize "STR_ACE_UI_LEG_L"; - }; - default {"-"}; -}; - - -lbadd[213,format[localize "STR_ACE_UI_SELECTED_BODY_PART",_displayBodyPartText]]; -lbSetData [213, _numberOf, ""]; -lbSetColor [213, _numberOf, [0.27, 0.40, 0.26, 1]]; -_numberOf = _numberOf + 1; - -if (GVAR(setting_allowAirwayInjuries)) then { - _airwayTreated = _targetObj getvariable [QGVAR(airwayTreated), false]; - - if (_airwayStatus > 0) then { - _nameEntry = switch (_airwayStatus) do { - case 0: {localize "STR_ACE_UI_NORMAL_BREATHING"}; - case 1: {localize "STR_ACE_UI_DIFFICULT_BREATHING"}; - case 2: {localize "STR_ACE_UI_ALMOST_NO_BREATHING"}; - default {localize "STR_ACE_UI_NO_BREATHING"}; - }; - - if (!(alive _targetObj) || (_targetObj getvariable [QEGVAR(common,isDead), false])) then { - lbadd[213,format["%1",localize "STR_ACE_UI_NO_BREATHING"]]; - } else { - lbadd[213,format["%1",_nameEntry]]; - }; - lbSetData [213, _numberOf, ""]; - _numberOf = _numberOf + 1; - } else { - if (!(alive _targetObj) || (_targetObj getvariable [QEGVAR(common,isDead), false])) then { - lbadd[213,format["%1",localize "STR_ACE_UI_NO_BREATHING"]]; - lbSetData [213, _numberOf, ""]; - _numberOf = _numberOf + 1; - }; - }; - - if (_airwayTreated) then { - lbadd[213,localize "STR_ACE_UI_STATUS_NPA_APPLIED"]; - lbSetData [213, _numberOf, ""]; - lbSetColor [213, _numberOf, [0.5, 0.5, 0, 1]]; - _numberOf = _numberOf + 1; - }; -}; - -if (([_targetObj,QGVAR(isBleeding)] call EFUNC(common,getDefinedVariable))) then { - lbadd[213,localize "STR_ACE_UI_STATUS_BLEEDING"]; - lbSetData [213, _numberOf, ""]; - _numberOf = _numberOf + 1; -}; -if (([_targetObj,QGVAR(hasLostBlood)] call EFUNC(common,getDefinedVariable))) then { - lbadd[213,localize "STR_ACE_UI_STATUS_LOST_BLOOD"]; - lbSetData [213, _numberOf, ""]; - _numberOf = _numberOf + 1; -}; - -if (([_targetObj,QGVAR(hasPain)] call EFUNC(common,getDefinedVariable))) then { - lbadd[213,localize "STR_ACE_UI_STATUS_PAIN"]; - lbSetData [213, _numberOf, ""]; - _numberOf = _numberOf + 1; -}; -if (([_targetObj, _bodyPartText] call FUNC(hasTourniquetAppliedTo))) then { - lbadd[213,localize "STR_ACE_UI_STATUS_TOURNIQUET_APPLIED"]; - lbSetColor [213, _numberOf, [0.5, 0.5, 0, 1]]; - lbSetData [213, _numberOf, ""]; - _numberOf = _numberOf + 1; -}; - -_counter = 0; -{ - if (_x > 0) then { - _untreatedWounds = floor _x; - _remainder = _x - (floor _x); - - _nameEntry = switch (_counter) do { - case 0: {localize "STR_ACE_UI_SMALL"}; - case 1: {localize "STR_ACE_UI_MEDIUM"}; - case 2: {localize "STR_ACE_UI_LARGE"}; - default {localize "STR_ACE_UI_SMALL"}; - }; - - if (_untreatedWounds > 1) then { - lbadd[213,format[localize "STR_ACE_UI_MULTIPLE_OPEN_WOUNDS",_nameEntry,_untreatedWounds]]; - lbSetData [213, _numberOf, format["open_wound_%1",_counter]]; - lbSetColor [213, _numberOf, [0.6, 0, 0, 1]]; - _numberOf = _numberOf + 1; - } else { - if (_untreatedWounds == 1) then { - lbadd[213,format[localize "STR_ACE_UI_SINGLE_OPEN_WOUND",_nameEntry]]; - lbSetData [213, _numberOf, format["open_wound_%1",_counter]]; - lbSetColor [213, _numberOf, [0.6, 0, 0, 1]]; - _numberOf = _numberOf + 1; - }; - }; - - if (_remainder > 0) then { - lbadd[213,format[localize "STR_ACE_UI_PARTIAL_OPEN_WOUND",_nameEntry]]; - lbSetData [213, _numberOf, format["open_wound_%1",_counter]]; - lbSetColor [213, _numberOf, [0.6, 0, 0, 1]]; - _numberOf = _numberOf + 1; - }; - }; - _counter = _counter + 1; -}foreach _listOfWounds; - -_counter = 0; -{ - if (_x > 0) then { - - _untreatedWounds = floor _x; - _remainder = _x - (floor _x); - - _nameEntry = switch (_counter) do { - case 0: {localize "STR_ACE_UI_SMALL"}; - case 1: {localize "STR_ACE_UI_MEDIUM"}; - case 2: {localize "STR_ACE_UI_LARGE"}; - default {localize "STR_ACE_UI_SMALL"}; - }; - - if (_untreatedWounds > 1) then { - lbadd[213,format[localize "STR_ACE_UI_MULTIPLE_BANDAGED_WOUNDS",_nameEntry,_untreatedWounds]]; - lbSetData [213, _numberOf, format["bandaged_wound_%1",_counter]]; - _numberOf = _numberOf + 1; - } else { - if (_untreatedWounds == 1) then { - lbadd[213,format[localize "STR_ACE_UI_SINGLE_BANDAGED_WOUND",_nameEntry]]; - lbSetData [213, _numberOf, format["bandaged_wound_%1",_counter]]; - _numberOf = _numberOf + 1; - }; - }; - - if (_remainder > 0) then { - lbadd[213,format[localize "STR_ACE_UI_PARTIAL_BANDAGED_WOUND",_nameEntry]]; - lbSetData [213, _numberOf, format["bandaged_wound_%1",_counter]]; - _numberOf = _numberOf + 1; - }; - }; - _counter = _counter + 1; -}foreach _listOfBandagedWounds; - -_counter = 0; -{ - if (_x > 0) then { - _nameEntry = switch (_counter) do { - case 0: {localize "STR_ACE_UI_SMALL"}; - case 1: {localize "STR_ACE_UI_MEDIUM"}; - case 2: {localize "STR_ACE_UI_LARGE"}; - default {localize "STR_ACE_UI_SMALL"}; - }; - lbadd[213,format["%1 Fracture x%2",_nameEntry,_x]]; - lbSetData [213, _numberOf, ""]; - _numberOf = _numberOf + 1; - }; - _counter = _counter + 1; -}foreach _listOfFractures; - diff --git a/addons/medical/functions/fnc_useEquipment.sqf b/addons/medical/functions/fnc_useItem.sqf similarity index 64% rename from addons/medical/functions/fnc_useEquipment.sqf rename to addons/medical/functions/fnc_useItem.sqf index e432585de9..8a9a088247 100644 --- a/addons/medical/functions/fnc_useEquipment.sqf +++ b/addons/medical/functions/fnc_useItem.sqf @@ -1,11 +1,16 @@ -/** - * fn_useEquipment.sqf - * @Descr: Use Equipment if any is available. Priority: 1) Medic, 2) Patient. If in vehicle: 3) Crew - * @Author: Glowbal +/* + * Author: Glowbal + * Use Equipment if any is available. Priority: 1) Medic, 2) Patient. If in vehicle: 3) Crew * - * @Arguments: [medic OBJECT, patient OBJECT, item STRING (ClassName of magazine item)] - * @Return: BOOL - * @PublicAPI: true + * Arguments: + * 0: Medic + * 1: Patient + * 2: Item + * + * ReturnValue: + * + * + * Public: Yes */ #include "script_component.hpp" @@ -20,12 +25,12 @@ if (isnil QGVAR(setting_allowSharedEquipment)) then { }; if (GVAR(setting_allowSharedEquipment) && {[_patient, _item] call EFUNC(common,hasItem)}) exitwith { - [[_patient, _item], QUOTE(EFUNC(common,useItem)), _patient] call BIS_fnc_MP; + [[_patient, _item], QUOTE(EFUNC(common,useItem)), _patient] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ true; }; if ([_medic, _item] call EFUNC(common,hasItem)) exitwith { - [[_medic, _item], QUOTE(EFUNC(common,useItem)), _medic] call BIS_fnc_MP; + [[_medic, _item], QUOTE(EFUNC(common,useItem)), _medic] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ true; }; @@ -33,11 +38,11 @@ _return = false; if ([vehicle _medic] call FUNC(isMedicalVehicle) && {vehicle _medic != _medic}) then { _crew = crew vehicle _medic; { - if ([_x, _medic] call FUNC(canAccessMedicalEquipment) && {([_x, _item] call EFUNC(common,hasItem))}) exitwith { + if ([_medic, _x] call FUNC(canAccessMedicalEquipment) && {([_x, _item] call EFUNC(common,hasItem))}) exitwith { _return = true; - [[_x, _item], QUOTE(EFUNC(common,useItem)), _x] call BIS_fnc_MP; + [[_x, _item], QUOTE(EFUNC(common,useItem)), _x] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ }; }foreach _crew; }; -_return \ No newline at end of file +_return; diff --git a/addons/medical/functions/fnc_useItems.sqf b/addons/medical/functions/fnc_useItems.sqf new file mode 100644 index 0000000000..4feb234e8c --- /dev/null +++ b/addons/medical/functions/fnc_useItems.sqf @@ -0,0 +1,35 @@ +/* + * Author: Glowbal + * Use Equipment items if any is available. Priority: 1) Medic, 2) Patient. If in vehicle: 3) Crew + * + * Arguments: + * 0: Medic + * 1: Patient + * 2: Items > + * + * ReturnValue: + * + * + * Public: Yes + */ + +#include "script_component.hpp" + +private ["_medic", "_patient", "_items"]; +_medic = _this select 0; +_patient = _this select 1; +_items = _this select 2; + +{ + // handle a one of type use item + if (typeName _x == "ARRAY") then { + { + if ([_medic, _patient, _x] call FUNC(useItem)) exitwith {}; + }foreach _x; + }; + + // handle required item + if (typeName _x == "STRING") then { + [_medic, _patient, _x] call FUNC(useItem); + }; +}foreach _items; diff --git a/addons/medical/script_component.hpp b/addons/medical/script_component.hpp index cdbccbd643..ad45e06a3e 100644 --- a/addons/medical/script_component.hpp +++ b/addons/medical/script_component.hpp @@ -10,16 +10,3 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" - - -#define TREATMENT_AIRWAY(ITEM) {[_this select 0,_this select 1,call FUNC(getSelectedBodyPart),ITEM,'airway'] call FUNC(handleTreatment)} -#define TREATMENT_ADVANCED(ITEM) {[_this select 0,_this select 1,call FUNC(getSelectedBodyPart),ITEM,'advanced'] call FUNC(handleTreatment)} -#define TREATMENT_BANDAGE(ITEM) {[_this select 0,_this select 1,call FUNC(getSelectedBodyPart),ITEM,'bandage'] call FUNC(handleTreatment)} -#define TREATMENT_MEDICATION(ITEM) {[_this select 0,_this select 1,call FUNC(getSelectedBodyPart),ITEM,'medication'] call FUNC(handleTreatment)} -#define TREATMENT_OTHER(ITEM) {[_this select 0,_this select 1,call FUNC(getSelectedBodyPart),ITEM,'other'] call FUNC(handleTreatment)} - -#define ADD_TREATMENT_AIRWAY(TITLE,TOOLTIP,ITEM) [TITLE,TOOLTIP,{[_this select 0,_this select 1,ITEM] call FUNC(hasEquipment)},TREATMENT_AIRWAY(ITEM),'airway'] call FUNC(addTreatmentOption) -#define ADD_TREATMENT_ADVANCED(TITLE,TOOLTIP,ITEM) [TITLE,TOOLTIP,{[_this select 0,_this select 1,ITEM] call FUNC(hasEquipment)},TREATMENT_ADVANCED(ITEM),'advanced'] call FUNC(addTreatmentOption) -#define ADD_TREATMENT_BANDAGE(TITLE,TOOLTIP,ITEM) [TITLE,TOOLTIP,{[_this select 0,_this select 1,ITEM] call FUNC(hasEquipment)},TREATMENT_BANDAGE(ITEM),'bandage'] call FUNC(addTreatmentOption) -#define ADD_TREATMENT_MEDICATION(TITLE,TOOLTIP,ITEM) [TITLE,TOOLTIP,{[_this select 0,_this select 1,ITEM] call FUNC(hasEquipment)},TREATMENT_MEDICATION(ITEM),'medication'] call FUNC(addTreatmentOption) -#define ADD_TREATMENT_OTHER(TITLE,TOOLTIP,ITEM) [TITLE,TOOLTIP,{[_this select 0,_this select 1,ITEM] call FUNC(hasEquipment)},TREATMENT_OTHER(ITEM),'other'] call FUNC(addTreatmentOption) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index f23f45c1fc..6b63aaa416 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,1422 +1,562 @@ - - - - - Open Combat Medical System Menu - Открыть меню медицинской системы CMS - Otwórz menu Combat Medical System - Abrir Menú CMS - - - Opens the CMS menu - Открывает меню CMS - Otwiera menu CMS - Abre el Menú CMS - - - - - Nasopharyngeal Tube - Назотрахеальная трубка - Cánula Nasofaríngea - Canule Nasopharyngée - Rurka nosowo-gardłowa - - - Used to keep the airway patent - Для обеспечения проходимости дыхательных путей - Mantiene libre las vías aéreas - Maintien les voix respiratoires libres - Używana w celu udrożnienia dróg oddechowych - - - Remove Nasopharyngeal - Извлечь назотрахеальную трубку - Retirar Cánula Nasofaríngea - Retirer la Canule Nasopharyngée - Wyjmij rurkę nosowo-gardłową - - - Remove the Nasopharyngeal Tube - Извлечь назотрахеальную трубку - Retirar Cánula Nasofaríngea - Retirer la Canule Nasopharyngée - Wyjmuje rurkę nosowo-gardłową - - - - - Give Blood IV (1000ml) - Перелить кровь (1000 мл) - Give Blood IV (1000ml) - Intravenöse Blutspende (1000ml) - Sangre Intravenosa (1000ml) - Cullot Sanguin IV (1000ml) - Podaj krew IV (1000ml) - - - Give Blood IV (500ml) - Перелить кровь (500 мл) - Give Blood IV (500ml) - Intravenöse Blutspende (500ml) - Sangre Intravenosa (500ml) - Cullot Sanguin IV (500ml) - Podaj krew IV (500ml) - - - Give Blood IV (250ml) - Перелить кровь (250 мл) - Give Blood IV (250ml) - Intravenöse Blutspende (250ml) - Sangre Intravenosa (250ml) - Cullot Sanguin IV (250ml) - Podaj krew IV (250ml) - - - Give Plasma IV (1000ml) - Влить плазму (1000 мл) - Give Plasma IV (1000ml) - Intravenöse Plasmaspende (1000ml) - Plasma Intravenoso (1000ml) - Plasma Sanguin IV (1000ml) - Podaj osocze IV (1000ml) - - - Give Plasma IV (500ml) - Влить плазму (500 мл) - Give Plasma IV (500ml) - Intravenöse Plasmaspende (500ml) - Plasma Intravenoso (500ml) - Plasma Sanguin IV (500ml) - Podaj osocze IV (500ml) - - - Give Plasma IV (250ml) - Влить плазму (250 мл) - Give Plasma IV (250ml) - Intravenöse Plasmaspende (250ml) - Plasma Intravenoso (250ml) - Plasma Sanguin IV (250ml) - Podaj osocze IV (250ml) - - - Give Saline IV (1000ml) - Влить физраствор (1000 мл) - Give Saline IV (1000ml) - Intravenöse Kochsalzlösung (1000ml) - Solución Salina Intravenosa (1000ml) - Solution Saline 0.9% IV (1000ml) - Podaj solankę 0,9% IV (1000ml) - - - Give Saline IV (500ml) - Влить физраствор (500 мл) - Give Saline IV (500ml) - Intravenöse Kochsalzlösung (500ml) - Solución Salina Intravenosa (500ml) - Solution Saline 0.9% IV (500ml) - Podaj solankę 0,9% IV (500ml) - - - Give Saline IV (250ml) - Влить физраствор (250 мл) - Give Saline IV (250ml) - Intravenöse Kochsalzlösung (250ml) - Solución Salina Intravenosa (250ml) - Solution Saline 0.9% IV (250ml) - Podaj solankę 0,9% IV (250ml) - - - Full Heal (Personal Aid Kit) - Полное лечение (аптечка) - Full Heal (Personal Aid Kit) - Ambulante Versorgung (Erste-Hilfe-Tasche) - Tratamiento Avanzado (Kit de Soporte Vital Avanzado) - Soin Complet (Équipement de support vitale - Pełne leczenie (Apteczka) - - - Perform CPR - Провести СЛР - Perform CPR - Herz-Lungen-Wiederbelebung - Realizar CPR - Effectuer RCR - Wykonaj RKO - - - Stop CPR - Прекратить СЛР - Stop CPR - Przerwij RKO - Abortar CPR - - - Give the patient a Blood IV of 1000ml. Read the label for further information. - Перелить пациенту 1000 мл крови. См. информацию на этикетке. - Give the patient a Blood IV of 1000ml. Read the label for further information. - Verabreicht dem Patienten 1000ml Spenderblut. Weitere Informationen auf der Verpackung. - Administrar Sangre de 1000ml. Lea la etiqueta para más información. - Administrer Cullot Sanguin de 1000ml. Lire l'étiquette pour plus d'information. - Przetacza pacjentowi 1000ml krwi dożylnie (IV). Przeczytaj etykietę, aby dowiedzieć się więcej. - - - Give the patient a Blood IV of 500ml. Read the label for further information. - Перелить пациенту 500 мл крови. См. информацию на этикетке. - Give the patient a Blood IV of 500ml. Read the label for further information. - Verabreicht dem Patienten 500ml Spenderblut. Weitere Informationen auf der Verpackung. - Administrar Sangre de 500ml. Lea la etiqueta para más información. - Administrer Cullot Sanguin de 500ml. Lire l'étiquette pour plus d'information. - Przetacza pacjentowi 500ml krwi dożylnie (IV). Przeczytaj etykietę, aby dowiedzieć się więcej. - - - Give the patient a Blood IV of 250ml. Read the label for further information. - Перелить раненому 500 мл крови. См. информацию на этикетке. - Give the patient a Blood IV of 250ml. Read the label for further information. - Verabreicht dem Patienten 250ml Spenderblut. Weitere Informationen auf der Verpackung. - Administrar Sangre de 250ml. Lea la etiqueta para más información. - Administrer Cullot Sanguin de 250ml. Lire l'étiquette pour plus d'information. - Przetacza pacjentowi 250ml krwi dożylnie (IV). Przeczytaj etykietę, aby dowiedzieć się więcej. - - - Give the patient a Plasma IV of 1000ml. Read the label for further information. - Влить раненому 1000 мл плазмы. См. информацию на этикетке. - Give the patient a Plasma IV of 1000ml. Read the label for further information. - Verabreicht dem Patienten 1000ml Blutplasma. Weitere Informationen auf der Verpackung. - Administrar Plasma de 1000ml. Lea la etiqueta para más información. - Administrer Plasma Sanguin de 1000ml. Lire l'étiquette pour plus d'information. - Przetacza pacjentowi 1000ml osocza dożylnie (IV). Przeczytaj etykietę, aby dowiedzieć się więcej. - - - Give the patient a Plasma IV of 500ml. Read the label for further information. - Влить раненому 500 мл плазмы. См. информацию на этикетке. - Give the patient a Plasma IV of 500ml. Read the label for further information. - Verabreicht dem Patienten 500ml Blutplasma. Weitere Informationen auf der Verpackung. - Administrar Plasma de 500ml. Lea la etiqueta para más información. - Administrer Plasma Sanguin de 500ml. Lire l'étiquette pour plus d'information. - Przetacza pacjentowi 500ml osocza dożylnie (IV). Przeczytaj etykietę, aby dowiedzieć się więcej. - - - Give the patient a Plasma IV of 250ml. Read the label for further information. - Влить раненому 250 мл плазмы. См. информацию на этикетке. - Give the patient a Plasma IV of 250ml. Read the label for further information. - Verabreicht dem Patienten 250ml Blutplasma. Weitere Informationen auf der Verpackung. - Administrar Plasma de 250ml. Lea la etiqueta para más información. - Administrer Plasma Sanguin de 250ml. Lire l'étiquette pour plus d'information. - Przetacza pacjentowi 250ml osocza dożylnie (IV). Przeczytaj etykietę, aby dowiedzieć się więcej. - - - Give the patient a Saline IV of 1000ml. Read the label for further information. - Влить раненому 1000 мл физраствора. См. информацию на этикетке. - Give the patient a Saline IV of 1000ml. Read the label for further information. - Verabreicht dem Patienten 1000ml Kochsalzlösung. Weitere Informationen auf der Verpackung. - Administrar Solución Salina de 1000ml. Lea la etiqueta para más información. - Administrer Solution Saline 0.9% de 1000ml. Lire l'étiquette pour plus d'information. - Przetacza pacjentowi 1000ml 0,9% roztworu soli fizjologicznej dożylnie (IV). Przeczytaj etykietę, aby dowiedzieć się więcej. - - - Give the patient a Saline IV of 500ml. Read the label for further information. - Влить раненому 500 мл физраствора. См. информацию на этикетке. - Give the patient a Saline IV of 500ml. Read the label for further information. - Verabreicht dem Patienten 500ml Kochsalzlösung. Weitere Informationen auf der Verpackung. - Administrar Solución Salina de 500ml. Lea la etiqueta para más información. - Administrer Solution Saline 0.9% de 500ml. Lire l'étiquette pour plus d'information. - Przetacza pacjentowi 500ml 0,9% roztworu soli fizjologicznej dożylnie (IV). Przeczytaj etykietę, aby dowiedzieć się więcej. - - - Give the patient a Saline IV of 250ml. Read the label for further information. - Влить раненому 250 мл физраствора. См. информацию на этикетке. - Give the patient a Saline IV of 250ml. Read the label for further information. - Verabreicht dem Patienten 250ml Kochsalzlösung. Weitere Informationen auf der Verpackung. - Administrar Solución Salina de 250ml. Lea la etiqueta para más información. - Administrer Solution Saline 0.9% de 250ml. Lire l'étiquette pour plus d'information. - Przetacza pacjentowi 250ml 0,9% roztworu soli fizjologicznej dożylnie (IV). Przeczytaj etykietę, aby dowiedzieć się więcej. - - - Fully heal a soldier. - Полностью вылечить раненого. - Fully heal a soldier. - Heilt einen Soldaten vollständig. - Curar completamente al herido. - Soigner Complêtement le Soldat. - Pozwala w pełni wyleczyć pacjenta. - - - Perform CPR. Success can stabilize heart rate and blood pressure. - Провести сердечно-легочную реанимацию. В случае успеха стабилизируются пульс и давление. - Perform CPR. Success can stabilize heart rate and blood pressure. - Herz-Lungen-Wiederbelebung, bei Erfolg können sich Puls und Blutdruck stabilisieren. - Realizar CPR. Puede estabilizar la frecuencia cardiaca y la presión arterial. - Effectuer RCR. Le succes de la maneuvre peut retablir un pouls et une tention artériel. - Wykonaj RKO. Sukces może ustabilizować puls oraz ciśnienie krwi. - - - Stop providing CPR. - Прекратить сердечно-легочную реанимацию. - Stop providing CPR. - Przerwij wykonywanie RKO. - Dejar de aplicar CPR - - - Stitch Wounds. - Зашить раны. - Suturar Heridas - - - Stitch bandaged wounds. - Зашить перевязанные раны. - Suturar Heridas Vendadas - - - - - Field Dressing (Basic) - Повязка (обычная) - Vendaje de Campaña (Básico) - - - - Apply when wounds have been bandaged - Накладывается после остановки кровотечения - Aplicar cuando las heridas han sido vendadas - - - Field Dressing (QuikClot) - Первичный перевязочный пакет (QuikClot) - Vendaje de Campaña (QuikClot) - - - Apply to cloth the wound and stop bleeding - Применяется для остановки кровотечения - Aplicar para detener el sangrado - - - Field Dressing (Elastic) - Повязка (давящая) - Vendaje de Campaña (Elástico) - - - For extra pressure, apply when wounds have been bandaged - Обеспечивает прижатие раны после остановки кровотечения - Aplicar a las heridas vendadas para más presión - - - Packing Bandage - Тампонирующая повязка - Vendaje Compresivo - - - Apply on medium to large wounds - Применяется при ранениях среднего и большого размера - Aplicar en heridas medianas o grandes - - - Remove Tourniquet - Снять жгут - Quitar Torniquete - - - Remove applied Tourniquet - Снять ранее наложенный жгут - Quitar Torniquetes - - - Tourniquet - Жгут - Torniquete - - - Apply on limbs only. Limits blood loss on limb. - Накладывается только на конечности. Ограничивает кровопотерю из конечности. - Aplicar sólo en las extremidades. Limita la pérdida de sangre en las extremidades. - - - - - Drag - Тащить - Arrastrar - - - Drag %2 - Тащить раненого %2 - Arrastrar a %2r - - - Carry - Нести - Cargar - - - Carry %2 - Нести раненого %2 - Cargar a %2 - - - Bodybag - Мешок для трупов - Bolsa para cadáveres - - - Put body in bodybag - Поместить труп в мешок - Meter cuerpo en la bolsa para cadáveres - - - Drop - Положить - Soltar - - - Drop %2 - Положить %2 - Soltar a %2 - - - Load in Vehicle - Погрузить в транспорт - Meter en vehículo - - - Load %2 - Погрузить раненого %2 - Cargar a %2 - - - Unload - Выгрузить - Descargar - - - Unload %2 - Выгрузить раненого %2 - Descargar a %2 - - - - - Check Pulse - Проверить пульс - Comprobar Pulso - - - Find the Heart Rate - Нащупать пульс - Encontrar el ritmo cardiaco - - - Check Blood Pressure - Проверить давление - Comprobar Presión Arterial - - - Find out what Blood Pressure patient has - Узнать артериальное давление раненого - Comprobar Presión Arterial - - - Check Response - Проверить реакцию - Comprobar Respuesta - - - - Check if patient is responsive - Проверить, реагирует ли раненый на раздражители - Comprobar si el paciente reacciona - - - - - Morphine - Морфин - Morfina - - - Good to counter pain - Эффективное обезболивающее средство - Alivia el dolor - - - Atropine - Атропин - Atropina - - - Relaxes mussles - Расслабляет мышцы - Antiarrítmico - - - Epinephrine - Адреналин - Epinefrina - - - Adrenaline to get the heart going - Для возобновления сердечной деятельности - Incrementa la frecuencia cardiaca - - + + - - EXAMINE & TREATMENT - ОСМОТР И ЛЕЧЕНИЕ - EXAMINE & TREATMENT - EXAMINAR & TRATAMIENTO - EXAMINER & TRAITEMENTS - BADANIE & LECZENIE - - - STATUS - СОСТОЯНИЕ - STATUS - ESTADO - ÉTATS - STATUS - - - OVERVIEW - ОБЩАЯ ИНФОРМАЦИЯ - OVERVIEW - DESCRIPCIÓN - DESCRIPTION - OPIS - - - ACTIVITY LOG - ПРОВЕДЕННЫЕ МАНИПУЛЯЦИИ - ACTIVITY LOG - REGISTRO DE ACTIVIDAD - REGISTRE DES SOINS - LOGI AKTYWNOŚCI - - - QUICK VIEW - БЫСТРЫЙ ОСМОТР - QUICK VIEW - VISTA RÁPIDA - VUE RAPIDE - SZYBKI PODGLĄD - - - None - Не ранен - Ninguno - Aucun - Brak - - + Minor - Несрочная помощь - Menor - Mineur - Normalny - + Delayed - Срочная помощь - Diferido - Urgent - Opóźniony - + Immediate - Неотложная помощь - Inmediato - Immédiat - Natychmiastowy - + Deceased - Морг - Fallecido - Décédé - Nie żyje - - View triage Card - Смотреть первичную карточку - Ver Triage - Voir Carte de Triage - Pokaż kartę segregacyjną + + None - - Examine Patient - Осмотреть пациента - Examinar Paciente - Examiner Patient - Zbadaj pacjenta - - - Bandage / Fractures - Раны / переломы - Vendajes/Fracturas - Bandages / Fractures - Bandaże / Złamania - - - Medication - Медикаменты - Medicación - Médications - Leki - - - Airway Management - Дыхательные пути - Vías Aéreas - Gestion Des Voie REspiratoire - Drogi oddechowe - - - Advanced Treatments - Специальная медпомощь - Tratamientos Avanzados - Traitement Avancé - Zaawansowane zabiegi - - - Drag/Carry - Тащить/нести - Arrastrar/Cargar - Glisser/Porter - Ciągnij/Nieś - - - Toggle (Self) - Лечить себя/другого раненого - Activer (sois) - Przełącz (na siebie) - Alternar - - - Select triage status - Сортировка - Seleccionar estado de Triage - Selectioner l'état de Triage - Wybierz priorytet - - - Select Head - Выбрать голову - Seleccionar Cabeza - Selectioner Tête - Wybierz głowę - - - Select Torso - Выбрать торс - Seleccionar Torso - Selectioner Torse - Wybierz tors - - - Select Left Arm - Выбрать левую руку - Seleccionar Brazo Izquierdo - Selectioner Bras Gauche - Wybierz lewą rękę - - - Select Right Arm - Выбрать правую руку - Seleccionar Brazo Derecho - Selectioner Bras Droit - Wybierz prawą rękę - - - Select Left Leg - Выбрать левую ногу - Seleccionar Pierna Izquierda - Selectioner Jambe Gauche - Wybierz lewą nogę - - - Select Right Leg - Выбрать правую ногу - Seleccionar Pierna Derecha - Selectioner Jambe Droite - Wybierz prawą nogę - - - Head - Голова - Cabeza - Tête - Głowa - - - Torso - Торс - Torse - Tors - - - Left Arm - Левая рука - Brazo Izquierdo - Bras Gauche - Lewa ręka - - - Right Arm - Правая рука - Brazo Derecho - Bras Droit - Prawa ręka - - - Left Leg - Левая нога - Pierna Izquierda - Jambe Gauche - Lewa noga - - - Right Leg - Правая нога - Pierna Derecha - Jambe Droite - Prawa noga - - - Body Part: %1 - Часть тела: %1 - Parte del cuerpo: %1 - Partie du corps: %1 - Część ciała: %1 - - - Small - малого размера - Pequeña - Petite - małym - - - Medium - среднего размера - Mediana - moyenne - średnim - - - Large - большого размера - Grande - Grande - dużym - - - There are %2 %1 Open Wounds - %2 открытые раны %1 - Hay %2 Heridas Abiertas %1 - Il y a %2 %1 Blessure Ouverte - Widzisz otwarte rany w ilości %2 o %1 rozmiarze - - - There is 1 %1 Open Wound - Открытая рана %1 - Hay 1 Herida Abierta %1 - Il y a 1 blessure ouverte %1 - Widzisz 1 otwartą ranę o %1 rozmiarze - - - There is a partial %1 Open wound - Частично открытая рана %1 - Hay una herida parcial abierta %1 - Il y a une Blessure Patiellement Ouverte %1 - Widzisz częściowo otwartą ranę o %1 rozmiarze - - - There are %2 %1 Bandaged Wounds - %2 перевязанные раны %1 - Hay %2 Heridas %1 Vendadas - Il y a %2 %1 Blessure Bandée - Widzisz %2 zabandażowanych ran o %1 rozmiarze - - - There is 1 %1 Bandaged Wound - 1 перевязанная рана %1 - Hay 1 Herida Vendada %1 - Il y a 1 %1 Blessure Bandée - Widzisz 1 zabandażowaną ranę o %1 rozmiarze - - - There is a partial %1 Bandaged wound - Частично перевязанная рана %1 - Hay una Herida parcial %1 Vendada - Il y a %1 Blessure Partielment Bandée - Widzisz 1 częściowo zabandażowaną ranę o %1 rozmiarze - - + Normal breathing Дыхание в норме Respiración normal Respiration Normale Normalny oddech - + No breathing Дыхания нет No respira Apnée Brak oddechu - + Difficult breathing Дыхание затруднено Dificultad para respirar Difficultée Respiratoire Trudności z oddychaniem - + Almost no breathing Дыхания почти нет Casi sin respirar Respiration Faible Prawie brak oddechu - + Bleeding Кровотечение Sangrando Seignement Krwawienie zewnętrzne - - in Pain + + In Pain Испытывает боль Con Dolor A De La Douleur W bólu - + Lost a lot of Blood Большая кровопотеря Mucha Sangre perdida A Perdu Bcp de Sang Stracił dużo krwi - + Tourniquet [CAT] Жгут Torniquete [CAT] Garot [CAT] Opaska uciskowa [CAT] - - Nasopharyngeal Tube [NPA] - Назотрахеальная трубка - Torniquete [CAT] - Canule Naseaupharyngée [NPA] - Rurka nosowo-gardłowa [NPA] - - - + + Bandage (Basic) Повязка (обычная) Vendaje (Básico) Bandage (Standard) Bandaż (jałowy) - + Used to cover a wound Для перевязки ран Utilizado para cubrir una herida Utilisé Pour Couvrir Une Blessure Używany w celu przykrycia i ochrony miejsca zranienia - + A dressing, that is a particular material used to cover a wound, which is applied over the wound once bleeding has been stemmed. Повязка, накладываемая поверх раны после остановки кровотечения. Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez ha dejado de sangrar. C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut etre appliquer des que le seignement as ete stopper. Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. - + Packing Bandage Тампонирующая повязка Vendaje Compresivo Bandage Mèche Bandaż (uciskowy) - + Used to pack medium to large wounds and stem the bleeding Для тампонирования ран среднего и большого размера и остановки кровотечения. Se utiliza para vendar heridas medianas y grandes y detener el sangrado Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. - + A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is an option in large polytrauma injuries. Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых сочетанных ранениях возможно тампонирование раны. Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes lesiones o politraumatismos. Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la guerrison. Ce bandage est une option pour soigner les lession de politrauma. Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. - + Bandage (Elastic) Повязка (давящая) Vendaje (Elástico) Bandage (Élastique) Bandaż (elastyczny) - + Bandage kit, Elastic Давящая повязка Vendaje (Elástico) Bandage Compressif Élastique Zestaw bandaży elastycznych. - + Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la tenue du bandage lors de mouvment. Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada - + Tourniquet (CAT) Жгут Torniquete (CAT) Garot (CAT) Staza (typ. CAT) - + Slows down blood loss when bleeding Уменьшает кровопотерю при кровотечении. Reduce la velocidad de pérdida de sangre Ralentit le seignement Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. - + A constricting device used to compress venous and arterial circulation in effect inhibiting or slowing blood flow and therefore decreasing loss of blood. Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению кровотечения и сокращению кровопотери. Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym krwawieniem tętniczym lub żylnym. - - Splint - Шина - Férula - Attelle - Szyna - - - An immobilization device used to support, immobilize and to a degree compress the associated wound. Usually used on the limbs but can be used on the hip. - Приспособление для поддержки и иммобилизации конечности, а также частичного прижатия ее раны. Обычно накладывается на конечности, но может накладываться и на бедро. - Un dispositivo de inmovilización utilizado para apoyar, inmovilizar y comprimir la herida asociada. Normalmente se usa en las extremidades, pero puede ser utilizado en la cadera. - Un dispositif d'immobilisation servant a supporter, immobiliser, et meme comprimer les blessure relier a une fracture. Normalement utiliser sur les extrémités - Szyna jest urządzeniem służącym do wsparcia lub unieruchomienia kończyny lub kręgosłupa. - - - A Splint, for broken bones - Шина для переломов - Férula, para huesos rotos - Une attelle, pour les os brisé - Szyna, na złamane kości. - - + Morphine auto-injector Морфин в автоматическом шприце Morfina auto-inyectable Auto-injecteur de Morphine Autostrzykawka z morfiną - + Used to combat moderate to severe pain experiences Для снятия средних и сильных болевых ощущений. Usado para combatir los estados dolorosos moderados a severos Utiliser pour contrer les douleurs modéré à severes. Morfina. Ma silne działanie przeciwbólowe. - + An analgesic used to combat moderate to severe pain experiences. Анальгетик для снятия средних и сильных болевых ощущений. Analgésico usado para combatir los estados dolorosos de moderado a severo. Un Analgésique puissant servant a contrer les douleur modéré a severe. Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. - + Atropin auto-injector Атропин в автоматическом шприце Atropina auto-inyectable Auto-injecteur d'Atropine Autostrzykawka AtroPen - + Used in NBC scenarios Применяется для защиты от ОМП Usado en escenarios NBQ Utiliser en cas d'attaque CBRN Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. - + A drug used by the Military in NBC scenarios. Препарат, используемый в войсках для защиты от оружия массового поражения. Medicamento usado por Militares en escenarios NBQ Médicament utilisé par l'armée en cas d'attaque CBRN Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w przypadku zagrożeń NBC. - + Epinephrine auto-injector Адреналин в автоматическом шприце Epinefrina auto-inyectable Auto-injecteur d'épinéphrine Autostrzykawka EpiPen - + Increase heart rate and counter effects given by allergic reactions Стимулирует работу сердца и купирует аллергические реакции. Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne - + A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with decreasing positive outcomes. Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты сердечных сокращений и купированию аллергических реакций (анафилактического шока). Применяется при остановке сердца с уменьшением вероятности благоприятного исхода. Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de las reacciones alérgicas (anafilaxis). Se utiliza en caso de paros cardiacos repentinos. Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la fréquance cardiaque et contre les effet d'une reaction alergique (anaphylaxie). Utiliser lors d'arret cardio-respiratoire pour augmenté les chances retrouver un ryhtme. EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. - + Plasma IV (1000ml) Плазма для в/в вливания (1000 мл) Plasma Intravenoso (1000ml) Plasma Sanguin IV (1000ml) Osocze IV (1000ml) - + A volume-expanding blood supplement. Дополнительный препарат, применяемый при возмещении объема крови. Suplemento para expandir el volumen sanguíneo. Supplement visant a remplacer les volume sanguin Składnik krwi, używany do zwiększenia jej objętości. - + A volume-expanding blood supplement. Дополнительный препарат, применяемый при возмещении объема крови. Suplemento para expandir el volumen sanguíneo. Supplement visant a remplacer le volume sanguin et remplace les plaquettes. Składnik krwi, używany do zwiększenia jej objętości. - + Plasma IV (500ml) Плазма для в/в вливания (500 мл) Plasma Intravenoso (500ml) Plasma Sanguin IV (500ml) Osocze IV (500ml) - + Plasma IV (250ml) Плазма для в/в вливания (250 мл) Plasma Intravenoso (250ml) Plasma Sanguin (250ml) Osocze IV (250ml) - + Blood IV (1000ml) Кровь для переливания (1000 мл) Sangre Intravenosa (1000ml) Cullot Sanguin IV (1000ml) Krew IV (1000ml) - + Blood IV, for restoring a patients blood (keep cold) Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych - + O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso habitual durante el transporte de heridos. - + Blood IV (500ml) Кровь для переливания (500 мл) Sangre Intravenosa (500ml) Cullot Sanguin IV (500ml) Krew IV (500ml) - + Blood IV (250ml) Кровь для переливания (250 мл) Sangre Intravenosa (250ml) Cullot Sanguin IV (250ml) Krew IV (250ml) - + Saline IV (1000ml) Физраствор для в/в вливания (1000 мл) Solución Salina Intravenosa (1000ml) solution Saline 0.9% IV (1000ml) Solanka 0,9% IV (1000ml) - + Saline IV, for restoring a patients blood Пакет физраствора для возмещения объема потерянной крови Solución Salina Intravenosa, para restaurar el volumen sanguíneo Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta - + A medical volume-replenishing agent introduced into the blood system through an IV infusion. Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного вливания. Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter par intraveineuse Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). - + Saline IV (500ml) Физраствор для в/в вливания (500 мл) Solución Salina Intravenosa (500ml) Solution Saline 0.9% IV (500ml) Solanka 0,9% IV (500ml) - + Saline IV (250ml) Физраствор для в/в вливания (250 мл) Solución Salina Intravenosa (250ml) Solution Saline 0.9% IV (250ml) Solanka 0,9% IV (250ml) - + Basic Field Dressing (QuikClot) Первичный перевязочный пакет (QuikClot) Vendaje Básico (Coagulante) Bandage Regulier (Coagulant) Opatrunek QuikClot - + QuikClot bandage Гемостатический пакет QuikClot Venda Coagulante Bandage coagulant Podstawowy opatrunek stosowany na rany - + Un bandage servant a coaguler les seignements mineur à moyen. Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i dużej intensywności. Vendaje Hemostático con coagulante que detiene el sangrado. - - Nasopharyngeal tube - Назотрахеальная трубка - Cánula Nasofaríngea - Canule Nasopharyngée - Rurka nosowo-gardłowa - - - Nasopharyngeal tube, for mataining the airway - Назотрахеальная трубка для поддержания проходимости дыхательных путей - Cánula Nasofaríngea, mantiene despejadas las vías aéreas - Canule Naso, sert a mintenir ouverte les voix respiratoire. - Rurka nosowo-gardłowa, używana w celu udrożnienia dróg oddechowych - - - Nasopharyngeal airway. An airway adjunct inserted nasally which is then used to keep the airway patent which allows the field medic to ventilate the patient as appropriate. - Назотрахеальная трубка. Интубационная трубка, вводимая через нос для поддержания проходимости дыхательных путей, позволяющая санитару при необходимости осуществлять вентиляцию легких раненого. - Cánula Nasofaríngea. Dispositivo de vía aérea insertado por vía nasal que se utiliza para mantener libre la vía aérea permitiendo ventilar al paciente según sea apropiado. - Canule Naso. Dispositif, incere par le nez, servant a maintenir les voie respiratoire du patient ouverte, permetant sa ventilation par le personel medical. - Rurki nosowo-gardłowe stosuje się do ratunkowego udrożnienia dróg oddechowych u osób nieprzytomnych. Rurka nosowo-gardłowa jest znacznie lepiej tolerowana np. przez osobę przytomną, niż rurka ustno-gardłowa. - - - Oropharyngeal tube - Оротрахеальная трубка - Cánula Orofaríngea - Canule Oropharyngée - Rurka ustno-gardłowa - - - Oropharyngeal Airway, for maintaining the airway - Оротрахеальная трубка для поддержания проходимости дыхательных путей - Cánula Orofaríngea, para mantener despejada las vía aéreas - Canule Oropharyngée, sert a maintenir les voie respiratoires ouverte. - Rurka ustno-gardłowa, używana w celu udrożnienia dróg oddechowych - - - Oropharyngeal airway. An airway adjunct inserted via the oral airway (i.e. mouth) which is then used to keep the airway patent which allows the field medic to ventilate the patient as appropriate. - Оротрахеальная трубка. Интубационная трубка, вводимая через рот для поддержания проходимости дыхательных путей, позволяющая санитару при необходимости осуществлять вентиляцию легких раненого. - Cánula Orofaríngea. Dispositivo de vía aérea insertado a través de la vía respiratoria oral (es decir, la boca) que se utiliza para mantener despejada las vías aéreas permitiendo ventilar al paciente según sea apropiado. - Canule Oropharyngée. Un dispositif, inseré par la bouche, qui est utiliser pour garder les voie respiratoire overte et permetre la ventilation par le personel de soin. - Rurkę ustno - gardłową stosuje się podczas zabiegów sztucznej wentylacji płuc. Zadaniem rurki ustno - gardłowej jest zapewnienie drożności górnych dróg oddechowych, a użycie jej zapewnia ratownikowi komfort prowadzenia zabiegów i podnosi skuteczność prowadzonej akcji. - - - Liquid skin - «Жидкая кожа» - Pomada tópica - Pomade Topique - Bandaż (w płynie) - - - Liquid Skin, for use on burns - Препарат «жидкая кожа» для лечения ожогов - Pomada tópica, para quemaduras - Pomade Topique, appliquer sur les brulures. - Bandaż w płynie, używany na poparzenia i lekkie urazy - - - Liquid bandage is a topical skin treatment for minor cuts and sores that is sold by several companies. The products are mixtures of chemicals which create a polymeric layer which binds to the skin. This protects the wound by keeping dirt and germs out, and keeping moisture in. - Медицинский клей («жидкая повязка») – наружное средство для лечения небольших порезов и ссадин. Продукт представляет собой смесь химических веществ, создающих полимерный слой, который приклеивается к коже. Таким образом предотвращается попадание в рану грязи и микробов, а также высыхание раны. - Bandage liquide est un traitement de la peau topique pour les coupures et les plaies mineures qui est vendu par plusieurs compagnies. Les produits sont des mélanges de produits chimiques qui créent une couche polymère qui se lie à la peau. Cela protège la plaie en gardant la saleté et les germes, et de garder l'humidité. - Opatrunek nakładany na skórę atomizerem tworzący na powierzchni skóry warstwę przyśpieszającą gojenie - stosowany przy drobnych ranach i poparzeniach. - Líquido tópico para pequeños cortes, heridas y quemaduras. Compuesto de sustancias químicas que crean una capa polimérica que se une a la piel. Esto protege la herida manteniéndola libre de suciedad y gérmenes. - - - Chest seal - Окклюзионная повязка - Parche Oclusivo - Bandage Occlusif - Opatrunek Chest Seal - - - A Chest seal - Окклюзионная повязка на грудную клетку - Parche Torácico - Bandage toracique pour les pneumothorax - Opatrunek uszczelniający na rany penetracyjne klatki piersiowej - - - Chest Seal is a high performance occlusive dressing designed to treat penetrating chest wounds along with securing other wound dressings. The patented hydro-gel provides superior adhesion to the wound area even when moisture, pleural fluids or blood is present. It will work on patients with heavy perspiration or very wet environments. The highly aggressive tack adhesive of the hydro-gel will enable the dressing to conform and hold to the patient's body. - Окклюзионная повязка предназначена для лечения проникающих ранений в грудную клетку с одновременной фиксацией других повязок. Патентованный гидрогель обеспечивает отличное крепление к области ранения даже при наличии влаги, плевральной жидкости или крови. Может применяться даже при обильном потоотделении или в очень влажной среде. Благодаря высокоадгезивному пластырю повязка плотно прилегает к телу раненого и не отклеивается. - Le pensement occlusif est un pansement occlusif de haute performance conçu pour traiter les plaies pénétrantes de la poitrine ainsi que la sécurisation d'autres pansements. L'hydro-gel brevetée offre une adhérence supérieure à la surface de la plaie, même lorsque l'humidité, liquide pleural ou le sang est présent, elle le laisse couller. Il fonctionne sur les patients atteints d'une transpiration abondante ou dans des environnements très humides. - Chest Seal to opatrunek przeznaczony do opatrywania penetracyjnych (otwartych) ran klatki piersiowej, staniowiących sytuację zagrażającą życiu wskutek możliwości powstawania odmy prężnej. Jest to druga co do częstotliwości występowania przyczyna śmierci na polu walki, której można zapobiec stosując odpowiednie procedury medyczne. Chest Seal charakteryzuje się trwałym i szczelnym przyleganiem do skóry pokrytej krwią, piaskiem, włosami, potem lub wodą. Materiałem klejącym opatrunku uszczelniającego jest środek hydrożelowy umożliwiający wielokrotne odklejanie i przyklejanie opatrunku, co pozwala na wentylowanie rany. - Vendaje oclusivo utilizado para el tratamiento de las lesiones penetrantes en el tórax - - + Personal Aid Kit Аптечка Kit de Soporte Vital Avanzado Équipement de support Vitale Apteczka osobista - + Includes various treatment kit needed for stitching or advanced treatment Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. Incluye material médico para tratamientos avanzados Inclue du matériel medical pour les traitement avancé, tel les point de suture. Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego - + - + Surgical Kit Хирургический набор Kit Quirúrgico - + Surgical Kit for in field advanced medical treatment Набор для хирургической помощи в полевых условиях Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - + Surgical Kit for in field advanced medical treatment Набор для хирургической помощи в полевых условиях Kit Quirúrgico para el tratamiento avanzado en el campo de batalla - + Bodybag Мешок для трупов Bolsa para cadáveres - + A bodybag for dead bodies Мешок для упаковки трупов Bolsa para cadáveres - + A bodybag for dead bodies Мешок для упаковки трупов Bolsa para cadáveres - - - Canceled - Отменено - Cancelado - - - Action has been canceled - Действие отменено - Acción cancelada - - - You moved away - Вы отошли от раненого - Te estás alejando - - + + Blood Pressure Артериальное давление Presión Arterial - + Checking Blood Pressure.. Проверка артериального давления... Comprobando Presión Arterial... - + You checked %1 Вы осмотрели раненого %1 Examinando a %1 - + You find a blood pressure of %2/%3 Артериальное давление %2/%3 La Presión Arterial es %2/%3 - + You find a low blood pressure Давление низкое La Presión Arterial es baja - + You find a normal blood pressure Давление нормальное La Presión Arterial es normal - + You find a high blood pressure Давление высокое La Presión Arterial es alta - + You find no blood pressure Давления нет No hay Presión Arterial - + You fail to find a blood pressure Артериальное давление не определяется No puedes encontrar Presión Arterial - + Pulse Пульс Pulso - + Checking Heart Rate.. Проверка пульса... Comprobando Pulso... - + You checked %1 Вы осмотрели раненого %1 Examinando a %1 - + You find a Heart Rate of %2 Пульс %2 уд./мин. El Pulso es %2 - + You find a weak Heart Rate Пульс слабый El Pulso es débil - + You find a strong Heart Rate Пульс учащенный El Pulso está acelerado - + You find a normal Heart Rate Пульс в норме El Pulso es bueno - + You find no Heart Rate Пульс не прощупывается No tiene Pulso - + Response Реакция Reacciona - + You check response of patient Вы проверяете реакцию раненого Compruebas si el paciente reacciona - + %1 is responsive %1 реагирует на раздражители %1 ha reaccionado - + %1 is not responsive %1 не реагирует %1 no reacciona - + You checked %1 Вы осмотрели раненого %1 Examinas a %1 - + Bandaging Перевязка... Vendando - + Bandaged Повязка наложена Vendado - + You bandage %1 (%2) Вы перевязали раненого %1 (%2) Aplicas vendaje a %1 en %2 - + %1 is bandaging you %1 перевязывает вас %1 te está vendando - + You start stitching injures from %1 (%2) Вы зашиваете ранения от %1 (%2) Estás suturando heridas de %1 en %2 - + Stitching Наложение швов Suturando - + You treat the airway of %1 Вы интубируете раненого %1 Estás intubando a %1 - + Airway Дыхательные пути Vías Aéreas - + %1 is treating your airway %1 проводит вам интубацию %1 te está intubando + diff --git a/addons/medical/ui/RscTitles.hpp b/addons/medical/ui/RscTitles.hpp index 524a1c0ad3..d1cdb80dd3 100644 --- a/addons/medical/ui/RscTitles.hpp +++ b/addons/medical/ui/RscTitles.hpp @@ -1,74 +1,125 @@ +class ACE_gui_backgroundBase; +class ACE_gui_listBoxBase; + class Rsctitles { - class GVAR(ScreenEffectsBlack) { - duration = 10e10; - idd = 1111; - movingenable = 0; - onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QUOTE(GVAR(ScreenEffectsBlack))), _this select 0)]); - + class GVAR(DisplayInformation) { + duration = 10e10; + idd = 1111; + movingenable = 0; + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QUOTE(GVAR(DisplayInformation))), _this select 0)]); + onUnload = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QUOTE(GVAR(DisplayInformation))), nil)]); class controlsBackground { - class blackScreen: ACE_gui_backgroundBase { - text = QUOTE(PATHTOF(data\black_out.paa)); - colorText[] = {0.0, 0.0, 0.0, 0.0}; - idc = 11112; - x = safezoneX; - y = safezoneY; - w = safezoneW; - h = safezoneH; - }; + class bodyImgBackground: ACE_gui_backgroundBase { + idc = -1; + x = "safezoneX + (2.5 * (((safezoneW / safezoneH) min 1.2) / 40))"; + y = "1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + safezoneY"; + w = "8.5 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "8.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)"; + colorBackground[] = {1,1,1,1}; + colorPicture[] = {1,1,1,1}; + colorText[] = {1,1,1,1}; + text = QUOTE(PATHTOF(ui\body_background.paa)); + }; + class bodyImgHead: bodyImgBackground { + idc = 50; + colorBackground[] = {1,1,1,1}; + colorPicture[] = {1,1,1,1}; + colorText[] = {1,1,1,1}; + text = QUOTE(PATHTOF(ui\body_head.paa)); + }; + class bodyImgTorso: bodyImgHead { + idc = 51; + text = QUOTE(PATHTOF(ui\body_torso.paa)); + }; + class bodyImgArms_l: bodyImgHead { + idc = 52; + text = QUOTE(PATHTOF(ui\body_arm_left.paa)); + }; + class bodyImgArms_r: bodyImgHead { + idc = 53; + text = QUOTE(PATHTOF(ui\body_arm_right.paa)); + }; + class bodyImgLegs_l: bodyImgHead { + idc = 54; + text = QUOTE(PATHTOF(ui\body_leg_left.paa)); + }; + class bodyImgLegs_r: bodyImgHead { + idc = 55; + text = QUOTE(PATHTOF(ui\body_leg_right.paa)); + }; + class InjuryListLabel { + idc = 199; + type = CT_STATIC; + x = "safezoneX + (2 * (((safezoneW / safezoneH) min 1.2) / 40))"; + y = "10.2 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + safezoneY"; + w = "9 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "0.7 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)"; + style = 0x00 + 0x100; // ST_LEFT + ST_SHADOW + font = "PuristaMedium"; + colorText[] = {0.95, 0.95, 0.95, 0.75}; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; + text = "INJURIES"; + }; + class InjuryList: ACE_gui_listBoxBase { + idc = 200; + x = "safezoneX + (2 * (((safezoneW / safezoneH) min 1.2) / 40))"; + y = "11 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + safezoneY"; + w = "9 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)"; + rowHeight = 0.03; + colorBackground[] = {0, 0, 0, 0.2}; + colorText[] = {1,1, 1, 1.0}; + colorScrollbar[] = {0.95, 0.95, 0.95, 1}; + colorSelect[] = {0.95, 0.95, 0.95, 1}; + colorSelect2[] = {0.95, 0.95, 0.95, 1}; + colorSelectBackground[] = {0, 0, 0, 0.0}; + colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.5}; + }; + class LogName { + idc = 301; + type = CT_STATIC; + x = "safezoneX + (2 * (((safezoneW / safezoneH) min 1.2) / 40))"; + y = "20.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + safezoneY"; + w = "9 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "0.7 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)"; + style = 0x00 + 0x100; // ST_LEFT + ST_SHADOW + font = "PuristaMedium"; + colorText[] = {0.95, 0.95, 0.95, 0.75}; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; + text = "ACTIVITY LOG"; + }; + class ActivityLog: InjuryList { + idc = 302; + y = "21.3 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + safezoneY"; + h = "7 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)"; + rowHeight = 0.03; + colorBackground[] = {0, 0, 0, 0.2}; + colorText[] = {1,1, 1, 1.0}; + colorScrollbar[] = {0.95, 0.95, 0.95, 1}; + colorSelect[] = {0.95, 0.95, 0.95, 1}; + colorSelect2[] = {0.95, 0.95, 0.95, 1}; + colorSelectBackground[] = {0, 0, 0, 0.0}; + colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.5}; + }; + class TriageStatus { + idc = 303; + type = CT_STATIC; + x = "safezoneX + (2 * (((safezoneW / safezoneH) min 1.2) / 40))"; + y = "28.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + safezoneY"; + w = "9 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "0.7 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)"; + style = 0x00 + 0x100; // ST_LEFT + ST_SHADOW + font = "PuristaMedium"; + colorText[] = {0.95, 0.95, 0.95, 0.75}; + colorBackground[] = {0,0,0,0.9}; + text = ""; + }; }; }; - class GVAR(ScreenEffectsBleeding) { - duration = 1; - idd = 1111; - movingenable = 0; - onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QUOTE(GVAR(ScreenEffectsBleeding))), _this select 0)]); - - class controlsBackground { - class bleedingScreen: ACE_gui_backgroundBase { - text = QUOTE(PATHTOF(data\bleeding.paa)); - colorText[] = {0.9, 0.2, 0.2, 0.6}; - idc = 11113; - x = safezoneX; - y = safezoneY; - w = safezoneW; - h = safezoneH; - }; - }; - }; - class GVAR(ScreenEffectsHit) { - duration = 1.1; - idd = 1111; - movingenable = 0; - onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QUOTE(GVAR(ScreenEffectsHit))), _this select 0)]); - - class controlsBackground { - class effectHit: ACE_gui_backgroundBase { - text = QUOTE(PATHTOF(data\hit.paa)); - colorText[] = {0.7, 0.2, 0.2, 0.4}; - idc = 11113; - x = safezoneX; - y = safezoneY; - w = safezoneW; - h = safezoneH; - }; - }; - }; - class GVAR(ScreenEffectsPain) { - duration = 1; - idd = 1111; - movingenable = 0; - onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QUOTE(GVAR(ScreenEffectsPain))), _this select 0)]); - - class controlsBackground { - class painScreen: ACE_gui_backgroundBase { - text = QUOTE(PATHTOF(data\painScreen.paa)); - colorText[] = {1, 1, 1, 0.5}; - idc = 11115; - x = safezoneX; - y = safezoneY; - w = safezoneW; - h = safezoneH; - }; - }; - }; -}; \ No newline at end of file +}; diff --git a/addons/medical/data/body_arm_left.paa b/addons/medical/ui/body_arm_left.paa similarity index 100% rename from addons/medical/data/body_arm_left.paa rename to addons/medical/ui/body_arm_left.paa diff --git a/addons/medical/data/body_arm_right.paa b/addons/medical/ui/body_arm_right.paa similarity index 100% rename from addons/medical/data/body_arm_right.paa rename to addons/medical/ui/body_arm_right.paa diff --git a/addons/medical/ui/body_background.paa b/addons/medical/ui/body_background.paa new file mode 100644 index 0000000000..525d9c4b6a Binary files /dev/null and b/addons/medical/ui/body_background.paa differ diff --git a/addons/medical/ui/body_background.png b/addons/medical/ui/body_background.png new file mode 100644 index 0000000000..65791a01c0 Binary files /dev/null and b/addons/medical/ui/body_background.png differ diff --git a/addons/medical/data/body_head.paa b/addons/medical/ui/body_head.paa similarity index 100% rename from addons/medical/data/body_head.paa rename to addons/medical/ui/body_head.paa diff --git a/addons/medical/data/body_leg_left.paa b/addons/medical/ui/body_leg_left.paa similarity index 100% rename from addons/medical/data/body_leg_left.paa rename to addons/medical/ui/body_leg_left.paa diff --git a/addons/medical/data/body_leg_right.paa b/addons/medical/ui/body_leg_right.paa similarity index 100% rename from addons/medical/data/body_leg_right.paa rename to addons/medical/ui/body_leg_right.paa diff --git a/addons/medical/data/body_torso.paa b/addons/medical/ui/body_torso.paa similarity index 100% rename from addons/medical/data/body_torso.paa rename to addons/medical/ui/body_torso.paa diff --git a/addons/medical/ui/define.hpp b/addons/medical/ui/define.hpp deleted file mode 100644 index 3af837e4f1..0000000000 --- a/addons/medical/ui/define.hpp +++ /dev/null @@ -1 +0,0 @@ -#include "\z\ace\addons\gui\UI\define.hpp" \ No newline at end of file diff --git a/addons/medical/equipment/img/atropine.paa b/addons/medical/ui/items/atropine.paa similarity index 100% rename from addons/medical/equipment/img/atropine.paa rename to addons/medical/ui/items/atropine.paa diff --git a/addons/medical/equipment/img/bloodbag.paa b/addons/medical/ui/items/bloodIV.paa similarity index 100% rename from addons/medical/equipment/img/bloodbag.paa rename to addons/medical/ui/items/bloodIV.paa diff --git a/addons/medical/equipment/img/bodybag.paa b/addons/medical/ui/items/bodybag.paa similarity index 100% rename from addons/medical/equipment/img/bodybag.paa rename to addons/medical/ui/items/bodybag.paa diff --git a/addons/medical/equipment/img/bandageElastic.paa b/addons/medical/ui/items/elasticBandage.paa similarity index 100% rename from addons/medical/equipment/img/bandageElastic.paa rename to addons/medical/ui/items/elasticBandage.paa diff --git a/addons/medical/equipment/img/epinephrine.paa b/addons/medical/ui/items/epinephrine.paa similarity index 100% rename from addons/medical/equipment/img/epinephrine.paa rename to addons/medical/ui/items/epinephrine.paa diff --git a/addons/medical/equipment/img/field_dressing.paa b/addons/medical/ui/items/fieldDressing.paa similarity index 100% rename from addons/medical/equipment/img/field_dressing.paa rename to addons/medical/ui/items/fieldDressing.paa diff --git a/addons/medical/equipment/img/morphine.paa b/addons/medical/ui/items/morphine.paa similarity index 100% rename from addons/medical/equipment/img/morphine.paa rename to addons/medical/ui/items/morphine.paa diff --git a/addons/medical/equipment/img/packing_bandage.paa b/addons/medical/ui/items/packingBandage.paa similarity index 100% rename from addons/medical/equipment/img/packing_bandage.paa rename to addons/medical/ui/items/packingBandage.paa diff --git a/addons/medical/equipment/img/personal_aid_kit.paa b/addons/medical/ui/items/personal_aid_kit.paa similarity index 100% rename from addons/medical/equipment/img/personal_aid_kit.paa rename to addons/medical/ui/items/personal_aid_kit.paa diff --git a/addons/medical/equipment/img/plasma_iv.paa b/addons/medical/ui/items/plasmaIV.paa similarity index 100% rename from addons/medical/equipment/img/plasma_iv.paa rename to addons/medical/ui/items/plasmaIV.paa diff --git a/addons/medical/equipment/img/quickclot.paa b/addons/medical/ui/items/quickclot.paa similarity index 100% rename from addons/medical/equipment/img/quickclot.paa rename to addons/medical/ui/items/quickclot.paa diff --git a/addons/medical/equipment/img/saline_iv.paa b/addons/medical/ui/items/salineIV.paa similarity index 100% rename from addons/medical/equipment/img/saline_iv.paa rename to addons/medical/ui/items/salineIV.paa diff --git a/addons/medical/equipment/img/surgical_kit.paa b/addons/medical/ui/items/surgicalKit.paa similarity index 100% rename from addons/medical/equipment/img/surgical_kit.paa rename to addons/medical/ui/items/surgicalKit.paa diff --git a/addons/medical/equipment/img/tourniquet.paa b/addons/medical/ui/items/tourniquet.paa similarity index 100% rename from addons/medical/equipment/img/tourniquet.paa rename to addons/medical/ui/items/tourniquet.paa diff --git a/addons/medical/ui/menu.hpp b/addons/medical/ui/menu.hpp deleted file mode 100644 index f65b5ab807..0000000000 --- a/addons/medical/ui/menu.hpp +++ /dev/null @@ -1,568 +0,0 @@ -class GVAR(medicalMenu) { - idd = 314412; - movingEnable = true; - onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(medicalMenu)), _this select 0)]; [ARR_2(QUOTE(QGVAR(id)), true)] call EFUNC(gui,blurScreen); [_this select 0] call FUNC(onMenuOpen);); - onUnload = QUOTE([ARR_2(QUOTE(QGVAR(id)), false)] call EFUNC(gui,blurScreen); [ARR_2(QUOTE(QGVAR(onMenuOpen)), 'onEachFrame')] call BIS_fnc_removeStackedEventHandler;); - class controlsBackground { - class HeaderBackground: ACE_gui_backgroundBase{ - idc = -1; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - text = "#(argb,8,8,3)color(0,0,0,0)"; - }; - class CenterBackground: HeaderBackground { - y = "2.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - h = "16 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - text = "#(argb,8,8,3)color(0,0,0,0.8)"; - colorText[] = {0, 0, 0, "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; - colorBackground[] = {0,0,0,"(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; - }; - class BottomBackground: CenterBackground { - y = "(18.6 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2))"; - h = "9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - }; - }; - - class controls { - class HeaderName { - idc = 1; - type = CT_STATIC; - x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - style = ST_LEFT + ST_SHADOW; - font = "PuristaMedium"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - colorText[] = {0.95, 0.95, 0.95, 0.75}; - colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; - text = ""; - }; - - class IconsBackGroundBar: ACE_gui_backgroundBase{ - idc = -1; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "2.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "3.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - text = QUOTE(PATHTOF(data\background_img.paa)); - colorText[] = {1, 1, 1, 0.0}; - }; - class CatagoryLeft: HeaderName { - x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "2.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - style = ST_CENTER; - colorText[] = {1, 1, 1.0, 0.9}; - colorBackground[] = {0,0,0,0}; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; - text = $STR_ACE_UI_EXAMINE_TREATMENT; - }; - class CatagoryCenter: CatagoryLeft { - x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - text = $STR_ACE_UI_STATUS; - }; - class CatagoryRight: CatagoryCenter{ - x = "25.66 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - text = $STR_ACE_UI_OVERVIEW; - }; - class Line: ACE_gui_backgroundBase { - idc = -1; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "3.7 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "37 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "0.03 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - text = "#(argb,8,8,3)color(1,1,1,0.5)"; - }; - - class iconImg1: ACE_gui_backgroundBase { - idc = 111; - x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "3.73 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.1)"; - colorBackground[] = {0,0,0,1}; - colorPicture[] = {1,1,1,1}; - colorText[] = {1,1,1,1}; - text = QUOTE(PATHTOF(data\icons\triage_card_small.paa)); - }; - class iconImg2: iconImg1 { - idc = 112; - x = "3 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - text = QUOTE(PATHTOF(data\icons\examine_patient_small.paa)); - }; - class iconImg3: iconImg1 { - idc = 113; - x = "4.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - text = QUOTE(PATHTOF(data\icons\bandage_fracture_small.paa)); - }; - class iconImg4: iconImg1 { - idc = 114; - x = "6 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - text = QUOTE(PATHTOF(data\icons\medication_small.paa)); - }; - class iconImg5: iconImg1 { - idc = 115; - x = "7.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - text = QUOTE(PATHTOF(data\icons\airway_management_small.paa)); - }; - class iconImg6: iconImg1 { - idc = 116; - x = "9 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - text = QUOTE(PATHTOF(data\icons\advanced_treatment_small.paa)); - }; - class iconImg7: iconImg1 { - idc = 117; - x = "10.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - text = QUOTE(PATHTOF(data\icons\icon_carry.paa)); - }; - class iconImg8: iconImg1 { - idc = 118; - x = "12 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - text = QUOTE(PATHTOF(data\icons\toggle_self_small.paa)); - }; - - - class BtnIconLeft1: ACE_gui_buttonBase { - idc = 11; - x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "3.73 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.1)"; - animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTextureOver = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.0)"; - action = QUOTE(['triage'] call FUNC(handleUI_DisplayOptions);); - }; - class BtnIconLeft2: BtnIconLeft1 { - idc = 12; - x = "3 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - action = QUOTE(['examine'] call FUNC(handleUI_DisplayOptions);); - }; - class BtnIconLeft3: BtnIconLeft1 { - idc = 13; - x = "4.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - action = QUOTE(['bandage'] call FUNC(handleUI_DisplayOptions);); - }; - class BtnIconLeft4: BtnIconLeft1 { - idc = 14; - x = "6 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - action = QUOTE(['medication'] call FUNC(handleUI_DisplayOptions);); - }; - class BtnIconLeft5: BtnIconLeft1 { - idc = 15; - x = "7.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - action = QUOTE(['airway'] call FUNC(handleUI_DisplayOptions);); - }; - class BtnIconLeft6: BtnIconLeft1 { - idc = 16; - x = "9 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - action = QUOTE(['advanced'] call FUNC(handleUI_DisplayOptions);); - }; - class BtnIconLeft7: BtnIconLeft1 { - idc = 17; - x = "10.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - action = QUOTE(['drag'] call FUNC(handleUI_DisplayOptions);); - }; - class BtnIconLeft8: BtnIconLeft1 { - idc = 18; - x = "12 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - action = QUOTE(['toggle'] call FUNC(handleUI_DisplayOptions);); - }; - - class TriageCardList: ACE_gui_listBoxBase { - idc = 212; - x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "5.4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "12 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "10 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)"; - rowHeight = 0.03; - colorBackground[] = {0, 0, 0, 0.2}; - colorText[] = {1,1, 1, 1.0}; - colorScrollbar[] = {0.95, 0.95, 0.95, 1}; - colorSelect[] = {0.95, 0.95, 0.95, 1}; - colorSelect2[] = {0.95, 0.95, 0.95, 1}; - colorSelectBackground[] = {0, 0, 0, 0.0}; - colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.0}; - }; - - // Left side - class BtnMenu1: BtnIconLeft1 { - idc = 20; - y = "5.4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "12 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - text = ""; - size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.9)"; - animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.8)"; - animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.5)"; - animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; - animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; - animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; - animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; - color[] = {1, 1, 1, 1}; - color2[] = {0,0,0, 1}; - colorBackgroundFocused[] = {1,1,1,1}; - colorBackground[] = {1,1,1,1}; - colorbackground2[] = {1,1,1,1}; - colorDisabled[] = {0.5,0.5,0.5,0.8}; - colorFocused[] = {0,0,0,1}; - periodFocus = 1; - periodOver = 1; - action = ""; - }; - class BtnMenu2: BtnMenu1 { - idc = 21; - y = "6.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - text = ""; - }; - class BtnMenu3: BtnMenu1 { - idc = 22; - y = "7.6 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - text = ""; - }; - class BtnMenu4: BtnMenu1 { - idc = 23; - y = "8.7 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - text =""; - }; - class BtnMenu5: BtnMenu1 { - idc = 24; - y = "9.8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - text = ""; - }; - class BtnMenu6: BtnMenu1 { - idc = 25; - y = "10.9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - text = ""; - }; - class BtnMenu7: BtnMenu1 { - idc = 26; - y = "12 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - text = ""; - }; - class BtnMenu8: BtnMenu1 { - idc = 27; - y = "13.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - text = ""; - }; - // center - - class bodyImgBackground: ACE_gui_backgroundBase { - idc = -1; - x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "3.73 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "12.33 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)"; - colorBackground[] = {1,1,1,1}; - colorPicture[] = {1,1,1,1}; - colorText[] = {1,1,1,1}; - text = QUOTE(PATHTOF(data\body_background.paa)); - }; - class bodyImgHead: bodyImgBackground { - idc = 50; - x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "3.73 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "12.33 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)"; - colorBackground[] = {1,1,1,1}; - colorPicture[] = {1,1,1,1}; - colorText[] = {1,1,1,1}; - text = QUOTE(PATHTOF(data\body_head.paa)); - }; - - class bodyImgTorso: bodyImgHead { - idc = 51; - text = QUOTE(PATHTOF(data\body_torso.paa)); - }; - class bodyImgArms_l: bodyImgHead { - idc = 52; - text = QUOTE(PATHTOF(data\body_arm_left.paa)); - }; - class bodyImgArms_r: bodyImgHead { - idc = 53; - text = QUOTE(PATHTOF(data\body_arm_right.paa)); - }; - class bodyImgLegs_l: bodyImgHead { - idc = 54; - text = QUOTE(PATHTOF(data\body_leg_left.paa)); - }; - class bodyImgLegs_r: bodyImgHead { - idc = 55; - text = QUOTE(PATHTOF(data\body_leg_right.paa)); - }; - - - class selectHead: ACE_gui_buttonBase { - idc = 301; - x = "18.8 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "3.9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "1.4 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.1)"; - animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTextureOver = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.0)"; - action = QUOTE(GVAR(selectedBodyPart) = 'head'; [GVAR(INTERACTION_TARGET)] call FUNC(updateUIInfo);); - }; - class selectTorso : selectHead { - idc = 302; - x = "18.4 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "5.4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "2.2 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "4.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - action = QUOTE(GVAR(selectedBodyPart) = 'body'; [GVAR(INTERACTION_TARGET)] call FUNC(updateUIInfo);); - }; - class selectLeftArm: selectHead{ - idc = 303; - x = "17.4 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "5.9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "1.1 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "4.3 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - action = QUOTE(GVAR(selectedBodyPart) = 'hand_r'; [GVAR(INTERACTION_TARGET)] call FUNC(updateUIInfo);); - }; - class selectRightArm: selectLeftArm{ - idc = 304; - x = "20.6 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - action = QUOTE(GVAR(selectedBodyPart) = 'hand_l'; [GVAR(INTERACTION_TARGET)] call FUNC(updateUIInfo);); - }; - class selectLeftLeg :selectHead { - idc = 305; - x = "18.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "9.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "1.1 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "6 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - action = QUOTE(GVAR(selectedBodyPart) = 'leg_r'; [GVAR(INTERACTION_TARGET)] call FUNC(updateUIInfo);); - }; - class selectRightLeg :selectLeftLeg { - idc = 306; - x = "19.6 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - action = QUOTE(GVAR(selectedBodyPart) = 'leg_l'; [GVAR(INTERACTION_TARGET)] call FUNC(updateUIInfo);); - }; - - - class TriageTextBottom: HeaderName { - idc = 2000; - x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "16.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - style = ST_CENTER; - colorText[] = {1, 1, 1.0, 1}; - colorBackground[] = {0,0.0,0.0,0.7}; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - text = ""; - }; - - // Right side - class InjuryList: ACE_gui_listBoxBase { - idc = 213; - x = "25.66 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "5.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "10 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)"; - rowHeight = 0.03; - colorBackground[] = {0, 0, 0, 0.2}; - colorText[] = {1,1, 1, 1.0}; - colorScrollbar[] = {0.95, 0.95, 0.95, 1}; - colorSelect[] = {0.95, 0.95, 0.95, 1}; - colorSelect2[] = {0.95, 0.95, 0.95, 1}; - colorSelectBackground[] = {0, 0, 0, 0.0}; - colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.5}; - }; - // bottom - - class ActivityLogHeader: CatagoryLeft { - x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "18.6 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "18.5 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - style = ST_CENTER; - colorText[] = {0.6, 0.7, 1.0, 1}; - colorBackground[] = {0,0,0,0}; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - text = $STR_ACE_UI_ACTIVITY_LOG; - }; - class QuickViewHeader: ActivityLogHeader { - x = "19.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - text = $STR_ACE_UI_QUICK_VIEW; - }; - class LineBottomHeaders: Line { - y = "19.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - }; - class ActivityLog: InjuryList { - idc = 214; - style = 16; - type = 102; - rows=1; - colorBackground[] = {0, 0, 0, 1}; - x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "(19.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2))"; - w = "18.5 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "6.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)"; - colorSelectBackground[] = {0, 0, 0, 0.0}; - colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.0}; - columns[] = {0.0, 0.08}; - canDrag=true; - arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)"; - arrowFull = "#(argb,8,8,3)color(1,1,1,1)"; - drawSideArrows = 0; - idcLeft = -1; - idcRight = -1; - }; - - class QuikViewLog: InjuryList { - idc = 215; - style = 16; - type = 102; - rows=1; - colorBackground[] = {0, 0, 0, 1}; - x = "21.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "(19.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2))"; - w = "18.5 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "6.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)"; - colorSelectBackground[] = {0, 0, 0, 0.0}; - colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.0}; - - columns[] = {0.0, 0.08}; - canDrag=true; - arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)"; - arrowFull = "#(argb,8,8,3)color(1,1,1,1)"; - drawSideArrows = 0; - idcLeft = -1; - idcRight = -1; - }; - - class selectTriageStatus: ACE_gui_buttonBase { - idc = 2001; - x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; - y = "16.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)"; - h = "1.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - style = ST_CENTER; - size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTextureOver = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.0)"; - animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.0)"; - action = QUOTE([] call FUNC(handleUI_dropDownTriageCard);); - }; - class selectTriageStatusNone: selectTriageStatus { - idc = 2002; - x = 0; - y = 0; - w = 0; - h = 0; - text = $STR_ACE_UI_TRIAGE_NONE; - style = ST_CENTER; - size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)"; - animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.9)"; - animTextureOver = "#(argb,8,8,3)color(0,0,0,0.9)"; - animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.9)"; - animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.9)"; - animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.9)"; - action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),0)] call FUNC(setTriageStatus);); - }; - - class selectTriageStatusMinor: selectTriageStatus { - idc = 2003; - x = 0; - y = 0; - w = 0; - h = 0; - text = $STR_ACE_UI_TRIAGE_MINOR; - style = ST_CENTER; - size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - animTextureNormal = "#(argb,8,8,3)color(0,0.5,0,0.9)"; - animTextureDisabled = "#(argb,8,8,3)color(0,0.5,0,0.9)"; - animTextureOver = "#(argb,8,8,3)color(0,0.5,0,0.9)"; - animTextureFocused = "#(argb,8,8,3)color(0,0.5,0,0.9)"; - animTexturePressed = "#(argb,8,8,3)color(0,0.5,0,0.9)"; - animTextureDefault = "#(argb,8,8,3)color(0,0.5,0,0.9)"; - action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),1)] call FUNC(setTriageStatus);); - }; - class selectTriageStatusDelayed: selectTriageStatus { - idc = 2004; - x = 0; - y = 0; - w = 0; - h = 0; - text = $STR_ACE_UI_TRIAGE_DELAYED; - style = ST_CENTER; - size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - animTextureNormal = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)"; - animTextureDisabled = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)"; - animTextureOver = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)"; - animTextureFocused = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)"; - animTexturePressed = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)"; - animTextureDefault = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)"; - action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),2)] call FUNC(setTriageStatus);); - }; - class selectTriageStatusImmediate: selectTriageStatus { - idc = 2005; - x = 0; - y = 0; - w = 0; - h = 0; - text = $STR_ACE_UI_TRIAGE_IMMEDIATE; - style = ST_CENTER; - size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - animTextureNormal = "#(argb,8,8,3)color(1,0.2,0.2,0.9)"; - animTextureDisabled = "#(argb,8,8,3)color(1,0.2,0.2,0.9)"; - animTextureOver = "#(argb,8,8,3)color(1,0.2,0.2,0.9)"; - animTextureFocused = "#(argb,8,8,3)color(1,0.2,0.2,0.9)"; - animTexturePressed = "#(argb,8,8,3)color(1,0.2,0.2,0.9)"; - animTextureDefault = "#(argb,8,8,3)color(1,0.2,0.2,0.9)"; - action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),3)] call FUNC(setTriageStatus);); - }; - class selectTriageStatusDeceased: selectTriageStatus { - idc = 2006; - x = 0; - y = 0; - w = 0; - h = 0; - text = $STR_ACE_UI_TRIAGE_DECEASED; - style = ST_CENTER; - size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)"; - animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.9)"; - animTextureOver = "#(argb,8,8,3)color(0,0,0,0.9)"; - animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.9)"; - animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.9)"; - animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.9)"; - action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),4)] call FUNC(setTriageStatus);); - }; - }; -}; \ No newline at end of file diff --git a/addons/medical/data/ACE_medical_module.paa b/addons/medical/ui/moduleIcon.paa similarity index 100% rename from addons/medical/data/ACE_medical_module.paa rename to addons/medical/ui/moduleIcon.paa diff --git a/addons/medical/variable_defines.sqf b/addons/medical/variable_defines.sqf deleted file mode 100644 index 86ada8a01b..0000000000 --- a/addons/medical/variable_defines.sqf +++ /dev/null @@ -1,60 +0,0 @@ -// public variables -[QGVAR(openWounds),[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(bandagedWounds),[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(fractures),[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(airway), 0, true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(tourniquets),[0,0,0,0,0,0],true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(splints),[0,0,0,0,0,0],true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(isBleeding),false,true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(hasPain),false,true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(hasLostBlood),false,true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(airwayTreated),false,true, QUOTE(ADDON)] call EFUNC(common,defineVariable); - -// Airway -[QGVAR(airwayOccluded), false, true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(airwayRespiratoryArrest), false, true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(airwayCollapsed), false, true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(airwayStatus), 100, false, QUOTE(ADDON)] call EFUNC(common,defineVariable); - -// logs -[QGVAR(quickViewLog),[],true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(activityLog),[],true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(triageLevel),0,true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(triageCard),[],true, QUOTE(ADDON)] call EFUNC(common,defineVariable); - -[QGVAR(medicClass),0,true, QUOTE(ADDON),0,true] call EFUNC(common,defineVariable); // should be a persistent variable; must not be removed by a reset all defaults call -[QGVAR(isMedicalFacility),0,true, QUOTE(ADDON),0,true] call EFUNC(common,defineVariable); // should be a persistent variable; must not be removed by a reset all defaults call - -[QGVAR(noInstantDeath),false,true, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(inCardiacArrest),false,true, QUOTE(ADDON)] call EFUNC(common,defineVariable); - -// private variables -[QGVAR(bloodVolume),100,false, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(bloodIVVolume),0,false, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(plasmaIVVolume),0,false, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(salineIVVolume),0,false, QUOTE(ADDON)] call EFUNC(common,defineVariable); - -[QGVAR(amountOfPain),0,false, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(heartRate),80,false, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(andrenaline),0,false, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(heartRateAdjustments),[],false, QUOTE(ADDON)] call EFUNC(common,defineVariable); - -[QGVAR(bloodPressure), [80,120],false, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(peripheralResistance), 100,false, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(cardiacOutput), 5.25,false, QUOTE(ADDON)] call EFUNC(common,defineVariable); // Source for default: http://en.wikipedia.org/wiki/Cardiac_output#Example_values - -[QGVAR(givenMorphine),0,false, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(givenAtropine),0,false, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(givenEpinephrine),0,false, QUOTE(ADDON)] call EFUNC(common,defineVariable); - -[QGVAR(bodyPartStatus),[0,0,0,0,0,0],false, QUOTE(ADDON)] call EFUNC(common,defineVariable); -[QGVAR(bodyPartStatusPrevious),[0,0,0,0,0,0],false, QUOTE(ADDON)] call EFUNC(common,defineVariable); - -[QGVAR(addedToUnitLoop),false,false, QUOTE(ADDON)] call EFUNC(common,defineVariable); -["ACE_reviveCounterValue", 0, false, QGVAR(ADDON)] call FUNC(defineVariable); -["ACE_inReviveState", false, true, QGVAR(ADDON)] call FUNC(defineVariable); -["ACE_isDead",false,true,QUOTE(ADDON)] call FUNC(defineVariable); -["ACE_isUnconscious",false,true,QUOTE(ADDON)] call FUNC(defineVariable); -["ACE_isDeadPlayer", false, true, QUOTE(ADDON)] call FUNC(defineVariable); - -GVAR(VarDefinesCompleted) = true; diff --git a/addons/missionmodules/$PBOPREFIX$ b/addons/missionmodules/$PBOPREFIX$ new file mode 100644 index 0000000000..6e7c7ebfc1 --- /dev/null +++ b/addons/missionmodules/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\missionmodules \ No newline at end of file diff --git a/addons/missionmodules/CfgEventHandlers.hpp b/addons/missionmodules/CfgEventHandlers.hpp new file mode 100644 index 0000000000..f0a9f14d91 --- /dev/null +++ b/addons/missionmodules/CfgEventHandlers.hpp @@ -0,0 +1,6 @@ + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; diff --git a/addons/missionmodules/CfgFactionClasses.hpp b/addons/missionmodules/CfgFactionClasses.hpp new file mode 100644 index 0000000000..792f4d31e3 --- /dev/null +++ b/addons/missionmodules/CfgFactionClasses.hpp @@ -0,0 +1,6 @@ +class CfgFactionClasses { + class NO_CATEGORY; + class ACE_missionModules: NO_CATEGORY { + displayName = "ACE Mission Modules"; + }; +}; \ No newline at end of file diff --git a/addons/missionmodules/CfgVehicles.hpp b/addons/missionmodules/CfgVehicles.hpp new file mode 100644 index 0000000000..92c379efb2 --- /dev/null +++ b/addons/missionmodules/CfgVehicles.hpp @@ -0,0 +1,68 @@ +class CfgVehicles { + class Logic; + class Module_F: Logic { + class ArgumentsBaseUnits { + }; + }; + + // TODO make a curator variant for this + class ACE_moduleAmbianceSound: Module_F { + scope = 2; + displayName = "Ambiance Sounds [ACE]"; + icon = QUOTE(PATHTOF(data\moduleSound.paa)); + category = "ACE_missionModules"; + function = QUOTE(FUNC(moduleAmbianceSound)); + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + author = "Glowbal"; + class Arguments { + class soundFiles { + displayName = "Sounds"; + description = "Classnames of the ambiance sounds played. Seperated by ','. "; + typeName = "STRING"; + defaultValue = ""; + }; + class minimalDistance { + displayName = "Minimal Distance"; + description = "Minimal Distance"; + typeName = "NUMBER"; + defaultValue = 400; + }; + class maximalDistance { + displayName = "Maximal Distance"; + description = "Maximal Distance"; + typeName = "NUMBER"; + defaultValue = 900; + }; + class minimalDelay { + displayName = "Minimal Delay"; + description = "Minimal Delay between sounds played"; + typeName = "NUMBER"; + defaultValue = 10; + }; + class maximalDelay { + displayName = "Maximal Delay"; + description = "Maximal Delay between sounds played"; + typeName = "NUMBER"; + defaultValue = 170; + }; + class followPlayers { + displayName = "Follow Players"; + description = "Follow players. If set to false, loop will play sounds only nearby logic position."; + typeName = "BOOL"; + defaultValue = 0; + }; + class soundVolume { + displayName = "Volume"; + description = "The volume of the sounds played"; + typeName = "NUMBER"; + defaultValue = 1; + }; + }; + class ModuleDescription { + description = "Ambiance sounds loop (synced across MP)"; + sync[] = {}; + }; + }; +}; diff --git a/addons/missionmodules/XEH_preInit.sqf b/addons/missionmodules/XEH_preInit.sqf new file mode 100644 index 0000000000..cadbbabdd1 --- /dev/null +++ b/addons/missionmodules/XEH_preInit.sqf @@ -0,0 +1,7 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP(moduleAmbianceSound); + +ADDON = true; diff --git a/addons/missionmodules/config.cpp b/addons/missionmodules/config.cpp new file mode 100644 index 0000000000..0867b486c6 --- /dev/null +++ b/addons/missionmodules/config.cpp @@ -0,0 +1,17 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {"cse_moduleAmbianceSound"}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author[] = {"Glowbal"}; + authorUrl = ""; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgFactionClasses.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/missionmodules/data/moduleSound.paa b/addons/missionmodules/data/moduleSound.paa new file mode 100644 index 0000000000..bfe3b80327 Binary files /dev/null and b/addons/missionmodules/data/moduleSound.paa differ diff --git a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf new file mode 100644 index 0000000000..943d795b7a --- /dev/null +++ b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf @@ -0,0 +1,123 @@ +/* + * Author: Glowbal + * Plays synchronized ambiance sounds while the module is alive. + * + * Arguments: + * 0: Logic + * 1: Units + * 2: Activated + * + * Return Value: + * Nothing + * + * Example: + * N/A + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_logic", "_units", "_activated","_ambianceSounds", "_soundFiles", "_minimalDistance","_maximalDistance", "_minimalDistance", "_maxDelayBetweenSounds", "_allUnits", "_newPos", "_targetUnit", "_soundToPlay", "_soundPath", "_unparsedSounds", "_list", "_splittedList", "_nilCheckPassedList"]; +_logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; +_units = [_this,1,[],[[]]] call BIS_fnc_param; +_activated = [_this,2,true,[true]] call BIS_fnc_param; + +// We only play this on the locality of the logic, since the sounds are broadcasted across the network +if (_activated && local _logic) then { + _ambianceSounds = []; + _unparsedSounds = _logic getvariable ["soundFiles", ""]; + _minimalDistance = (_logic getvariable ["minimalDistance", 400]) max 1; + _maximalDistance = (_logic getvariable ["maximalDistance", 10]) max _minimalDistance; + _minDelayBetweensounds = (_logic getvariable ["minimalDelay", 10]) max 1; + _maxDelayBetweenSounds = (_logic getvariable ["maximalDelay", 170]) max _minDelayBetweensounds; + _volume = (_logic getvariable ["soundVolume", 30]) max 1; + _followPlayers = _logic getvariable ["followPlayers", false]; + + _splittedList = [_unparsedSounds, ","] call BIS_fnc_splitString; + + _nilCheckPassedList = ""; + { + _x = [_x] call EFUNC(common,string_removeWhiteSpace); + _splittedList set [_foreachIndex, _x]; + }foreach _splittedList; + + _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; + { + if (isclass (missionConfigFile >> "CfgSounds" >> _x)) then { + _ambianceSounds pushback (_soundPath + (getArray(missionConfigFile >> "CfgSounds" >> _x >> "sound") select 0)); + } else { + if (isclass (configFile >> "CfgSounds" >> _x)) then { + _ambianceSounds pushback ((getArray(configFile >> "CfgSounds" >> _x >> "sound") select 0)); + }; + }; + }foreach _splittedList; + + if (count _ambianceSounds == 0) exitwith {}; + { + if !([".", _x, true] call BIS_fnc_inString) then { + _ambianceSounds set [_foreachIndex, _x + ".wss"]; + }; + }foreach _ambianceSounds; + + [{ + private ["_args", "_logic", "_ambianceSounds", "_minimalDistance", "_maximalDistance", "_minDelayBetweensounds", "_maxDelayBetweenSounds", "_volume", "_followPlayers","_lastTimePlayed", "_newPos"]; + _args = _this select 0; + _logic = _args select 0; + _minDelayBetweensounds = _args select 4; + _maxDelayBetweenSounds = _args select 5; + _lastTimePlayed = _args select 8; + + if (!alive _logic) exitwith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; + + if (time - _lastTimePlayed >= ((_minDelayBetweensounds + random(_maxDelayBetweenSounds)) min _maxDelayBetweenSounds)) then { + _ambianceSounds = _args select 1; + _minimalDistance = _args select 2; + _maximalDistance = _args select 3; + + _volume = _args select 6; + _followPlayers = _args select 7; + + // Find all players in session. + _allUnits = if (isMultiplayer) then {playableUnits} else {[ACE_player]}; + + // Check if there are enough players to even start playing this sound. + if (count _allUnits > 0) then { + + // Select a target unit at random. + _targetUnit = _allUnits select (round(random((count _allUnits)-1))); + + // find the position from which we are going to play this sound from. + _newPos = (getPos _targetUnit); + if (!_followPlayers) then { + _newPos = getPos _logic; + }; + + // Randomize this position. + if (random(1) >= 0.5) then { + if (random(1) >= 0.5) then { + _newPos set [0, (_newPos select 0) + (_minimalDistance + random(_maximalDistance))]; + } else { + _newPos set [0, (_newPos select 0) - (_minimalDistance + random(_maximalDistance))]; + }; + } else { + if (random(1) >= 0.5) then { + _newPos set [1, (_newPos select 1) + (_minimalDistance + random(_maximalDistance))]; + } else { + _newPos set [1, (_newPos select 1) - (_minimalDistance + random(_maximalDistance))]; + }; + }; + + // If no unit is to close to this position, we will play the sound. + if ({(_newPos distance _x < (_minimalDistance / 2))}count _allUnits == 0) then { + playSound3D [_ambianceSounds select (round(random((count _ambianceSounds)-1))), ObjNull, false, _newPos, _volume, 1, 1000]; + _args set [8, time]; + }; + }; + }; + }, 0.1, [_logic, _ambianceSounds, _minimalDistance, _maximalDistance, _minDelayBetweensounds, _maxDelayBetweenSounds, _volume, _followPlayers, time] ] call cba_fnc_addPerFrameHandler; +}; + +true; diff --git a/addons/missionmodules/functions/script_component.hpp b/addons/missionmodules/functions/script_component.hpp new file mode 100644 index 0000000000..42d34d4801 --- /dev/null +++ b/addons/missionmodules/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\missionmodules\script_component.hpp" \ No newline at end of file diff --git a/addons/missionmodules/script_component.hpp b/addons/missionmodules/script_component.hpp new file mode 100644 index 0000000000..a567966c7b --- /dev/null +++ b/addons/missionmodules/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT missionModules +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_MISSIONMODULES + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_MISSIONMODULES + #define DEBUG_SETTINGS DEBUG_SETTINGS_MISSIONMODULES +#endif + +#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/movement/XEH_postInit.sqf b/addons/movement/XEH_postInit.sqf index 54a94ad21f..9d2d48ce74 100644 --- a/addons/movement/XEH_postInit.sqf +++ b/addons/movement/XEH_postInit.sqf @@ -18,20 +18,16 @@ }] call EFUNC(common,addEventHandler); -["ACE3", - localize "STR_ACE_Movement_Climb", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if (ACE_player != (vehicle ACE_player)) exitWith {false}; +["ACE3", QGVAR(climb), localize "STR_ACE_Movement_Climb", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if (ACE_player != (vehicle ACE_player)) exitWith {false}; - // Statement - [ACE_player] call FUNC(climb); - true - }, - [47, [false, true, false]], //DIK_V + CTRL//STRG - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player] call FUNC(climb); + true +}, +{false}, +[47, [false, true, false]], false] call cba_fnc_addKeybind; //DIK_V + CTRL//STRG diff --git a/addons/movement/functions/fnc_canClimb.sqf b/addons/movement/functions/fnc_canClimb.sqf index bd62bfb768..27753d8a12 100644 --- a/addons/movement/functions/fnc_canClimb.sqf +++ b/addons/movement/functions/fnc_canClimb.sqf @@ -1,4 +1,18 @@ -// by commy2 +/* + * Author: commy2 + * Tests the the player can climb. + * + * Arguments: + * 0: The Unit (usually the player) + * + * Return Value: + * The return value + * + * Example: + * _bool = [player] call ace_movement_fnc_canClimb + * + * Public: No + */ #include "script_component.hpp" private ["_unit", "_pos", "_dir"]; @@ -20,6 +34,6 @@ _checkPos1end = _checkPos1beg vectorAdd _dir; /* drawLine3D [ASLToATL _checkPos0beg, ASLToATL _checkPos0end, [1,0,0,1]]; drawLine3D [ASLToATL _checkPos1beg, ASLToATL _checkPos1end, [1,0,0,1]]; -*/ + */ lineIntersects [_checkPos0beg, _checkPos0end] && {!(lineIntersects [_checkPos1beg, _checkPos1end])} diff --git a/addons/movement/functions/fnc_climb.sqf b/addons/movement/functions/fnc_climb.sqf index 3f09b82a15..aff27ffe9d 100644 --- a/addons/movement/functions/fnc_climb.sqf +++ b/addons/movement/functions/fnc_climb.sqf @@ -1,4 +1,18 @@ -// by commy2 +/* + * Author: commy2 + * Make the player climb over short walls. + * + * Arguments: + * 0: The Unit (usually the player) + * + * Return Value: + * Nothing + * + * Example: + * [player] call ace_movement_fnc_climb + * + * Public: No + */ #include "script_component.hpp" private "_unit"; @@ -6,15 +20,15 @@ private "_unit"; _unit = _this select 0; if !([_unit] call FUNC(canClimb)) exitWith { - [localize "STR_ACE_Movement_CanNotClimb"] call EFUNC(common,displayTextStructured); + [localize "STR_ACE_Movement_CanNotClimb"] call EFUNC(common,displayTextStructured); }; if !(_unit getVariable [QGVAR(isClimbInit), false]) then { - _unit addEventHandler ["AnimDone", { - if (local (_this select 0) && {_this select 1 == "ACE_Climb"}) then {_this call FUNC(handleClimb)}; - }]; + _unit addEventHandler ["AnimDone", { + if (local (_this select 0) && {_this select 1 == "ACE_Climb"}) then {_this call FUNC(handleClimb)}; + }]; - _unit setVariable [QGVAR(isClimbInit), true]; + _unit setVariable [QGVAR(isClimbInit), true]; }; [_unit] call EFUNC(common,fixLoweredRifleAnimation); diff --git a/addons/movement/functions/fnc_getWeight.sqf b/addons/movement/functions/fnc_getWeight.sqf index 254b706d56..955be1a215 100644 --- a/addons/movement/functions/fnc_getWeight.sqf +++ b/addons/movement/functions/fnc_getWeight.sqf @@ -1,4 +1,18 @@ -// by commy2 +/* + * Author: commy2 + * Returns the weight (from the loadAbs command) in lbs/kg (based on user option) + * + * Arguments: + * 0: The Unit (usually the player) + * + * Return Value: + * The return value + * + * Example: + * _bool = [player] call ace_movement_fnc_getWeight + * + * Public: No + */ #include "script_component.hpp" private ["_unit", "_weight"]; diff --git a/addons/movement/functions/fnc_handleClimb.sqf b/addons/movement/functions/fnc_handleClimb.sqf index a96beccc2c..da0f8e0224 100644 --- a/addons/movement/functions/fnc_handleClimb.sqf +++ b/addons/movement/functions/fnc_handleClimb.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * Handles the climb animation finishing. Called from "AnimDone" event handler. + * + * Arguments: + * 0: The Unit (usually the player) + * 1: The finisehd animation + * + * Return Value: + * Nothing + * + * Example: + * [player, "ACE_climb"] call ace_movement_fnc_handleClimb + * + * Public: No + */ #include "script_component.hpp" private ["_unit", "_anim", "_pos"]; diff --git a/addons/nametags/CfgVehicles.hpp b/addons/nametags/CfgVehicles.hpp index e3c4227834..d61c761bfc 100644 --- a/addons/nametags/CfgVehicles.hpp +++ b/addons/nametags/CfgVehicles.hpp @@ -55,6 +55,15 @@ class CfgVehicles { }; }; }; + class showCursorTagForVehicles { + displayName = "Show for Vehicles"; + description = "Show cursor NameTag for vehicle commander (only if client has name tags enabled)Default: No"; + typeName = "BOOL"; + class values { + class Yes {name = "Yes"; value = 1;}; + class No {default = 1; name = "No"; value = 0;}; + }; + }; }; }; }; diff --git a/addons/nametags/UI/soundwave0.paa b/addons/nametags/UI/soundwave0.paa new file mode 100644 index 0000000000..27f34b38ab Binary files /dev/null and b/addons/nametags/UI/soundwave0.paa differ diff --git a/addons/nametags/UI/soundwave1.paa b/addons/nametags/UI/soundwave1.paa new file mode 100644 index 0000000000..ce4f85eb69 Binary files /dev/null and b/addons/nametags/UI/soundwave1.paa differ diff --git a/addons/nametags/UI/soundwave2.paa b/addons/nametags/UI/soundwave2.paa new file mode 100644 index 0000000000..0bc59cde24 Binary files /dev/null and b/addons/nametags/UI/soundwave2.paa differ diff --git a/addons/nametags/UI/soundwave3.paa b/addons/nametags/UI/soundwave3.paa new file mode 100644 index 0000000000..39f3e8e95b Binary files /dev/null and b/addons/nametags/UI/soundwave3.paa differ diff --git a/addons/nametags/UI/soundwave4.paa b/addons/nametags/UI/soundwave4.paa new file mode 100644 index 0000000000..7ab8b6d944 Binary files /dev/null and b/addons/nametags/UI/soundwave4.paa differ diff --git a/addons/nametags/UI/soundwave5.paa b/addons/nametags/UI/soundwave5.paa new file mode 100644 index 0000000000..f3e98d47aa Binary files /dev/null and b/addons/nametags/UI/soundwave5.paa differ diff --git a/addons/nametags/UI/soundwave6.paa b/addons/nametags/UI/soundwave6.paa new file mode 100644 index 0000000000..3f29976c9f Binary files /dev/null and b/addons/nametags/UI/soundwave6.paa differ diff --git a/addons/nametags/UI/soundwave7.paa b/addons/nametags/UI/soundwave7.paa new file mode 100644 index 0000000000..e705c70b42 Binary files /dev/null and b/addons/nametags/UI/soundwave7.paa differ diff --git a/addons/nametags/UI/soundwave8.paa b/addons/nametags/UI/soundwave8.paa new file mode 100644 index 0000000000..e6027d878a Binary files /dev/null and b/addons/nametags/UI/soundwave8.paa differ diff --git a/addons/nametags/UI/soundwave9.paa b/addons/nametags/UI/soundwave9.paa new file mode 100644 index 0000000000..91ddfd02df Binary files /dev/null and b/addons/nametags/UI/soundwave9.paa differ diff --git a/addons/nametags/XEH_postInit.sqf b/addons/nametags/XEH_postInit.sqf index c73ec08cfe..4d9a1341d7 100644 --- a/addons/nametags/XEH_postInit.sqf +++ b/addons/nametags/XEH_postInit.sqf @@ -1,81 +1,26 @@ // by commy2 and CAA-Picard #include "script_component.hpp" +[] call FUNC(initIsSpeaking); + if (!hasInterface) exitWith {}; // Add keybinds -["ACE3", - localize "STR_ACE_NameTags_ShowNames", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; +["ACE3", QGVAR(showNameTags), localize "STR_ACE_NameTags_ShowNames", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; - // Statement - GVAR(ShowNamesTime) = time; - if (call FUNC(canShow)) then{ call FUNC(doShow); }; - // Return false so it doesn't block other actions - false - }, - [29, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + GVAR(ShowNamesTime) = time; + if (call FUNC(canShow)) then{ call FUNC(doShow); }; + // Return false so it doesn't block other actions + false +}, +{false}, +[29, [false, false, false]], false] call cba_fnc_addKeybind; //LeftControl Key // Draw handle -addMissionEventHandler ["Draw3D", { - if (GVAR(showPlayerNames) == 0) exitWith {}; - - _player = ACE_player; - if (GVAR(showPlayerNames) in [2,4]) then { //only on cursor - _target = cursorTarget; - _target = if (_target in allUnitsUAV) then {objNull} else {effectiveCommander _target}; - - if (!isNull _target && {side group _target == playerSide} && {_target != _player} && {isPlayer _target || {GVAR(ShowNamesForAI)}} && {!(_target getVariable ["ACE_hideName", false])}) then { - _distance = _player distance _target; - _alpha = ((1 - 0.2 * (_distance - GVAR(PlayerNamesViewDistance))) min 1) * GVAR(PlayerNamesMaxAlpha); - if ((GVAR(showPlayerNames) in [3,4])) then { //only on keypress - _alpha = _alpha min (1 - (time - GVAR(ShowNamesTime) - 1)); - }; - [_player, _target, _alpha, _distance * 0.026] call FUNC(drawNameTagIcon); - }; - } else { - _pos = positionCameraToWorld [0, 0, 0]; - _targets = _pos nearObjects ["Man", GVAR(PlayerNamesViewDistance) + 5]; - - if (!surfaceIsWater _pos) then { - _pos = ATLtoASL _pos; - }; - _pos2 = positionCameraToWorld [0, 0, 1]; - if (!surfaceIsWater _pos2) then { - _pos2 = ATLtoASL _pos2; - }; - _vecy = _pos2 vectorDiff _pos; - - { - _target = if (_x in allUnitsUAV) then {objNull} else {effectiveCommander _x}; - - if (!isNull _target && {side group _target == playerSide} && {_target != _player} && {isPlayer _target || {GVAR(ShowNamesForAI)}} && {!(_target getVariable ["ACE_hideName", false])}) then { - _relPos = (visiblePositionASL _target) vectorDiff _pos; - _distance = vectorMagnitude _relPos; - _projDist = _relPos vectorDistance (_vecy vectorMultiply (_relPos vectorDotProduct _vecy)); - - _alpha = ((1 - 0.2 * (_distance - GVAR(PlayerNamesViewDistance))) min (1 - 0.15 * (_projDist * 5 - _distance - 3)) min 1) * GVAR(PlayerNamesMaxAlpha); - - if ((GVAR(showPlayerNames) in [3,4])) then { //only on keypress - _alpha = _alpha min (1 - (time - GVAR(ShowNamesTime) - 1)); - }; - - // Check if there is line of sight - if (_alpha > 0) then { - if (lineIntersects [_pos, (visiblePositionASL _target) vectorAdd [0,0,1], vehicle _player, _target]) then { - _alpha = 0; - }; - }; - [_player, _target, _alpha, _distance * 0.026] call FUNC(drawNameTagIcon); - }; - } forEach _targets; - }; -}]; +addMissionEventHandler ["Draw3D", {_this call FUNC(onDraw3d);}]; diff --git a/addons/nametags/XEH_preInit.sqf b/addons/nametags/XEH_preInit.sqf index 79258c5cec..80c06cff1f 100644 --- a/addons/nametags/XEH_preInit.sqf +++ b/addons/nametags/XEH_preInit.sqf @@ -6,7 +6,9 @@ PREP(canShow); PREP(doShow); PREP(drawNameTagIcon); PREP(getVehicleData); +PREP(initIsSpeaking); PREP(moduleNameTags); +PREP(onDraw3d); PREP(onMouseZChanged); PREP(setText); diff --git a/addons/nametags/config.cpp b/addons/nametags/config.cpp index aa55dd2aad..25992c0174 100644 --- a/addons/nametags/config.cpp +++ b/addons/nametags/config.cpp @@ -16,6 +16,12 @@ class CfgPatches { #include "CfgVehicles.hpp" class ACE_Settings { + class GVAR(defaultNametagColor) { + value[] = {0.77, 0.51, 0.08, 1}; + typeName = "COLOR"; + isClientSetable = 1; + displayName = "$STR_ACE_NameTags_DefaultNametagColor"; + }; class GVAR(showPlayerNames) { value = 1; typeName = "SCALAR"; @@ -40,8 +46,19 @@ class ACE_Settings { typeName = "BOOL"; isClientSetable = 1; displayName = "$STR_ACE_NameTags_ShowNamesForAI"; + }; + class GVAR(showCursorTagForVehicles) { + value = 0; + typeName = "BOOL"; + isClientSetable = 0; + }; + class GVAR(showSoundWaves) { + value = 1; + typeName = "SCALAR"; + isClientSetable = 1; + displayName = "$STR_ACE_NameTags_ShowSoundWaves"; + values[] = {"Disabled", "Use Nametag settings", "Always Show All"}; }; - class GVAR(PlayerNamesViewDistance) { value = 5; typeName = "SCALAR"; diff --git a/addons/nametags/functions/fnc_drawNameTagIcon.sqf b/addons/nametags/functions/fnc_drawNameTagIcon.sqf index af3932f118..8ccbfc9b4a 100644 --- a/addons/nametags/functions/fnc_drawNameTagIcon.sqf +++ b/addons/nametags/functions/fnc_drawNameTagIcon.sqf @@ -4,16 +4,18 @@ * Draw the nametag and rank icon. * * Argument: - * 0: Unit (Array) - * 1: alpha (Number) - * 2: Height offset (Number) + * 0: Unit (Player) + * 1: Target + * 2: alpha (Number) + * 4: Height offset (Number) + * 5: Draw Type * * Return value: * None. */ #include "script_component.hpp" - + #define TEXTURES_RANKS [ \ "", \ "\A3\Ui_f\data\GUI\Cfg\Ranks\private_gs.paa", \ @@ -23,41 +25,58 @@ "\A3\Ui_f\data\GUI\Cfg\Ranks\captain_gs.paa", \ "\A3\Ui_f\data\GUI\Cfg\Ranks\major_gs.paa", \ "\A3\Ui_f\data\GUI\Cfg\Ranks\colonel_gs.paa" \ -] + ] -private ["_player", "_target", "_alpha", "_heightOffset", "_height", "_position", "_color", "_name", "_rank", "_size"]; +private ["_height", "_position", "_color", "_name", "_rank", "_size"]; -_player = _this select 0; -_target = _this select 1; -_alpha = _this select 2; -_heightOffset = _this select 3; +PARAMS_5(_player,_target,_alpha,_heightOffset,_iconType); -_height = [2, 1.5, 1, 1.5, 1] select (["STAND", "CROUCH", "PRONE", "UNDEFINED", ""] find stance _target); +if (_alpha < 0) exitWith {}; //Don't waste time if not visable +if (_iconType == ICON_NONE) exitWith {}; //Don't waste time if not visable -_position = visiblePositionASL _target; -// Convert position to ASLW (expected by drawIcon3D) and add height offsets -_position set [2, ((_target modelToWorld [0,0,0]) select 2) + _height + _heightOffset]; -_color = if !(group _target == group _player) then { - [0.77, 0.51, 0.08, _alpha] +//Set Text: +_name = if (_iconType in [ICON_NAME, ICON_NAME_RANK, ICON_NAME_SPEAK]) then { + [_target, true] call EFUNC(common,getName) } else { - [[1, 1, 1, _alpha], [1, 0, 0, _alpha], [0, 1, 0, _alpha], [0, 0, 1, _alpha], [1, 1, 0, _alpha]] select (["MAIN", "RED", "GREEN", "BLUE", "YELLOW"] find (if (_target == _player) then {0} else {assignedTeam _target})) max 0 + "" }; -_name = [_target, true] call EFUNC(common,getName); +//Set Icon: +_icon = ""; +_size = 0; +if ((_iconType == ICON_NAME_SPEAK) || (_iconType == ICON_SPEAK)) then { + _icon = QUOTE(PATHTOF(UI\soundwave)) + str (floor (random 10)) + ".paa"; + _size = 0.75; + _alpha = _alpha + 0.6;//Boost alpha when speaking +} else { + if (_iconType == ICON_NAME_RANK) then { + _icon = TEXTURES_RANKS select ((["PRIVATE", "CORPORAL", "SERGEANT", "LIEUTENANT", "CAPTAIN", "MAJOR", "COLONEL"] find (rank _target)) + 1); + _size = 0.75; + }; +}; -_rank = TEXTURES_RANKS select ((["PRIVATE", "CORPORAL", "SERGEANT", "LIEUTENANT", "CAPTAIN", "MAJOR", "COLONEL"] find rank _target) + 1); -_size = [0, 1] select GVAR(showPlayerRanks); +//Set Color: +if !(group _target == group _player) then { + _color = +GVAR(defaultNametagColor); //Make a copy, then multiply both alpha values (allows client to decrease alpha in settings) + _color set [3, (_color select 3) * _alpha]; +} else { + _color = [[1, 1, 1, _alpha], [1, 0, 0, _alpha], [0, 1, 0, _alpha], [0, 0, 1, _alpha], [1, 1, 0, _alpha]] select (["MAIN", "RED", "GREEN", "BLUE", "YELLOW"] find (if (_target == _player) then {0} else {assignedTeam _target})) max 0 +}; + +_height = [2, 1.5, 1, 1.5, 1] select (["STAND", "CROUCH", "PRONE", "UNDEFINED", ""] find (stance _target)); +// Convert position to ASLW (expected by drawIcon3D) and add height offsets +_position = _target modelToWorldVisual [0, 0, (_height + _heightOffset)]; drawIcon3D [ - _rank, - _color, - _position, - _size, - _size, - 0, - _name, - 2, - 0.033, - "PuristaMedium" +_icon, +_color, +_position, +_size, +_size, +0, +_name, +2, +0.033, +"PuristaMedium" ]; diff --git a/addons/nametags/functions/fnc_initIsSpeaking.sqf b/addons/nametags/functions/fnc_initIsSpeaking.sqf new file mode 100644 index 0000000000..b7dc920fa2 --- /dev/null +++ b/addons/nametags/functions/fnc_initIsSpeaking.sqf @@ -0,0 +1,76 @@ +/* + * Author: Glowbal, PabstMirror + * Starts up a PFEH to monitor the when players are talking. + * Compatiblity with TFR/ACRE and Arma's VON + * + * Arguments: + * NONE + * + * Return Value: + * NONE + * + * Example: + * [] call ACE_nametags_fnc_initIsSpeaking + * + * Public: No + */ +#include "script_component.hpp" + +if (isServer) then { + //If someone disconnects while speaking, reset their variable + addMissionEventHandler ["HandleDisconnect", { + PARAMS_1(_disconnectedPlayer); + if (_disconnectedPlayer getVariable [QGVAR(isSpeaking), false]) then { + _disconnectedPlayer setVariable [QGVAR(isSpeaking), false, true]; + }; + }]; +}; + +if (!hasInterface) exitWith {}; + +["playerChanged", { + //When player changes, make sure to reset old unit's variable + PARAMS_2(_newUnit,_oldUnit); + if (_oldUnit getVariable [QGVAR(isSpeaking), false]) then { + _oldUnit setVariable [QGVAR(isSpeaking), false, true]; + }; +}] call EFUNC(common,addEventHandler); + + +//For performance, chose different code paths at mission start based on installed mods (once, instead of checking each time) +_pfEHCode = switch (true) do { +case (isClass (configFile >> "cfgPatches" >> "acre_api")): { + { + _oldSetting = ACE_player getVariable [QGVAR(isSpeaking), false]; + _newSetting = ([ACE_player] call ACRE_api_fnc_isBroadcasting) || {!(isNull findDisplay 55)}; + if (!(_oldSetting isEqualTo _newSetting)) then { + ACE_player setVariable [QGVAR(isSpeaking), _newSetting, true]; + }; + }; + }; +case (isClass (configFile >> "cfgPatches" >> "task_force_radio")): { + //Note: TFAR has a TFAR_fnc_isSpeaking function, but it has a fairly costly `callExtension` + //I think it's much faster to use the internal "tf_isSpeaking" variable + //If we don't care about the built-in VON, we could switch this to a pure event driven system + { + _oldSetting = ACE_player getVariable [QGVAR(isSpeaking), false]; + _newSetting = (ACE_player getVariable ["tf_isSpeaking", false]) || {!(isNull findDisplay 55)}; + if (!(_oldSetting isEqualTo _newSetting)) then { + ACE_player setVariable [QGVAR(isSpeaking), _newSetting, true]; + }; + }; + }; + default { + //Note: class RscDisplayVoiceChat {idd = 55}; //only present when talking + { + _oldSetting = ACE_player getVariable [QGVAR(isSpeaking), false]; + _newSetting = (!(isNull findDisplay 55)); + if (!(_oldSetting isEqualTo _newSetting)) then { + ACE_player setVariable [QGVAR(isSpeaking), _newSetting, true]; + }; + }; + }; +}; + +//Is 0.05sec precision enough?? +[_pfEHCode, 0.05, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/nametags/functions/fnc_moduleNameTags.sqf b/addons/nametags/functions/fnc_moduleNameTags.sqf index 24b30e5d6b..a998e5d8a3 100644 --- a/addons/nametags/functions/fnc_moduleNameTags.sqf +++ b/addons/nametags/functions/fnc_moduleNameTags.sqf @@ -25,5 +25,6 @@ GVAR(Module) = true; [_logic, QGVAR(PlayerNamesViewDistance), "PlayerNamesViewDistance" ] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(ShowNamesForAI), "ShowNamesForAI" ] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(showVehicleCrewInfo), "showVehicleCrewInfo" ] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(showCursorTagForVehicles), "showCursorTagForVehicles" ] call EFUNC(common,readSettingFromModule); diag_log text "[ACE]: NameTags Module Initialized."; diff --git a/addons/nametags/functions/fnc_onDraw3d.sqf b/addons/nametags/functions/fnc_onDraw3d.sqf new file mode 100644 index 0000000000..8aa503d377 --- /dev/null +++ b/addons/nametags/functions/fnc_onDraw3d.sqf @@ -0,0 +1,108 @@ +#include "script_component.hpp" + +_player = ACE_player; + +//don't show nametags in spectator +if (!alive _player) exitWith {}; + +_onKeyPressAlphaMax = if ((GVAR(showPlayerNames) in [3,4])) then { + 2 + (GVAR(ShowNamesTime) - time); //after release 1 second of full opacity, 1 second of fading to 0 +} else { + 1 +}; + +_defaultIcon = if (GVAR(showPlayerRanks)) then { + ICON_NAME_RANK; +} else { + ICON_NAME; +}; + +//When cursorTarget is on a vehicle show the nametag for the commander. +//If set to "Only On Keypress" settings, fade just like main tags +if (GVAR(showCursorTagForVehicles) && {_onKeyPressAlphaMax > 0}) then { + _target = cursorTarget; + if ((!(_target isKindOf "CAManBase")) && {!(_target in allUnitsUAV)}) then { + _target = effectiveCommander _target; + if ((!isNull _target) && + {(side (group _target)) == (side (group _player))} && + {_target != _player} && + {GVAR(ShowNamesForAI) || {[_target] call EFUNC(common,isPlayer)}} && + {!(_target getVariable ["ACE_hideName", false])}) then { + _distance = _player distance _target; + _alpha = ((1 - 0.2 * (_distance - GVAR(PlayerNamesViewDistance))) min 1) * GVAR(PlayerNamesMaxAlpha); + _alpha = _alpha min _onKeyPressAlphaMax; + [_player, _target, _alpha, _distance * 0.026, _defaultIcon] call FUNC(drawNameTagIcon); + }; + }; +}; + +//"Only Cursor" mode, only show nametags for humans on cursorTarget +if ((GVAR(showPlayerNames) in [2,4]) && {_onKeyPressAlphaMax > 0}) then { + _target = cursorTarget; + if ((!isNull _target) && + {_target isKindOf "CAManBase"} && + {(side (group _target)) == (side (group _player))} && + {_target != _player} && + {GVAR(ShowNamesForAI) || {[_target] call EFUNC(common,isPlayer)}} && + {!(_target getVariable ["ACE_hideName", false])}) then { + _distance = _player distance _target; + _alpha = ((1 - 0.2 * (_distance - GVAR(PlayerNamesViewDistance))) min 1) * GVAR(PlayerNamesMaxAlpha); + _alpha = _alpha min _onKeyPressAlphaMax; + _icon = ICON_NONE; + if (GVAR(showSoundWaves) == 2) then { //icon will be drawn below, so only show name here + _icon = if ((_target getVariable [QGVAR(isSpeaking), false]) && {(vehicle _target) == _target}) then {ICON_NAME} else {_defaultIcon}; + } else { + _icon = if ((_target getVariable [QGVAR(isSpeaking), false]) && {(vehicle _target) == _target} && {GVAR(showSoundWaves) > 0}) then {ICON_NAME_SPEAK} else {_defaultIcon}; + }; + + [_player, _target, _alpha, _distance * 0.026, _icon] call FUNC(drawNameTagIcon); + }; +}; + +if (((GVAR(showPlayerNames) in [1,3]) && {_onKeyPressAlphaMax > 0}) || {GVAR(showSoundWaves) == 2}) then { + _pos = positionCameraToWorld [0, 0, 0]; + _targets = _pos nearObjects ["CAManBase", GVAR(PlayerNamesViewDistance) + 5]; + + if (!surfaceIsWater _pos) then { + _pos = ATLtoASL _pos; + }; + _pos2 = positionCameraToWorld [0, 0, 1]; + if (!surfaceIsWater _pos2) then { + _pos2 = ATLtoASL _pos2; + }; + _vecy = _pos2 vectorDiff _pos; + + { + _target = _x; + + _icon = ICON_NONE; + if ((GVAR(showPlayerNames) in [1,3]) && {_onKeyPressAlphaMax > 0}) then { + if ((_target getVariable [QGVAR(isSpeaking), false]) && {(vehicle _target) == _target} && {GVAR(showSoundWaves) > 0}) then {_icon = ICON_NAME_SPEAK;} else {_icon = _defaultIcon}; + } else { + //showSoundWaves must be 2, only draw speak icon + if ((_target getVariable [QGVAR(isSpeaking), false]) && {(vehicle _target) == _target}) then {_icon = ICON_SPEAK;}; + }; + + if ((_icon != ICON_NONE) && + {(side (group _target)) == (side (group _player))} && + {_target != _player} && + {GVAR(ShowNamesForAI) || {[_target] call EFUNC(common,isPlayer)}} && + {!(_target getVariable ["ACE_hideName", false])}) then { + + if (lineIntersects [_pos, (visiblePositionASL _target) vectorAdd [0,0,1], vehicle _player, _target]) exitWith {}; // Check if there is line of sight + _relPos = (visiblePositionASL _target) vectorDiff _pos; + _distance = vectorMagnitude _relPos; + _projDist = _relPos vectorDistance (_vecy vectorMultiply (_relPos vectorDotProduct _vecy)); + + _alpha = ((1 - 0.2 * (_distance - GVAR(PlayerNamesViewDistance))) min (1 - 0.15 * (_projDist * 5 - _distance - 3)) min 1) * GVAR(PlayerNamesMaxAlpha); + + if ((GVAR(showSoundWaves) == 2) && {(_target getVariable [QGVAR(isSpeaking), false]) && {(vehicle _target) == _target}}) then { + _alpha = 1; + } else { + _alpha = _alpha min _onKeyPressAlphaMax; + }; + + [_player, _target, _alpha, _distance * 0.026, _icon] call FUNC(drawNameTagIcon); + }; + } forEach _targets; +}; diff --git a/addons/nametags/script_component.hpp b/addons/nametags/script_component.hpp index 6cffb95618..e80768a723 100644 --- a/addons/nametags/script_component.hpp +++ b/addons/nametags/script_component.hpp @@ -9,4 +9,10 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_NAMETAGS #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp" + +#define ICON_NONE 0 +#define ICON_NAME 1 +#define ICON_NAME_RANK 2 +#define ICON_NAME_SPEAK 3 +#define ICON_SPEAK 4 diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 9cd99adaef..622df44aca 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -69,5 +69,13 @@ Show name tags for AI units + + Show SoundWaves (requires player names) + Zeigen Schallwelle (benötigt spielernamen) + Mostrar onda sonora (requiere Mostrar nombres de jugadores) + + + Default Nametag Color (Non Group Members) + - + \ No newline at end of file diff --git a/addons/nightvision/CfgEventHandlers.hpp b/addons/nightvision/CfgEventHandlers.hpp index d76482dd7f..380f190f47 100644 --- a/addons/nightvision/CfgEventHandlers.hpp +++ b/addons/nightvision/CfgEventHandlers.hpp @@ -1,19 +1,19 @@ class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_preInit) ); - }; + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit) ); + }; }; class Extended_PostInit_EventHandlers { - class ADDON { - clientInit = QUOTE(call COMPILE_FILE(XEH_postInitClient) ); - }; + class ADDON { + clientInit = QUOTE(call COMPILE_FILE(XEH_postInitClient) ); + }; }; class Extended_FiredBIS_EventHandlers { - class AllVehicles { - class ADDON { - clientFiredBIS = QUOTE( _this call FUNC(blending) ); + class AllVehicles { + class ADDON { + clientFiredBIS = QUOTE( _this call FUNC(blending) ); + }; }; - }; }; diff --git a/addons/nightvision/CfgVehicles.hpp b/addons/nightvision/CfgVehicles.hpp index 63abfb47e2..84e7105f0b 100644 --- a/addons/nightvision/CfgVehicles.hpp +++ b/addons/nightvision/CfgVehicles.hpp @@ -1,22 +1,17 @@ class CfgVehicles { - class All { - ACE_NightVision_grain = 0.75; - ACE_NightVision_blur = 0.055; - }; - - #define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ - }; - - class Box_NATO_Support_F; - class ACE_Box_Misc: Box_NATO_Support_F { - class TransportItems { - MACRO_ADDITEM(ACE_NVG_Gen1,6) - MACRO_ADDITEM(ACE_NVG_Gen2,6) - //MACRO_ADDITEM(ACE_NVG_Gen3,6) - MACRO_ADDITEM(ACE_NVG_Gen4,6) - MACRO_ADDITEM(ACE_NVG_Wide,6) + class All { + ACE_NightVision_grain = 0.75; + ACE_NightVision_blur = 0.055; + }; + + class Box_NATO_Support_F; + class ACE_Box_Misc: Box_NATO_Support_F { + class TransportItems { + MACRO_ADDITEM(ACE_NVG_Gen1,6); + MACRO_ADDITEM(ACE_NVG_Gen2,6); + //MACRO_ADDITEM(ACE_NVG_Gen3,6); + MACRO_ADDITEM(ACE_NVG_Gen4,6); + MACRO_ADDITEM(ACE_NVG_Wide,6); + }; }; - }; }; diff --git a/addons/nightvision/CfgWeapons.hpp b/addons/nightvision/CfgWeapons.hpp index 99cc55db20..c40885c2c4 100644 --- a/addons/nightvision/CfgWeapons.hpp +++ b/addons/nightvision/CfgWeapons.hpp @@ -1,56 +1,56 @@ class CfgWeapons { - class Binocular; - class NVGoggles: Binocular { - displayName = "$STR_ACE_NightVision_NVG_Gen3_brown"; - ACE_NightVision_grain = 0.75; - ACE_NightVision_blur = 0.055; - ACE_NightVision_radBlur = 0.001; - }; - class NVGoggles_OPFOR: NVGoggles { - displayName = "$STR_ACE_NightVision_NVG_Gen3_black"; - }; - class NVGoggles_INDEP: NVGoggles { - displayName = "$STR_ACE_NightVision_NVG_Gen3_green"; - }; + class Binocular; + class NVGoggles: Binocular { + displayName = "$STR_ACE_NightVision_NVG_Gen3_brown"; + ACE_NightVision_grain = 0.75; + ACE_NightVision_blur = 0.055; + ACE_NightVision_radBlur = 0.001; + }; + class NVGoggles_OPFOR: NVGoggles { + displayName = "$STR_ACE_NightVision_NVG_Gen3_black"; + }; + class NVGoggles_INDEP: NVGoggles { + displayName = "$STR_ACE_NightVision_NVG_Gen3_green"; + }; - class ACE_NVG_Gen1: NVGoggles_OPFOR { - author = "$STR_ACE_Common_ACETeam"; - modelOptics = "\A3\weapons_f\reticle\optics_night"; - displayName = "$STR_ACE_NightVision_NVG_Gen1"; - ACE_NightVision_grain = 2.25; - ACE_NightVision_blur = 0.22; - ACE_NightVision_radBlur = 0.004; - }; - class ACE_NVG_Gen2: NVGoggles_INDEP { - author = "$STR_ACE_Common_ACETeam"; - modelOptics = "\A3\weapons_f\reticle\optics_night"; - displayName = "$STR_ACE_NightVision_NVG_Gen2"; - ACE_NightVision_grain = 1.5; - ACE_NightVision_blur = 0.11; - ACE_NightVision_radBlur = 0.002; - }; - /*class ACE_NVG_Gen3: NVGoggles { + class ACE_NVG_Gen1: NVGoggles_OPFOR { + author = "$STR_ACE_Common_ACETeam"; + modelOptics = "\A3\weapons_f\reticle\optics_night"; + displayName = "$STR_ACE_NightVision_NVG_Gen1"; + ACE_NightVision_grain = 2.25; + ACE_NightVision_blur = 0.22; + ACE_NightVision_radBlur = 0.004; + }; + class ACE_NVG_Gen2: NVGoggles_INDEP { + author = "$STR_ACE_Common_ACETeam"; + modelOptics = "\A3\weapons_f\reticle\optics_night"; + displayName = "$STR_ACE_NightVision_NVG_Gen2"; + ACE_NightVision_grain = 1.5; + ACE_NightVision_blur = 0.11; + ACE_NightVision_radBlur = 0.002; + }; + /*class ACE_NVG_Gen3: NVGoggles { author = "$STR_ACE_Common_ACETeam"; modelOptics = "\A3\weapons_f\reticle\optics_night"; displayName = "$STR_ACE_NightVision_NVG_Gen3"; ACE_NightVision_grain = 0.75; ACE_NightVision_blur = 0.055; ACE_NightVision_radBlur = 0.001; - };*/ - class ACE_NVG_Gen4: NVGoggles { - author = "$STR_ACE_Common_ACETeam"; - modelOptics = "\A3\weapons_f\reticle\optics_night"; - displayName = "$STR_ACE_NightVision_NVG_Gen4"; - ACE_NightVision_grain = 0.0; - ACE_NightVision_blur = 0.0; - ACE_NightVision_radBlur = 0.0; - }; - class ACE_NVG_Wide: NVGoggles { - author = "$STR_ACE_Common_ACETeam"; - modelOptics = QUOTE(PATHTOF(ACE_nvg_wide_optics)); - displayName = "$STR_ACE_NightVision_NVG_FullScreen"; - ACE_NightVision_grain = 0.75; - ACE_NightVision_blur = 0.055; - ACE_NightVision_radBlur = 0.001; - }; +};*/ + class ACE_NVG_Gen4: NVGoggles { + author = "$STR_ACE_Common_ACETeam"; + modelOptics = "\A3\weapons_f\reticle\optics_night"; + displayName = "$STR_ACE_NightVision_NVG_Gen4"; + ACE_NightVision_grain = 0.0; + ACE_NightVision_blur = 0.0; + ACE_NightVision_radBlur = 0.0; + }; + class ACE_NVG_Wide: NVGoggles { + author = "$STR_ACE_Common_ACETeam"; + modelOptics = QUOTE(PATHTOF(models\ACE_nvg_wide_optics)); + displayName = "$STR_ACE_NightVision_NVG_FullScreen"; + ACE_NightVision_grain = 0.75; + ACE_NightVision_blur = 0.055; + ACE_NightVision_radBlur = 0.001; + }; }; diff --git a/addons/nightvision/XEH_postInitClient.sqf b/addons/nightvision/XEH_postInitClient.sqf index b81bedc07b..65d6e8c45f 100644 --- a/addons/nightvision/XEH_postInitClient.sqf +++ b/addons/nightvision/XEH_postInitClient.sqf @@ -35,3 +35,32 @@ GVAR(ppEffectMuzzleFlash) ppEffectCommit 0; ["cameraViewChanged", {_this call FUNC(updatePPEffects)}] call EFUNC(common,addEventHandler); ["playerVehicleChanged", {_this call FUNC(updatePPEffects)}] call EFUNC(common,addEventHandler); ["playerTurretChanged", {_this call FUNC(updatePPEffects)}] call EFUNC(common,addEventHandler); + +// Add keybinds +["ACE3", QGVAR(IncreaseNVGBrightness), localize "STR_ACE_NightVision_IncreaseNVGBrightness", +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotEscorting"]] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if ((currentVisionMode _player != 1)) exitWith {false}; + + // Statement + [ACE_player, 1] call FUNC(changeNVGBrightness); + true +}, +{false}, +[201, [false, false, true]], false] call cba_fnc_addKeybind; //PageUp + ALT + +["ACE3", QGVAR(DecreaseNVGBrightness), localize "STR_ACE_NightVision_DecreaseNVGBrightness", +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotEscorting"]] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if ((currentVisionMode _player != 1)) exitWith {false}; + + // Statement + [ACE_player, -1] call FUNC(changeNVGBrightness); + true +}, +{false}, +[209, [false, false, true]], false] call cba_fnc_addKeybind; //PageDown + ALT diff --git a/addons/nightvision/XEH_preInit.sqf b/addons/nightvision/XEH_preInit.sqf index 9f59a01418..27f8ea7d48 100644 --- a/addons/nightvision/XEH_preInit.sqf +++ b/addons/nightvision/XEH_preInit.sqf @@ -3,8 +3,7 @@ ADDON = false; PREP(blending); -PREP(decreaseNVGBrightness); -PREP(increaseNVGBrightness); +PREP(changeNVGBrightness); PREP(updatePPEffects); ADDON = true; diff --git a/addons/nightvision/config.cpp b/addons/nightvision/config.cpp index 32c563bfb6..4e6aa2e39a 100644 --- a/addons/nightvision/config.cpp +++ b/addons/nightvision/config.cpp @@ -1,42 +1,17 @@ #include "script_component.hpp" class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {"ACE_NVG_Gen1", "ACE_NVG_Gen2", /*"ACE_NVG_Gen3",*/ "ACE_NVG_Gen4", "ACE_NVG_Wide"}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common"}; - author[] = {"commy2", "KoffeinFlummi", "PabstMirror"}; - authorUrl = "https://github.com/commy2/"; - VERSION_CONFIG; - }; + class ADDON { + units[] = {}; + weapons[] = {"ACE_NVG_Gen1", "ACE_NVG_Gen2", /*"ACE_NVG_Gen3",*/ "ACE_NVG_Gen4", "ACE_NVG_Wide"}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author[] = {"commy2", "KoffeinFlummi", "PabstMirror"}; + authorUrl = "https://github.com/commy2/"; + VERSION_CONFIG; + }; }; #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" - - -// class EGVAR(common,Default_Keys) { //??? -class ACE_common_Default_Keys { - class increaseNVGBrightness { - displayName = "$STR_ACE_NightVision_IncreaseNVGBrightness"; - condition = QUOTE( currentVisionMode _player == 1 ); - statement = QUOTE( [_player, _vehicle] call FUNC(increaseNVGBrightness) ); - key = 201; - shift = 0; - control = 0; - alt = 1; - allowHolding = 1; - }; - class decreaseNVGBrightness { - displayName = "$STR_ACE_NightVision_DecreaseNVGBrightness"; - condition = QUOTE( currentVisionMode _player == 1 ); - statement = QUOTE( [_player, _vehicle] call FUNC(decreaseNVGBrightness) ); - key = 209; - shift = 0; - control = 0; - alt = 1; - allowHolding = 1; - }; -}; diff --git a/addons/nightvision/functions/fnc_blending.sqf b/addons/nightvision/functions/fnc_blending.sqf index df46c62b58..96e7f404a5 100644 --- a/addons/nightvision/functions/fnc_blending.sqf +++ b/addons/nightvision/functions/fnc_blending.sqf @@ -1,4 +1,24 @@ -// by commy2 +/* + * Author: commy2 + * Change the blending when the player fires?? + * + * Arguments: + * 0: unit - Object the event handler is assigned to + * 1: weapon - Fired weapon + * 2: muzzle - Muzzle that was used + * 3: mode - Current mode of the fired weapon + * 4: ammo - Ammo used + * 5: magazine - magazine name which was used + * 6: projectile - Object of the projectile that was shot + * + * Return Value: + * Nothing + * + * Example: + * [clientFiredBIS-XEH] call ace_nightvision_fnc_blending + * + * Public: No + */ #include "script_component.hpp" private ["_vehicle", "_weapon", "_ammo", "_magazine", "_player"]; @@ -8,26 +28,26 @@ _weapon = _this select 1; _ammo = _this select 4; _magazine = _this select 5; -if ((_vehicle != (vehicle ACE_player)) || {(currentVisionMode _vehicle) != 1}) exitWith {}; - _player = ACE_player; - +//If our vehicle didn't shoot, or we're not in NVG mode, exit +if ((_vehicle != (vehicle _player)) || {(currentVisionMode _player) != 1}) exitWith {}; +//If we are mounted, and it wasn't our weapon system that fired, exit if (_player != _vehicle && {!(_weapon in (_vehicle weaponsTurret ([_player] call EFUNC(common,getTurretIndex))))}) exitWith {}; private ["_silencer", "_visibleFireCoef", "_visibleFireTimeCoef", "_visibleFire", "_visibleFireTime", "_nvgBrightnessCoef", "_fnc_isTracer", "_darkness"]; _silencer = switch (_weapon) do { - case (primaryWeapon _player) : {primaryWeaponItems _player select 0}; - case (secondaryWeapon _player) : {secondaryWeaponItems _player select 0}; - case (handgunWeapon _player) : {handgunItems _player select 0}; - default {""}; +case (primaryWeapon _player) : {primaryWeaponItems _player select 0}; +case (secondaryWeapon _player) : {secondaryWeaponItems _player select 0}; +case (handgunWeapon _player) : {handgunItems _player select 0}; + default {""}; }; _visibleFireCoef = 1; _visibleFireTimeCoef = 1; if (_silencer != "") then { - _visibleFireCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "visibleFire"); - _visibleFireTimeCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "visibleFireTime"); + _visibleFireCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "visibleFire"); + _visibleFireTimeCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "visibleFireTime"); }; _visibleFire = getNumber (configFile >> "CfgAmmo" >> _ammo >> "visibleFire"); @@ -36,24 +56,24 @@ _visibleFireTime = getNumber (configFile >> "CfgAmmo" >> _ammo >> "visibleFireTi _nvgBrightnessCoef = 1 + (_player getVariable [QGVAR(NVGBrightness), 0]) / 4; _fnc_isTracer = { - private ["_indexShot", "_lastRoundsTracer", "_tracersEvery"]; + private ["_indexShot", "_lastRoundsTracer", "_tracersEvery"]; - if (getNumber (configFile >> "CfgAmmo" >> _ammo >> "nvgOnly") > 0) exitWith {false}; + if (getNumber (configFile >> "CfgAmmo" >> _ammo >> "nvgOnly") > 0) exitWith {false}; - _indexShot = (_player ammo _weapon) + 1; + _indexShot = (_player ammo _weapon) + 1; - _lastRoundsTracer = getNumber (configFile >> "CfgMagazines" >> _magazine >> "lastRoundsTracer"); - if (_indexShot <= _lastRoundsTracer) exitWith {true}; + _lastRoundsTracer = getNumber (configFile >> "CfgMagazines" >> _magazine >> "lastRoundsTracer"); + if (_indexShot <= _lastRoundsTracer) exitWith {true}; - _tracersEvery = getNumber (configFile >> "CfgMagazines" >> _magazine >> "tracersEvery"); - if (_tracersEvery == 0) exitWith {false}; + _tracersEvery = getNumber (configFile >> "CfgMagazines" >> _magazine >> "tracersEvery"); + if (_tracersEvery == 0) exitWith {false}; - (_indexShot - _lastRoundsTracer) % _tracersEvery == 0 + (_indexShot - _lastRoundsTracer) % _tracersEvery == 0 }; if (call _fnc_isTracer) then { - _visibleFire = _visibleFire + 2; - _visibleFireTime = _visibleFireTime + 2; + _visibleFire = _visibleFire + 2; + _visibleFireTime = _visibleFireTime + 2; }; _darkness = 1 - (call EFUNC(common,ambientBrightness)); diff --git a/addons/nightvision/functions/fnc_changeNVGBrightness.sqf b/addons/nightvision/functions/fnc_changeNVGBrightness.sqf new file mode 100644 index 0000000000..e1894aba00 --- /dev/null +++ b/addons/nightvision/functions/fnc_changeNVGBrightness.sqf @@ -0,0 +1,33 @@ +/* + * Author: commy2 + * Change the brightness of the unit's NVG + * + * Arguments: + * 0: The Unit + * 1: Change in brightness (1 or -1) + * + * Return Value: + * Nothing + * + * Example: + * [player, 1] call ace_nightvision_fnc_changeNVGBrightness + * + * Public: No + */ +#include "script_component.hpp" + +private ["_brightness"]; + +PARAMS_2(_player,_changeInBrightness); + +_brightness = _player getVariable [QGVAR(NVGBrightness), 0]; + +_brightness = ((round (10 * _brightness + _changeInBrightness) / 10) min 1) max -1; + +_player setVariable [QGVAR(NVGBrightness), _brightness, false]; + +GVAR(ppEffectNVGBrightness) ppEffectAdjust [1, 1, _brightness / 4, [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]]; +GVAR(ppEffectNVGBrightness) ppEffectCommit 0; + +[format [(localize "STR_ACE_NightVision_NVGBrightness"), (_brightness * 100)]] call EFUNC(common,displayTextStructured); +playSound "ACE_Sound_Click"; diff --git a/addons/nightvision/functions/fnc_decreaseNVGBrightness.sqf b/addons/nightvision/functions/fnc_decreaseNVGBrightness.sqf deleted file mode 100644 index 0fb2de9d33..0000000000 --- a/addons/nightvision/functions/fnc_decreaseNVGBrightness.sqf +++ /dev/null @@ -1,21 +0,0 @@ -// by commy2 -#include "script_component.hpp" - -private ["_player", "_vehicle", "_brightness"]; - -_player = _this select 0; -_vehicle = _this select 1; - -_brightness = _player getVariable [QGVAR(NVGBrightness), 0]; - -if (_brightness > -1) then { - _brightness = round (10 * _brightness - 1) / 10; - - _player setVariable [QGVAR(NVGBrightness), _brightness, false]; - - GVAR(ppEffectNVGBrightness) ppEffectAdjust [1, 1, _brightness / 4, [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]]; - GVAR(ppEffectNVGBrightness) ppEffectCommit 0; - - [format [localize "STR_ACE_NightVision_NVGBrightness", format ["%1%", _brightness * 100]]] call EFUNC(common,displayTextStructured); - playSound "ACE_Sound_Click"; -}; diff --git a/addons/nightvision/functions/fnc_increaseNVGBrightness.sqf b/addons/nightvision/functions/fnc_increaseNVGBrightness.sqf deleted file mode 100644 index e2143d5a5e..0000000000 --- a/addons/nightvision/functions/fnc_increaseNVGBrightness.sqf +++ /dev/null @@ -1,21 +0,0 @@ -// by commy2 -#include "script_component.hpp" - -private ["_player", "_vehicle", "_brightness"]; - -_player = _this select 0; -_vehicle = _this select 1; - -_brightness = _player getVariable [QGVAR(NVGBrightness), 0]; - -if (_brightness < 1) then { - _brightness = round (10 * _brightness + 1) / 10; - - _player setVariable [QGVAR(NVGBrightness), _brightness, false]; - - GVAR(ppEffectNVGBrightness) ppEffectAdjust [1, 1, _brightness / 4, [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]]; - GVAR(ppEffectNVGBrightness) ppEffectCommit 0; - - [format [localize "STR_ACE_NightVision_NVGBrightness", format ["%1%", _brightness * 100]]] call EFUNC(common,displayTextStructured); - playSound "ACE_Sound_Click"; -}; diff --git a/addons/nightvision/functions/fnc_updatePPEffects.sqf b/addons/nightvision/functions/fnc_updatePPEffects.sqf index 1fdfbb9778..3edfe28e74 100644 --- a/addons/nightvision/functions/fnc_updatePPEffects.sqf +++ b/addons/nightvision/functions/fnc_updatePPEffects.sqf @@ -1,4 +1,18 @@ -//by commy2, PabstMirror and CAA-Picard +/* + * Author: commy2, PabstMirror and CAA-Picard + * Update the ppEffects everytime something changes + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * [someEvent] call ace_nightvision_fnc_updatePPEffects + * + * Public: No + */ #include "script_component.hpp" private ["_currentVehicle", "_grainSetting", "_blurSetting", "_radBlurSetting", "_config"]; diff --git a/addons/nightvision/ace_nvg_wide_optics.p3d b/addons/nightvision/models/ace_nvg_wide_optics.p3d similarity index 100% rename from addons/nightvision/ace_nvg_wide_optics.p3d rename to addons/nightvision/models/ace_nvg_wide_optics.p3d diff --git a/addons/optionsmenu/config.cpp b/addons/optionsmenu/config.cpp index 51a614bb5a..7850e5972e 100644 --- a/addons/optionsmenu/config.cpp +++ b/addons/optionsmenu/config.cpp @@ -6,8 +6,8 @@ class CfgPatches { weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; - author[] = {"Combat Space Enhancement"}; - authorUrl = "http://csemod.com"; + author[] = {"Glowbal", "PabstMirror"}; + authorUrl = "http://github.com/Glowbal"; VERSION_CONFIG; }; }; @@ -24,4 +24,4 @@ class CfgAddons { #include "CfgEventHandlers.hpp" #include "gui\define.hpp" #include "gui\settingsMenu.hpp" -#include "gui\pauseMenu.hpp" \ No newline at end of file +#include "gui\pauseMenu.hpp" diff --git a/addons/optionsmenu/functions/fnc_onListBoxSettingsChanged.sqf b/addons/optionsmenu/functions/fnc_onListBoxSettingsChanged.sqf index 066bc76a8f..5846d0dccb 100644 --- a/addons/optionsmenu/functions/fnc_onListBoxSettingsChanged.sqf +++ b/addons/optionsmenu/functions/fnc_onListBoxSettingsChanged.sqf @@ -1,12 +1,19 @@ -/** -* fnc_onListBoxSettingsChanged.sqf -* @Descr: N/A -* @Author: Glowbal -* -* @Arguments: [] -* @Return: -* @PublicAPI: false -*/ +/* + * Author: Glowbal + * Called when the listbox selection is changed for an options (eg: chaning a setting from false to true) + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ACE_optionsmenu_fnc_onListBoxSettingsChanged + * + * Public: No + */ + #include "script_component.hpp" private ["_settingIndex", "_rightDropDownIndex"]; diff --git a/addons/optionsmenu/functions/fnc_onListBoxShowSelectionChanged.sqf b/addons/optionsmenu/functions/fnc_onListBoxShowSelectionChanged.sqf index f4d41674bd..25fd99b5d8 100644 --- a/addons/optionsmenu/functions/fnc_onListBoxShowSelectionChanged.sqf +++ b/addons/optionsmenu/functions/fnc_onListBoxShowSelectionChanged.sqf @@ -1,12 +1,19 @@ -/** -* fnc_onListBoxShowSelectionChanged.sqf -* @Descr: called when the listbox selection has changed. Updates configuration menu information -* @Author: Glowbal -* -* @Arguments: [] -* @Return: -* @PublicAPI: false -*/ +/* + * Author: Glowbal + * Changes which tab is open (options or colors) + * + * Arguments: + * The tab to open (defined in script_component) + * + * Return Value: + * None + * + * Example: + * [MENU_TAB_COLORS] call ACE_optionsmenu_fnc_onListBoxShowSelectionChanged + * + * Public: No + */ + #include "script_component.hpp" private ["_settingsMenu", "_localizedHeader"]; diff --git a/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf b/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf index e3137f8ca9..7c5f03af0b 100644 --- a/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf +++ b/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf @@ -1,34 +1,47 @@ -/** -* fnc_onSettingsMenuOpen.sqf -* @Descr: called when the settings or configuration menu has opened. Do not use anywhere else. -* @Author: Glowbal -* -* @Arguments: [] -* @Return: -* @PublicAPI: false -*/ +/* + * Author: Glowbal + * Called from the onLoad of ACE_settingsMenu dialog. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [onLoadEvent] call ACE_optionsmenu_fnc_onSettingsMenuOpen + * + * Public: No + */ + #include "script_component.hpp" // Filter only user setable setting GVAR(clientSideOptions) = []; GVAR(clientSideColors) = []; { - // If the setting is user setable and not forced - if ((_x select 2) && !(_x select 6)) then { - // Append the current value to the setting metadata - _setting = + _x; - _setting pushBack (missionNamespace getVariable (_x select 0)); + // If the setting is user setable and not forced + if ((_x select 2) && !(_x select 6)) then { + // Append the current value to the setting metadata + _setting = + _x; + _setting pushBack (missionNamespace getVariable (_x select 0)); - // Categorize the setting according to types - // @todo: allow the user to modify other types of parameters? - if ((_x select 1) == "SCALAR" || (_x select 1) == "BOOL") then { - GVAR(clientSideOptions) pushBack _setting; - }; - if ((_x select 1) == "COLOR") then { - GVAR(clientSideColors) pushBack _setting; - }; - }; + // Categorize the setting according to types + // @todo: allow the user to modify other types of parameters? + if ((_x select 1) == "SCALAR" || (_x select 1) == "BOOL") then { + GVAR(clientSideOptions) pushBack _setting; + }; + if ((_x select 1) == "COLOR") then { + GVAR(clientSideColors) pushBack _setting; + }; + }; } forEach EGVAR(common,settings); //Delay a frame [{ [MENU_TAB_OPTIONS] call FUNC(onListBoxShowSelectionChanged) }, []] call EFUNC(common,execNextFrame); + +private "_menu"; +disableSerialization; +_menu = uiNamespace getvariable "ACE_settingsMenu"; +(_menu displayCtrl 1002) ctrlEnable false; +(_menu displayCtrl 1003) ctrlEnable false; diff --git a/addons/optionsmenu/functions/fnc_onSliderPosChanged.sqf b/addons/optionsmenu/functions/fnc_onSliderPosChanged.sqf index ac6f52469c..4e0e603862 100644 --- a/addons/optionsmenu/functions/fnc_onSliderPosChanged.sqf +++ b/addons/optionsmenu/functions/fnc_onSliderPosChanged.sqf @@ -1,29 +1,38 @@ -/** -* fnc_onSliderPosChanged.sqf -* @Descr: N/A -* @Author: PabstMirror -* -* @Arguments: [] -* @Return: -* @PublicAPI: false -*/ +/* + * Author: PabstMirror + * Called when one of the color sliders is moved. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ACE_optionsmenu_fnc_onSliderPosChanged + * + * Public: No + */ + #include "script_component.hpp" private ["_newColor", "_settingIndex"]; -_newColor = []; -{ - _newColor pushBack ((sliderPosition _x) / 255); -} forEach [410, 411, 412, 413]; - _settingIndex = lbCurSel 200; switch (GVAR(optionMenu_openTab)) do { -case (MENU_TAB_COLORS): { - if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(clientSideColors)))) then { - _settingIndex = (GVAR(clientSideColors) select _settingIndex) select 0; - [MENU_TAB_COLORS, _settingIndex, _newColor] call FUNC(updateSetting); + case (MENU_TAB_COLORS): { + + _newColor = []; + { + _newColor pushBack ((sliderPosition _x) / 255); + } forEach [410, 411, 412, 413]; + + if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(clientSideColors)))) then { + _settingIndex = (GVAR(clientSideColors) select _settingIndex) select 0; + [MENU_TAB_COLORS, _settingIndex, _newColor] call FUNC(updateSetting); + }; + [false] call FUNC(settingsMenuUpdateList); }; - [false] call FUNC(settingsMenuUpdateList); - }; + default {}; }; diff --git a/addons/optionsmenu/functions/fnc_resetSettings.sqf b/addons/optionsmenu/functions/fnc_resetSettings.sqf index dd4b951ef5..07fc43cdfc 100644 --- a/addons/optionsmenu/functions/fnc_resetSettings.sqf +++ b/addons/optionsmenu/functions/fnc_resetSettings.sqf @@ -1,30 +1,37 @@ -/** -* fnc_resetSettings.sqf -* @Descr: -* @Author: Glowbal -* -* @Arguments: [] -* @Return: -* @PublicAPI: true -*/ +/* + * Author: Glowbal + * Resets all settings to default. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ACE_optionsmenu_fnc_onListBoxSettingsChanged + * + * Public: No + */ + #include "script_component.hpp" private ["_name", "_default", "_lastSelected"]; { - _name = _x select 0; - _default = _x select 7; - [MENU_TAB_OPTIONS, _name, _default] call FUNC(updateSetting); + _name = _x select 0; + _default = _x select 7; + [MENU_TAB_OPTIONS, _name, _default] call FUNC(updateSetting); } forEach GVAR(clientSideOptions); { - _name = _x select 0; - _default = _x select 7; - [MENU_TAB_COLORS, _name, _default] call FUNC(updateSetting); + _name = _x select 0; + _default = _x select 7; + [MENU_TAB_COLORS, _name, _default] call FUNC(updateSetting); } forEach GVAR(clientSideColors); _lastSelected = lbCurSel 200; [GVAR(optionMenu_openTab)] call FUNC(onListBoxShowSelectionChanged); if (_lastSelected != -1) then { - lbSetCurSel [200, _lastSelected]; + lbSetCurSel [200, _lastSelected]; }; diff --git a/addons/optionsmenu/functions/fnc_settingsMenuUpdateKeyView.sqf b/addons/optionsmenu/functions/fnc_settingsMenuUpdateKeyView.sqf index c271ecd176..39bbdb8c94 100644 --- a/addons/optionsmenu/functions/fnc_settingsMenuUpdateKeyView.sqf +++ b/addons/optionsmenu/functions/fnc_settingsMenuUpdateKeyView.sqf @@ -1,12 +1,19 @@ -/** -* fnc_settingsMenuUpdateKeyView.sqf -* @Descr: N/A -* @Author: Glowbal -* -* @Arguments: [] -* @Return: -* @PublicAPI: false -*/ +/* + * Author: Glowbal + * Updates the right half of the option menu for the currently selected option. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ACE_optionsmenu_fnc_settingsMenuUpdateKeyView + * + * Public: No + */ + #include "script_component.hpp" private ["_settingsMenu", "_ctrlList", "_collection", "_settingIndex", "_setting", "_entryName", "_localizedName", "_localizedDescription", "_possibleValues", "_settingsValue", "_currentColor"]; @@ -16,58 +23,58 @@ _settingsMenu = uiNamespace getVariable 'ACE_settingsMenu'; _ctrlList = _settingsMenu displayCtrl 200; _collection = switch (GVAR(optionMenu_openTab)) do { -case MENU_TAB_OPTIONS: {GVAR(clientSideOptions)}; -case MENU_TAB_COLORS: {GVAR(clientSideColors)}; - default {[]}; + case MENU_TAB_OPTIONS: {GVAR(clientSideOptions)}; + case MENU_TAB_COLORS: {GVAR(clientSideColors)}; + default {[]}; }; if (count _collection > 0) then { - _settingIndex = (lbCurSel _ctrlList); - if (_settingIndex > (count _collection)) then { - _settingIndex = count _collection - 1; - }; - - if (_settingIndex < 0) exitwith { - _settingIndex = 0; - }; - _setting = _collection select _settingIndex; - - _entryName = _setting select 0; - _localizedName = _setting select 3; - _localizedDescription = _setting select 4; - - if (_localizedName == "") then {_localizedName = _entryName;}; - (_settingsMenu displayCtrl 250) ctrlSetText _localizedName; - (_settingsMenu displayCtrl 251) ctrlSetText _localizedDescription; - (_settingsMenu displayCtrl 300) ctrlSetText _entryName; - - switch (GVAR(optionMenu_openTab)) do { - case (MENU_TAB_OPTIONS): { - _possibleValues = _setting select 5; - _settingsValue = _setting select 8; - - // Created disable/enable options for bools - if ((_setting select 1) == "BOOL") then { - lbClear 400; - lbAdd [400, (localize "STR_ACE_OptionsMenu_Disabled")]; - lbAdd [400, (localize "STR_ACE_OptionsMenu_Enabled")]; - _settingsValue = [0, 1] select _settingsValue; - } else { - lbClear 400; - { lbAdd [400, _x]; } foreach _possibleValues; - }; - (_settingsMenu displayCtrl 400) lbSetCurSel _settingsValue; + _settingIndex = (lbCurSel _ctrlList); + if (_settingIndex > (count _collection)) then { + _settingIndex = count _collection - 1; }; - case (MENU_TAB_COLORS): { - _currentColor = _setting select 8; - { - sliderSetPosition [_x, (255 * (_currentColor select _forEachIndex))]; - } forEach [410, 411, 412, 413]; + + if (_settingIndex < 0) then { + _settingIndex = 0; + }; + _setting = _collection select _settingIndex; + + _entryName = _setting select 0; + _localizedName = _setting select 3; + _localizedDescription = _setting select 4; + + if (_localizedName == "") then {_localizedName = _entryName;}; + (_settingsMenu displayCtrl 250) ctrlSetText _localizedName; + (_settingsMenu displayCtrl 251) ctrlSetText _localizedDescription; + (_settingsMenu displayCtrl 300) ctrlSetText _entryName; + + switch (GVAR(optionMenu_openTab)) do { + case (MENU_TAB_OPTIONS): { + _possibleValues = _setting select 5; + _settingsValue = _setting select 8; + + // Created disable/enable options for bools + if ((_setting select 1) == "BOOL") then { + lbClear 400; + lbAdd [400, (localize "STR_ACE_OptionsMenu_Disabled")]; + lbAdd [400, (localize "STR_ACE_OptionsMenu_Enabled")]; + _settingsValue = [0, 1] select _settingsValue; + } else { + lbClear 400; + { lbAdd [400, _x]; } foreach _possibleValues; + }; + (_settingsMenu displayCtrl 400) lbSetCurSel _settingsValue; + }; + case (MENU_TAB_COLORS): { + _currentColor = _setting select 8; + { + sliderSetPosition [_x, (255 * (_currentColor select _forEachIndex))]; + } forEach [410, 411, 412, 413]; + }; }; - }; } else { //no settings in list: - lbClear 400; - (_settingsMenu displayCtrl 250) ctrlSetText _localizedName; - (_settingsMenu displayCtrl 251) ctrlSetText _localizedDescription; - (_settingsMenu displayCtrl 300) ctrlSetText _entryName; + lbClear 400; + (_settingsMenu displayCtrl 250) ctrlSetText "No settings available"; + (_settingsMenu displayCtrl 251) ctrlSetText "No settings available"; + (_settingsMenu displayCtrl 300) ctrlSetText "No settings available"; }; diff --git a/addons/optionsmenu/functions/fnc_settingsMenuUpdateList.sqf b/addons/optionsmenu/functions/fnc_settingsMenuUpdateList.sqf index 73a6d3de3b..0138b9e87d 100644 --- a/addons/optionsmenu/functions/fnc_settingsMenuUpdateList.sqf +++ b/addons/optionsmenu/functions/fnc_settingsMenuUpdateList.sqf @@ -1,12 +1,19 @@ -/** -* fnc_settingsMenuUpdateList.sqf -* @Descr: N/A -* @Author: Glowbal -* -* @Arguments: [] -* @Return: -* @PublicAPI: false -*/ +/* + * Author: Glowbal + * Updates the setting when the client has selected a new value. Saves to profilenamespace. + * + * Arguments: + * 0: Update the keylist as well + * + * Return Value: + * None + * + * Example: + * [false] call ACE_optionsmenu_fnc_settingsMenuUpdateList + * + * Public: No + */ + #include "script_component.hpp" private ["_settingsMenu", "_ctrlList", "_settingsText", "_color", "_settingsColor", "_updateKeyView"]; @@ -19,35 +26,35 @@ _ctrlList = _settingsMenu displayCtrl 200; lbclear _ctrlList; switch (GVAR(optionMenu_openTab)) do { -case (MENU_TAB_OPTIONS): { + case (MENU_TAB_OPTIONS): { + { + _ctrlList lbadd (_x select 3); + + _settingsValue = _x select 8; + + // Created disable/enable options for bools + _settingsText = if ((_x select 1) == "BOOL") then { + [(localize "STR_ACE_OptionsMenu_Disabled"), (localize "STR_ACE_OptionsMenu_Enabled")] select _settingsValue; + } else { + (_x select 5) select _settingsValue; + }; + + _ctrlList lbadd (_settingsText); + }foreach GVAR(clientSideOptions); + }; + case (MENU_TAB_COLORS): { { - _ctrlList lbadd (_x select 3); - - _settingsValue = _x select 8; - - // Created disable/enable options for bools - _settingsText = if ((_x select 1) == "BOOL") then { - [(localize "STR_ACE_OptionsMenu_Disabled"), (localize "STR_ACE_OptionsMenu_Enabled")] select _settingsValue; - } else { - (_x select 5) select _settingsValue; - }; - - _ctrlList lbadd (_settingsText); - }foreach GVAR(clientSideOptions); - }; -case (MENU_TAB_COLORS): { - { - _color = +(_x select 8); - { - _color set [_forEachIndex, ((round (_x * 100))/100)]; - } forEach _color; - _settingsColor = str _color; - _ctrlList lbadd (_x select 3); - _ctrlList lbadd (_settingsColor); - _ctrlList lnbSetColor [[_forEachIndex, 1], (_x select 8)]; - }foreach GVAR(clientSideColors); - }; + _color = +(_x select 8); + { + _color set [_forEachIndex, ((round (_x * 100))/100)]; + } forEach _color; + _settingsColor = str _color; + _ctrlList lbadd (_x select 3); + _ctrlList lbadd (_settingsColor); + _ctrlList lnbSetColor [[_forEachIndex, 1], (_x select 8)]; + }foreach GVAR(clientSideColors); + }; }; if (_updateKeyView) then { - [] call FUNC(settingsMenuUpdateKeyView); + [] call FUNC(settingsMenuUpdateKeyView); }; diff --git a/addons/optionsmenu/functions/fnc_updateSetting.sqf b/addons/optionsmenu/functions/fnc_updateSetting.sqf index e4a9917f25..bc5969d54c 100644 --- a/addons/optionsmenu/functions/fnc_updateSetting.sqf +++ b/addons/optionsmenu/functions/fnc_updateSetting.sqf @@ -1,12 +1,21 @@ -/** -* fnc_updateSetting.sqf -* @Descr: -* @Author: Glowbal -* -* @Arguments: [] -* @Return: -* @PublicAPI: true -*/ +/* + * Author: Glowbal + * Updates the setting when the client has selected a new value. Saves to profilenamespace and calls setSetting. + * + * Arguments: + * 0: The Tab Open + * 1: The setting's name + * 2: The new value either an index or a color OR + * + * Return Value: + * None + * + * Example: + * [MENU_TAB_COLORS, "ace_fireTruckColor", [1,0,0,1]] call ACE_optionsmenu_fnc_updateSetting + * + * Public: No + */ + #include "script_component.hpp" private ["_changed"]; diff --git a/addons/optionsmenu/gui/settingsMenu.hpp b/addons/optionsmenu/gui/settingsMenu.hpp index 8d99a591d5..995c7850a5 100644 --- a/addons/optionsmenu/gui/settingsMenu.hpp +++ b/addons/optionsmenu/gui/settingsMenu.hpp @@ -4,7 +4,7 @@ class ACE_settingsMenu { onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_settingsMenu', _this select 0)]; [] call FUNC(onSettingsMenuOpen);); onUnload = QUOTE(uiNamespace setVariable [ARR_2('ACE_settingsMenu', nil)]; saveProfileNamespace;); - #define SIZEX ((0.70 * safezoneW) max 1.0) + #define SIZEX (((safezoneW / safezoneH) min 1.2)) #define SIZEY (SIZEX / 1.2) #define UNITX (SIZEX / 40) #define UNITY (SIZEY / 25) @@ -42,6 +42,10 @@ class ACE_settingsMenu { x = 26.1 * UNITX + OFFSETX; w = 12.9 * UNITX; }; + class RightBackgroundHeader: RightBackground { + h = 1.4 * UNITY; + colorBackground[] = {0,0,0,1}; + }; }; class controls { @@ -85,7 +89,7 @@ class ACE_settingsMenu { colorBackgroundFocused[] = {1,1,1,1}; colorBackground[] = {1,1,1,1}; colorbackground2[] = {1,1,1,1}; - colorDisabled[] = {0.5,0.5,0.5,0.8}; + colorDisabled[] = {1,1,1,1}; colorFocused[] = {0,0,0,1}; periodFocus = 1; periodOver = 1; @@ -99,13 +103,13 @@ class ACE_settingsMenu { }; class selectionAction_3: selectionAction_1 { idc = 1002; - text = "---"; + text = ""; x = 20 * UNITX + OFFSETX; action = ""; }; class selectionAction_4: selectionAction_1 { idc = 1003; - text = "---"; + text = ""; x = 29.5 * UNITX + OFFSETX; action = ""; }; @@ -115,7 +119,7 @@ class ACE_settingsMenu { y = 5.5 * UNITY + OFFSETY; w = 23 * UNITX; h = 15 * UNITY; - SizeEx = (UNITY * 0.7); + SizeEx = (UNITY * 0.8); colorBackground[] = {0, 0, 0, 0.9}; colorSelectBackground[] = {0, 0, 0, 0.9}; columns[] = {0.0, 0.6}; @@ -128,7 +132,7 @@ class ACE_settingsMenu { w = 11 * UNITX; h = 1 * UNITY; text = ""; - SizeEx = (UNITY * 0.75); + SizeEx = (UNITY *1); }; class labelKey: ACE_gui_staticBase { //Variable Name idc = 300; @@ -137,13 +141,13 @@ class ACE_settingsMenu { w = 11 * UNITX; h = 1 * UNITY; text = ""; - SizeEx = (UNITY * 0.60); + SizeEx = (UNITY * 0.65); }; class Label2: labelKey { idc = 301; y = 7.3 * UNITY + OFFSETY; text = "$STR_ACE_OptionsMenu_Setting"; - SizeEx = (UNITY * 0.75); + SizeEx = (UNITY * 1); }; class comboBox1: ACE_gui_comboBoxBase { idc = 400; @@ -152,7 +156,7 @@ class ACE_settingsMenu { w = 7 * UNITX; h = 1 * UNITY; onLBSelChanged = QUOTE( call FUNC(onListBoxSettingsChanged)); - SizeEx = (UNITY * 0.75); + SizeEx = (UNITY * 0.9); }; class sliderBar1: RscXSliderH { idc = 410; @@ -191,15 +195,16 @@ class ACE_settingsMenu { text = ""; style = ST_LEFT + ST_MULTI; lineSpacing = 1; - SizeEx = (UNITY * 0.60); + SizeEx = (UNITY * 0.8); }; class actionClose: ACE_gui_buttonBase { idc = 10; text = "$STR_DISP_CLOSE"; x = 1 * UNITX + OFFSETX; y = 22.3 * UNITY + OFFSETY; - w = 6 * UNITX; + w = 7.5 * UNITX; h = 1 * UNITY; + style = ST_LEFT; animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.8)"; animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.5)"; animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; @@ -217,17 +222,10 @@ class ACE_settingsMenu { periodOver = 1; action = "closedialog 0;"; }; - class action_animation: actionClose { - idc = 1100; - text = "$STR_ACE_OptionsMenu_FixAnimation"; - x = 7.5 * UNITX + OFFSETX; - // action = "if ([player] call ACE_fnc_canInteract && {animationState player == 'deadState' || animationState player == 'unconscious'} && {(vehicle player == player)}) then { [player, 'amovppnemstpsnonwnondnon'] call ACE_fnc_broadcastAnim; };"; - action = "hint 'todo???'"; - }; class action_reset: actionClose { idc = 1100; text = "$STR_ACE_OptionsMenu_ResetAll"; - x = 14 * (SIZEX / 40) + OFFSETX; + x = 26.1 * (SIZEX / 40) + OFFSETX; action = QUOTE([] call FUNC(resetSettings)); }; }; diff --git a/addons/overheating/CfgVehicles.hpp b/addons/overheating/CfgVehicles.hpp index 2c96bec24d..411e0a702d 100644 --- a/addons/overheating/CfgVehicles.hpp +++ b/addons/overheating/CfgVehicles.hpp @@ -1,8 +1,3 @@ -#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ -}; - class CfgVehicles { class Man; @@ -39,61 +34,61 @@ class CfgVehicles { class Box_NATO_Support_F: NATO_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2) + MACRO_ADDITEM(ACE_SpareBarrel,2); }; }; class B_supplyCrate_F: ReammoBox_F { class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2) + MACRO_ADDITEM(ACE_SpareBarrel,2); }; }; class Box_East_Support_F: EAST_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2) + MACRO_ADDITEM(ACE_SpareBarrel,2); }; }; class O_supplyCrate_F: B_supplyCrate_F { class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2) + MACRO_ADDITEM(ACE_SpareBarrel,2); }; }; class Box_IND_Support_F: IND_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2) + MACRO_ADDITEM(ACE_SpareBarrel,2); }; }; class Box_FIA_Support_F: FIA_Box_Base_F { class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2) + MACRO_ADDITEM(ACE_SpareBarrel,2); }; }; class I_supplyCrate_F: B_supplyCrate_F { class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2) + MACRO_ADDITEM(ACE_SpareBarrel,2); }; }; class IG_supplyCrate_F: ReammoBox_F { class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2) + MACRO_ADDITEM(ACE_SpareBarrel,2); }; }; class C_supplyCrate_F: ReammoBox_F { class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2) + MACRO_ADDITEM(ACE_SpareBarrel,2); }; }; class ACE_Box_Misc: Box_NATO_Support_F { class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,6) + MACRO_ADDITEM(ACE_SpareBarrel,6); }; }; diff --git a/addons/overheating/XEH_postInit.sqf b/addons/overheating/XEH_postInit.sqf index 6d0014c2a2..57b02b101e 100644 --- a/addons/overheating/XEH_postInit.sqf +++ b/addons/overheating/XEH_postInit.sqf @@ -4,22 +4,18 @@ if !(hasInterface) exitWith {}; // Add keybinds -["ACE3", - localize "STR_ACE_Overheating_UnjamWeapon", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon) && - {currentWeapon ACE_player in (ACE_player getVariable [QGVAR(jammedWeapons), []])} - ) exitWith {false}; +["ACE3", QGVAR(unjamWeapon), localize "STR_ACE_Overheating_UnjamWeapon", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player] call EFUNC(common,canUseWeapon) && + {currentWeapon ACE_player in (ACE_player getVariable [QGVAR(jammedWeapons), []])} + ) exitWith {false}; - // Statement - [ACE_player, currentMuzzle ACE_player, false] call FUNC(clearJam); - true - }, - [19, [true, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, currentMuzzle ACE_player, false] call FUNC(clearJam); + true +}, +{false}, +[19, [true, false, false]], false] call cba_fnc_addKeybind; //R Key diff --git a/addons/overheating/config.cpp b/addons/overheating/config.cpp index c3778862e6..b72660ce72 100644 --- a/addons/overheating/config.cpp +++ b/addons/overheating/config.cpp @@ -19,3 +19,14 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" + +class ACE_Settings { + class GVAR(DisplayTextOnJam) { + typeName = "BOOL"; + isClientSetable = 1; + value = 1; + displayName = "$STR_ACE_overheating_SettingDisplayTextName"; + description = "$STR_ACE_overheating_SettingDisplayTextDesc"; + }; +}; + diff --git a/addons/overheating/functions/fnc_clearJam.sqf b/addons/overheating/functions/fnc_clearJam.sqf index 76941d75ac..4bba92eb3f 100644 --- a/addons/overheating/functions/fnc_clearJam.sqf +++ b/addons/overheating/functions/fnc_clearJam.sqf @@ -42,13 +42,16 @@ if (_weapon in _jammedWeapons) then { }; _unit playActionNow _clearJamAction; - }; - if (_weapon == primaryWeapon _unit) then { - playSound QGVAR(fixing_rifle); - } else { - if (_weapon == secondaryWeapon _unit) then { - playSound QGVAR(fixing_pistol); + if (_weapon == primaryWeapon _unit) then { + playSound QGVAR(fixing_rifle); + } else { + if (_weapon == secondaryWeapon _unit) then { + playSound QGVAR(fixing_pistol); + }; }; }; - [localize "STR_ACE_Overheating_WeaponUnjammed"] call EFUNC(common,displayTextStructured); + + if (GVAR(DisplayTextOnJam)) then { + [localize "STR_ACE_Overheating_WeaponUnjammed"] call EFUNC(common,displayTextStructured); + }; }; diff --git a/addons/overheating/functions/fnc_jamWeapon.sqf b/addons/overheating/functions/fnc_jamWeapon.sqf index f11b72688c..7810fb0ce2 100644 --- a/addons/overheating/functions/fnc_jamWeapon.sqf +++ b/addons/overheating/functions/fnc_jamWeapon.sqf @@ -61,7 +61,7 @@ if (_unit getVariable [QGVAR(JammingActionID), -1] == -1) then { _statement = { playSound3D ["a3\sounds_f\weapons\Other\dry9.wss", _this select 0]; - if (!(missionNamespace getVariable [QGVAR(knowAboutJam), false]) && {(_this select 1) ammo currentWeapon (_this select 1) > 0}) then { + if (!(missionNamespace getVariable [QGVAR(knowAboutJam), false]) && {(_this select 1) ammo currentWeapon (_this select 1) > 0} && {GVAR(DisplayTextOnJam)}) then { [localize "STR_ACE_Overheating_WeaponJammed"] call EFUNC(common,displayTextStructured); GVAR(knowAboutJam) = true; }; diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index f8cea2ddb9..bea2c61ca2 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -2,6 +2,12 @@ + + Display text on jam + + + Display a notification whenever your weapon gets jammed + Spare barrel Ersatzlauf diff --git a/addons/parachute/CfgVehicles.hpp b/addons/parachute/CfgVehicles.hpp new file mode 100644 index 0000000000..2d8545a607 --- /dev/null +++ b/addons/parachute/CfgVehicles.hpp @@ -0,0 +1,34 @@ +class CfgVehicles { + class Box_NATO_Support_F; + class ACE_Box_Misc: Box_NATO_Support_F { + class TransportItems { + class _xx_ACE_Altimeter { + name = "ACE_Altimeter"; + count = 6; + }; + }; + class TransportBackpacks { + class _xx_ACE_NonSteerableParachute { + backpack = "ACE_NonSteerableParachute"; + count = 4; + }; + }; + }; + + class B_Parachute; + class ACE_NonSteerableParachute: B_Parachute { + author = "$STR_ACE_Common_ACETeam"; + scope = 2; + displayName = "$STR_ACE_Parachute_NonSteerableParachute"; + //picture = "\A3\Characters_F\data\ui\icon_b_parachute_ca.paa"; // @todo + //model = "\A3\Weapons_F\Ammoboxes\Bags\Backpack_Parachute"; // @todo + // backpackSimulation = "ParachuteNonSteerable"; //ParachuteSteerable //Bis broke this in 1.40 + ParachuteClass = "NonSteerable_Parachute_F"; + maximumLoad = 0; + mass = 100; + }; + + class B_Soldier_05_f; class B_Pilot_F: B_Soldier_05_f {backpack = "ACE_NonSteerableParachute";}; + class I_Soldier_04_F; class I_pilot_F: I_Soldier_04_F {backpack = "ACE_NonSteerableParachute";}; + class O_helipilot_F; class O_Pilot_F: O_helipilot_F {backpack = "ACE_NonSteerableParachute";}; +}; diff --git a/addons/parachute/CfgWeapons.hpp b/addons/parachute/CfgWeapons.hpp new file mode 100644 index 0000000000..6388bbd5a1 --- /dev/null +++ b/addons/parachute/CfgWeapons.hpp @@ -0,0 +1,9 @@ +class CfgWeapons { + class ItemWatch; + class ACE_Altimeter:ItemWatch { + author = "$STR_ACE_Common_ACETeam"; + descriptionShort = "$STR_ACE_Parachute_AltimeterDescription"; + displayName = "$STR_ACE_Parachute_AltimeterDisplayName"; + picture = PATHTOF(UI\watch_altimeter.paa); + }; +}; diff --git a/addons/parachute/XEH_postInit.sqf b/addons/parachute/XEH_postInit.sqf index a15e125edd..35efab12a9 100644 --- a/addons/parachute/XEH_postInit.sqf +++ b/addons/parachute/XEH_postInit.sqf @@ -16,26 +16,27 @@ #include "script_component.hpp" if (!hasInterface) exitWith {}; -["ACE3", localize "STR_ACE_Parachute_showAltimeter", +["ACE3", QGVAR(showAltimeter), localize "STR_ACE_Parachute_showAltimeter", { - // Conditions: canInteract - _exceptions = [QEGVAR(interaction,isNotEscorting)]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - if (!('ACE_Altimeter' in assignedItems ace_player)) exitWith {false}; - if (!(missionNamespace getVariable [QGVAR(AltimeterActive), false])) then { - [ace_player] call FUNC(showAltimeter); - } else { - call FUNC(hideAltimeter); - }; - true -}, [24, false, false, false], false, "keydown"] call CALLSTACK(cba_fnc_registerKeybind); + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotEscorting"]] call EGVAR(common,canInteractWith)) exitWith {false}; + if (!('ACE_Altimeter' in assignedItems ace_player)) exitWith {false}; + if (!(missionNamespace getVariable [QGVAR(AltimeterActive), false])) then { + [ace_player] call FUNC(showAltimeter); + } else { + call FUNC(hideAltimeter); + }; + true +}, +{false}, +[24, [false, false, false]], false] call cba_fnc_addKeybind; GVAR(PFH) = false; ["playerVehicleChanged",{ - if (!GVAR(PFH) && {(vehicle ACE_player) isKindOf "ParachuteBase"}) then { - GVAR(PFH) = true; - [FUNC(onEachFrame), 0.1, []] call CALLSTACK(cba_fnc_addPerFrameHandler); - }; + if (!GVAR(PFH) && {(vehicle ACE_player) isKindOf "ParachuteBase"}) then { + GVAR(PFH) = true; + [FUNC(onEachFrame), 0.1, []] call CALLSTACK(cba_fnc_addPerFrameHandler); + }; }] call EFUNC(common,addEventHandler); // don't show speed and height when in expert mode diff --git a/addons/parachute/config.cpp b/addons/parachute/config.cpp index 924c8ccb2c..3671177e28 100644 --- a/addons/parachute/config.cpp +++ b/addons/parachute/config.cpp @@ -1,61 +1,18 @@ #include "script_component.hpp" class CfgPatches { - class ACE_Parachute { - units[] = {"ACE_NonSteerableParachute"}; - weapons[] = {"ACE_Altimeter"}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common"}; - VERSION_CONFIG; - author[] = {"Garth 'LH' de Wet"}; - authorUrl = "http://garth.snakebiteink.co.za/"; - }; + class ACE_Parachute { + units[] = {"ACE_NonSteerableParachute"}; + weapons[] = {"ACE_Altimeter"}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + VERSION_CONFIG; + author[] = {"Garth 'LH' de Wet"}; + authorUrl = "http://garth.snakebiteink.co.za/"; + }; }; #include "CfgEventHandlers.hpp" +#include "CfgVehicles.hpp" +#include "CfgWeapons.hpp" #include "RscTitles.hpp" - -class CfgWeapons { - class ItemWatch; - class ACE_Altimeter:ItemWatch { - author = "$STR_ACE_Common_ACETeam"; - descriptionShort = "$STR_ACE_Parachute_AltimeterDescription"; - displayName = "$STR_ACE_Parachute_AltimeterDisplayName"; - picture = PATHTOF(UI\watch_altimeter.paa); - }; -}; - -class CfgVehicles { - class Box_NATO_Support_F; - class ACE_Box_Misc: Box_NATO_Support_F { - class TransportItems { - class _xx_ACE_Altimeter { - name = "ACE_Altimeter"; - count = 6; - }; - }; - class TransportBackpacks { - class _xx_ACE_NonSteerableParachute { - backpack = "ACE_NonSteerableParachute"; - count = 4; - }; - }; - }; - - class B_Parachute; - class ACE_NonSteerableParachute: B_Parachute { - author = "$STR_ACE_Common_ACETeam"; - scope = 2; - displayName = "$STR_ACE_Parachute_NonSteerableParachute"; - //picture = "\A3\Characters_F\data\ui\icon_b_parachute_ca.paa"; // @todo - //model = "\A3\Weapons_F\Ammoboxes\Bags\Backpack_Parachute"; // @todo - backpackSimulation = "ParachuteNonSteerable"; //ParachuteSteerable - ParachuteClass = "NonSteerable_Parachute_F"; - maximumLoad = 0; - mass = 100; - }; - - class B_Soldier_05_f; class B_Pilot_F: B_Soldier_05_f {backpack = "ACE_NonSteerableParachute";}; - class I_Soldier_04_F; class I_pilot_F: I_Soldier_04_F {backpack = "ACE_NonSteerableParachute";}; - class O_helipilot_F; class O_Pilot_F: O_helipilot_F {backpack = "ACE_NonSteerableParachute";}; -}; diff --git a/addons/parachute/functions/fnc_showAltimeter.sqf b/addons/parachute/functions/fnc_showAltimeter.sqf index 1b3edc26f5..8e3c3d83e3 100644 --- a/addons/parachute/functions/fnc_showAltimeter.sqf +++ b/addons/parachute/functions/fnc_showAltimeter.sqf @@ -43,4 +43,4 @@ GVAR(AltimeterActive) = true; (_this select 0) set [2, _height]; (_this select 0) set [3, _curTime]; -}, 0.2, [uiNamespace getVariable ["ACE_Altimeter", displayNull], _unit,floor ((getPosASL _unit) select 2), time]] call CALLSTACK(cba_fnc_addPerFrameEventHandler); +}, 0.2, [uiNamespace getVariable ["ACE_Altimeter", displayNull], _unit,floor ((getPosASL _unit) select 2), time]] call CALLSTACK(cba_fnc_addPerFrameHandler); diff --git a/addons/realisticnames/CfgMagazines.hpp b/addons/realisticnames/CfgMagazines.hpp new file mode 100644 index 0000000000..cf555c9603 --- /dev/null +++ b/addons/realisticnames/CfgMagazines.hpp @@ -0,0 +1,419 @@ + +class CfgMagazines { + class VehicleMagazine; + class 1000Rnd_Gatling_30mm_Plane_CAS_01_F: VehicleMagazine { + displayNameShort = "30mm HEI"; + }; + + class 7Rnd_Rocket_04_HE_F: VehicleMagazine { + displayNameShort = "70mm HE"; + }; + class 7Rnd_Rocket_04_AP_F: 7Rnd_Rocket_04_HE_F { + displayNameShort = "70mm AP"; + }; + + class 24Rnd_PG_missiles: VehicleMagazine { + displayNameShort = "70mm HE"; + }; + class 12Rnd_PG_missiles: 24Rnd_PG_missiles { + displayNameShort = "70mm HE"; + }; + + class 2000Rnd_65x39_Belt; + class 5000Rnd_762x51_Belt: 2000Rnd_65x39_Belt { + displayNameShort = "7.62mm"; + }; + class 5000Rnd_762x51_Yellow_Belt: 5000Rnd_762x51_Belt { + displayNameShort = "7.62mm"; + }; + + class 500Rnd_127x99_mag: VehicleMagazine { + displayNameShort = "12.7mm"; + }; + class 500Rnd_127x99_mag_Tracer_Green: 500Rnd_127x99_mag { + displayNameShort = "12.7mm"; + }; + class 500Rnd_127x99_mag_Tracer_Red: 500Rnd_127x99_mag { + displayNameShort = "12.7mm"; + }; + class 500Rnd_127x99_mag_Tracer_Yellow: 500Rnd_127x99_mag { + displayNameShort = "12.7mm"; + }; + + class 200Rnd_127x99_mag: 500Rnd_127x99_mag { + displayNameShort = "12.7mm"; + }; + class 200Rnd_127x99_mag_Tracer_Green: 200Rnd_127x99_mag { + displayNameShort = "12.7mm"; + }; + class 200Rnd_127x99_mag_Tracer_Red: 200Rnd_127x99_mag { + displayNameShort = "12.7mm"; + }; + class 200Rnd_127x99_mag_Tracer_Yellow: 200Rnd_127x99_mag { + displayNameShort = "12.7mm"; + }; + + class 100Rnd_127x99_mag: 500Rnd_127x99_mag { + displayNameShort = "12.7mm"; + }; + class 100Rnd_127x99_mag_Tracer_Green: 100Rnd_127x99_mag { + displayNameShort = "12.7mm"; + }; + class 100Rnd_127x99_mag_Tracer_Red: 100Rnd_127x99_mag { + displayNameShort = "12.7mm"; + }; + class 100Rnd_127x99_mag_Tracer_Yellow: 100Rnd_127x99_mag { + displayNameShort = "12.7mm"; + }; + + class 200Rnd_40mm_G_belt: VehicleMagazine { + displayNameShort = "40mm HE"; + }; + + class 24Rnd_missiles: VehicleMagazine { + displayNameShort = "70mm HE"; + }; + + class 300Rnd_20mm_shells: VehicleMagazine { + displayNameShort = "20mm HE"; + }; + + class 14Rnd_80mm_rockets: VehicleMagazine { + displayNameShort = "70mm HE"; + }; + + class 250Rnd_30mm_HE_shells: VehicleMagazine { + displayNameShort = "30mm HE"; + }; + class 250Rnd_30mm_APDS_shells: 250Rnd_30mm_HE_shells { + displayNameShort = "30mm APDS"; + }; + + class 20Rnd_Rocket_03_HE_F: 7Rnd_Rocket_04_HE_F { + displayNameShort = "80mm HE"; + }; + + class 20Rnd_Rocket_03_AP_F: 7Rnd_Rocket_04_AP_F { + displayNameShort = "80mm AP"; + }; + + class 500Rnd_Cannon_30mm_Plane_CAS_02_F: 1000Rnd_Gatling_30mm_Plane_CAS_01_F { + displayNameShort = "30mm HEI-T"; + }; + + class 680Rnd_35mm_AA_shells: VehicleMagazine { + displayNameShort = "35mm HEI"; + }; + class 680Rnd_35mm_AA_shells_Tracer_Red: 680Rnd_35mm_AA_shells { + displayNameShort = "35mm HEI-T"; + }; + class 680Rnd_35mm_AA_shells_Tracer_Green: 680Rnd_35mm_AA_shells { + displayNameShort = "35mm HEI-T"; + }; + class 680Rnd_35mm_AA_shells_Tracer_Yellow: 680Rnd_35mm_AA_shells { + displayNameShort = "35mm HEI-T"; + }; + + class 32Rnd_155mm_Mo_shells: VehicleMagazine { + displayNameShort = "155mm HE"; + }; + class 6Rnd_155mm_Mo_smoke: 32Rnd_155mm_Mo_shells { + displayNameShort = "155mm Smoke"; + }; + class 6Rnd_155mm_Mo_mine: 6Rnd_155mm_Mo_smoke { + displayNameShort = "155mm Mines"; + }; + class 6Rnd_155mm_Mo_AT_mine: 6Rnd_155mm_Mo_smoke { + displayNameShort = "155mm AT Mines"; + }; + class 2Rnd_155mm_Mo_Cluster: 6Rnd_155mm_Mo_smoke { + displayNameShort = "155mm Cluster"; + }; + class 2Rnd_155mm_Mo_guided: 6Rnd_155mm_Mo_smoke { + displayNameShort = "155mm Guided"; + }; + class 2Rnd_155mm_Mo_LG: 6Rnd_155mm_Mo_smoke { + displayNameShort = "155mm Laser Guided"; + }; + + class 12Rnd_230mm_rockets: 14Rnd_80mm_rockets { + displayName = "227mm HE Missile"; + displayNameShort = "227mm HE"; + }; + + class 30Rnd_120mm_HE_shells: VehicleMagazine { + displayNameShort = "120mm HE"; + }; + class 30Rnd_120mm_HE_shells_Tracer_Red: 30Rnd_120mm_HE_shells { + displayNameShort = "120mm HE-T"; + }; + class 30Rnd_120mm_HE_shells_Tracer_Green: 30Rnd_120mm_HE_shells { + displayNameShort = "120mm HE-T"; + }; + class 30Rnd_120mm_HE_shells_Tracer_Yellow: 30Rnd_120mm_HE_shells { + displayNameShort = "120mm HE-T"; + }; + + class 30Rnd_120mm_APFSDS_shells: 30Rnd_120mm_HE_shells { + displayNameShort = "120mm AP"; + }; + class 30Rnd_120mm_APFSDS_shells_Tracer_Red: 30Rnd_120mm_APFSDS_shells { + displayNameShort = "120mm AP-T"; + }; + class 30Rnd_120mm_APFSDS_shells_Tracer_Green: 30Rnd_120mm_APFSDS_shells { + displayNameShort = "120mm AP-T"; + }; + class 30Rnd_120mm_APFSDS_shells_Tracer_Yellow: 30Rnd_120mm_APFSDS_shells { + displayNameShort = "120mm AP-T"; + }; + + class 200Rnd_762x51_Belt: VehicleMagazine { + displayNameShort = "7.62mm"; + }; + class 200Rnd_762x51_Belt_Red: 200Rnd_762x51_Belt {}; + class 200Rnd_762x51_Belt_Green: 200Rnd_762x51_Belt {}; + class 200Rnd_762x51_Belt_Yellow: 200Rnd_762x51_Belt {}; + class 200Rnd_762x51_Belt_T_Red: 200Rnd_762x51_Belt_Red { + displayNameShort = "7.62mm"; + }; + class 200Rnd_762x51_Belt_T_Green: 200Rnd_762x51_Belt_Green { + displayNameShort = "7.62mm"; + }; + class 200Rnd_762x51_Belt_T_Yellow: 200Rnd_762x51_Belt_Yellow { + displayNameShort = "7.62mm"; + }; + + class 2000Rnd_762x51_Belt_Red; + class 2000Rnd_762x51_Belt_T_Red: 2000Rnd_762x51_Belt_Red { + displayNameShort = "7.62mm"; + }; + + class 2000Rnd_762x51_Belt_Green; + class 2000Rnd_762x51_Belt_T_Green: 2000Rnd_762x51_Belt_Green { + displayNameShort = "7.62mm"; + }; + + class 2000Rnd_762x51_Belt_Yellow; + class 2000Rnd_762x51_Belt_T_Yellow: 2000Rnd_762x51_Belt_Yellow { + displayNameShort = "7.62mm"; + }; + + class 1000Rnd_762x51_Belt_Red; + class 1000Rnd_762x51_Belt_T_Red: 1000Rnd_762x51_Belt_Red { + displayNameShort = "7.62mm"; + }; + + class 1000Rnd_762x51_Belt_Green; + class 1000Rnd_762x51_Belt_T_Green: 1000Rnd_762x51_Belt_Green { + displayNameShort = "7.62mm"; + }; + + class 1000Rnd_762x51_Belt_Yellow; + class 1000Rnd_762x51_Belt_T_Yellow: 1000Rnd_762x51_Belt_Yellow { + displayNameShort = "7.62mm"; + }; + + class 16Rnd_120mm_HE_shells; + class 12Rnd_125mm_HE: 16Rnd_120mm_HE_shells { + displayNameShort = "125mm HE"; + }; + + class 16Rnd_120mm_HE_shells_Tracer_Red; + class 12Rnd_125mm_HE_T_Red: 16Rnd_120mm_HE_shells_Tracer_Red { + displayNameShort = "125mm HE-T"; + }; + + class 16Rnd_120mm_HE_shells_Tracer_Green; + class 12Rnd_125mm_HE_T_Green: 16Rnd_120mm_HE_shells_Tracer_Green { + displayNameShort = "125mm HE-T"; + }; + + class 16Rnd_120mm_HE_shells_Tracer_Yellow; + class 12Rnd_125mm_HE_T_Yellow: 16Rnd_120mm_HE_shells_Tracer_Yellow { + displayNameShort = "125mm HE-T"; + }; + + class 12Rnd_125mm_HEAT: 12Rnd_125mm_HE { + displayNameShort = "125mm MP"; + }; + class 12Rnd_125mm_HEAT_T_Red: 12Rnd_125mm_HEAT { + displayNameShort = "125mm MP-T"; + }; + class 12Rnd_125mm_HEAT_T_Green: 12Rnd_125mm_HEAT { + displayNameShort = "125mm MP-T"; + }; + class 12Rnd_125mm_HEAT_T_Yellow: 12Rnd_125mm_HEAT { + displayNameShort = "125mm MP-T"; + }; + + class 32Rnd_120mm_APFSDS_shells; + class 24Rnd_125mm_APFSDS: 32Rnd_120mm_APFSDS_shells { + displayNameShort = "125mm AP"; + }; + + class 32Rnd_120mm_APFSDS_shells_Tracer_Red; + class 24Rnd_125mm_APFSDS_T_Red: 32Rnd_120mm_APFSDS_shells_Tracer_Red { + displayNameShort = "125mm AP-T"; + }; + + class 32Rnd_120mm_APFSDS_shells_Tracer_Green; + class 24Rnd_125mm_APFSDS_T_Green: 32Rnd_120mm_APFSDS_shells_Tracer_Green { + displayNameShort = "125mm AP-T"; + }; + + class 32Rnd_120mm_APFSDS_shells_Tracer_Yellow; + class 24Rnd_125mm_APFSDS_T_Yellow: 32Rnd_120mm_APFSDS_shells_Tracer_Yellow { + displayNameShort = "125mm AP-T"; + }; + + class 20Rnd_105mm_HEAT_MP: 12Rnd_125mm_HEAT { + displayNameShort = "105mm MP"; + }; + class 20Rnd_105mm_HEAT_MP_T_Red: 20Rnd_105mm_HEAT_MP { + displayNameShort = "105mm MP-T"; + }; + class 20Rnd_105mm_HEAT_MP_T_Green: 20Rnd_105mm_HEAT_MP { + displayNameShort = "105mm MP-T"; + }; + class 20Rnd_105mm_HEAT_MP_T_Yellow: 20Rnd_105mm_HEAT_MP { + displayNameShort = "105mm MP-T"; + }; + + class 40Rnd_105mm_APFSDS: 24Rnd_125mm_APFSDS { + displayNameShort = "105mm AP"; + }; + class 40Rnd_105mm_APFSDS_T_Red: 40Rnd_105mm_APFSDS { + displayNameShort = "105mm AP-T"; + }; + class 40Rnd_105mm_APFSDS_T_Green: 40Rnd_105mm_APFSDS { + displayNameShort = "105mm AP-T"; + }; + class 40Rnd_105mm_APFSDS_T_Yellow: 40Rnd_105mm_APFSDS { + displayNameShort = "105mm AP-T"; + }; + + class 60Rnd_40mm_GPR_shells: VehicleMagazine { + displayNameShort = "40mm GPR"; + }; + class 60Rnd_40mm_GPR_Tracer_Red_shells: 60Rnd_40mm_GPR_shells { + displayNameShort = "40mm GPR-T"; + }; + class 60Rnd_40mm_GPR_Tracer_Green_shells: 60Rnd_40mm_GPR_shells { + displayNameShort = "40mm GPR-T"; + }; + class 60Rnd_40mm_GPR_Tracer_Yellow_shells: 60Rnd_40mm_GPR_shells { + displayNameShort = "40mm GPR-T"; + }; + + class 40Rnd_40mm_APFSDS_shells: 60Rnd_40mm_GPR_shells { + displayNameShort = "40mm AP"; + }; + class 40Rnd_40mm_APFSDS_Tracer_Red_shells: 40Rnd_40mm_APFSDS_shells { + displayNameShort = "40mm AP-T"; + }; + class 40Rnd_40mm_APFSDS_Tracer_Green_shells: 40Rnd_40mm_APFSDS_Tracer_Red_shells { + displayNameShort = "40mm AP-T"; + }; + class 40Rnd_40mm_APFSDS_Tracer_Yellow_shells: 40Rnd_40mm_APFSDS_Tracer_Red_shells { + displayNameShort = "40mm AP-T"; + }; + + class 450Rnd_127x108_Ball: VehicleMagazine { + displayNameShort = "12.7mm"; + }; + + class 140Rnd_30mm_MP_shells: 250Rnd_30mm_HE_shells { + displayNameShort = "30mm MP"; + }; + class 140Rnd_30mm_MP_shells_Tracer_Red: 140Rnd_30mm_MP_shells { + displayNameShort = "30mm MP-T"; + }; + class 140Rnd_30mm_MP_shells_Tracer_Green: 140Rnd_30mm_MP_shells_Tracer_Red { + displayNameShort = "30mm MP-T"; + }; + class 140Rnd_30mm_MP_shells_Tracer_Yellow: 140Rnd_30mm_MP_shells_Tracer_Red { + displayNameShort = "30mm MP-T"; + }; + + class 60Rnd_30mm_APFSDS_shells: 250Rnd_30mm_HE_shells { + displayNameShort = "30mm AP"; + }; + class 60Rnd_30mm_APFSDS_shells_Tracer_Red: 60Rnd_30mm_APFSDS_shells { + displayNameShort = "30mm AP-T"; + }; + class 60Rnd_30mm_APFSDS_shells_Tracer_Green: 60Rnd_30mm_APFSDS_shells { + displayNameShort = "30mm AP-T"; + }; + class 60Rnd_30mm_APFSDS_shells_Tracer_Yellow: 60Rnd_30mm_APFSDS_shells { + displayNameShort = "30mm AP-T"; + }; + + class 200Rnd_20mm_G_belt: VehicleMagazine { + displayNameShort = "20mm HE"; + }; + class 40Rnd_20mm_G_belt: 200Rnd_20mm_G_belt { + displayNameShort = "20mm HE"; + }; + + // mines + class CA_Magazine; + // http://en.wikipedia.org/wiki/M15_mine + class ATMine_Range_Mag: CA_Magazine { + displayName = "$STR_ACE_RealisticNames_ATMine_Name"; + }; + // http://en.wikipedia.org/wiki/VS-50_mine + class APERSMine_Range_Mag: ATMine_Range_Mag { + displayName = "$STR_ACE_RealisticNames_APERSMine_Name"; + }; + // https://www.buymilsurp.com/us-m26-antipersonnel-bounding-mine-p-5419.html + class APERSBoundingMine_Range_Mag: ATMine_Range_Mag { + displayName = "$STR_ACE_RealisticNames_APERSBoundingMine_Name"; + }; + // http://en.wikipedia.org/wiki/PMR-3_mine + class APERSTripMine_Wire_Mag: ATMine_Range_Mag { + displayName = "$STR_ACE_RealisticNames_APERSTripwireMine_Name"; + }; + // the following ones can be found here: http://www.dtic.mil/dtic/tr/fulltext/u2/a567897.pdf + class SLAMDirectionalMine_Wire_Mag: ATMine_Range_Mag { + displayName = "$STR_ACE_RealisticNames_SLAM_Name"; + }; + + // claymore + class ClaymoreDirectionalMine_Remote_Mag: CA_Magazine { + displayName = "$STR_ACE_RealisticNames_Claymore_Name"; + }; + + // satchels + class SatchelCharge_Remote_Mag: CA_Magazine { + displayName = "$STR_ACE_RealisticNames_SatchelCharge_Name"; + }; + class DemoCharge_Remote_Mag: SatchelCharge_Remote_Mag { + displayName = "$STR_ACE_RealisticNames_DemoCharge_Name"; + }; + + // hand grenades + class HandGrenade: CA_Magazine { + displayName = "$STR_ACE_RealisticNames_HandGrenade_Name"; + }; + class SmokeShell: HandGrenade { + displayName = "$STR_ACE_RealisticNames_SmokeShell_Name"; + }; + class SmokeShellBlue: SmokeShell { + displayName = "$STR_ACE_RealisticNames_SmokeShellBlue_Name"; + }; + class SmokeShellGreen: SmokeShell { + displayName = "$STR_ACE_RealisticNames_SmokeShellGreen_Name"; + }; + class SmokeShellOrange: SmokeShell { + displayName = "$STR_ACE_RealisticNames_SmokeShellOrange_Name"; + }; + class SmokeShellPurple: SmokeShell { + displayName = "$STR_ACE_RealisticNames_SmokeShellPurple_Name"; + }; + class SmokeShellRed: SmokeShell { + displayName = "$STR_ACE_RealisticNames_SmokeShellRed_Name"; + }; + class SmokeShellYellow: SmokeShell { + displayName = "$STR_ACE_RealisticNames_SmokeShellYellow_Name"; + }; +}; diff --git a/addons/realisticnames/CfgVehicles.hpp b/addons/realisticnames/CfgVehicles.hpp new file mode 100644 index 0000000000..218e04ff09 --- /dev/null +++ b/addons/realisticnames/CfgVehicles.hpp @@ -0,0 +1,555 @@ + +class CfgVehicles { + // static weapons + class StaticMGWeapon; + class HMG_01_base_F: StaticMGWeapon { + displayName = "$STR_ACE_RealisticNames_HMG_01_Name"; + }; + class HMG_01_A_base_F: HMG_01_base_F { + displayName = "$STR_ACE_RealisticNames_HMG_01_A_Name"; + }; + class HMG_01_high_base_F: HMG_01_base_F { + displayName = "$STR_ACE_RealisticNames_HMG_01_high_Name"; + }; + + class AT_01_base_F; + class B_static_AT_F: AT_01_base_F { + displayName = "$STR_ACE_RealisticNames_static_AT_Name"; + }; + class O_static_AT_F: AT_01_base_F { + displayName = "$STR_ACE_RealisticNames_static_AT_Name"; + }; + class I_static_AT_F: AT_01_base_F { + displayName = "$STR_ACE_RealisticNames_static_AT_Name"; + }; + + class AA_01_base_F; + class B_static_AA_F: AA_01_base_F { + displayName = "$STR_ACE_RealisticNames_static_AA_Name"; + }; + class O_static_AA_F: AA_01_base_F { + displayName = "$STR_ACE_RealisticNames_static_AA_Name"; + }; + class I_static_AA_F: AA_01_base_F { + displayName = "$STR_ACE_RealisticNames_static_AA_Name"; + }; + + class GMG_TriPod; + class GMG_01_base_F: GMG_TriPod { + displayName = "$STR_ACE_RealisticNames_GMG_01_Name"; + }; + class GMG_01_A_base_F: GMG_01_base_F { + displayName = "$STR_ACE_RealisticNames_GMG_01_A_Name"; + }; + class GMG_01_high_base_F: GMG_01_base_F { + displayName = "$STR_ACE_RealisticNames_GMG_01_high_Name"; + }; + + // M-ATV + class MRAP_01_base_F; + class B_MRAP_01_F: MRAP_01_base_F { + displayName = "$STR_ACE_RealisticNames_MRAP_01_Name"; + }; + + class MRAP_01_gmg_base_F: MRAP_01_base_F {}; + class B_MRAP_01_gmg_F: MRAP_01_gmg_base_F { + displayName = "$STR_ACE_RealisticNames_MRAP_01_gmg_Name"; + }; + + class MRAP_01_hmg_base_F: MRAP_01_gmg_base_F {}; + class B_MRAP_01_hmg_F: MRAP_01_hmg_base_F { + displayName = "$STR_ACE_RealisticNames_MRAP_01_hmg_Name"; + }; + + // punisher + class MRAP_02_base_F; + class O_MRAP_02_F: MRAP_02_base_F { + displayName = "$STR_ACE_RealisticNames_MRAP_02_Name"; + }; + + class MRAP_02_hmg_base_F: MRAP_02_base_F {}; + class O_MRAP_02_hmg_F: MRAP_02_hmg_base_F { + displayName = "$STR_ACE_RealisticNames_MRAP_02_hmg_Name"; + }; + + class MRAP_02_gmg_base_F: MRAP_02_hmg_base_F {}; + class O_MRAP_02_gmg_F: MRAP_02_gmg_base_F { + displayName = "$STR_ACE_RealisticNames_MRAP_02_gmg_Name"; + }; + + // strider + class MRAP_03_base_F; + class I_MRAP_03_F: MRAP_03_base_F { + displayName = "$STR_ACE_RealisticNames_MRAP_03_Name"; + }; + + class MRAP_03_hmg_base_F: MRAP_03_base_F {}; + class I_MRAP_03_hmg_F: MRAP_03_hmg_base_F { + displayName = "$STR_ACE_RealisticNames_MRAP_03_hmg_Name"; + }; + + class MRAP_03_gmg_base_F: MRAP_03_hmg_base_F {}; + class I_MRAP_03_gmg_F: MRAP_03_gmg_base_F { + displayName = "$STR_ACE_RealisticNames_MRAP_03_gmg_Name"; + }; + + // merkava derivates + class MBT_01_base_F; + class B_MBT_01_base_F: MBT_01_base_F {}; + + class B_MBT_01_cannon_F: B_MBT_01_base_F { + displayName = "$STR_ACE_RealisticNames_MBT_01_cannon_Name"; + }; + class B_MBT_01_TUSK_F: B_MBT_01_cannon_F { + displayName = "$STR_ACE_RealisticNames_MBT_01_TUSK_Name"; + }; + + class MBT_01_arty_base_F: MBT_01_base_F {}; + class B_MBT_01_arty_base_F: MBT_01_arty_base_F {}; + + class B_MBT_01_arty_F: B_MBT_01_arty_base_F { + displayName = "$STR_ACE_RealisticNames_MBT_01_arty_Name"; + }; + + class MBT_01_mlrs_base_F: MBT_01_base_F {}; + class B_MBT_01_mlrs_base_F: MBT_01_mlrs_base_F {}; + + class B_MBT_01_mlrs_F: B_MBT_01_mlrs_base_F { + displayName = "$STR_ACE_RealisticNames_MBT_01_mlrs_Name"; // Fictional name, (probably wrong) hebrew translation of storm. + }; + + // T100 derivates + class MBT_02_base_F; + class O_MBT_02_base_F: MBT_02_base_F {}; + + class O_MBT_02_cannon_F: O_MBT_02_base_F { + displayName = "$STR_ACE_RealisticNames_MBT_02_cannon_Name"; + }; + + class MBT_02_arty_base_F: MBT_02_base_F {}; + class O_MBT_02_arty_base_F: MBT_02_arty_base_F {}; + + class O_MBT_02_arty_F: O_MBT_02_arty_base_F { + displayName = "$STR_ACE_RealisticNames_MBT_02_arty_Name"; + }; + + // leopard sg + class I_MBT_03_base_F; + class I_MBT_03_cannon_F: I_MBT_03_base_F { + displayName = "$STR_ACE_RealisticNames_MBT_03_cannon_Name"; + }; + + // tracked apcs + class B_APC_Tracked_01_base_F; + class B_APC_Tracked_01_rcws_F: B_APC_Tracked_01_base_F { + displayName = "$STR_ACE_RealisticNames_APC_Tracked_01_rcws_Name"; + }; + + class B_APC_Tracked_01_AA_F: B_APC_Tracked_01_base_F { + displayName = "$STR_ACE_RealisticNames_APC_Tracked_01_AA_Name"; // Fictional name, (probably wrong) hebrew translation of cheetah. + }; + + class B_APC_Tracked_01_CRV_F: B_APC_Tracked_01_base_F { + displayName = "$STR_ACE_RealisticNames_APC_Tracked_01_CRV_Name"; + }; + + class O_APC_Tracked_02_base_F; + class O_APC_Tracked_02_cannon_F: O_APC_Tracked_02_base_F { + displayName = "$STR_ACE_RealisticNames_APC_Tracked_02_cannon_Name"; + }; + + class O_APC_Tracked_02_AA_F: O_APC_Tracked_02_base_F { + displayName = "$STR_ACE_RealisticNames_APC_Tracked_02_AA_Name"; + }; + + class I_APC_tracked_03_base_F; + class I_APC_tracked_03_cannon_F: I_APC_tracked_03_base_F { + displayName = "$STR_ACE_RealisticNames_APC_tracked_03_cannon_Name"; + }; + + // wheeled apcs + class B_APC_Wheeled_01_base_F; + class B_APC_Wheeled_01_cannon_F: B_APC_Wheeled_01_base_F { + displayName = "$STR_ACE_RealisticNames_APC_Wheeled_cannon_Name"; + }; + + class O_APC_Wheeled_02_base_F; + class O_APC_Wheeled_02_rcws_F: O_APC_Wheeled_02_base_F { + displayName = "$STR_ACE_RealisticNames_APC_Wheeled_02_rcws_Name"; + }; + + class I_APC_Wheeled_03_base_F; + class I_APC_Wheeled_03_cannon_F: I_APC_Wheeled_03_base_F { + displayName = "$STR_ACE_RealisticNames_APC_Wheeled_03_cannon_Name"; + }; + + // trucks + class Truck_01_base_F; + class B_Truck_01_transport_F: Truck_01_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_01_transport_Name"; + }; + class B_Truck_01_covered_F: B_Truck_01_transport_F { + displayName = "$STR_ACE_RealisticNames_Truck_01_covered_Name"; + }; + class B_Truck_01_mover_F: B_Truck_01_transport_F { + displayName = "$STR_ACE_RealisticNames_Truck_01_mover_Name"; + }; + class B_Truck_01_box_F: B_Truck_01_mover_F { + displayName = "$STR_ACE_RealisticNames_Truck_01_box_Name"; + }; + class B_Truck_01_medical_F: B_Truck_01_transport_F { + displayName = "$STR_ACE_RealisticNames_Truck_01_medical_Name"; + }; + class B_Truck_01_ammo_F: B_Truck_01_mover_F { + displayName = "$STR_ACE_RealisticNames_Truck_01_ammo_Name"; + }; + class B_Truck_01_fuel_F: B_Truck_01_mover_F { + displayName = "$STR_ACE_RealisticNames_Truck_01_fuel_Name"; + }; + class B_Truck_01_Repair_F: B_Truck_01_mover_F { + displayName = "$STR_ACE_RealisticNames_Truck_01_Repair_Name"; + }; + class Truck_02_transport_base_F; + class O_Truck_02_transport_F: Truck_02_transport_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_02_transport_Name"; + }; + class Truck_02_base_F; + class O_Truck_02_covered_F: Truck_02_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_02_covered_Name"; + }; + class Truck_02_Ammo_base_F; + class O_Truck_02_ammo_F: Truck_02_Ammo_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_02_ammo_Name"; + }; + class Truck_02_fuel_base_F; + class O_Truck_02_fuel_F: Truck_02_fuel_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_02_fuel_Name"; + }; + class Truck_02_box_base_F; + class O_Truck_02_box_F: Truck_02_box_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_02_box_Name"; + }; + class Truck_02_medical_base_F; + class O_Truck_02_medical_F: Truck_02_medical_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_02_medical_Name"; + }; + class I_Truck_02_transport_F: Truck_02_transport_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_02_transport_Name"; + }; + class I_Truck_02_covered_F: Truck_02_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_02_covered_Name"; + }; + class I_Truck_02_ammo_F: Truck_02_Ammo_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_02_ammo_Name"; + }; + class I_Truck_02_fuel_F: Truck_02_fuel_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_02_fuel_Name"; + }; + class I_Truck_02_box_F: Truck_02_box_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_02_box_Name"; + }; + class I_Truck_02_medical_F: Truck_02_medical_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_02_medical_Name"; + }; + + class Truck_03_base_F; + class O_Truck_03_transport_F: Truck_03_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_03_transport_Name"; + }; + class O_Truck_03_covered_F: Truck_03_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_03_covered_Name"; + }; + class O_Truck_03_device_F: Truck_03_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_03_device_Name"; + }; + class O_Truck_03_ammo_F: Truck_03_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_03_ammo_Name"; + }; + class O_Truck_03_fuel_F: Truck_03_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_03_fuel_Name"; + }; + class O_Truck_03_repair_F: Truck_03_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_03_repair_Name"; + }; + class O_Truck_03_medical_F: Truck_03_base_F { + displayName = "$STR_ACE_RealisticNames_Truck_03_medical_Name"; + }; + + // helicopters + class Heli_Attack_01_base_F; + class B_Heli_Attack_01_F: Heli_Attack_01_base_F { + displayName = "$STR_ACE_RealisticNames_Heli_Attack_01_Name"; + }; + + class Heli_Light_01_unarmed_base_F; + class B_Heli_Light_01_F: Heli_Light_01_unarmed_base_F { + displayName = "$STR_ACE_RealisticNames_Heli_Light_01_Name"; + }; + + class Heli_Light_01_armed_base_F; + class B_Heli_Light_01_armed_F: Heli_Light_01_armed_base_F { + displayName = "$STR_ACE_RealisticNames_Heli_Light_01_armed_Name"; + }; + + class Heli_Light_01_civil_base_F: Heli_Light_01_unarmed_base_F { + displayName = "$STR_ACE_RealisticNames_Heli_Light_01_civil_Name"; + }; + + class Heli_Transport_03_base_F; + class B_Heli_Transport_03_F: Heli_Transport_03_base_F { + displayName = "$STR_ACE_RealisticNames_Heli_Transport_03_Name"; + }; + class Heli_Transport_03_unarmed_base_F; + class B_Heli_Transport_03_unarmed_F: Heli_Transport_03_unarmed_base_F { + displayName = "$STR_ACE_RealisticNames_Heli_Transport_03_unarmed_Name"; + }; + + class Heli_Light_02_base_F; + class O_Heli_Light_02_F: Heli_Light_02_base_F { + displayName = "$STR_ACE_RealisticNames_Heli_Light_02_Name"; + }; + class Heli_Light_02_unarmed_base_F; + class O_Heli_Light_02_unarmed_F: Heli_Light_02_unarmed_base_F { + displayName = "$STR_ACE_RealisticNames_Heli_Light_02_unarmed_Name"; + }; + + class Heli_light_03_base_F; + class I_Heli_light_03_F: Heli_light_03_base_F { + displayName = "$STR_ACE_RealisticNames_Heli_light_03_Name"; + }; + + class Heli_light_03_unarmed_base_F; + class I_Heli_light_03_unarmed_F: Heli_light_03_unarmed_base_F { + displayName = "$STR_ACE_RealisticNames_Heli_light_03_unarmed_Name"; + }; + + class Heli_Transport_02_base_F; + class I_Heli_Transport_02_F: Heli_Transport_02_base_F { + displayName = "$STR_ACE_RealisticNames_Heli_Transport_02_Name"; + }; + + // planes + class Plane_CAS_01_base_F; + class B_Plane_CAS_01_F: Plane_CAS_01_base_F { + displayName = "$STR_ACE_RealisticNames_Plane_CAS_01_Name"; + }; + + class Plane_CAS_02_base_F; + class O_Plane_CAS_02_F: Plane_CAS_02_base_F { + displayName = "$STR_ACE_RealisticNames_Plane_CAS_02_Name"; + }; + + class Plane_Fighter_03_base_F; + class I_Plane_Fighter_03_CAS_F: Plane_Fighter_03_base_F { + displayName = "$STR_ACE_RealisticNames_Plane_Fighter_03_CAS_Name"; + }; + + class I_Plane_Fighter_03_AA_F: I_Plane_Fighter_03_CAS_F { + displayName = "$STR_ACE_RealisticNames_Plane_Fighter_03_AA_Name"; + }; + + // uavs + class UAV_02_base_F; + class B_UAV_02_F: UAV_02_base_F { + displayName = "$STR_ACE_RealisticNames_UAV_02_Name"; + }; + class O_UAV_02_F: UAV_02_base_F { + displayName = "$STR_ACE_RealisticNames_UAV_02_Name"; + }; + class I_UAV_02_F: UAV_02_base_F { + displayName = "$STR_ACE_RealisticNames_UAV_02_Name"; + }; + + class UAV_02_CAS_base_F: UAV_02_base_F {}; + class B_UAV_02_CAS_F: UAV_02_CAS_base_F { + displayName = "$STR_ACE_RealisticNames_UAV_02_CAS_Name"; + }; + class O_UAV_02_CAS_F: UAV_02_CAS_base_F { + displayName = "$STR_ACE_RealisticNames_UAV_02_CAS_Name"; + }; + class I_UAV_02_CAS_F: UAV_02_CAS_base_F { + displayName = "$STR_ACE_RealisticNames_UAV_02_CAS_Name"; + }; + + // pistols + class Pistol_Base_F; + class Weapon_hgun_P07_F: Pistol_Base_F { + displayName = "$STR_ACE_RealisticNames_hgun_P07_Name"; + }; + + class Weapon_hgun_Rook40_F: Pistol_Base_F { + displayName = "$STR_ACE_RealisticNames_hgun_Rook40_Name"; + }; + + class Weapon_hgun_ACPC2_F: Pistol_Base_F { + displayName = "$STR_ACE_RealisticNames_hgun_ACPC2_Name"; + }; + + class Weapon_hgun_Pistol_heavy_01_F: Pistol_Base_F { + displayName = "$STR_ACE_RealisticNames_hgun_Pistol_heavy_01_Name"; + }; + + class Weapon_hgun_Pistol_heavy_02_F: Pistol_Base_F { + displayName = "$STR_ACE_RealisticNames_hgun_Pistol_heavy_02_Name"; + }; + + class Weapon_hgun_Pistol_Signal_F: Pistol_Base_F { + displayName = "$STR_ACE_RealisticNames_hgun_Pistol_Signal_Name"; + }; + + // rocket launchers + class Launcher_Base_F; + class Weapon_launch_NLAW_F: Launcher_Base_F { + displayName = "$STR_ACE_RealisticNames_launch_NLAW_Name"; + }; + + class Weapon_launch_RPG32_F: Launcher_Base_F { + displayName = "$STR_ACE_RealisticNames_launch_RPG32_Name"; + }; + + class Weapon_launch_Titan_F: Launcher_Base_F { + displayName = "$STR_ACE_RealisticNames_launch_Titan_Name"; + }; + + class Weapon_launch_Titan_short_F: Launcher_Base_F { + displayName = "$STR_ACE_RealisticNames_launch_Titan_short_Name"; + }; + + class Weapon_launch_B_Titan_F: Launcher_Base_F { + displayName = "$STR_ACE_RealisticNames_launch_Titan_Name"; + }; + //class Weapon_launch_I_Titan_F: Weapon_launch_B_Titan_F {}; + //class Weapon_launch_O_Titan_F: Weapon_launch_B_Titan_F {}; + + class Weapon_launch_launch_B_Titan_short_F: Launcher_Base_F { + displayName = "$STR_ACE_RealisticNames_launch_Titan_short_Name"; + }; + //class Weapon_launch_I_Titan_short_F: Weapon_launch_launch_B_Titan_short_F {}; + //class Weapon_launch_O_Titan_short_F: Weapon_launch_launch_B_Titan_short_F {}; + + // rifles + + // MX + class Weapon_Base_F; + class Weapon_arifle_MX_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_MX_Name"; + }; + + class Weapon_arifle_MXC_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_MXC_Name"; + }; + + class Weapon_arifle_MX_GL_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_MX_GL_Name"; + }; + + class Weapon_arifle_MX_SW_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_MX_SW_Name"; + }; + + class Weapon_arifle_MXM_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_MXM_Name"; + }; + + // Katiba + class Weapon_arifle_Katiba_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Katiba_Name"; + }; + + class Weapon_arifle_Katiba_C_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Katiba_C_Name"; + }; + + class Weapon_arifle_Katiba_GL_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Katiba_GL_Name"; + }; + + // F2000 + class Weapon_arifle_Mk20_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Mk20_Name"; + }; + + class Weapon_arifle_Mk20_plain_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Mk20_plain_Name"; + }; + + class Weapon_arifle_Mk20C_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Mk20C_Name"; + }; + + class Weapon_arifle_Mk20C_plain_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Mk20C_plain_Name"; + }; + + class Weapon_arifle_Mk20_GL_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Mk20_GL_Name"; + }; + + class Weapon_arifle_Mk20_GL_plain_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Mk20_GL_plain_Name"; + }; + + // TAR-21 + class Weapon_arifle_TRG21_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_TRG21_Name"; + }; + + class Weapon_arifle_TRG20_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_TRG20_Name"; + }; + + class Weapon_arifle_TRG21_GL_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_TRG21_GL_Name"; + }; + + // sub machine guns + class Weapon_SMG_01_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_SMG_01_Name"; + }; + + class Weapon_SMG_02_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_SMG_02_Name"; + }; + + class Weapon_hgun_PDW2000_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_hgun_PDW2000_Name"; + }; + + class Weapon_arifle_SDAR_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_SDAR_Name"; + }; + + // machine guns + class Weapon_LMG_Mk200_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_LMG_Mk200_Name"; + }; + + class Weapon_LMG_Zafir_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_LMG_Zafir_Name"; + }; + + // sniper rifles + class Weapon_srifle_EBR_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_srifle_EBR_Name"; + }; + + class Weapon_srifle_GM6_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_srifle_GM6_Name"; + }; + + class Weapon_srifle_GM6_camo_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_srifle_GM6_camo_Name"; + }; + + class Weapon_srifle_LRR_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_srifle_LRR_Name"; + }; + + class Weapon_srifle_LRR_camo_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_srifle_LRR_camo_Name"; + }; + + class Weapon_srifle_DMR_01_F: Weapon_Base_F { + displayName = "$STR_ACE_RealisticNames_srifle_DMR_01_Name"; + }; +}; diff --git a/addons/realisticnames/CfgWeapons.hpp b/addons/realisticnames/CfgWeapons.hpp new file mode 100644 index 0000000000..8e64434bd4 --- /dev/null +++ b/addons/realisticnames/CfgWeapons.hpp @@ -0,0 +1,461 @@ + +class Mode_FullAuto; + +class CfgWeapons { + // assault rifles + + // MX + class arifle_MX_Base_F; + class arifle_MX_F: arifle_MX_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_MX_Name"; + }; + class arifle_MX_Black_F: arifle_MX_F { + displayName = "$STR_ACE_RealisticNames_arifle_MX_Black_Name"; + }; + + class arifle_MXC_F: arifle_MX_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_MXC_Name"; + }; + class arifle_MXC_Black_F: arifle_MXC_F { + displayName = "$STR_ACE_RealisticNames_arifle_MXC_Black_Name"; + }; + + class arifle_MX_GL_F: arifle_MX_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_MX_GL_Name"; + }; + class arifle_MX_GL_Black_F: arifle_MX_GL_F { + displayName = "$STR_ACE_RealisticNames_arifle_MX_GL_Black_Name"; + }; + + class arifle_MX_SW_F: arifle_MX_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_MX_SW_Name"; + }; + class arifle_MX_SW_Black_F: arifle_MX_SW_F { + displayName = "$STR_ACE_RealisticNames_arifle_MX_SW_Black_Name"; + }; + + class arifle_MXM_F: arifle_MX_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_MXM_Name"; + }; + class arifle_MXM_Black_F: arifle_MXM_F { + displayName = "$STR_ACE_RealisticNames_arifle_MXM_Black_Name"; + }; + + // Katiba + class arifle_katiba_Base_F; + class arifle_Katiba_F: arifle_katiba_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Katiba_Name"; + }; + class arifle_Katiba_GL_F: arifle_katiba_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Katiba_GL_Name"; + }; + class arifle_Katiba_C_F: arifle_katiba_Base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Katiba_C_Name"; + }; + + // SDAR + class SDAR_base_F; + class arifle_SDAR_F: SDAR_base_F { + displayName = "$STR_ACE_RealisticNames_arifle_SDAR_Name"; + }; + + // TAR-21 + class Tavor_base_F; + class arifle_TRG21_F: Tavor_base_F { + displayName = "$STR_ACE_RealisticNames_arifle_TRG21_Name"; + }; + class arifle_TRG21_GL_F: arifle_TRG21_F { + displayName = "$STR_ACE_RealisticNames_arifle_TRG21_GL_Name"; + }; + class arifle_TRG20_F: Tavor_base_F { + displayName = "$STR_ACE_RealisticNames_arifle_TRG20_Name"; + }; + + // F2000 + class mk20_base_F; + class arifle_Mk20_F: mk20_base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Mk20_Name"; + }; + class arifle_Mk20_plain_F: arifle_Mk20_F { + displayName = "$STR_ACE_RealisticNames_arifle_Mk20_plain_Name"; + }; + + class arifle_Mk20C_F: mk20_base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Mk20C_Name"; + }; + class arifle_Mk20C_plain_F: arifle_Mk20C_F { + displayName = "$STR_ACE_RealisticNames_arifle_Mk20C_plain_Name"; + }; + + class arifle_Mk20_GL_F: mk20_base_F { + displayName = "$STR_ACE_RealisticNames_arifle_Mk20_GL_Name"; + }; + class arifle_Mk20_GL_plain_F: arifle_Mk20_GL_F { + displayName = "$STR_ACE_RealisticNames_arifle_Mk20_GL_plain_Name"; + }; + + // Vector + class SMG_01_Base; + class SMG_01_F: SMG_01_Base { + displayName = "$STR_ACE_RealisticNames_SMG_01_Name"; + }; + + // Scorpion + class SMG_02_base_F; + class SMG_02_F: SMG_02_base_F { + displayName = "$STR_ACE_RealisticNames_SMG_02_Name"; + }; + + // PDW 2000 + class pdw2000_base_F; + class hgun_pdw2000_F: pdw2000_base_F { + displayName = "$STR_ACE_RealisticNames_hgun_PDW2000_Name"; + }; + + // pistols + class Pistol_Base_F; + class hgun_P07_F: Pistol_Base_F { + displayName = "$STR_ACE_RealisticNames_hgun_P07_Name"; + }; + + class hgun_Rook40_F: Pistol_Base_F { + displayName = "$STR_ACE_RealisticNames_hgun_Rook40_Name"; + }; + + class hgun_ACPC2_F: Pistol_Base_F { + displayName = "$STR_ACE_RealisticNames_hgun_ACPC2_Name"; + }; + + class hgun_Pistol_heavy_01_F: Pistol_Base_F { + displayName = "$STR_ACE_RealisticNames_hgun_Pistol_heavy_01_Name"; + }; + + class hgun_Pistol_heavy_02_F: Pistol_Base_F { + displayName = "$STR_ACE_RealisticNames_hgun_Pistol_heavy_02_Name"; + }; + + class hgun_Pistol_Signal_F: Pistol_Base_F { + displayName = "$STR_ACE_RealisticNames_hgun_Pistol_Signal_Name"; + }; + + // machine guns + class Rifle_Long_Base_F; + class LMG_Mk200_F: Rifle_Long_Base_F { + displayName = "$STR_ACE_RealisticNames_LMG_Mk200_Name"; + }; + + class LMG_Zafir_F: Rifle_Long_Base_F { + displayName = "$STR_ACE_RealisticNames_LMG_Zafir_Name"; + }; + + // sniper rifles + class EBR_base_F; + class srifle_EBR_F: EBR_base_F { + displayName = "$STR_ACE_RealisticNames_srifle_EBR_Name"; + }; + + class LRR_base_F; + class srifle_LRR_F: LRR_base_F { + displayName = "$STR_ACE_RealisticNames_srifle_LRR_Name"; + }; + class srifle_LRR_camo_F: srifle_LRR_F { + displayName = "$STR_ACE_RealisticNames_srifle_LRR_camo_Name"; + }; + + class GM6_base_F; + class srifle_GM6_F: GM6_base_F { + displayName = "$STR_ACE_RealisticNames_srifle_GM6_Name"; + }; + class srifle_GM6_camo_F: srifle_GM6_F { + displayName = "$STR_ACE_RealisticNames_srifle_GM6_camo_Name"; + }; + + class DMR_01_base_F; + class srifle_DMR_01_F: DMR_01_base_F { + displayName = "$STR_ACE_RealisticNames_srifle_DMR_01_Name"; + }; + + // launchers + class Launcher_Base_F; + class launch_RPG32_F: Launcher_Base_F { + displayName = "$STR_ACE_RealisticNames_launch_RPG32_Name"; + }; + + class launch_Titan_base: Launcher_Base_F { + displayName = "$STR_ACE_RealisticNames_launch_Titan_Name"; + }; + class launch_Titan_short_base: launch_Titan_base { + displayName = "$STR_ACE_RealisticNames_launch_Titan_short_Name"; + }; + + class launch_NLAW_F: Launcher_Base_F { + displayName = "$STR_ACE_RealisticNames_launch_NLAW_Name"; + }; + + // vehicle weapons + + // gatlings + class CannonCore; + class gatling_20mm: CannonCore { + //displayName = ""; + class manual: CannonCore { + //displayName = ""; + }; + }; + class Twin_Cannon_20mm: gatling_20mm { + displayName = "Plamen PL-20"; + class manual: manual { + displayName = "Plamen PL-20"; + }; + }; + + class gatling_30mm: CannonCore { // This is a fictional veresion of the GSh-6-30, with 3 barrels + displayName = "GSh-3-30"; + class LowROF: Mode_FullAuto { + displayName = "GSh-3-30"; + }; + }; + + class Gatling_30mm_Plane_CAS_01_F: CannonCore { + displayName = "GAU-8"; + class LowROF: Mode_FullAuto { + displayName = "GAU-8"; + }; + }; + + class Cannon_30mm_Plane_CAS_02_F: CannonCore { + displayName = "GSh-301"; + class LowROF: Mode_FullAuto { + displayName = "GSh-301"; + }; + }; + + // missiles + class RocketPods; + class Missile_AA_04_Plane_CAS_01_F: RocketPods { + displayName = "AIM-9 Sidewinder"; + }; + class Missile_AA_03_Plane_CAS_02_F: Missile_AA_04_Plane_CAS_01_F { + displayName = "Wympel R-73"; + }; + + class MissileLauncher; + class Missile_AGM_02_Plane_CAS_01_F: MissileLauncher { + displayName = "AGM-65 Maverick"; + }; + class Missile_AGM_01_Plane_CAS_02_F: Missile_AGM_02_Plane_CAS_01_F { + displayName = "Kh-25MTP"; + }; + + // rockets + class Rocket_04_HE_Plane_CAS_01_F: RocketPods { + displayName = "Hydra 70"; + class Burst: RocketPods { + displayName = "Hydra 70"; + }; + }; + class Rocket_04_AP_Plane_CAS_01_F: Rocket_04_HE_Plane_CAS_01_F { + displayName = "Hydra 70"; + }; + + class Rocket_03_HE_Plane_CAS_02_F: Rocket_04_HE_Plane_CAS_01_F { + displayName = "S-8"; + class Burst: Burst { + displayName = "S-8"; + }; + }; + class Rocket_03_AP_Plane_CAS_02_F: Rocket_04_AP_Plane_CAS_01_F { + displayName = "S-8"; + class Burst: Burst { + displayName = "S-8"; + }; + }; + + class rockets_Skyfire: RocketPods { + displayName = "Skyfire-70"; + class Burst: RocketPods { + displayName = "Skyfire-70"; + }; + }; + + // more missiles + class missiles_DAR: RocketPods { + displayName = "Hydra 70"; + class Burst: RocketPods { + displayName = "Hydra 70"; + }; + }; + + class missiles_DAGR: RocketPods { + displayName = "DAGR"; + class Burst: RocketPods { + displayName = "DAGR"; + }; + }; + + class missiles_ASRAAM: MissileLauncher { + displayName = "AIM-132 ASRAAM"; + }; + + class missiles_Zephyr: MissileLauncher { + displayName = "AIM-120A AMRAAM"; + }; + + class missiles_SCALPEL: RocketPods { // according to zGuba, this is what it's based on + displayName = "9K121 Vikhr"; + }; + + // bomb + class Bomb_04_Plane_CAS_01_F: RocketPods { + //displayName = ""; + }; + class Bomb_03_Plane_CAS_02_F: Bomb_04_Plane_CAS_01_F { + displayName = "FAB-250M-54"; + }; + + // machine guns + class MGunCore; + class M134_minigun: MGunCore { + displayName = "2x M134 Minigun"; + }; + + class LMG_RCWS; + class MGun; + + class LMG_Minigun: LMG_RCWS { + displayName = "M134 Minigun"; + class manual: MGun { + displayName = "M134 Minigun"; + }; + }; + + class HMG_127: LMG_RCWS { + displayName = "M2"; + class manual: MGun { + displayName = "M2"; + }; + }; + + class HMG_01: HMG_127 { + displayName = "XM312"; + }; + class HMG_M2: HMG_01 { + displayName = "M2"; + }; + + class HMG_NSVT: HMG_127 { + displayName = "NSVT"; + class manual: manual { + displayName = "NSVT"; + }; + }; + + // grenade launchers + class GMG_F; + class GMG_20mm: GMG_F { + displayName = "XM307"; + class manual: GMG_F { + displayName = "XM307"; + }; + }; + + class GMG_40mm: GMG_F { + displayName = "Mk 19"; + class manual: GMG_F { + displayName = "Mk 19"; + }; + }; + + // autocannons + class autocannon_35mm: CannonCore { + displayName = "GDF-001"; + class manual: CannonCore { + displayName = "GDF-001"; + }; + }; + + // aa missiles + class missiles_titan: MissileLauncher { + displayName = "Mini-Spike"; + }; + + // mortar + class mortar_155mm_AMOS: CannonCore { + displayName = "L/52"; + }; + + // artillery rockets + class rockets_230mm_GAT: RocketPods { + displayName = "M269"; + }; + + // tank guns + class cannon_120mm: CannonCore { + class player; + displayName = "MG251"; + }; + + class cannon_120mm_long: cannon_120mm { + displayName = "L/55"; + class player: player {}; + }; + + class cannon_105mm: cannon_120mm { + displayName = "M68"; + class player: player { + displayName = "M68"; + }; + }; + + class cannon_125mm: cannon_120mm { + displayName = "2A46"; + }; + + // coax machine guns + class LMG_coax: LMG_RCWS { + displayName = "PKT"; + }; + + class ACE_LMG_coax_MBT_01: LMG_coax { + displayName = "MAG 58"; + }; + + class ACE_LMG_coax_APC_Tracked_03: LMG_coax { + displayName = "L94A1"; + }; + + // more autocannons + class autocannon_Base_F; + class autocannon_40mm_CTWS: autocannon_Base_F { + displayName = "Mk44 Bushmaster II"; + class AP: autocannon_Base_F { + displayName = "Mk44 Bushmaster II"; + }; + + class HE: autocannon_Base_F { + displayName = "Mk44 Bushmaster II"; + }; + }; + + class autocannon_30mm_CTWS: autocannon_Base_F { + displayName = "Mk44 Bushmaster II"; + class AP: autocannon_Base_F { + displayName = "Mk44 Bushmaster II"; + }; + + class HE: autocannon_Base_F { + displayName = "Mk44 Bushmaster II"; + }; + }; + + class autocannon_30mm: autocannon_30mm_CTWS { + displayName = "L21A1 RARDEN"; + class AP: AP { + displayName = "L21A1 RARDEN"; + }; + + class HE: HE { + displayName = "L21A1 RARDEN"; + }; + }; +}; diff --git a/addons/realisticnames/config.cpp b/addons/realisticnames/config.cpp index ea1318686b..6a8ea59290 100644 --- a/addons/realisticnames/config.cpp +++ b/addons/realisticnames/config.cpp @@ -12,1436 +12,6 @@ class CfgPatches { }; }; -// VEHICLES -class CfgVehicles { - // static weapons - class StaticMGWeapon; - class HMG_01_base_F: StaticMGWeapon { - displayName = "$STR_ACE_RealisticNames_HMG_01_Name"; - }; - class HMG_01_A_base_F: HMG_01_base_F { - displayName = "$STR_ACE_RealisticNames_HMG_01_A_Name"; - }; - class HMG_01_high_base_F: HMG_01_base_F { - displayName = "$STR_ACE_RealisticNames_HMG_01_high_Name"; - }; - - class AT_01_base_F; - class B_static_AT_F: AT_01_base_F { - displayName = "$STR_ACE_RealisticNames_static_AT_Name"; - }; - class O_static_AT_F: AT_01_base_F { - displayName = "$STR_ACE_RealisticNames_static_AT_Name"; - }; - class I_static_AT_F: AT_01_base_F { - displayName = "$STR_ACE_RealisticNames_static_AT_Name"; - }; - - class AA_01_base_F; - class B_static_AA_F: AA_01_base_F { - displayName = "$STR_ACE_RealisticNames_static_AA_Name"; - }; - class O_static_AA_F: AA_01_base_F { - displayName = "$STR_ACE_RealisticNames_static_AA_Name"; - }; - class I_static_AA_F: AA_01_base_F { - displayName = "$STR_ACE_RealisticNames_static_AA_Name"; - }; - - class GMG_TriPod; - class GMG_01_base_F: GMG_TriPod { - displayName = "$STR_ACE_RealisticNames_GMG_01_Name"; - }; - class GMG_01_A_base_F: GMG_01_base_F { - displayName = "$STR_ACE_RealisticNames_GMG_01_A_Name"; - }; - class GMG_01_high_base_F: GMG_01_base_F { - displayName = "$STR_ACE_RealisticNames_GMG_01_high_Name"; - }; - - // M-ATV - class MRAP_01_base_F; - class B_MRAP_01_F: MRAP_01_base_F { - displayName = "$STR_ACE_RealisticNames_MRAP_01_Name"; - }; - - class MRAP_01_gmg_base_F: MRAP_01_base_F {}; - class B_MRAP_01_gmg_F: MRAP_01_gmg_base_F { - displayName = "$STR_ACE_RealisticNames_MRAP_01_gmg_Name"; - }; - - class MRAP_01_hmg_base_F: MRAP_01_gmg_base_F {}; - class B_MRAP_01_hmg_F: MRAP_01_hmg_base_F { - displayName = "$STR_ACE_RealisticNames_MRAP_01_hmg_Name"; - }; - - // punisher - class MRAP_02_base_F; - class O_MRAP_02_F: MRAP_02_base_F { - displayName = "$STR_ACE_RealisticNames_MRAP_02_Name"; - }; - - class MRAP_02_hmg_base_F: MRAP_02_base_F {}; - class O_MRAP_02_hmg_F: MRAP_02_hmg_base_F { - displayName = "$STR_ACE_RealisticNames_MRAP_02_hmg_Name"; - }; - - class MRAP_02_gmg_base_F: MRAP_02_hmg_base_F {}; - class O_MRAP_02_gmg_F: MRAP_02_gmg_base_F { - displayName = "$STR_ACE_RealisticNames_MRAP_02_gmg_Name"; - }; - - // strider - class MRAP_03_base_F; - class I_MRAP_03_F: MRAP_03_base_F { - displayName = "$STR_ACE_RealisticNames_MRAP_03_Name"; - }; - - class MRAP_03_hmg_base_F: MRAP_03_base_F {}; - class I_MRAP_03_hmg_F: MRAP_03_hmg_base_F { - displayName = "$STR_ACE_RealisticNames_MRAP_03_hmg_Name"; - }; - - class MRAP_03_gmg_base_F: MRAP_03_hmg_base_F {}; - class I_MRAP_03_gmg_F: MRAP_03_gmg_base_F { - displayName = "$STR_ACE_RealisticNames_MRAP_03_gmg_Name"; - }; - - // merkava derivates - class MBT_01_base_F; - class B_MBT_01_base_F: MBT_01_base_F {}; - - class B_MBT_01_cannon_F: B_MBT_01_base_F { - displayName = "$STR_ACE_RealisticNames_MBT_01_cannon_Name"; - }; - class B_MBT_01_TUSK_F: B_MBT_01_cannon_F { - displayName = "$STR_ACE_RealisticNames_MBT_01_TUSK_Name"; - }; - - class MBT_01_arty_base_F: MBT_01_base_F {}; - class B_MBT_01_arty_base_F: MBT_01_arty_base_F {}; - - class B_MBT_01_arty_F: B_MBT_01_arty_base_F { - displayName = "$STR_ACE_RealisticNames_MBT_01_arty_Name"; - }; - - class MBT_01_mlrs_base_F: MBT_01_base_F {}; - class B_MBT_01_mlrs_base_F: MBT_01_mlrs_base_F {}; - - class B_MBT_01_mlrs_F: B_MBT_01_mlrs_base_F { - displayName = "$STR_ACE_RealisticNames_MBT_01_mlrs_Name"; // Fictional name, (probably wrong) hebrew translation of storm. - }; - - // T100 derivates - class MBT_02_base_F; - class O_MBT_02_base_F: MBT_02_base_F {}; - - class O_MBT_02_cannon_F: O_MBT_02_base_F { - displayName = "$STR_ACE_RealisticNames_MBT_02_cannon_Name"; - }; - - class MBT_02_arty_base_F: MBT_02_base_F {}; - class O_MBT_02_arty_base_F: MBT_02_arty_base_F {}; - - class O_MBT_02_arty_F: O_MBT_02_arty_base_F { - displayName = "$STR_ACE_RealisticNames_MBT_02_arty_Name"; - }; - - // leopard sg - class I_MBT_03_base_F; - class I_MBT_03_cannon_F: I_MBT_03_base_F { - displayName = "$STR_ACE_RealisticNames_MBT_03_cannon_Name"; - }; - - // tracked apcs - class B_APC_Tracked_01_base_F; - class B_APC_Tracked_01_rcws_F: B_APC_Tracked_01_base_F { - displayName = "$STR_ACE_RealisticNames_APC_Tracked_01_rcws_Name"; - }; - - class B_APC_Tracked_01_AA_F: B_APC_Tracked_01_base_F { - displayName = "$STR_ACE_RealisticNames_APC_Tracked_01_AA_Name"; // Fictional name, (probably wrong) hebrew translation of cheetah. - }; - - class B_APC_Tracked_01_CRV_F: B_APC_Tracked_01_base_F { - displayName = "$STR_ACE_RealisticNames_APC_Tracked_01_CRV_Name"; - }; - - class O_APC_Tracked_02_base_F; - class O_APC_Tracked_02_cannon_F: O_APC_Tracked_02_base_F { - displayName = "$STR_ACE_RealisticNames_APC_Tracked_02_cannon_Name"; - }; - - class O_APC_Tracked_02_AA_F: O_APC_Tracked_02_base_F { - displayName = "$STR_ACE_RealisticNames_APC_Tracked_02_AA_Name"; - }; - - class I_APC_tracked_03_base_F; - class I_APC_tracked_03_cannon_F: I_APC_tracked_03_base_F { - displayName = "$STR_ACE_RealisticNames_APC_tracked_03_cannon_Name"; - }; - - // wheeled apcs - class B_APC_Wheeled_01_base_F; - class B_APC_Wheeled_01_cannon_F: B_APC_Wheeled_01_base_F { - displayName = "$STR_ACE_RealisticNames_APC_Wheeled_cannon_Name"; - }; - - class O_APC_Wheeled_02_base_F; - class O_APC_Wheeled_02_rcws_F: O_APC_Wheeled_02_base_F { - displayName = "$STR_ACE_RealisticNames_APC_Wheeled_02_rcws_Name"; - }; - - class I_APC_Wheeled_03_base_F; - class I_APC_Wheeled_03_cannon_F: I_APC_Wheeled_03_base_F { - displayName = "$STR_ACE_RealisticNames_APC_Wheeled_03_cannon_Name"; - }; - - // trucks - class Truck_01_base_F; - class B_Truck_01_transport_F: Truck_01_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_01_transport_Name"; - }; - class B_Truck_01_covered_F: B_Truck_01_transport_F { - displayName = "$STR_ACE_RealisticNames_Truck_01_covered_Name"; - }; - class B_Truck_01_mover_F: B_Truck_01_transport_F { - displayName = "$STR_ACE_RealisticNames_Truck_01_mover_Name"; - }; - class B_Truck_01_box_F: B_Truck_01_mover_F { - displayName = "$STR_ACE_RealisticNames_Truck_01_box_Name"; - }; - class B_Truck_01_medical_F: B_Truck_01_transport_F { - displayName = "$STR_ACE_RealisticNames_Truck_01_medical_Name"; - }; - class B_Truck_01_ammo_F: B_Truck_01_mover_F { - displayName = "$STR_ACE_RealisticNames_Truck_01_ammo_Name"; - }; - class B_Truck_01_fuel_F: B_Truck_01_mover_F { - displayName = "$STR_ACE_RealisticNames_Truck_01_fuel_Name"; - }; - class B_Truck_01_Repair_F: B_Truck_01_mover_F { - displayName = "$STR_ACE_RealisticNames_Truck_01_Repair_Name"; - }; - - class Truck_02_base_F; - class O_Truck_02_transport_F: Truck_02_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_02_transport_Name"; - }; - class O_Truck_02_covered_F: Truck_02_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_02_covered_Name"; - }; - class O_Truck_02_ammo_F: Truck_02_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_02_ammo_Name"; - }; - class O_Truck_02_fuel_F: Truck_02_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_02_fuel_Name"; - }; - class O_Truck_02_box_F: Truck_02_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_02_box_Name"; - }; - class O_Truck_02_medical_F: O_Truck_02_box_F { - displayName = "$STR_ACE_RealisticNames_Truck_02_medical_Name"; - }; - - class I_Truck_02_transport_F: Truck_02_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_02_transport_Name"; - }; - class I_Truck_02_covered_F: Truck_02_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_02_covered_Name"; - }; - class I_Truck_02_ammo_F: Truck_02_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_02_ammo_Name"; - }; - class I_Truck_02_fuel_F: Truck_02_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_02_fuel_Name"; - }; - class I_Truck_02_box_F: Truck_02_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_02_box_Name"; - }; - class I_Truck_02_medical_F: I_Truck_02_box_F { - displayName = "$STR_ACE_RealisticNames_Truck_02_medical_Name"; - }; - - class Truck_03_base_F; - class O_Truck_03_transport_F: Truck_03_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_03_transport_Name"; - }; - class O_Truck_03_covered_F: Truck_03_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_03_covered_Name"; - }; - class O_Truck_03_device_F: Truck_03_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_03_device_Name"; - }; - class O_Truck_03_ammo_F: Truck_03_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_03_ammo_Name"; - }; - class O_Truck_03_fuel_F: Truck_03_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_03_fuel_Name"; - }; - class O_Truck_03_repair_F: Truck_03_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_03_repair_Name"; - }; - class O_Truck_03_medical_F: Truck_03_base_F { - displayName = "$STR_ACE_RealisticNames_Truck_03_medical_Name"; - }; - - // helicopters - class Heli_Attack_01_base_F; - class B_Heli_Attack_01_F: Heli_Attack_01_base_F { - displayName = "$STR_ACE_RealisticNames_Heli_Attack_01_Name"; - }; - - class Heli_Light_01_unarmed_base_F; - class B_Heli_Light_01_F: Heli_Light_01_unarmed_base_F { - displayName = "$STR_ACE_RealisticNames_Heli_Light_01_Name"; - }; - - class Heli_Light_01_armed_base_F; - class B_Heli_Light_01_armed_F: Heli_Light_01_armed_base_F { - displayName = "$STR_ACE_RealisticNames_Heli_Light_01_armed_Name"; - }; - - class Heli_Light_01_civil_base_F: Heli_Light_01_unarmed_base_F { - displayName = "$STR_ACE_RealisticNames_Heli_Light_01_civil_Name"; - }; - - class B_Heli_Transport_03_base_F; - class B_Heli_Transport_03_F: B_Heli_Transport_03_base_F { - displayName = "$STR_ACE_RealisticNames_Heli_Transport_03_Name"; - }; - - class B_Heli_Transport_03_unarmed_base_F: B_Heli_Transport_03_base_F {}; - class B_Heli_Transport_03_unarmed_F: B_Heli_Transport_03_unarmed_base_F { - displayName = "$STR_ACE_RealisticNames_Heli_Transport_03_unarmed_Name"; - }; - - class Heli_Light_02_base_F; - class O_Heli_Light_02_F: Heli_Light_02_base_F { - displayName = "$STR_ACE_RealisticNames_Heli_Light_02_Name"; - }; - class O_Heli_Light_02_unarmed_F: Heli_Light_02_base_F { - displayName = "$STR_ACE_RealisticNames_Heli_Light_02_unarmed_Name"; - }; - - class I_Heli_light_03_base_F; - class I_Heli_light_03_F: I_Heli_light_03_base_F { - displayName = "$STR_ACE_RealisticNames_Heli_light_03_Name"; - }; - - class I_Heli_light_03_unarmed_base_F; - class I_Heli_light_03_unarmed_F: I_Heli_light_03_unarmed_base_F { - displayName = "$STR_ACE_RealisticNames_Heli_light_03_unarmed_Name"; - }; - - class Heli_Transport_02_base_F; - class I_Heli_Transport_02_F: Heli_Transport_02_base_F { - displayName = "$STR_ACE_RealisticNames_Heli_Transport_02_Name"; - }; - - // planes - class Plane_CAS_01_base_F; - class B_Plane_CAS_01_F: Plane_CAS_01_base_F { - displayName = "$STR_ACE_RealisticNames_Plane_CAS_01_Name"; - }; - - class Plane_CAS_02_base_F; - class O_Plane_CAS_02_F: Plane_CAS_02_base_F { - displayName = "$STR_ACE_RealisticNames_Plane_CAS_02_Name"; - }; - - class Plane_Fighter_03_base_F; - class I_Plane_Fighter_03_CAS_F: Plane_Fighter_03_base_F { - displayName = "$STR_ACE_RealisticNames_Plane_Fighter_03_CAS_Name"; - }; - - class I_Plane_Fighter_03_AA_F: I_Plane_Fighter_03_CAS_F { - displayName = "$STR_ACE_RealisticNames_Plane_Fighter_03_AA_Name"; - }; - - // uavs - class UAV_02_base_F; - class B_UAV_02_F: UAV_02_base_F { - displayName = "$STR_ACE_RealisticNames_UAV_02_Name"; - }; - class O_UAV_02_F: UAV_02_base_F { - displayName = "$STR_ACE_RealisticNames_UAV_02_Name"; - }; - class I_UAV_02_F: UAV_02_base_F { - displayName = "$STR_ACE_RealisticNames_UAV_02_Name"; - }; - - class UAV_02_CAS_base_F: UAV_02_base_F {}; - class B_UAV_02_CAS_F: UAV_02_CAS_base_F { - displayName = "$STR_ACE_RealisticNames_UAV_02_CAS_Name"; - }; - class O_UAV_02_CAS_F: UAV_02_CAS_base_F { - displayName = "$STR_ACE_RealisticNames_UAV_02_CAS_Name"; - }; - class I_UAV_02_CAS_F: UAV_02_CAS_base_F { - displayName = "$STR_ACE_RealisticNames_UAV_02_CAS_Name"; - }; - - // pistols - class Pistol_Base_F; - class Weapon_hgun_P07_F: Pistol_Base_F { - displayName = "$STR_ACE_RealisticNames_hgun_P07_Name"; - }; - - class Weapon_hgun_Rook40_F: Pistol_Base_F { - displayName = "$STR_ACE_RealisticNames_hgun_Rook40_Name"; - }; - - class Weapon_hgun_ACPC2_F: Pistol_Base_F { - displayName = "$STR_ACE_RealisticNames_hgun_ACPC2_Name"; - }; - - class Weapon_hgun_Pistol_heavy_01_F: Pistol_Base_F { - displayName = "$STR_ACE_RealisticNames_hgun_Pistol_heavy_01_Name"; - }; - - class Weapon_hgun_Pistol_heavy_02_F: Pistol_Base_F { - displayName = "$STR_ACE_RealisticNames_hgun_Pistol_heavy_02_Name"; - }; - - class Weapon_hgun_Pistol_Signal_F: Pistol_Base_F { - displayName = "$STR_ACE_RealisticNames_hgun_Pistol_Signal_Name"; - }; - - // rocket launchers - class Launcher_Base_F; - class Weapon_launch_NLAW_F: Launcher_Base_F { - displayName = "$STR_ACE_RealisticNames_launch_NLAW_Name"; - }; - - class Weapon_launch_RPG32_F: Launcher_Base_F { - displayName = "$STR_ACE_RealisticNames_launch_RPG32_Name"; - }; - - class Weapon_launch_Titan_F: Launcher_Base_F { - displayName = "$STR_ACE_RealisticNames_launch_Titan_Name"; - }; - - class Weapon_launch_Titan_short_F: Launcher_Base_F { - displayName = "$STR_ACE_RealisticNames_launch_Titan_short_Name"; - }; - - class Weapon_launch_B_Titan_F: Launcher_Base_F { - displayName = "$STR_ACE_RealisticNames_launch_Titan_Name"; - }; - //class Weapon_launch_I_Titan_F: Weapon_launch_B_Titan_F {}; - //class Weapon_launch_O_Titan_F: Weapon_launch_B_Titan_F {}; - - class Weapon_launch_launch_B_Titan_short_F: Launcher_Base_F { - displayName = "$STR_ACE_RealisticNames_launch_Titan_short_Name"; - }; - //class Weapon_launch_I_Titan_short_F: Weapon_launch_launch_B_Titan_short_F {}; - //class Weapon_launch_O_Titan_short_F: Weapon_launch_launch_B_Titan_short_F {}; - - // rifles - - // MX - class Weapon_Base_F; - class Weapon_arifle_MX_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_MX_Name"; - }; - - class Weapon_arifle_MXC_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_MXC_Name"; - }; - - class Weapon_arifle_MX_GL_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_MX_GL_Name"; - }; - - class Weapon_arifle_MX_SW_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_MX_SW_Name"; - }; - - class Weapon_arifle_MXM_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_MXM_Name"; - }; - - // Katiba - class Weapon_arifle_Katiba_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Katiba_Name"; - }; - - class Weapon_arifle_Katiba_C_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Katiba_C_Name"; - }; - - class Weapon_arifle_Katiba_GL_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Katiba_GL_Name"; - }; - - // F2000 - class Weapon_arifle_Mk20_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Mk20_Name"; - }; - - class Weapon_arifle_Mk20_plain_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Mk20_plain_Name"; - }; - - class Weapon_arifle_Mk20C_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Mk20C_Name"; - }; - - class Weapon_arifle_Mk20C_plain_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Mk20C_plain_Name"; - }; - - class Weapon_arifle_Mk20_GL_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Mk20_GL_Name"; - }; - - class Weapon_arifle_Mk20_GL_plain_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Mk20_GL_plain_Name"; - }; - - // TAR-21 - class Weapon_arifle_TRG21_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_TRG21_Name"; - }; - - class Weapon_arifle_TRG20_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_TRG20_Name"; - }; - - class Weapon_arifle_TRG21_GL_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_TRG21_GL_Name"; - }; - - // sub machine guns - class Weapon_SMG_01_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_SMG_01_Name"; - }; - - class Weapon_SMG_02_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_SMG_02_Name"; - }; - - class Weapon_hgun_PDW2000_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_hgun_PDW2000_Name"; - }; - - class Weapon_arifle_SDAR_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_SDAR_Name"; - }; - - // machine guns - class Weapon_LMG_Mk200_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_LMG_Mk200_Name"; - }; - - class Weapon_LMG_Zafir_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_LMG_Zafir_Name"; - }; - - // sniper rifles - class Weapon_srifle_EBR_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_srifle_EBR_Name"; - }; - - class Weapon_srifle_GM6_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_srifle_GM6_Name"; - }; - - class Weapon_srifle_GM6_camo_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_srifle_GM6_camo_Name"; - }; - - class Weapon_srifle_LRR_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_srifle_LRR_Name"; - }; - - class Weapon_srifle_LRR_camo_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_srifle_LRR_camo_Name"; - }; - - class Weapon_srifle_DMR_01_F: Weapon_Base_F { - displayName = "$STR_ACE_RealisticNames_srifle_DMR_01_Name"; - }; -}; - -// WEAPONS -class Mode_FullAuto; - -class CfgWeapons { - // assault rifles - - // MX - class arifle_MX_Base_F; - class arifle_MX_F: arifle_MX_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_MX_Name"; - }; - class arifle_MX_Black_F: arifle_MX_F { - displayName = "$STR_ACE_RealisticNames_arifle_MX_Black_Name"; - }; - - class arifle_MXC_F: arifle_MX_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_MXC_Name"; - }; - class arifle_MXC_Black_F: arifle_MXC_F { - displayName = "$STR_ACE_RealisticNames_arifle_MXC_Black_Name"; - }; - - class arifle_MX_GL_F: arifle_MX_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_MX_GL_Name"; - }; - class arifle_MX_GL_Black_F: arifle_MX_GL_F { - displayName = "$STR_ACE_RealisticNames_arifle_MX_GL_Black_Name"; - }; - - class arifle_MX_SW_F: arifle_MX_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_MX_SW_Name"; - }; - class arifle_MX_SW_Black_F: arifle_MX_SW_F { - displayName = "$STR_ACE_RealisticNames_arifle_MX_SW_Black_Name"; - }; - - class arifle_MXM_F: arifle_MX_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_MXM_Name"; - }; - class arifle_MXM_Black_F: arifle_MXM_F { - displayName = "$STR_ACE_RealisticNames_arifle_MXM_Black_Name"; - }; - - // Katiba - class arifle_katiba_Base_F; - class arifle_Katiba_F: arifle_katiba_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Katiba_Name"; - }; - class arifle_Katiba_GL_F: arifle_katiba_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Katiba_GL_Name"; - }; - class arifle_Katiba_C_F: arifle_katiba_Base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Katiba_C_Name"; - }; - - // SDAR - class SDAR_base_F; - class arifle_SDAR_F: SDAR_base_F { - displayName = "$STR_ACE_RealisticNames_arifle_SDAR_Name"; - }; - - // TAR-21 - class Tavor_base_F; - class arifle_TRG21_F: Tavor_base_F { - displayName = "$STR_ACE_RealisticNames_arifle_TRG21_Name"; - }; - class arifle_TRG21_GL_F: arifle_TRG21_F { - displayName = "$STR_ACE_RealisticNames_arifle_TRG21_GL_Name"; - }; - class arifle_TRG20_F: Tavor_base_F { - displayName = "$STR_ACE_RealisticNames_arifle_TRG20_Name"; - }; - - // F2000 - class mk20_base_F; - class arifle_Mk20_F: mk20_base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Mk20_Name"; - }; - class arifle_Mk20_plain_F: arifle_Mk20_F { - displayName = "$STR_ACE_RealisticNames_arifle_Mk20_plain_Name"; - }; - - class arifle_Mk20C_F: mk20_base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Mk20C_Name"; - }; - class arifle_Mk20C_plain_F: arifle_Mk20C_F { - displayName = "$STR_ACE_RealisticNames_arifle_Mk20C_plain_Name"; - }; - - class arifle_Mk20_GL_F: mk20_base_F { - displayName = "$STR_ACE_RealisticNames_arifle_Mk20_GL_Name"; - }; - class arifle_Mk20_GL_plain_F: arifle_Mk20_GL_F { - displayName = "$STR_ACE_RealisticNames_arifle_Mk20_GL_plain_Name"; - }; - - // Vector - class SMG_01_Base; - class SMG_01_F: SMG_01_Base { - displayName = "$STR_ACE_RealisticNames_SMG_01_Name"; - }; - - // Scorpion - class SMG_02_base_F; - class SMG_02_F: SMG_02_base_F { - displayName = "$STR_ACE_RealisticNames_SMG_02_Name"; - }; - - // PDW 2000 - class pdw2000_base_F; - class hgun_pdw2000_F: pdw2000_base_F { - displayName = "$STR_ACE_RealisticNames_hgun_PDW2000_Name"; - }; - - // pistols - class Pistol_Base_F; - class hgun_P07_F: Pistol_Base_F { - displayName = "$STR_ACE_RealisticNames_hgun_P07_Name"; - }; - - class hgun_Rook40_F: Pistol_Base_F { - displayName = "$STR_ACE_RealisticNames_hgun_Rook40_Name"; - }; - - class hgun_ACPC2_F: Pistol_Base_F { - displayName = "$STR_ACE_RealisticNames_hgun_ACPC2_Name"; - }; - - class hgun_Pistol_heavy_01_F: Pistol_Base_F { - displayName = "$STR_ACE_RealisticNames_hgun_Pistol_heavy_01_Name"; - }; - - class hgun_Pistol_heavy_02_F: Pistol_Base_F { - displayName = "$STR_ACE_RealisticNames_hgun_Pistol_heavy_02_Name"; - }; - - class hgun_Pistol_Signal_F: Pistol_Base_F { - displayName = "$STR_ACE_RealisticNames_hgun_Pistol_Signal_Name"; - }; - - // machine guns - class Rifle_Long_Base_F; - class LMG_Mk200_F: Rifle_Long_Base_F { - displayName = "$STR_ACE_RealisticNames_LMG_Mk200_Name"; - }; - - class LMG_Zafir_F: Rifle_Long_Base_F { - displayName = "$STR_ACE_RealisticNames_LMG_Zafir_Name"; - }; - - // sniper rifles - class EBR_base_F; - class srifle_EBR_F: EBR_base_F { - displayName = "$STR_ACE_RealisticNames_srifle_EBR_Name"; - }; - - class LRR_base_F; - class srifle_LRR_F: LRR_base_F { - displayName = "$STR_ACE_RealisticNames_srifle_LRR_Name"; - }; - class srifle_LRR_camo_F: srifle_LRR_F { - displayName = "$STR_ACE_RealisticNames_srifle_LRR_camo_Name"; - }; - - class GM6_base_F; - class srifle_GM6_F: GM6_base_F { - displayName = "$STR_ACE_RealisticNames_srifle_GM6_Name"; - }; - class srifle_GM6_camo_F: srifle_GM6_F { - displayName = "$STR_ACE_RealisticNames_srifle_GM6_camo_Name"; - }; - - class DMR_01_base_F; - class srifle_DMR_01_F: DMR_01_base_F { - displayName = "$STR_ACE_RealisticNames_srifle_DMR_01_Name"; - }; - - // launchers - class Launcher_Base_F; - class launch_RPG32_F: Launcher_Base_F { - displayName = "$STR_ACE_RealisticNames_launch_RPG32_Name"; - }; - - class launch_Titan_base: Launcher_Base_F { - displayName = "$STR_ACE_RealisticNames_launch_Titan_Name"; - }; - class launch_Titan_short_base: launch_Titan_base { - displayName = "$STR_ACE_RealisticNames_launch_Titan_short_Name"; - }; - - class launch_NLAW_F: Launcher_Base_F { - displayName = "$STR_ACE_RealisticNames_launch_NLAW_Name"; - }; - - // vehicle weapons - - // gatlings - class CannonCore; - class gatling_20mm: CannonCore { - //displayName = ""; - class manual: CannonCore { - //displayName = ""; - }; - }; - class Twin_Cannon_20mm: gatling_20mm { - displayName = "Plamen PL-20"; - class manual: manual { - displayName = "Plamen PL-20"; - }; - }; - - class gatling_30mm: CannonCore { // This is a fictional veresion of the GSh-6-30, with 3 barrels - displayName = "GSh-3-30"; - class LowROF: Mode_FullAuto { - displayName = "GSh-3-30"; - }; - }; - - class Gatling_30mm_Plane_CAS_01_F: CannonCore { - displayName = "GAU-8"; - class LowROF: Mode_FullAuto { - displayName = "GAU-8"; - }; - }; - - class Cannon_30mm_Plane_CAS_02_F: CannonCore { - displayName = "GSh-301"; - class LowROF: Mode_FullAuto { - displayName = "GSh-301"; - }; - }; - - // missiles - class RocketPods; - class Missile_AA_04_Plane_CAS_01_F: RocketPods { - displayName = "AIM-9 Sidewinder"; - }; - class Missile_AA_03_Plane_CAS_02_F: Missile_AA_04_Plane_CAS_01_F { - displayName = "Wympel R-73"; - }; - - class MissileLauncher; - class Missile_AGM_02_Plane_CAS_01_F: MissileLauncher { - displayName = "AGM-65 Maverick"; - }; - class Missile_AGM_01_Plane_CAS_02_F: Missile_AGM_02_Plane_CAS_01_F { - displayName = "Kh-25MTP"; - }; - - // rockets - class Rocket_04_HE_Plane_CAS_01_F: RocketPods { - displayName = "Hydra 70"; - class Burst: RocketPods { - displayName = "Hydra 70"; - }; - }; - class Rocket_04_AP_Plane_CAS_01_F: Rocket_04_HE_Plane_CAS_01_F { - displayName = "Hydra 70"; - }; - - class Rocket_03_HE_Plane_CAS_02_F: Rocket_04_HE_Plane_CAS_01_F { - displayName = "S-8"; - class Burst: Burst { - displayName = "S-8"; - }; - }; - class Rocket_03_AP_Plane_CAS_02_F: Rocket_04_AP_Plane_CAS_01_F { - displayName = "S-8"; - class Burst: Burst { - displayName = "S-8"; - }; - }; - - class rockets_Skyfire: RocketPods { - displayName = "Skyfire-70"; - class Burst: RocketPods { - displayName = "Skyfire-70"; - }; - }; - - // more missiles - class missiles_DAR: RocketPods { - displayName = "Hydra 70"; - class Burst: RocketPods { - displayName = "Hydra 70"; - }; - }; - - class missiles_DAGR: RocketPods { - displayName = "DAGR"; - class Burst: RocketPods { - displayName = "DAGR"; - }; - }; - - class missiles_ASRAAM: MissileLauncher { - displayName = "AIM-132 ASRAAM"; - }; - - class missiles_Zephyr: MissileLauncher { - displayName = "AIM-120A AMRAAM"; - }; - - class missiles_SCALPEL: RocketPods { // according to zGuba, this is what it's based on - displayName = "9K121 Vikhr"; - }; - - // bomb - class Bomb_04_Plane_CAS_01_F: RocketPods { - //displayName = ""; - }; - class Bomb_03_Plane_CAS_02_F: Bomb_04_Plane_CAS_01_F { - displayName = "FAB-250M-54"; - }; - - // machine guns - class MGunCore; - class M134_minigun: MGunCore { - displayName = "2x M134 Minigun"; - }; - - class LMG_RCWS; - class MGun; - - class LMG_Minigun: LMG_RCWS { - displayName = "M134 Minigun"; - class manual: MGun { - displayName = "M134 Minigun"; - }; - }; - - class HMG_127: LMG_RCWS { - displayName = "M2"; - class manual: MGun { - displayName = "M2"; - }; - }; - - class HMG_01: HMG_127 { - displayName = "XM312"; - }; - class HMG_M2: HMG_01 { - displayName = "M2"; - }; - - class HMG_NSVT: HMG_127 { - displayName = "NSVT"; - class manual: manual { - displayName = "NSVT"; - }; - }; - - // grenade launchers - class GMG_F; - class GMG_20mm: GMG_F { - displayName = "XM307"; - class manual: GMG_F { - displayName = "XM307"; - }; - }; - - class GMG_40mm: GMG_F { - displayName = "Mk 19"; - class manual: GMG_F { - displayName = "Mk 19"; - }; - }; - - // autocannons - class autocannon_35mm: CannonCore { - displayName = "GDF-001"; - class manual: CannonCore { - displayName = "GDF-001"; - }; - }; - - // aa missiles - class missiles_titan: MissileLauncher { - displayName = "Mini-Spike"; - }; - - // mortar - class mortar_155mm_AMOS: CannonCore { - displayName = "L/52"; - }; - - // artillery rockets - class rockets_230mm_GAT: RocketPods { - displayName = "M269"; - }; - - // tank guns - class cannon_120mm: CannonCore { - class player; - displayName = "MG251"; - }; - - class cannon_120mm_long: cannon_120mm { - displayName = "L/55"; - class player: player {}; - }; - - class cannon_105mm: cannon_120mm { - displayName = "M68"; - class player: player { - displayName = "M68"; - }; - }; - - class cannon_125mm: cannon_120mm { - displayName = "2A46"; - }; - - // coax machine guns - class LMG_coax: LMG_RCWS { - displayName = "PKT"; - }; - - class ACE_LMG_coax_MBT_01: LMG_coax { - displayName = "MAG 58"; - }; - - class ACE_LMG_coax_APC_Tracked_03: LMG_coax { - displayName = "L94A1"; - }; - - // more autocannons - class autocannon_Base_F; - class autocannon_40mm_CTWS: autocannon_Base_F { - displayName = "Mk44 Bushmaster II"; - class AP: autocannon_Base_F { - displayName = "Mk44 Bushmaster II"; - }; - - class HE: autocannon_Base_F { - displayName = "Mk44 Bushmaster II"; - }; - }; - - class autocannon_30mm_CTWS: autocannon_Base_F { - displayName = "Mk44 Bushmaster II"; - class AP: autocannon_Base_F { - displayName = "Mk44 Bushmaster II"; - }; - - class HE: autocannon_Base_F { - displayName = "Mk44 Bushmaster II"; - }; - }; - - class autocannon_30mm: autocannon_30mm_CTWS { - displayName = "L21A1 RARDEN"; - class AP: AP { - displayName = "L21A1 RARDEN"; - }; - - class HE: HE { - displayName = "L21A1 RARDEN"; - }; - }; -}; - -class CfgMagazines { - class VehicleMagazine; - class 1000Rnd_Gatling_30mm_Plane_CAS_01_F: VehicleMagazine { - displayNameShort = "30mm HEI"; - }; - - class 7Rnd_Rocket_04_HE_F: VehicleMagazine { - displayNameShort = "70mm HE"; - }; - class 7Rnd_Rocket_04_AP_F: 7Rnd_Rocket_04_HE_F { - displayNameShort = "70mm AP"; - }; - - class 24Rnd_PG_missiles: VehicleMagazine { - displayNameShort = "70mm HE"; - }; - class 12Rnd_PG_missiles: 24Rnd_PG_missiles { - displayNameShort = "70mm HE"; - }; - - class 2000Rnd_65x39_Belt; - class 5000Rnd_762x51_Belt: 2000Rnd_65x39_Belt { - displayNameShort = "7.62mm"; - }; - class 5000Rnd_762x51_Yellow_Belt: 5000Rnd_762x51_Belt { - displayNameShort = "7.62mm"; - }; - - class 500Rnd_127x99_mag: VehicleMagazine { - displayNameShort = "12.7mm"; - }; - class 500Rnd_127x99_mag_Tracer_Green: 500Rnd_127x99_mag { - displayNameShort = "12.7mm"; - }; - class 500Rnd_127x99_mag_Tracer_Red: 500Rnd_127x99_mag { - displayNameShort = "12.7mm"; - }; - class 500Rnd_127x99_mag_Tracer_Yellow: 500Rnd_127x99_mag { - displayNameShort = "12.7mm"; - }; - - class 200Rnd_127x99_mag: 500Rnd_127x99_mag { - displayNameShort = "12.7mm"; - }; - class 200Rnd_127x99_mag_Tracer_Green: 200Rnd_127x99_mag { - displayNameShort = "12.7mm"; - }; - class 200Rnd_127x99_mag_Tracer_Red: 200Rnd_127x99_mag { - displayNameShort = "12.7mm"; - }; - class 200Rnd_127x99_mag_Tracer_Yellow: 200Rnd_127x99_mag { - displayNameShort = "12.7mm"; - }; - - class 100Rnd_127x99_mag: 500Rnd_127x99_mag { - displayNameShort = "12.7mm"; - }; - class 100Rnd_127x99_mag_Tracer_Green: 100Rnd_127x99_mag { - displayNameShort = "12.7mm"; - }; - class 100Rnd_127x99_mag_Tracer_Red: 100Rnd_127x99_mag { - displayNameShort = "12.7mm"; - }; - class 100Rnd_127x99_mag_Tracer_Yellow: 100Rnd_127x99_mag { - displayNameShort = "12.7mm"; - }; - - class 200Rnd_40mm_G_belt: VehicleMagazine { - displayNameShort = "40mm HE"; - }; - - class 24Rnd_missiles: VehicleMagazine { - displayNameShort = "70mm HE"; - }; - - class 300Rnd_20mm_shells: VehicleMagazine { - displayNameShort = "20mm HE"; - }; - - class 14Rnd_80mm_rockets: VehicleMagazine { - displayNameShort = "70mm HE"; - }; - - class 250Rnd_30mm_HE_shells: VehicleMagazine { - displayNameShort = "30mm HE"; - }; - class 250Rnd_30mm_APDS_shells: 250Rnd_30mm_HE_shells { - displayNameShort = "30mm APDS"; - }; - - class 20Rnd_Rocket_03_HE_F: 7Rnd_Rocket_04_HE_F { - displayNameShort = "80mm HE"; - }; - - class 20Rnd_Rocket_03_AP_F: 7Rnd_Rocket_04_AP_F { - displayNameShort = "80mm AP"; - }; - - class 500Rnd_Cannon_30mm_Plane_CAS_02_F: 1000Rnd_Gatling_30mm_Plane_CAS_01_F { - displayNameShort = "30mm HEI-T"; - }; - - class 680Rnd_35mm_AA_shells: VehicleMagazine { - displayNameShort = "35mm HEI"; - }; - class 680Rnd_35mm_AA_shells_Tracer_Red: 680Rnd_35mm_AA_shells { - displayNameShort = "35mm HEI-T"; - }; - class 680Rnd_35mm_AA_shells_Tracer_Green: 680Rnd_35mm_AA_shells { - displayNameShort = "35mm HEI-T"; - }; - class 680Rnd_35mm_AA_shells_Tracer_Yellow: 680Rnd_35mm_AA_shells { - displayNameShort = "35mm HEI-T"; - }; - - class 32Rnd_155mm_Mo_shells: VehicleMagazine { - displayNameShort = "155mm HE"; - }; - class 6Rnd_155mm_Mo_smoke: 32Rnd_155mm_Mo_shells { - displayNameShort = "155mm Smoke"; - }; - class 6Rnd_155mm_Mo_mine: 6Rnd_155mm_Mo_smoke { - displayNameShort = "155mm Mines"; - }; - class 6Rnd_155mm_Mo_AT_mine: 6Rnd_155mm_Mo_smoke { - displayNameShort = "155mm AT Mines"; - }; - class 2Rnd_155mm_Mo_Cluster: 6Rnd_155mm_Mo_smoke { - displayNameShort = "155mm Cluster"; - }; - class 2Rnd_155mm_Mo_guided: 6Rnd_155mm_Mo_smoke { - displayNameShort = "155mm Guided"; - }; - class 2Rnd_155mm_Mo_LG: 6Rnd_155mm_Mo_smoke { - displayNameShort = "155mm Laser Guided"; - }; - - class 12Rnd_230mm_rockets: 14Rnd_80mm_rockets { - displayName = "227mm HE Missile"; - displayNameShort = "227mm HE"; - }; - - class 30Rnd_120mm_HE_shells: VehicleMagazine { - displayNameShort = "120mm HE"; - }; - class 30Rnd_120mm_HE_shells_Tracer_Red: 30Rnd_120mm_HE_shells { - displayNameShort = "120mm HE-T"; - }; - class 30Rnd_120mm_HE_shells_Tracer_Green: 30Rnd_120mm_HE_shells { - displayNameShort = "120mm HE-T"; - }; - class 30Rnd_120mm_HE_shells_Tracer_Yellow: 30Rnd_120mm_HE_shells { - displayNameShort = "120mm HE-T"; - }; - - class 30Rnd_120mm_APFSDS_shells: 30Rnd_120mm_HE_shells { - displayNameShort = "120mm AP"; - }; - class 30Rnd_120mm_APFSDS_shells_Tracer_Red: 30Rnd_120mm_APFSDS_shells { - displayNameShort = "120mm AP-T"; - }; - class 30Rnd_120mm_APFSDS_shells_Tracer_Green: 30Rnd_120mm_APFSDS_shells { - displayNameShort = "120mm AP-T"; - }; - class 30Rnd_120mm_APFSDS_shells_Tracer_Yellow: 30Rnd_120mm_APFSDS_shells { - displayNameShort = "120mm AP-T"; - }; - - class 200Rnd_762x51_Belt: VehicleMagazine { - displayNameShort = "7.62mm"; - }; - class 200Rnd_762x51_Belt_Red: 200Rnd_762x51_Belt {}; - class 200Rnd_762x51_Belt_Green: 200Rnd_762x51_Belt {}; - class 200Rnd_762x51_Belt_Yellow: 200Rnd_762x51_Belt {}; - class 200Rnd_762x51_Belt_T_Red: 200Rnd_762x51_Belt_Red { - displayNameShort = "7.62mm"; - }; - class 200Rnd_762x51_Belt_T_Green: 200Rnd_762x51_Belt_Green { - displayNameShort = "7.62mm"; - }; - class 200Rnd_762x51_Belt_T_Yellow: 200Rnd_762x51_Belt_Yellow { - displayNameShort = "7.62mm"; - }; - - class 2000Rnd_762x51_Belt_Red; - class 2000Rnd_762x51_Belt_T_Red: 2000Rnd_762x51_Belt_Red { - displayNameShort = "7.62mm"; - }; - - class 2000Rnd_762x51_Belt_Green; - class 2000Rnd_762x51_Belt_T_Green: 2000Rnd_762x51_Belt_Green { - displayNameShort = "7.62mm"; - }; - - class 2000Rnd_762x51_Belt_Yellow; - class 2000Rnd_762x51_Belt_T_Yellow: 2000Rnd_762x51_Belt_Yellow { - displayNameShort = "7.62mm"; - }; - - class 1000Rnd_762x51_Belt_Red; - class 1000Rnd_762x51_Belt_T_Red: 1000Rnd_762x51_Belt_Red { - displayNameShort = "7.62mm"; - }; - - class 1000Rnd_762x51_Belt_Green; - class 1000Rnd_762x51_Belt_T_Green: 1000Rnd_762x51_Belt_Green { - displayNameShort = "7.62mm"; - }; - - class 1000Rnd_762x51_Belt_Yellow; - class 1000Rnd_762x51_Belt_T_Yellow: 1000Rnd_762x51_Belt_Yellow { - displayNameShort = "7.62mm"; - }; - - class 16Rnd_120mm_HE_shells; - class 12Rnd_125mm_HE: 16Rnd_120mm_HE_shells { - displayNameShort = "125mm HE"; - }; - - class 16Rnd_120mm_HE_shells_Tracer_Red; - class 12Rnd_125mm_HE_T_Red: 16Rnd_120mm_HE_shells_Tracer_Red { - displayNameShort = "125mm HE-T"; - }; - - class 16Rnd_120mm_HE_shells_Tracer_Green; - class 12Rnd_125mm_HE_T_Green: 16Rnd_120mm_HE_shells_Tracer_Green { - displayNameShort = "125mm HE-T"; - }; - - class 16Rnd_120mm_HE_shells_Tracer_Yellow; - class 12Rnd_125mm_HE_T_Yellow: 16Rnd_120mm_HE_shells_Tracer_Yellow { - displayNameShort = "125mm HE-T"; - }; - - class 12Rnd_125mm_HEAT: 12Rnd_125mm_HE { - displayNameShort = "125mm MP"; - }; - class 12Rnd_125mm_HEAT_T_Red: 12Rnd_125mm_HEAT { - displayNameShort = "125mm MP-T"; - }; - class 12Rnd_125mm_HEAT_T_Green: 12Rnd_125mm_HEAT { - displayNameShort = "125mm MP-T"; - }; - class 12Rnd_125mm_HEAT_T_Yellow: 12Rnd_125mm_HEAT { - displayNameShort = "125mm MP-T"; - }; - - class 32Rnd_120mm_APFSDS_shells; - class 24Rnd_125mm_APFSDS: 32Rnd_120mm_APFSDS_shells { - displayNameShort = "125mm AP"; - }; - - class 32Rnd_120mm_APFSDS_shells_Tracer_Red; - class 24Rnd_125mm_APFSDS_T_Red: 32Rnd_120mm_APFSDS_shells_Tracer_Red { - displayNameShort = "125mm AP-T"; - }; - - class 32Rnd_120mm_APFSDS_shells_Tracer_Green; - class 24Rnd_125mm_APFSDS_T_Green: 32Rnd_120mm_APFSDS_shells_Tracer_Green { - displayNameShort = "125mm AP-T"; - }; - - class 32Rnd_120mm_APFSDS_shells_Tracer_Yellow; - class 24Rnd_125mm_APFSDS_T_Yellow: 32Rnd_120mm_APFSDS_shells_Tracer_Yellow { - displayNameShort = "125mm AP-T"; - }; - - class 20Rnd_105mm_HEAT_MP: 12Rnd_125mm_HEAT { - displayNameShort = "105mm MP"; - }; - class 20Rnd_105mm_HEAT_MP_T_Red: 20Rnd_105mm_HEAT_MP { - displayNameShort = "105mm MP-T"; - }; - class 20Rnd_105mm_HEAT_MP_T_Green: 20Rnd_105mm_HEAT_MP { - displayNameShort = "105mm MP-T"; - }; - class 20Rnd_105mm_HEAT_MP_T_Yellow: 20Rnd_105mm_HEAT_MP { - displayNameShort = "105mm MP-T"; - }; - - class 40Rnd_105mm_APFSDS: 24Rnd_125mm_APFSDS { - displayNameShort = "105mm AP"; - }; - class 40Rnd_105mm_APFSDS_T_Red: 40Rnd_105mm_APFSDS { - displayNameShort = "105mm AP-T"; - }; - class 40Rnd_105mm_APFSDS_T_Green: 40Rnd_105mm_APFSDS { - displayNameShort = "105mm AP-T"; - }; - class 40Rnd_105mm_APFSDS_T_Yellow: 40Rnd_105mm_APFSDS { - displayNameShort = "105mm AP-T"; - }; - - class 60Rnd_40mm_GPR_shells: VehicleMagazine { - displayNameShort = "40mm GPR"; - }; - class 60Rnd_40mm_GPR_Tracer_Red_shells: 60Rnd_40mm_GPR_shells { - displayNameShort = "40mm GPR-T"; - }; - class 60Rnd_40mm_GPR_Tracer_Green_shells: 60Rnd_40mm_GPR_shells { - displayNameShort = "40mm GPR-T"; - }; - class 60Rnd_40mm_GPR_Tracer_Yellow_shells: 60Rnd_40mm_GPR_shells { - displayNameShort = "40mm GPR-T"; - }; - - class 40Rnd_40mm_APFSDS_shells: 60Rnd_40mm_GPR_shells { - displayNameShort = "40mm AP"; - }; - class 40Rnd_40mm_APFSDS_Tracer_Red_shells: 40Rnd_40mm_APFSDS_shells { - displayNameShort = "40mm AP-T"; - }; - class 40Rnd_40mm_APFSDS_Tracer_Green_shells: 40Rnd_40mm_APFSDS_Tracer_Red_shells { - displayNameShort = "40mm AP-T"; - }; - class 40Rnd_40mm_APFSDS_Tracer_Yellow_shells: 40Rnd_40mm_APFSDS_Tracer_Red_shells { - displayNameShort = "40mm AP-T"; - }; - - class 450Rnd_127x108_Ball: VehicleMagazine { - displayNameShort = "12.7mm"; - }; - - class 140Rnd_30mm_MP_shells: 250Rnd_30mm_HE_shells { - displayNameShort = "30mm MP"; - }; - class 140Rnd_30mm_MP_shells_Tracer_Red: 140Rnd_30mm_MP_shells { - displayNameShort = "30mm MP-T"; - }; - class 140Rnd_30mm_MP_shells_Tracer_Green: 140Rnd_30mm_MP_shells_Tracer_Red { - displayNameShort = "30mm MP-T"; - }; - class 140Rnd_30mm_MP_shells_Tracer_Yellow: 140Rnd_30mm_MP_shells_Tracer_Red { - displayNameShort = "30mm MP-T"; - }; - - class 60Rnd_30mm_APFSDS_shells: 250Rnd_30mm_HE_shells { - displayNameShort = "30mm AP"; - }; - class 60Rnd_30mm_APFSDS_shells_Tracer_Red: 60Rnd_30mm_APFSDS_shells { - displayNameShort = "30mm AP-T"; - }; - class 60Rnd_30mm_APFSDS_shells_Tracer_Green: 60Rnd_30mm_APFSDS_shells { - displayNameShort = "30mm AP-T"; - }; - class 60Rnd_30mm_APFSDS_shells_Tracer_Yellow: 60Rnd_30mm_APFSDS_shells { - displayNameShort = "30mm AP-T"; - }; - - class 200Rnd_20mm_G_belt: VehicleMagazine { - displayNameShort = "20mm HE"; - }; - class 40Rnd_20mm_G_belt: 200Rnd_20mm_G_belt { - displayNameShort = "20mm HE"; - }; - - // mines - class CA_Magazine; - // http://en.wikipedia.org/wiki/M15_mine - class ATMine_Range_Mag: CA_Magazine { - displayName = "$STR_ACE_RealisticNames_ATMine_Name"; - }; - // http://en.wikipedia.org/wiki/VS-50_mine - class APERSMine_Range_Mag: ATMine_Range_Mag { - displayName = "$STR_ACE_RealisticNames_APERSMine_Name"; - }; - // https://www.buymilsurp.com/us-m26-antipersonnel-bounding-mine-p-5419.html - class APERSBoundingMine_Range_Mag: ATMine_Range_Mag { - displayName = "$STR_ACE_RealisticNames_APERSBoundingMine_Name"; - }; - // http://en.wikipedia.org/wiki/PMR-3_mine - class APERSTripMine_Wire_Mag: ATMine_Range_Mag { - displayName = "$STR_ACE_RealisticNames_APERSTripwireMine_Name"; - }; - // the following ones can be found here: http://www.dtic.mil/dtic/tr/fulltext/u2/a567897.pdf - class SLAMDirectionalMine_Wire_Mag: ATMine_Range_Mag { - displayName = "$STR_ACE_RealisticNames_SLAM_Name"; - }; - - // claymore - class ClaymoreDirectionalMine_Remote_Mag: CA_Magazine { - displayName = "$STR_ACE_RealisticNames_Claymore_Name"; - }; - - // satchels - class SatchelCharge_Remote_Mag: CA_Magazine { - displayName = "$STR_ACE_RealisticNames_SatchelCharge_Name"; - }; - class DemoCharge_Remote_Mag: SatchelCharge_Remote_Mag { - displayName = "$STR_ACE_RealisticNames_DemoCharge_Name"; - }; - - // hand grenades - class HandGrenade: CA_Magazine { - displayName = "$STR_ACE_RealisticNames_HandGrenade_Name"; - }; - class SmokeShell: HandGrenade { - displayName = "$STR_ACE_RealisticNames_SmokeShell_Name"; - }; - class SmokeShellBlue: SmokeShell { - displayName = "$STR_ACE_RealisticNames_SmokeShellBlue_Name"; - }; - class SmokeShellGreen: SmokeShell { - displayName = "$STR_ACE_RealisticNames_SmokeShellGreen_Name"; - }; - class SmokeShellOrange: SmokeShell { - displayName = "$STR_ACE_RealisticNames_SmokeShellOrange_Name"; - }; - class SmokeShellPurple: SmokeShell { - displayName = "$STR_ACE_RealisticNames_SmokeShellPurple_Name"; - }; - class SmokeShellRed: SmokeShell { - displayName = "$STR_ACE_RealisticNames_SmokeShellRed_Name"; - }; - class SmokeShellYellow: SmokeShell { - displayName = "$STR_ACE_RealisticNames_SmokeShellYellow_Name"; - }; -}; +#include "CfgMagazines.hpp" +#include "CfgVehicles.hpp" +#include "CfgWeapons.hpp" diff --git a/addons/reload/CfgEventHandlers.hpp b/addons/reload/CfgEventHandlers.hpp index 8de6a01f06..c93f74e0bd 100644 --- a/addons/reload/CfgEventHandlers.hpp +++ b/addons/reload/CfgEventHandlers.hpp @@ -14,7 +14,7 @@ class Extended_PostInit_EventHandlers { class Extended_Take_EventHandlers { class CAManBase { class ACE_AmmoIndicatorReload { - clientTake = QUOTE(if (_this select 0 == ACE_player && {(_this select 1) in [ARR_3(uniformContainer (_this select 0), vestContainer (_this select 0), backpackContainer (_this select 0))]} && {_this select 2 == currentMagazine (_this select 0)}) then {[ARR_3(_this select 0, vehicle (_this select 0), true)] call FUNC(checkAmmo)};); + clientTake = QUOTE(if (_this select 0 == ACE_player && {GVAR(DisplayText)} && {(_this select 1) in [ARR_3(uniformContainer (_this select 0), vestContainer (_this select 0), backpackContainer (_this select 0))]} && {_this select 2 == currentMagazine (_this select 0)}) then {[ARR_2(_this select 0, vehicle (_this select 0))] call FUNC(displayAmmo)};); }; }; }; diff --git a/addons/reload/CfgMagazines.hpp b/addons/reload/CfgMagazines.hpp new file mode 100644 index 0000000000..6811a49494 --- /dev/null +++ b/addons/reload/CfgMagazines.hpp @@ -0,0 +1,12 @@ +class CfgMagazines { + + class CA_Magazine; + class 150Rnd_762x51_Box : CA_Magazine { + ACE_isBelt = 1; + }; + + class 100Rnd_65x39_caseless_mag; + class 200Rnd_65x39_cased_Box : 100Rnd_65x39_caseless_mag { + ACE_isBelt = 1; + }; +}; \ No newline at end of file diff --git a/addons/reload/CfgVehicles.hpp b/addons/reload/CfgVehicles.hpp new file mode 100644 index 0000000000..84333a1a09 --- /dev/null +++ b/addons/reload/CfgVehicles.hpp @@ -0,0 +1,35 @@ +class CfgVehicles { + class Man; + class CAManBase: Man { + class ACE_Actions { + class ACE_Weapon { + class ACE_LinkBelt { + displayName = "$STR_ACE_Reload_LinkBelt"; + distance = 2.0; + condition = QUOTE([ARR_2(_player, _target)] call FUNC(canLinkBelt)); + statement = QUOTE([ARR_2(_player, _target)] call FUNC(startLinkingBelt)); + }; + class ACE_CheckAmmo { + displayName = "$STR_ACE_Reload_checkAmmo"; + distance = 2.0; + condition = QUOTE([ARR_2(_player, _target)] call FUNC(canCheckAmmo)); + statement = QUOTE([ARR_2(_player, _target)] call FUNC(checkAmmo)); + }; + }; + }; + }; + + class LandVehicle; + class StaticWeapon: LandVehicle { + class ACE_Actions { + class ACE_MainActions { + class ACE_CheckAmmo { + displayName = "$STR_ACE_Reload_checkAmmo"; + distance = 2.0; + condition = QUOTE([ARR_2(_player, _target)] call FUNC(canCheckAmmo)); + statement = QUOTE([ARR_2(_player, _target)] call FUNC(checkAmmo)); + }; + }; + }; + }; +}; diff --git a/addons/reload/XEH_postInit.sqf b/addons/reload/XEH_postInit.sqf index d40e5e0442..6751348532 100644 --- a/addons/reload/XEH_postInit.sqf +++ b/addons/reload/XEH_postInit.sqf @@ -4,21 +4,62 @@ if !(hasInterface) exitWith {}; // Add keybinds -["ACE3", - localize "STR_ACE_Reload_checkAmmo", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon) || - {(vehicle ACE_player) isKindOf 'StaticWeapon'}) exitWith {false}; +["ACE3", QGVAR(checkAmmo), localize "STR_ACE_Reload_checkAmmo", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player] call EFUNC(common,canUseWeapon) || + {(vehicle ACE_player) isKindOf 'StaticWeapon'}) exitWith {false}; - // Statement - [ACE_player, vehicle ACE_player, false] call FUNC(checkAmmo); - true - }, - [19, [false, true, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player] call FUNC(checkAmmo); + true +}, +{false}, +[19, [false, true, false]], false] call cba_fnc_addKeybind; + + +// Listen for attempts to link ammo +["linkedAmmo", { + EXPLODE_3_PVT(_this,_receiver,_giver,_magazine); + diag_log "linkedAmmo"; + diag_log _this; + + private ["_magazineCfg","_magazineType"]; + _magazineType = currentMagazine _receiver; + _magazineCfg = configFile >> "CfgMagazines" >> _magazineType; + + // Return the magazine if it's the wrong type + if (_magazineType != (_magazine select 0)) exitWith { + ["returnedAmmo", [_giver], [_giver,_receiver,_magazine]] call EFUNC(common,targetEvent); + }; + + private ["_ammoCount","_ammoMissing","_ammoAdded","_ammoRemaining"]; + _ammoCount = _receiver ammo currentWeapon _receiver; + _ammoMissing = getNumber (_magazineCfg >> "count") - _ammoCount; + + // Return the magazine if the belt is full or empty + if ((_ammoCount == 0) || _ammoMissing == 0) exitWith { + ["returnedAmmo", [_giver], [_giver,_receiver,_magazine]] call EFUNC(common,targetEvent); + }; + + // Add the ammo + _ammoAdded = _ammoMissing min (_magazine select 1); + _receiver setAmmo [currentWeapon _receiver, _ammoCount + _ammoAdded]; + + if ((_magazine select 1) - _ammoAdded > 0) then { + ["returnedAmmo", [_giver], [_giver,_receiver,[_magazineType,(_magazine select 1) - _ammoAdded]]] call EFUNC(common,targetEvent); + }; + +}] call EFUNC(common,addEventhandler); + + +// Listen for returned magazines +["returnedAmmo", { + EXPLODE_3_PVT(_this,_receiver,_giver,_magazine); + diag_log "returnedAmmo"; + diag_log _this; + + _receiver addMagazine _magazine; +}] call EFUNC(common,addEventhandler); diff --git a/addons/reload/XEH_preInit.sqf b/addons/reload/XEH_preInit.sqf index b5c8e45d35..278abf7bd2 100644 --- a/addons/reload/XEH_preInit.sqf +++ b/addons/reload/XEH_preInit.sqf @@ -2,6 +2,10 @@ ADDON = false; +PREP(canCheckAmmo); +PREP(canLinkBelt); PREP(checkAmmo); +PREP(displayAmmo); +PREP(startLinkingBelt); ADDON = true; diff --git a/addons/reload/config.cpp b/addons/reload/config.cpp index 6e0c14049d..611cf7d6aa 100644 --- a/addons/reload/config.cpp +++ b/addons/reload/config.cpp @@ -5,15 +5,30 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common"}; - author[] = {"commy2","KoffeinFlummi"}; + requiredAddons[] = {"ace_interaction"}; + author[] = {"commy2","KoffeinFlummi","CAA-Picard"}; authorUrl = "https://github.com/commy2/"; VERSION_CONFIG; }; }; +#include "CfgVehicles.hpp" + +#include "CfgMagazines.hpp" + #include "CfgEventHandlers.hpp" #include "CfgActions.hpp" #include "RscInGameUI.hpp" + +class ACE_Settings { + class GVAR(DisplayText) { + typeName = "BOOL"; + isClientSetable = 1; + value = 1; + displayName = "$STR_ACE_reload_SettingDisplayTextName"; + description = "$STR_ACE_reload_SettingDisplayTextDesc"; + }; +}; + diff --git a/addons/reload/functions/fnc_canCheckAmmo.sqf b/addons/reload/functions/fnc_canCheckAmmo.sqf new file mode 100644 index 0000000000..2cabe6edc2 --- /dev/null +++ b/addons/reload/functions/fnc_canCheckAmmo.sqf @@ -0,0 +1,35 @@ +/* + * Author: CAA-Picard + * Check if the player can check the ammo of the target. + * + * Argument: + * 0: Player + * 1: Target + * + * Return value: + * Can link belt + */ +#include "script_component.hpp" + +EXPLODE_2_PVT(_this,_player,_target); + +// Return true for static weapons if they have been fired once, @todo 1.40 this work-around doesn't work anymore +if (_target isKindOf "StaticWeapon") exitWith { + (currentMagazine _target) != "" +}; + +// Return false for all other vehicles +if !(_target isKindOf "CAManBase") exitWith {false}; + +// For men +if (currentWeapon _target == "") exitWith {false}; + +// Check if their current magazine is a belt +_magazineType = currentMagazine _target; +_magazineCfg = configFile >> "CfgMagazines" >> _magazineType; +if (getNumber (_magazineCfg >> "ACE_isBelt") == 1) exitWith {true}; + +// Check for rocket launchers +if (currentWeapon _target == secondaryWeapon _target) exitWith {true}; + +false diff --git a/addons/reload/functions/fnc_canLinkBelt.sqf b/addons/reload/functions/fnc_canLinkBelt.sqf new file mode 100644 index 0000000000..b06a69fafa --- /dev/null +++ b/addons/reload/functions/fnc_canLinkBelt.sqf @@ -0,0 +1,39 @@ +/* + * Author: CAA-Picard + * Check if the target has an MG equiped with belt system that the player can link + * + * Argument: + * 0: Player + * 1: Target + * + * Return value: + * Can link belt + */ +#include "script_component.hpp" + +EXPLODE_2_PVT(_this,_player,_target); + +if (vehicle _target != _target) exitWith {false}; + +private ["_magazineCfg","_magazineType"]; +_magazineType = currentMagazine _target; +_magazineCfg = configFile >> "CfgMagazines" >> _magazineType; +if (getNumber (_magazineCfg >> "ACE_isBelt") == 0) exitWith {false}; + +// Check if the ammo is not empty or full +private "_ammoCount"; +_ammoCount = _target ammo currentWeapon _target; + +// Exit if the belt is full or empty +if ((_ammoCount == 0) || (getNumber (_magazineCfg >> "count") - _ammoCount) == 0) exitWith {false}; + +// Check if the player has any of the same magazines +// Calculate max ammo +private "_maxAmmo"; +_maxAmmo = 0; + +{ + _maxAmmo = _maxAmmo max (_x select 1); +} forEach ([magazinesAmmo _player, {_this select 0 == _magazineType}] call EFUNC(common,filter)); + +_maxAmmo > 0 diff --git a/addons/reload/functions/fnc_checkAmmo.sqf b/addons/reload/functions/fnc_checkAmmo.sqf index fab1ebf333..7c24ff1ff3 100644 --- a/addons/reload/functions/fnc_checkAmmo.sqf +++ b/addons/reload/functions/fnc_checkAmmo.sqf @@ -1,13 +1,11 @@ /* - * Author: commy2 - * + * Author: commy2 and CAA-Picard * Count the ammo of the currently loaded magazine or count rifle grenades. Play animation and display message. - * + * * Argument: - * 0: The player (Object) - * 1: The vehicle (Object) - * 2: Skip the animation? Used after reloading (Bool) - * + * 0: Player + * 1: Target. Optional, if not suplied the player counts his personal or static weapon ammo + * * Return value: * Nothing */ @@ -15,87 +13,24 @@ #define COUNT_BARS 12 -private ["_unit", "_vehicle"]; +EXPLODE_1_PVT(_this,_unit); -_unit = _this select 0; -_vehicle = _this select 1; +private ["_target"]; +_target = vehicle _unit; -if (_unit != _vehicle && !(_vehicle isKindOf "StaticWeapon")) then { - _vehicle = _unit; +if (count _this > 1) then { + _target = _this select 1; +} else { + + // If the unit is on foot, count it's own ammo + if (_unit == _target) exitWith {}; + + // If it's mounted on a movile weapon, count it's own ammo + if !(_target isKindOf "StaticWeapon") then { + _target = _unit; + }; }; -[_vehicle, currentWeapon _vehicle, currentMuzzle _vehicle, currentMagazine _vehicle, _this select 2] spawn { - _vehicle = _this select 0; - _weapon = _this select 1; - _muzzle = _this select 2; - _magazine = _this select 3; - _skipDelay = _this select 4; +_unit playActionNow "Gear"; - if (currentWeapon _vehicle == "") exitWith {}; - if (typeName _muzzle != "STRING") then {_muzzle = _weapon}; - - _showNumber = false; - _ammo = 0; - _maxRounds = 1; - _count = 0; - - // not grenade launcher - if (_muzzle == _weapon) then { - _maxRounds = getNumber (configFile >> "CfgMagazines" >> _magazine >> "count") max 1; - - _ammo = _vehicle ammo _weapon; - if (_maxRounds >= COUNT_BARS) then { - _count = round (COUNT_BARS * _ammo / _maxRounds); - - if (_ammo > 0) then {_count = _count max 1}; - if (_ammo < _maxRounds) then {_count = _count min (COUNT_BARS - 1)}; - } else { - _count = _ammo; - }; - - // grenade launcher - } else { - _showNumber = true; - - _count = if (_magazine != "") then { - {_x == _magazine} count (magazines _vehicle + [_magazine]) - } else { - {_x in getArray (configFile >> "CfgWeapons" >> _weapon >> _muzzle >> "Magazines")} count magazines _vehicle - }; - }; - - if !(_skipDelay) then { - _vehicle playActionNow "Gear"; - sleep 1 - }; - - _text = if (_showNumber) then { - parseText format ["%1x", _count] - } else { - _color = [ - 2 * (1 - _ammo / _maxRounds) min 1, - 2 * _ammo / _maxRounds min 1, - 00 - ]; - - _string = ""; - for "_a" from 1 to _count do { - _string = _string + "|"; - }; - _text = [_string, _color] call EFUNC(common,stringToColoredText); - - _string = ""; - for "_a" from (_count + 1) to (_maxRounds min COUNT_BARS) do { - _string = _string + "|"; - }; - - composeText [ - _text, - [_string, [0.5, 0.5, 0.5]] call EFUNC(common,stringToColoredText) - ] - }; - - _picture = getText (configFile >> "CfgMagazines" >> _magazine >> "picture"); - - [_text, _picture] call EFUNC(common,displayTextPicture); -}; +[FUNC(displayAmmo), [_target], 1, 0.1] call EFUNC(common,waitAndExecute); diff --git a/addons/reload/functions/fnc_displayAmmo.sqf b/addons/reload/functions/fnc_displayAmmo.sqf new file mode 100644 index 0000000000..07e1a4593a --- /dev/null +++ b/addons/reload/functions/fnc_displayAmmo.sqf @@ -0,0 +1,94 @@ +/* + * Author: commy2 and CAA-Picard + * Display the ammo of the currently loaded magazine of the target or count rifle grenades. + * + * Argument: + * 0: Target + * + * Return value: + * Nothing + */ +#include "script_component.hpp" + +#define COUNT_BARS 12 + +EXPLODE_1_PVT(_this,_target); + +private ["_weapon","_muzzle","_magazine","_showNumber","_ammo","_maxRounds","_count","_text","_color","_picture"]; + +_weapon = currentWeapon _target; +_muzzle = currentMuzzle _target; +_magazine = currentMagazine _target; + +// currentWeapon returns "" for static weapons before they are shot once +if (_target isKindOf "StaticWeapon") then { + if (_weapon == "") then { + if (count (weapons _target) == 1) then { + _weapon = (weapons _target) select 0; + _muzzle = _weapon; + }; + }; +}; + +if (_weapon == "") exitWith {}; +if (typeName _muzzle != "STRING") then {_muzzle = _weapon}; + +_showNumber = false; +_ammo = 0; +_maxRounds = 1; +_count = 0; + +// not grenade launcher +if (_muzzle == _weapon) then { + _maxRounds = getNumber (configFile >> "CfgMagazines" >> _magazine >> "count") max 1; + + _ammo = _target ammo _weapon; + if (_maxRounds >= COUNT_BARS) then { + _count = round (COUNT_BARS * _ammo / _maxRounds); + + if (_ammo > 0) then {_count = _count max 1}; + if (_ammo < _maxRounds) then {_count = _count min (COUNT_BARS - 1)}; + } else { + _count = _ammo; + }; + +// grenade launcher +} else { + _showNumber = true; + + _count = if (_magazine != "") then { + {_x == _magazine} count (magazines _target + [_magazine]) + } else { + {_x in getArray (configFile >> "CfgWeapons" >> _weapon >> _muzzle >> "Magazines")} count magazines _target + }; +}; + +_text = if (_showNumber) then { + parseText format ["%1x", _count] +} else { + _color = [ + 2 * (1 - _ammo / _maxRounds) min 1, + 2 * _ammo / _maxRounds min 1, + 00 + ]; + + _string = ""; + for "_a" from 1 to _count do { + _string = _string + "|"; + }; + _text = [_string, _color] call EFUNC(common,stringToColoredText); + + _string = ""; + for "_a" from (_count + 1) to (_maxRounds min COUNT_BARS) do { + _string = _string + "|"; + }; + + composeText [ + _text, + [_string, [0.5, 0.5, 0.5]] call EFUNC(common,stringToColoredText) + ] +}; + +_picture = getText (configFile >> "CfgMagazines" >> _magazine >> "picture"); + +[_text, _picture] call EFUNC(common,displayTextPicture); diff --git a/addons/reload/functions/fnc_startLinkingBelt.sqf b/addons/reload/functions/fnc_startLinkingBelt.sqf new file mode 100644 index 0000000000..d739cd8c56 --- /dev/null +++ b/addons/reload/functions/fnc_startLinkingBelt.sqf @@ -0,0 +1,69 @@ +/* + * Author: CAA-Picard + * Start linking the belt + * + * Argument: + * 0: Player + * 1: Target + * + * Return value: + * None + */ +#include "script_component.hpp" + +EXPLODE_2_PVT(_this,_player,_target); + +if (vehicle _target != _target) exitWith {false}; + +private ["_magazineCfg","_magazineType"]; +_magazineType = currentMagazine _target; +_magazineCfg = configFile >> "CfgMagazines" >> _magazineType; +if (getNumber (_magazineCfg >> "ACE_isBelt") == 0) exitWith {false}; + +// Check if the ammo is not empty or full +private "_ammoCount"; +_ammoCount = _target ammo currentWeapon _target; + +// Exit if the belt is full or empty +if ((_ammoCount == 0) || (getNumber (_magazineCfg >> "count") - _ammoCount) == 0) exitWith {false}; + +// Check if the player has any of the same same magazines +// Calculate max ammo it can link +private "_maxAmmo"; +_maxAmmo = 0; + +{ + _maxAmmo = _maxAmmo max (_x select 1); +} forEach ([magazinesAmmo _player, {_this select 0 == _magazineType}] call EFUNC(common,filter)); + +if (_maxAmmo == 0) exitWith {}; + + +// Condition to call each frame +_condition = { + EXPLODE_2_PVT((_this select 0),_player,_target); + ([_player, _target, []] call EFUNC(common,canInteractWith)) && ((_player distance _target) < 3) && ((speed _target) < 1) +}; + +_onFinish = { + EXPLODE_3_PVT((_this select 0),_player,_target,_magazine); + + // Raise event on remote unit + ["linkedAmmo", [_target], [_target, _player, _magazine]] call EFUNC(common,targetEvent); +}; + +_onFailure = { + EXPLODE_3_PVT((_this select 0),_player,_target,_magazine); + [_caller, "AmovPknlMstpSrasWrflDnon", 1] call EFUNC(common,doAnimation); + + // Add back the magazine with the former ammo count + _player addMagazine _magazine; +}; + +[_player, "AinvPknlMstpSnonWnonDr_medic5", 0] call EFUNC(common,doAnimation); + +// Remove the magazine with maximum remaining ammo +[_player, _magazineType, _maxAmmo] call EFUNC(common,removeSpecificMagazine); + +// Call progress bar +[4, [_player, _target, [_magazineType, _maxAmmo]], _onFinish, _onFailure, (localize "STR_ACE_Reload_LinkingBelt"), _condition] call EFUNC(common,progressBar); diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index 1f39b0e743..40f36c6549 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -2,6 +2,12 @@ + + Check ammo on weapon reload + + + Check the ammo in your new magazine on magazine reload. + Check Ammo Munition prüfen @@ -26,5 +32,11 @@ Munições Боеприпасы + + Link belt + + + Linking belt... + diff --git a/addons/respawn/CfgVehicles.hpp b/addons/respawn/CfgVehicles.hpp index bdf4576eb3..082778bf94 100644 --- a/addons/respawn/CfgVehicles.hpp +++ b/addons/respawn/CfgVehicles.hpp @@ -7,7 +7,7 @@ class CfgVehicles { function = QFUNC(module); scope = 2; isGlobal = 1; - icon = QUOTE(PATHTOF(UI\IconSwitchUnits_ca.paa)); + icon = QUOTE(PATHTOF(UI\Icon_Module_Respawn_ca.paa)); class Arguments { class SavePreDeathGear { displayName = "Save Gear?"; @@ -49,7 +49,7 @@ class CfgVehicles { function = QFUNC(moduleRallypoint); scope = 2; isGlobal = 1; - icon = QUOTE(PATHTOF(UI\IconSwitchUnits_ca.paa)); + icon = QUOTE(PATHTOF(UI\Icon_Module_Rallypoint_ca.paa)); class Arguments { }; }; @@ -78,13 +78,18 @@ class CfgVehicles { init = QUOTE((_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_nato_CO.paa'; _this call FUNC(initRallypoint)); }; class ACE_Actions : ACE_Actions { - class ACE_Teleport { - displayName = "Teleport to Rallypoint"; - distance = 4; - condition = QUOTE(side group _player == west); - statement = QUOTE([ARR_3(_player, side group _player, false)] call FUNC(teleportToRallypoint)); - showDisabled = 1; - priority = 1; + class ACE_MainActions { + distance = 5; + condition = "true"; + selection = ""; + class ACE_Teleport { + displayName = "Teleport to Rallypoint"; + distance = 4; + condition = QUOTE(side group _player == west); + statement = QUOTE([ARR_3(_player, side group _player, false)] call FUNC(teleportToRallypoint)); + showDisabled = 1; + priority = 1; + }; }; }; }; @@ -98,13 +103,18 @@ class CfgVehicles { init = QUOTE((_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_CSAT_CO.paa'; _this call FUNC(initRallypoint)); }; class ACE_Actions : ACE_Actions { - class ACE_Teleport { - displayName = "Teleport to Rallypoint"; - distance = 4; - condition = QUOTE(side group _player == east); - statement = QUOTE([ARR_3(_player, side group _player, false)] call FUNC(teleportToRallypoint)); - showDisabled = 1; - priority = 1; + class ACE_MainActions { + distance = 5; + condition = "true"; + selection = ""; + class ACE_Teleport { + displayName = "Teleport to Rallypoint"; + distance = 4; + condition = QUOTE(side group _player == east); + statement = QUOTE([ARR_3(_player, side group _player, false)] call FUNC(teleportToRallypoint)); + showDisabled = 1; + priority = 1; + }; }; }; }; @@ -118,13 +128,18 @@ class CfgVehicles { init = QUOTE((_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_AAF_CO.paa'; _this call FUNC(initRallypoint)); }; class ACE_Actions : ACE_Actions { - class ACE_Teleport { - displayName = "Teleport to Rallypoint"; - distance = 4; - condition = QUOTE(side group _player == independent); - statement = QUOTE([ARR_3(_player, side group _player, false)] call FUNC(teleportToRallypoint)); - showDisabled = 1; - priority = 1; + class ACE_MainActions { + distance = 5; + condition = "true"; + selection = ""; + class ACE_Teleport { + displayName = "Teleport to Rallypoint"; + distance = 4; + condition = QUOTE(side group _player == independent); + statement = QUOTE([ARR_3(_player, side group _player, false)] call FUNC(teleportToRallypoint)); + showDisabled = 1; + priority = 1; + }; }; }; }; @@ -139,13 +154,18 @@ class CfgVehicles { init = QUOTE((_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_nato_CO.paa'; _this call FUNC(initRallypoint)); }; class ACE_Actions : ACE_Actions { - class ACE_Teleport { - displayName = "Teleport to Base"; - distance = 4; - condition = QUOTE(side group _player == west); - statement = QUOTE([ARR_3(_player, side group _player, true)] call FUNC(teleportToRallypoint)); - showDisabled = 1; - priority = 1; + class ACE_MainActions { + distance = 5; + condition = "true"; + selection = ""; + class ACE_Teleport { + displayName = "Teleport to Base"; + distance = 4; + condition = QUOTE(side group _player == west); + statement = QUOTE([ARR_3(_player, side group _player, true)] call FUNC(teleportToRallypoint)); + showDisabled = 1; + priority = 1; + }; }; }; }; @@ -159,13 +179,18 @@ class CfgVehicles { init = QUOTE((_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_CSAT_CO.paa'; _this call FUNC(initRallypoint)); }; class ACE_Actions : ACE_Actions { - class ACE_Teleport { - displayName = "Teleport to Base"; - distance = 4; - condition = QUOTE(side group _player == east); - statement = QUOTE([ARR_3(_player, side group _player, true)] call FUNC(teleportToRallypoint)); - showDisabled = 1; - priority = 1; + class ACE_MainActions { + distance = 5; + condition = "true"; + selection = ""; + class ACE_Teleport { + displayName = "Teleport to Base"; + distance = 4; + condition = QUOTE(side group _player == east); + statement = QUOTE([ARR_3(_player, side group _player, true)] call FUNC(teleportToRallypoint)); + showDisabled = 1; + priority = 1; + }; }; }; }; @@ -179,13 +204,18 @@ class CfgVehicles { init = QUOTE((_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_AAF_CO.paa'; _this call FUNC(initRallypoint)); }; class ACE_Actions : ACE_Actions { - class ACE_Teleport { - displayName = "Teleport to Base"; - distance = 4; - condition = QUOTE(side group _player == independent); - statement = QUOTE([ARR_3(_player, side group _player, true)] call FUNC(teleportToRallypoint)); - showDisabled = 1; - priority = 1; + class ACE_MainActions { + distance = 5; + condition = "true"; + selection = ""; + class ACE_Teleport { + displayName = "Teleport to Base"; + distance = 4; + condition = QUOTE(side group _player == independent); + statement = QUOTE([ARR_3(_player, side group _player, true)] call FUNC(teleportToRallypoint)); + showDisabled = 1; + priority = 1; + }; }; }; }; diff --git a/addons/resting/XEH_postInit.sqf b/addons/resting/XEH_postInit.sqf index 0d999bab86..9251c7663f 100644 --- a/addons/resting/XEH_postInit.sqf +++ b/addons/resting/XEH_postInit.sqf @@ -4,24 +4,20 @@ if !(hasInterface) exitWith {}; // Add keybinds -["ACE3", - localize "STR_ACE_Resting_RestWeapon", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon) && - {inputAction 'reloadMagazine' == 0} && - {!weaponLowered ACE_player} && - {speed ACE_player < 1}) exitWith {false}; +["ACE3", QGVAR(RestWeapon), localize "STR_ACE_Resting_RestWeapon", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player] call EFUNC(common,canUseWeapon) && + {inputAction 'reloadMagazine' == 0} && + {!weaponLowered ACE_player} && + {speed ACE_player < 1}) exitWith {false}; - // Statement - [ACE_player, vehicle ACE_player, currentWeapon ACE_player] call FUNC(restWeapon); - // Return false so it doesn't block other actions - false - }, - [15, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, vehicle ACE_player, currentWeapon ACE_player] call FUNC(restWeapon); + // Return false so it doesn't block other actions + false +}, +{false}, +[15, [false, false, false]], false] call cba_fnc_addKeybind; diff --git a/addons/resting/data/icons/icon_bipod.paa b/addons/resting/data/icons/icon_bipod.paa new file mode 100644 index 0000000000..c2b6a2fb3e Binary files /dev/null and b/addons/resting/data/icons/icon_bipod.paa differ diff --git a/addons/resting/functions/fnc_restWeapon.sqf b/addons/resting/functions/fnc_restWeapon.sqf index 52b1932f62..793ef4fff3 100644 --- a/addons/resting/functions/fnc_restWeapon.sqf +++ b/addons/resting/functions/fnc_restWeapon.sqf @@ -27,6 +27,9 @@ _intersects = _this call FUNC(getIntersection); if (true in _intersects) then { _unit setVariable ["ACE_weaponRested", true]; + if (_unit == ACE_PLAYER) then { + [QGVAR(bipodDeployed), true, QUOTE(PATHTOF(data\icons\icon_bipod.paa)), [1,1,1,1], -1] call EFUNC(common,displayIcon); + }; private "_restedPosition"; _restedPosition = getPosASL _unit; diff --git a/addons/resting/functions/fnc_unRestWeapon.sqf b/addons/resting/functions/fnc_unRestWeapon.sqf index 86caa31ac8..2cf885676f 100644 --- a/addons/resting/functions/fnc_unRestWeapon.sqf +++ b/addons/resting/functions/fnc_unRestWeapon.sqf @@ -47,3 +47,7 @@ playSound QGVAR(unrest); _unit setVariable ["ACE_weaponRested", false]; _unit setVariable ["ACE_bipodDeployed", false]; + +if (_unit == ACE_PLAYER) then { + [QGVAR(bipodDeployed), false, "", [1,1,1,1], -1] call EFUNC(common,displayIcon); +}; \ No newline at end of file diff --git a/addons/safemode/XEH_postInit.sqf b/addons/safemode/XEH_postInit.sqf index 8ae1155d53..9508843e25 100644 --- a/addons/safemode/XEH_postInit.sqf +++ b/addons/safemode/XEH_postInit.sqf @@ -2,24 +2,20 @@ #include "script_component.hpp" //["Soldier", {_player = ACE_player; if (currentWeapon _player in (_player getVariable [QGVAR(safedWeapons), []])) then {[false] call FUNC(setSafeModeVisual)}] call EFUNC(common,addInfoDisplayEventHandler); - //@todo addEventHandler infoDisplayChanged with select 1 == "Soldier" +//@todo addEventHandler infoDisplayChanged with select 1 == "Soldier" // Add keybinds -["ACE3", - localize "STR_ACE_SafeMode_SafeMode", - { - // Conditions: canInteract - _exceptions = [QEGVAR(interaction,isNotEscorting)]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; +["ACE3", QGVAR(safeMode), localize "STR_ACE_SafeMode_SafeMode", +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotEscorting"]] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; - // Statement - [ACE_player, currentWeapon ACE_player, currentMuzzle ACE_player] call FUNC(lockSafety); - true - }, - [41, [false, true, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, currentWeapon ACE_player, currentMuzzle ACE_player] call FUNC(lockSafety); + true +}, +{false}, +[41, [false, true, false]], false] call cba_fnc_addKeybind; diff --git a/addons/scopes/XEH_postInit.sqf b/addons/scopes/XEH_postInit.sqf index 8de7ff8af0..6f8fae1a1b 100644 --- a/addons/scopes/XEH_postInit.sqf +++ b/addons/scopes/XEH_postInit.sqf @@ -33,78 +33,62 @@ if !(hasInterface) exitWith {}; // Add keybinds -["ACE3", - localize "STR_ACE_Scopes_AdjustUp", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - [ACE_player] call FUNC(inventoryCheck); - if !([ACE_player, 0, 0.1] call FUNC(canAdjustScope)) exitWith {false}; +["ACE3", QGVAR(AdjustUp), localize "STR_ACE_Scopes_AdjustUp", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + [ACE_player] call FUNC(inventoryCheck); + if !([ACE_player, 0, 0.1] call FUNC(canAdjustScope)) exitWith {false}; - // Statement - [ACE_player, 0, 0.1] call FUNC(adjustScope); - true - }, - [201, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, 0, 0.1] call FUNC(adjustScope); + true +}, +{false}, +[201, [false, false, false]], false] call cba_fnc_addKeybind; -["ACE3", - localize "STR_ACE_Scopes_AdjustDown", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - [ACE_player] call FUNC(inventoryCheck); - if !([ACE_player, 0, -0.1] call FUNC(canAdjustScope)) exitWith {false}; +["ACE3", QGVAR(AdjustDown), localize "STR_ACE_Scopes_AdjustDown", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + [ACE_player] call FUNC(inventoryCheck); + if !([ACE_player, 0, -0.1] call FUNC(canAdjustScope)) exitWith {false}; - // Statement - [ACE_player, 0, -0.1] call FUNC(adjustScope); - true - }, - [209, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, 0, -0.1] call FUNC(adjustScope); + true +}, +{false}, +[209, [false, false, false]], false] call cba_fnc_addKeybind; -["ACE3", - localize "STR_ACE_Scopes_AdjustLeft", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - [ACE_player] call FUNC(inventoryCheck); - if !([ACE_player, -0.1, 0] call FUNC(canAdjustScope)) exitWith {false}; +["ACE3", QGVAR(AdjustLeft), localize "STR_ACE_Scopes_AdjustLeft", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + [ACE_player] call FUNC(inventoryCheck); + if !([ACE_player, -0.1, 0] call FUNC(canAdjustScope)) exitWith {false}; - // Statement - [ACE_player, -0.1, 0] call FUNC(adjustScope); - true - }, - [209, [false, true, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, -0.1, 0] call FUNC(adjustScope); + true +}, +{false}, +[209, [false, true, false]], false] call cba_fnc_addKeybind; -["ACE3", - localize "STR_ACE_Scopes_AdjustRight", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - [ACE_player] call FUNC(inventoryCheck); - if !([ACE_player, 0.1, 0] call FUNC(canAdjustScope)) exitWith {false}; +["ACE3", QGVAR(AdjustRight), localize "STR_ACE_Scopes_AdjustRight", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + [ACE_player] call FUNC(inventoryCheck); + if !([ACE_player, 0.1, 0] call FUNC(canAdjustScope)) exitWith {false}; - // Statement - [ACE_player, 0.1, 0] call FUNC(adjustScope); - true - }, - [201, [false, true, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, 0.1, 0] call FUNC(adjustScope); + true +}, +{false}, +[201, [false, true, false]], false] call cba_fnc_addKeybind; diff --git a/addons/smallarms/CfgVehicles.hpp b/addons/smallarms/CfgVehicles.hpp index 49de74005a..f81316c3e9 100644 --- a/addons/smallarms/CfgVehicles.hpp +++ b/addons/smallarms/CfgVehicles.hpp @@ -1,8 +1,4 @@ -/*#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ - name = #ITEM; \ - count = COUNT; \ -}; - +/* class CfgVehicles { class NATO_Box_Base; class EAST_Box_Base; @@ -10,25 +6,25 @@ class CfgVehicles { class Box_NATO_Support_F: NATO_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_acc_flashlight_tls,5) + MACRO_ADDITEM(ACE_acc_flashlight_tls,5); }; }; class Box_East_Support_F: EAST_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_acc_flashlight_tls,5) + MACRO_ADDITEM(ACE_acc_flashlight_tls,5); }; }; class Box_IND_Support_F: IND_Box_Base { class TransportItems { - MACRO_ADDITEM(ACE_acc_flashlight_tls,5) + MACRO_ADDITEM(ACE_acc_flashlight_tls,5); }; }; class ACE_Box_Misc: Box_NATO_Support_F { class TransportItems { - MACRO_ADDITEM(ACE_acc_flashlight_tls,2) + MACRO_ADDITEM(ACE_acc_flashlight_tls,2); }; }; };*/ diff --git a/addons/smallarms/CfgWeapons.hpp b/addons/smallarms/CfgWeapons.hpp index 8c42847bd8..c0f4b4daef 100644 --- a/addons/smallarms/CfgWeapons.hpp +++ b/addons/smallarms/CfgWeapons.hpp @@ -1,6 +1,7 @@ class Mode_SemiAuto; class Mode_Burst; class Mode_FullAuto; +class MuzzleSlot; // config inheritance of weapon slot info v1.32 class SlotInfo; @@ -21,7 +22,7 @@ class CfgWeapons { class RifleCore; class Rifle: RifleCore { class WeaponSlotsInfo { - class MuzzleSlot: SlotInfo {}; + class MuzzleSlot: MuzzleSlot {}; class CowsSlot: CowsSlot {}; class PointerSlot: PointerSlot {}; }; diff --git a/addons/switchunits/CfgEventHandlers.hpp b/addons/switchunits/CfgEventHandlers.hpp index 38f9883743..689e06c529 100644 --- a/addons/switchunits/CfgEventHandlers.hpp +++ b/addons/switchunits/CfgEventHandlers.hpp @@ -9,3 +9,4 @@ class Extended_PostInit_EventHandlers { clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) ); }; }; + diff --git a/addons/switchunits/XEH_clientInit.sqf b/addons/switchunits/XEH_clientInit.sqf index 3075d67941..6a908071c9 100644 --- a/addons/switchunits/XEH_clientInit.sqf +++ b/addons/switchunits/XEH_clientInit.sqf @@ -16,24 +16,13 @@ #include "script_component.hpp" -DFUNC(pfhClientInit) = { - - if (GVAR(EnableSwitchUnits)) exitWith { - - private ["_sides"]; - _sides = []; - - if(GVAR(SwitchToWest)) then {_sides pushBack west;}; - if(GVAR(SwitchToEast)) then {_sides pushBack east;}; - if(GVAR(SwitchToIndependent)) then {_sides pushBack independent;}; - if(GVAR(SwitchToCivilian)) then {_sides pushBack civilian;}; - - if (player getVariable ["ACE_CanSwitchUnits", false]) then { - [player, _sides] call FUNC(initPlayer); +if (missionNamespace getVariable [QGVAR(EnableSwitchUnits), false]) then { + [player] call FUNC(startSwitchUnits); +} else { + ["SettingChanged", { + PARAMS_2(_name,_value); + if ((_name == QGVAR(EnableSwitchUnits)) && {_value}) then { + [player] call FUNC(startSwitchUnits); }; - - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; + }] call EFUNC(common,addEventhandler); }; - -[FUNC(pfhClientInit), 0.5, []] call cba_fnc_addPerFrameHandler; diff --git a/addons/switchunits/XEH_preInit.sqf b/addons/switchunits/XEH_preInit.sqf index 04e81330cb..c120608357 100644 --- a/addons/switchunits/XEH_preInit.sqf +++ b/addons/switchunits/XEH_preInit.sqf @@ -9,6 +9,7 @@ PREP(isValidAi); PREP(markAiOnMap); PREP(module); PREP(nearestPlayers); +PREP(startSwitchUnits); PREP(switchBack); PREP(switchUnit); diff --git a/addons/switchunits/config.cpp b/addons/switchunits/config.cpp index 09d3e05594..c400be855c 100644 --- a/addons/switchunits/config.cpp +++ b/addons/switchunits/config.cpp @@ -16,10 +16,6 @@ class CfgPatches { #include "CfgVehicles.hpp" class ACE_Settings { - class GVAR(SafeZoneRadius) { - value = 100; - typeName = "SCALAR"; - }; class GVAR(EnableSwitchUnits) { value = 0; typeName = "BOOL"; @@ -44,4 +40,8 @@ class ACE_Settings { value = 1; typeName = "BOOL"; }; + class GVAR(SafeZoneRadius) { + value = 100; + typeName = "SCALAR"; + }; }; diff --git a/addons/switchunits/functions/fnc_markAiOnMap.sqf b/addons/switchunits/functions/fnc_markAiOnMap.sqf index ed94c31b0b..d51c1b888e 100644 --- a/addons/switchunits/functions/fnc_markAiOnMap.sqf +++ b/addons/switchunits/functions/fnc_markAiOnMap.sqf @@ -40,9 +40,6 @@ DFUNC(pfhMarkAiOnMap) = { if (([_x] call FUNC(isValidAi) && (side group _x in _sides)) || (_x getVariable [QGVAR(IsPlayerControlled), false])) then { private ["_markerName", "_marker", "_markerColor"]; - hint format ["marker. %1", time]; - - //_markerName = format ["%1", [_x] call EFUNC(common,getName)]; _markerName = str _x; _marker = createMarkerLocal [_markerName, position _x]; diff --git a/addons/switchunits/functions/fnc_module.sqf b/addons/switchunits/functions/fnc_module.sqf index e622a65338..9563dea71f 100644 --- a/addons/switchunits/functions/fnc_module.sqf +++ b/addons/switchunits/functions/fnc_module.sqf @@ -20,8 +20,7 @@ if !(isServer) exitWith {}; -_logic = _this select 0; -_activated = _this select 2; +EXPLODE_3_PVT(_this,_logic,_units,_activated); if !(_activated) exitWith {}; diff --git a/addons/switchunits/functions/fnc_startSwitchUnits.sqf b/addons/switchunits/functions/fnc_startSwitchUnits.sqf new file mode 100644 index 0000000000..ef344475b9 --- /dev/null +++ b/addons/switchunits/functions/fnc_startSwitchUnits.sqf @@ -0,0 +1,36 @@ +/* + * Author: bux578 + * Starts the SwitchUnits functionality + * + * Arguments: + * 0: player + * + * Return Value: + * None + * + * Example: + * [_player] call FUNC(startSwitchUnits) + * + * Public: No + */ + +#include "script_component.hpp" + + +private "_player"; +_player = _this select 0; + + +if (GVAR(EnableSwitchUnits)) then { + private ["_sides"]; + _sides = []; + + if(GVAR(SwitchToWest)) then {_sides pushBack west;}; + if(GVAR(SwitchToEast)) then {_sides pushBack east;}; + if(GVAR(SwitchToIndependent)) then {_sides pushBack independent;}; + if(GVAR(SwitchToCivilian)) then {_sides pushBack civilian;}; + + if (_player getVariable ["ACE_CanSwitchUnits", false]) then { + [_player, _sides] call FUNC(initPlayer); + }; +}; diff --git a/addons/switchunits/script_component.hpp b/addons/switchunits/script_component.hpp index 989c1c2e0c..4e76fb1495 100644 --- a/addons/switchunits/script_component.hpp +++ b/addons/switchunits/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_SWITCHUNITS - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_SWITCHUNITS - #define DEBUG_SETTINGS DEBUG_SETTINGS_SwitchUnits + #define DEBUG_SETTINGS DEBUG_SETTINGS_SwitchUnits #endif #include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index b12e8dc17d..842bf89127 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/vector/config.cpp b/addons/vector/config.cpp index 4603857506..926bfda58d 100644 --- a/addons/vector/config.cpp +++ b/addons/vector/config.cpp @@ -2,8 +2,8 @@ class CfgPatches { class ADDON { - units[] = {"AGM_Item_Vector"}; - weapons[] = {"AGM_Vector"}; + units[] = {"ACE_Item_Vector"}; + weapons[] = {"ACE_Vector"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; author[] = {"Ghost","Hamburger SV","commy2","bux578"}; diff --git a/addons/vector/initKeybinds.sqf b/addons/vector/initKeybinds.sqf index fb00e7acb3..1ce79d79eb 100644 --- a/addons/vector/initKeybinds.sqf +++ b/addons/vector/initKeybinds.sqf @@ -1,83 +1,58 @@ // by commy2 -["ACE3", - localize "STR_ACE_Vector_AzimuthKey", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(currentWeapon ACE_player == "ACE_Vector" && {ACE_player == cameraOn} && {cameraView == "GUNNER"}) exitWith {false}; +["ACE3", QGVAR(AzimuthKey), localize "STR_ACE_Vector_AzimuthKey", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !(currentWeapon ACE_player == "ACE_Vector" && {ACE_player == cameraOn} && {cameraView == "GUNNER"}) exitWith {false}; - // prevent holding down - if (GETGVAR(isDownStateKey1,false)) exitWith {false}; - GVAR(isDownStateKey1) = true; + // prevent holding down + if (GETGVAR(isDownStateKey1,false)) exitWith {false}; + GVAR(isDownStateKey1) = true; - // Statement - ["azimuth"] call FUNC(onKeyDown); - false - }, - [15, [false, false, false]], - false, - "keydown" -] call CBA_fnc_registerKeybind; + // Statement + ["azimuth"] call FUNC(onKeyDown); + false +}, +{ + // prevent holding down + GVAR(isDownStateKey1) = false; -["ACE3", - localize "STR_ACE_Vector_AzimuthKey", - { - // prevent holding down - GVAR(isDownStateKey1) = false; + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; + // Statement + ["azimuth"] call FUNC(onKeyUp); + false +}, +[15, [false, false, false]], false, 0] call CBA_fnc_addKeybind; //Tab Key - // Statement - ["azimuth"] call FUNC(onKeyUp); - false - }, - [15, [false, false, false]], - false, - "keyup" -] call CBA_fnc_registerKeybind; -["ACE3", - localize "STR_ACE_Vector_DistanceKey", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(currentWeapon ACE_player == "ACE_Vector" && {ACE_player == cameraOn} && {cameraView == "GUNNER"}) exitWith {false}; +["ACE3", QGVAR(DistanceKey), localize "STR_ACE_Vector_DistanceKey", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !(currentWeapon ACE_player == "ACE_Vector" && {ACE_player == cameraOn} && {cameraView == "GUNNER"}) exitWith {false}; - // prevent holding down - if (GETGVAR(isDownStateKey2,false)) exitWith {false}; - GVAR(isDownStateKey2) = true; + // prevent holding down + if (GETGVAR(isDownStateKey2,false)) exitWith {false}; + GVAR(isDownStateKey2) = true; - // Statement - ["distance"] call FUNC(onKeyDown); - true - }, - [19, [false, false, false]], - false, - "keydown" -] call CBA_fnc_registerKeybind; + // Statement + ["distance"] call FUNC(onKeyDown); + false +}, +{ + // prevent holding down + GVAR(isDownStateKey2) = false; -["ACE3", - localize "STR_ACE_Vector_DistanceKey", - { - // prevent holding down - GVAR(isDownStateKey2) = false; + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - - // Statement - ["distance"] call FUNC(onKeyUp); - true - }, - [19, [false, false, false]], - false, - "keyup" -] call CBA_fnc_registerKeybind; + // Statement + ["distance"] call FUNC(onKeyUp); + false +}, +[19, [false, false, false]], false] call CBA_fnc_addKeybind; //R Key diff --git a/addons/vehiclelock/CfgVehicles.hpp b/addons/vehiclelock/CfgVehicles.hpp index 79591280d8..5be796c126 100644 --- a/addons/vehiclelock/CfgVehicles.hpp +++ b/addons/vehiclelock/CfgVehicles.hpp @@ -1,29 +1,31 @@ #define MACRO_LOCK_ACTIONS \ - class ACE_unlockVehicle { \ - displayName = "$STR_ACE_Vehicle_Action_UnLock"; \ - distance = 4; \ - condition = QUOTE(([ARR_2(_player, _target)] call FUNC(hasKeyForVehicle)) && {(locked _target) in [ARR_2(2,3)]}); \ - statement = QUOTE([ARR_3('SetVehicleLock', [_target], [ARR_2(_target,false)])] call EFUNC(common,targetEvent)); \ - showDisabled = 0; \ - priority = 0.3; \ - icon = QUOTE(PATHTOF(ui\key_menuIcon_ca.paa)); \ - }; \ - class ACE_lockVehicle { \ - displayName = "$STR_ACE_Vehicle_Action_Lock"; \ - distance = 4; \ - condition = QUOTE(([ARR_2(_player, _target)] call FUNC(hasKeyForVehicle)) && {(locked _target) in [ARR_2(0,1)]}); \ - statement = QUOTE([ARR_3('SetVehicleLock', [_target], [ARR_2(_target,true)])] call EFUNC(common,targetEvent)); \ - showDisabled = 0; \ - priority = 0.2; \ - icon = QUOTE(PATHTOF(ui\key_menuIcon_ca.paa)); \ - }; \ - class ACE_lockpickVehicle { \ - displayName = "$STR_ACE_Vehicle_Action_Lockpick"; \ - distance = 4; \ - condition = QUOTE([ARR_3(_player, _target, 'canLockpick')] call FUNC(lockpick)); \ - statement = QUOTE([ARR_3(_player, _target, 'startLockpick')] call FUNC(lockpick)); \ - showDisabled = 0; \ - priority = 0.1; \ + class ACE_MainActions { \ + class ACE_unlockVehicle { \ + displayName = "$STR_ACE_Vehicle_Action_UnLock"; \ + distance = 4; \ + condition = QUOTE(([ARR_2(_player, _target)] call FUNC(hasKeyForVehicle)) && {(locked _target) in [ARR_2(2,3)]}); \ + statement = QUOTE([ARR_3('SetVehicleLock', [_target], [ARR_2(_target,false)])] call EFUNC(common,targetEvent)); \ + showDisabled = 0; \ + priority = 0.3; \ + icon = QUOTE(PATHTOF(ui\key_menuIcon_ca.paa)); \ + }; \ + class ACE_lockVehicle { \ + displayName = "$STR_ACE_Vehicle_Action_Lock"; \ + distance = 4; \ + condition = QUOTE(([ARR_2(_player, _target)] call FUNC(hasKeyForVehicle)) && {(locked _target) in [ARR_2(0,1)]}); \ + statement = QUOTE([ARR_3('SetVehicleLock', [_target], [ARR_2(_target,true)])] call EFUNC(common,targetEvent)); \ + showDisabled = 0; \ + priority = 0.2; \ + icon = QUOTE(PATHTOF(ui\key_menuIcon_ca.paa)); \ + }; \ + class ACE_lockpickVehicle { \ + displayName = "$STR_ACE_Vehicle_Action_Lockpick"; \ + distance = 4; \ + condition = QUOTE([ARR_3(_player, _target, 'canLockpick')] call FUNC(lockpick)); \ + statement = QUOTE([ARR_3(_player, _target, 'startLockpick')] call FUNC(lockpick)); \ + showDisabled = 0; \ + priority = 0.1; \ + }; \ }; class CfgVehicles { diff --git a/addons/vehiclelock/functions/fnc_lockpick.sqf b/addons/vehiclelock/functions/fnc_lockpick.sqf index 94feb71e61..c6a6369515 100644 --- a/addons/vehiclelock/functions/fnc_lockpick.sqf +++ b/addons/vehiclelock/functions/fnc_lockpick.sqf @@ -64,7 +64,7 @@ case (_funcType == "startLockpick"): { _condition = { PARAMS_1(_args); EXPLODE_2_PVT(_args,_unit,_veh); - ([_unit] call EFUNC(common,canInteract)) && ((_unit distance _veh) < 5) && ((speed _veh) < 1) + ([_unit, objNull, []] call EFUNC(common,canInteractWith)) && ((_unit distance _veh) < 5) && ((speed _veh) < 1) }; [_vehLockpickStrenth, [_unit, _veh, "finishLockpick"], {(_this select 0) call FUNC(lockpick)}, {}, (localize "STR_ACE_Vehicle_Action_LockpickInUse"), _condition] call EFUNC(common,progressBar); }; diff --git a/addons/vehicles/CfgAmmo.hpp b/addons/vehicles/CfgAmmo.hpp index 60a3d0835b..96dd290625 100644 --- a/addons/vehicles/CfgAmmo.hpp +++ b/addons/vehicles/CfgAmmo.hpp @@ -1,7 +1,8 @@ class CfgAmmo { - class MissileBase; - class M_Mo_120mm_AT: MissileBase { + + class Missile_AGM_02_F; + class M_Mo_120mm_AT: Missile_AGM_02_F { cost = 400000; // Stop it from aiming at FUCKING RABBITS. weaponLockSystem = 2; }; @@ -11,6 +12,7 @@ class CfgAmmo { weaponLockSystem = 4; }; + class MissileBase; class M_Mo_82mm_AT: MissileBase { cost = 400000; weaponLockSystem = 2; diff --git a/addons/vehicles/XEH_postInit.sqf b/addons/vehicles/XEH_postInit.sqf index efff70306f..316e539572 100644 --- a/addons/vehicles/XEH_postInit.sqf +++ b/addons/vehicles/XEH_postInit.sqf @@ -4,22 +4,18 @@ if !(hasInterface) exitWith {}; // Add keybinds -["ACE3", - localize "STR_ACE_SpeedLimiter", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(ACE_player == driver vehicle ACE_player && - {vehicle ACE_player isKindOf 'Car' || - {vehicle ACE_player isKindOf 'Tank'}}) exitWith {false}; +["ACE3", QGVAR(speedLimiter), localize "STR_ACE_SpeedLimiter", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !(ACE_player == driver vehicle ACE_player && + {vehicle ACE_player isKindOf 'Car' || + {vehicle ACE_player isKindOf 'Tank'}}) exitWith {false}; - // Statement - [ACE_player, vehicle ACE_player] call FUNC(speedLimiter); - true - }, - [211, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, vehicle ACE_player] call FUNC(speedLimiter); + true +}, +{false}, +[211, [false, false, false]], false] call cba_fnc_addKeybind; //DELETE Key diff --git a/addons/weaponselect/XEH_postInit.sqf b/addons/weaponselect/XEH_postInit.sqf index 3414f64c52..6160448d56 100644 --- a/addons/weaponselect/XEH_postInit.sqf +++ b/addons/weaponselect/XEH_postInit.sqf @@ -4,254 +4,198 @@ if !(hasInterface) exitWith {}; // Add keybinds -["ACE3", - localize "STR_ACE_WeaponSelect_SelectPistol", - { - // Conditions: canInteract - _exceptions = [QEGVAR(interaction,isNotEscorting)]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; +["ACE3", QGVAR(SelectPistol), localize "STR_ACE_WeaponSelect_SelectPistol", +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotEscorting"]] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; - // Statement - [ACE_player, handgunWeapon ACE_player] call FUNC(selectWeaponMode); - true - }, - [2, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, handgunWeapon ACE_player] call FUNC(selectWeaponMode); + true +}, +{false}, +[2, [false, false, false]], false] call cba_fnc_addKeybind; //1 Key -["ACE3", - localize "STR_ACE_WeaponSelect_SelectRifle", - { - // Conditions: canInteract - _exceptions = [QEGVAR(interaction,isNotEscorting)]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; +["ACE3", QGVAR(SelectRifle), localize "STR_ACE_WeaponSelect_SelectRifle", +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotEscorting"]] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; - // Statement - [ACE_player, primaryWeapon ACE_player] call FUNC(selectWeaponMode); - true - }, - [3, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, primaryWeapon ACE_player] call FUNC(selectWeaponMode); + true +}, +{false}, +[3, [false, false, false]], false] call cba_fnc_addKeybind; //2 Key -["ACE3", - localize "STR_ACE_WeaponSelect_SelectLauncher", - { - // Conditions: canInteract - _exceptions = [QEGVAR(interaction,isNotEscorting)]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; +["ACE3", QGVAR(SelectRifleMuzzle), localize "STR_ACE_WeaponSelect_SelectRifleMuzzle", +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotEscorting"]] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; - // Statement - [ACE_player, secondaryWeapon ACE_player] call FUNC(selectWeaponMode); - true - }, - [5, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, primaryWeapon ACE_player] call FUNC(selectWeaponMuzzle); + true +}, +{false}, +[4, [false, false, false]], false] call cba_fnc_addKeybind; //3 Key -["ACE3", - localize "STR_ACE_WeaponSelect_SelectRifleMuzzle", - { - // Conditions: canInteract - _exceptions = [QEGVAR(interaction,isNotEscorting)]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; +["ACE3", QGVAR(SelectLauncher), localize "STR_ACE_WeaponSelect_SelectLauncher", +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotEscorting"]] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; - // Statement - [ACE_player, primaryWeapon ACE_player] call FUNC(selectWeaponMuzzle); - true - }, - [4, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, secondaryWeapon ACE_player] call FUNC(selectWeaponMode); + true +}, +{false}, +[5, [false, false, false]], false] call cba_fnc_addKeybind; //4 Key -["ACE3", - localize "STR_ACE_WeaponSelect_SelectBinocular", - { - // Conditions: canInteract - _exceptions = [QEGVAR(interaction,isNotEscorting)]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; +["ACE3", QGVAR(SelectBinocular), localize "STR_ACE_WeaponSelect_SelectBinocular", +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotEscorting"]] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; - // Statement - [ACE_player, binocular ACE_player] call FUNC(selectWeaponMode); - true - }, - [6, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, binocular ACE_player] call FUNC(selectWeaponMode); + true +}, +{false}, +[6, [false, false, false]], false] call cba_fnc_addKeybind; //5 Key -["ACE3", - localize "STR_ACE_WeaponSelect_SelectGrenadeFrag", - { - // Conditions: canInteract - _exceptions = [QEGVAR(interaction,isNotEscorting)]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; +["ACE3", QGVAR(SelectGrenadeFrag), localize "STR_ACE_WeaponSelect_SelectGrenadeFrag", +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotEscorting"]] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; - // Statement - [ACE_player] call FUNC(selectGrenadeFrag); - true - }, - [7, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player] call FUNC(selectGrenadeFrag); + true +}, +{false}, +[7, [false, false, false]], false] call cba_fnc_addKeybind; //6 Key -["ACE3", - localize "STR_ACE_WeaponSelect_SelectGrenadeOther", - { - // Conditions: canInteract - _exceptions = [QEGVAR(interaction,isNotEscorting)]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; +["ACE3", QGVAR(SelectGrenadeOther), localize "STR_ACE_WeaponSelect_SelectGrenadeOther", +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotEscorting"]] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; - // Statement - [ACE_player] call FUNC(selectGrenadeOther); - true - }, - [8, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player] call FUNC(selectGrenadeOther); + true +}, +{false}, +[8, [false, false, false]], false] call cba_fnc_addKeybind; //7 Key -["ACE3", - localize "STR_ACE_WeaponSelect_HolsterWeapon", - { - // Conditions: canInteract - _exceptions = [QEGVAR(interaction,isNotEscorting)]; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; +["ACE3", QGVAR(HolsterWeapon), localize "STR_ACE_WeaponSelect_HolsterWeapon", +{ + // Conditions: canInteract + if !([ACE_player, objNull, ["isNotEscorting"]] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !([ACE_player] call EFUNC(common,canUseWeapon)) exitWith {false}; - // Statement - [ACE_player] call FUNC(putWeaponAway); - true - }, - [11, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player] call FUNC(putWeaponAway); + true +}, +{false}, +[11, [false, false, false]], false] call cba_fnc_addKeybind; //0 Key -["ACE3", - localize "STR_ACE_WeaponSelect_EngineOn", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(ACE_player != vehicle ACE_player && {ACE_player == driver vehicle ACE_player} && {!isEngineOn vehicle ACE_player}) exitWith {false}; +["ACE3", QGVAR(EngineOn), localize "STR_ACE_WeaponSelect_EngineOn", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !(ACE_player != vehicle ACE_player && {ACE_player == driver vehicle ACE_player} && {!isEngineOn vehicle ACE_player}) exitWith {false}; - // Statement - (vehicle ACE_player) engineOn true; - true - }, - [3, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + (vehicle ACE_player) engineOn true; + true +}, +{false}, +[3, [false, false, false]], false] call cba_fnc_addKeybind; //2 Key -["ACE3", - localize "STR_ACE_WeaponSelect_EngineOff", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(ACE_player != vehicle ACE_player && {ACE_player == driver vehicle ACE_player} && {isEngineOn vehicle ACE_player}) exitWith {false}; +["ACE3", QGVAR(EngineOff), localize "STR_ACE_WeaponSelect_EngineOff", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !(ACE_player != vehicle ACE_player && {ACE_player == driver vehicle ACE_player} && {isEngineOn vehicle ACE_player}) exitWith {false}; - // Statement - (vehicle ACE_player) engineOn false; - true - }, - [2, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + (vehicle ACE_player) engineOn false; + true +}, +{false}, +[2, [false, false, false]], false] call cba_fnc_addKeybind; //1 Key -["ACE3", - localize "STR_ACE_WeaponSelect_SelectMainGun", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(ACE_player != vehicle ACE_player) exitWith {false}; +["ACE3", QGVAR(SelectMainGun), localize "STR_ACE_WeaponSelect_SelectMainGun", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !(ACE_player != vehicle ACE_player) exitWith {false}; - // Statement - [ACE_player, vehicle ACE_player, 0] call FUNC(selectWeaponVehicle); - true - }, - [4, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, vehicle ACE_player, 0] call FUNC(selectWeaponVehicle); + true +}, +{false}, +[4, [false, false, false]], false] call cba_fnc_addKeybind; //3 Key -["ACE3", - localize "STR_ACE_WeaponSelect_SelectMachineGun", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(ACE_player != vehicle ACE_player) exitWith {false}; +["ACE3", QGVAR(SelectMachineGun), localize "STR_ACE_WeaponSelect_SelectMachineGun", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !(ACE_player != vehicle ACE_player) exitWith {false}; - // Statement - [ACE_player, vehicle ACE_player, 1] call FUNC(selectWeaponVehicle); - true - }, - [5, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, vehicle ACE_player, 1] call FUNC(selectWeaponVehicle); + true +}, +{false}, +[5, [false, false, false]], false] call cba_fnc_addKeybind; //4 Key -["ACE3", - localize "STR_ACE_WeaponSelect_SelectMissiles", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(ACE_player != vehicle ACE_player) exitWith {false}; +["ACE3", QGVAR(SelectMissiles), localize "STR_ACE_WeaponSelect_SelectMissiles", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !(ACE_player != vehicle ACE_player) exitWith {false}; - // Statement - [ACE_player, vehicle ACE_player, 2] call FUNC(selectWeaponVehicle); - true - }, - [6, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [ACE_player, vehicle ACE_player, 2] call FUNC(selectWeaponVehicle); + true +}, +{false}, +[6, [false, false, false]], false] call cba_fnc_addKeybind; //5 Key -["ACE3", - localize "STR_ACE_WeaponSelect_FireSmokeLauncher", - { - // Conditions: canInteract - _exceptions = []; - if !(_exceptions call EGVAR(common,canInteract)) exitWith {false}; - // Conditions: specific - if !(ACE_player != vehicle ACE_player && {ACE_player == commander vehicle ACE_player}) exitWith {false}; +["ACE3", QGVAR(FireSmokeLauncher), localize "STR_ACE_WeaponSelect_FireSmokeLauncher", +{ + // Conditions: canInteract + if !([ACE_player, objNull, []] call EGVAR(common,canInteractWith)) exitWith {false}; + // Conditions: specific + if !(ACE_player != vehicle ACE_player && {ACE_player == commander vehicle ACE_player}) exitWith {false}; - // Statement - [vehicle ACE_player] call FUNC(fireSmokeLauncher); - true - }, - [10, [false, false, false]], - false, - "keydown" -] call cba_fnc_registerKeybind; + // Statement + [vehicle ACE_player] call FUNC(fireSmokeLauncher); + true +}, +{false}, +[10, [false, false, false]], false] call cba_fnc_addKeybind; //9 Key diff --git a/addons/weaponselect/config.cpp b/addons/weaponselect/config.cpp index adebcd322c..9bf9c7c39c 100644 --- a/addons/weaponselect/config.cpp +++ b/addons/weaponselect/config.cpp @@ -13,3 +13,13 @@ class CfgPatches { }; #include "CfgEventHandlers.hpp" + +class ACE_Settings { + class GVAR(DisplayText) { + typeName = "BOOL"; + isClientSetable = 1; + value = 1; + displayName = "$STR_ACE_Weaponselect_SettingDisplayTextName"; + description = "$STR_ACE_Weaponselect_SettingDisplayTextDesc"; + }; +}; diff --git a/addons/weaponselect/functions/fnc_displayGrenadeTypeAndNumber.sqf b/addons/weaponselect/functions/fnc_displayGrenadeTypeAndNumber.sqf index 2f8a4c3f87..4605bd3861 100644 --- a/addons/weaponselect/functions/fnc_displayGrenadeTypeAndNumber.sqf +++ b/addons/weaponselect/functions/fnc_displayGrenadeTypeAndNumber.sqf @@ -14,6 +14,8 @@ private ["_magazine", "_numberofMagazines"]; +if !(GVAR(DisplayText)) exitwith {}; + _magazine = _this select 0; _numberofMagazines = _this select 1; diff --git a/addons/weaponselect/functions/fnc_selectGrenadeAll.sqf b/addons/weaponselect/functions/fnc_selectGrenadeAll.sqf index 685ef4b76e..72977e6ad6 100644 --- a/addons/weaponselect/functions/fnc_selectGrenadeAll.sqf +++ b/addons/weaponselect/functions/fnc_selectGrenadeAll.sqf @@ -36,9 +36,10 @@ if (_nextMuzzle != "") then { // There is a no muzzle with magazines --> select nothing GVAR(CurrentGrenadeMuzzleFrag) = ""; GVAR(CurrentGrenadeMuzzleOther) = ""; - _text = [localize "STR_ACE_WeaponSelect_NoGrenadesLeft", [1,0,0]] call EFUNC(common,stringToColoredText); - [composeText [lineBreak, _text]] call EFUNC(common,displayTextStructured); - + if (GVAR(DisplayText)) then { + _text = [localize "STR_ACE_WeaponSelect_NoGrenadesLeft", [1,0,0]] call EFUNC(common,stringToColoredText); + [composeText [lineBreak, _text]] call EFUNC(common,displayTextStructured); + }; }; if (_nextMuzzle in GVAR(FragMuzzles)) then { diff --git a/addons/weaponselect/functions/fnc_selectGrenadeFrag.sqf b/addons/weaponselect/functions/fnc_selectGrenadeFrag.sqf index 4b6c4dabb2..6eb1714b51 100644 --- a/addons/weaponselect/functions/fnc_selectGrenadeFrag.sqf +++ b/addons/weaponselect/functions/fnc_selectGrenadeFrag.sqf @@ -35,10 +35,10 @@ if (_nextMuzzle != "") then { } else { // There is a no muzzle with magazines --> select nothing GVAR(CurrentGrenadeMuzzleFrag) = ""; - - _text = [localize "STR_ACE_WeaponSelect_NoFragsLeft", [1,0,0]] call EFUNC(common,stringToColoredText); - [composeText [lineBreak, _text]] call EFUNC(common,displayTextStructured); - + if (GVAR(DisplayText)) then { + _text = [localize "STR_ACE_WeaponSelect_NoFragsLeft", [1,0,0]] call EFUNC(common,stringToColoredText); + [composeText [lineBreak, _text]] call EFUNC(common,displayTextStructured); + }; }; GVAR(CurrentGrenadeMuzzleIsFrag) = true; diff --git a/addons/weaponselect/functions/fnc_selectGrenadeOther.sqf b/addons/weaponselect/functions/fnc_selectGrenadeOther.sqf index 62b5325011..32c0e43666 100644 --- a/addons/weaponselect/functions/fnc_selectGrenadeOther.sqf +++ b/addons/weaponselect/functions/fnc_selectGrenadeOther.sqf @@ -35,10 +35,10 @@ if (_nextMuzzle != "") then { } else { // There is a no muzzle with magazines --> select nothing GVAR(CurrentGrenadeMuzzleOther) = ""; - - _text = [localize "STR_ACE_WeaponSelect_NoMiscGrenadeLeft", [1,0,0]] call EFUNC(common,stringToColoredText); - [composeText [lineBreak, _text]] call EFUNC(common,displayTextStructured); - + if (GVAR(DisplayText)) then { + _text = [localize "STR_ACE_WeaponSelect_NoMiscGrenadeLeft", [1,0,0]] call EFUNC(common,stringToColoredText); + [composeText [lineBreak, _text]] call EFUNC(common,displayTextStructured); + }; }; GVAR(CurrentGrenadeMuzzleIsFrag) = false; diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index a8c736b4fb..3a39d59396 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -2,6 +2,12 @@ + + Display text on grenade throw + + + Display a hint or text on grenade throw. + Select Pistol Pistole auswählen diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 7a97a1a788..caed3aa254 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -10,7 +10,8 @@ 30 setFog (ACE_MISC_PARAMS select 2); }; }; - +ACE_wind = wind; +if (true) exitwith {}; // Update Wind simulWeatherSync; diff --git a/addons/winddeflection/CfgEventHandlers.hpp b/addons/winddeflection/CfgEventHandlers.hpp index 4961d7dbc7..4f54a73c84 100644 --- a/addons/winddeflection/CfgEventHandlers.hpp +++ b/addons/winddeflection/CfgEventHandlers.hpp @@ -1,11 +1,13 @@ class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call compile preprocessFileLineNumbers PATHTOF(XEH_preInit.sqf) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; -class Extended_Fired_Eventhandlers { - class CaManBase { - fired = QUOTE( call FUNC(handleFired) ); - }; -}; \ No newline at end of file +class Extended_FiredBIS_EventHandlers { + class CAManBase { + class ADDON { + firedBIS = QUOTE(_this call FUNC(handleFired)); + }; + }; +}; diff --git a/addons/winddeflection/config.cpp b/addons/winddeflection/config.cpp index 0e721846ad..972a012a89 100644 --- a/addons/winddeflection/config.cpp +++ b/addons/winddeflection/config.cpp @@ -28,4 +28,6 @@ class ACE_Settings { isClientSetable = 0; }; }; -#include "CfgVehicles.h" \ No newline at end of file + +#include "CfgEventHandlers.hpp" +#include "CfgVehicles.h" diff --git a/addons/winddeflection/functions/fnc_handleFired.sqf b/addons/winddeflection/functions/fnc_handleFired.sqf index 19677287dc..36b177ae0a 100644 --- a/addons/winddeflection/functions/fnc_handleFired.sqf +++ b/addons/winddeflection/functions/fnc_handleFired.sqf @@ -1,21 +1,24 @@ -/** - * fnc HandleFired. - * Handles wind deflection for projectiles. - * Is expected to be triggered by the fired eventhandler from BI. - * - * Params: - * 1. unit: Object - Object the event handler is assigned to - * 2. weapon: String - Fired weapon - * 3. muzzle: String - Muzzle that was used - * 4. mode: String - Current mode of the fired weapon - * 5. ammo: String - Ammo used - * 6. magazine: String - magazine name which was used - * 7. projectile: Object - Object of the projectile that was shot (Arma 2: OA and onwards) - * +/* * Author: Glowbal, Ruthberg + * Handles wind deflection for projectiles. * + * Arguments: + * 0: unit - Object the event handler is assigned to + * 1: weapon - Fired weapon + * 2: muzzle - Muzzle that was used + * 3: mode - Current mode of the fired weapon + * 4: ammo - Ammo used + * 5: magazine - magazine name which was used + * 6: projectile - Object of the projectile that was shot + * + * Return Value: + * Nothing + * + * Example: + * [clientFiredBIS-XEH] call ace_winddeflection_fnc_handleFired + * + * Public: No */ - #include "script_component.hpp" private ["_unit", "_weapon", "_ammo", "_bullet", "_airFriction", "_index"]; diff --git a/extensions/ace_fcs.cpp b/extensions/ace_fcs.cpp index 0b6788e7d1..81c515e0aa 100644 --- a/extensions/ace_fcs.cpp +++ b/extensions/ace_fcs.cpp @@ -21,7 +21,6 @@ #include #define MAXELEVATION 20 -#define SIMULATIONSTEP 0.05 #define MAXITERATIONS 120 #define PRECISION 0.1 #define RADIANS(X) (X / (180 / M_PI)) @@ -45,7 +44,7 @@ std::vector splitString(std::string input) { } double traceBullet(double initSpeed, double airFriction, double angle, double angleTarget, double distance) { - double velX, velY, posX, posY, posTargetX, posTargetY, velMag; + double velX, velY, posX, posY, lastPosX, lastPosY, posTargetX, posTargetY, velMag; velX = cos(RADIANS(angle)) * initSpeed; velY = sin(RADIANS(angle)) * initSpeed; posX = 0; @@ -53,18 +52,24 @@ double traceBullet(double initSpeed, double airFriction, double angle, double an posTargetX = cos(RADIANS(angleTarget)) * distance; posTargetY = sin(RADIANS(angleTarget)) * distance; + double simulationStep = 0.05; + int i = 0; while (i < MAXITERATIONS) { + lastPosX = posX; + lastPosY = posY; + simulationStep = 0.1 - 0.049 * (posX / posTargetX); velMag = sqrt(pow(velX, 2) + pow(velY, 2)); - velX += SIMULATIONSTEP * (velX * velMag * airFriction); - velY += SIMULATIONSTEP * (velY * velMag * airFriction - 9.81); - posX += velX * SIMULATIONSTEP; - posY += velY * SIMULATIONSTEP; + velX += simulationStep * (velX * velMag * airFriction); + velY += simulationStep * (velY * velMag * airFriction - 9.81); + posX += velX * simulationStep; + posY += velY * simulationStep; if (posX >= posTargetX) { break; } i++; } - return posY - posTargetY; + double coef = (posTargetX - lastPosX) / (posX - lastPosX); + return (lastPosY + (posY - lastPosY) * coef) - posTargetY; } double getSolution(double initSpeed, double airFriction, double angleTarget, double distance) { diff --git a/extras/assets/icons/Icons_Modules.psd b/extras/assets/icons/Icons_Modules.psd new file mode 100644 index 0000000000..d240738a19 Binary files /dev/null and b/extras/assets/icons/Icons_Modules.psd differ diff --git a/extras/assets/logo/black/ACE3-Logo.eps b/extras/assets/logo/black/ACE3-Logo.eps new file mode 100644 index 0000000000..83ec9a3852 --- /dev/null +++ b/extras/assets/logo/black/ACE3-Logo.eps @@ -0,0 +1,15918 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(R) 8.0 +%%AI8_CreatorVersion: 16.0.2 +%%For: (bux578) () +%%Title: (ACE3-Logo.eps) +%%CreationDate: 3/12/2015 2:49 PM +%%Canvassize: 16383 +%%BoundingBox: 354 -432 437 -411 +%%HiResBoundingBox: 354.8633 -431.0947 436.6563 -411.5649 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0 +%%+ procset Adobe_screens_AI5 1.0 0 +%%+ procset AGM_Gradient 1.0 0 +%%+ procset Adobe_ColorImage_AI6 1.3 0 +%%+ procset Adobe_Illustrator_AI5 1.3 0 +%%+ procset Adobe_pattern_AI5 1.0 0 +%%+ procset Adobe_cshow 2.0 8 +%%+ procset Adobe_shading_AI8 1.0 0 +%AI5_FileFormat 4.0 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%CMYKProcessColor: 1 1 1 1 ([Passermarken]) +%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) +%%+ Options: 1 16 0 1 1 1 0 0 0 0 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 2 3 4 +%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 1 0 () +%AI3_TemplateBox: 396.3633 -422.0654 396.3633 -422.0654 +%AI3_TileBox: -13.2603 -706.8096 804.7793 -135.8496 +%AI3_DocumentPreview: Header +%AI5_ArtSize: 81.793 19.5298 +%AI5_RulerUnits: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 0 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI8_OpenToView: 342 -390 16 1821 1035 18 0 0 50 116 0 0 +%AI5_OpenViewLayers: 7 +%%PageOrigin:-8 -817 +%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 +%AI9_Flatten: 0 +%AI12_CMSettings: 00.MS +%%EndComments +%%BeginProlog +%%BeginResource: procset Adobe_level2_AI5 1.2 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) +%%Version: 1.2 0 +%%CreationDate: (04/10/93) () +%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) +userdict /Adobe_level2_AI5 26 dict dup begin + put + /packedarray where not + { + userdict begin + /packedarray + { + array astore readonly + } bind def + /setpacking /pop load def + /currentpacking false def + end + 0 + } if + pop + userdict /defaultpacking currentpacking put true setpacking + /initialize + { + Adobe_level2_AI5 begin + } bind def + /terminate + { + currentdict Adobe_level2_AI5 eq + { + end + } if + } bind def + mark + /setcustomcolor where not + { + /findcmykcustomcolor + { + (AI8_CMYK_CustomColor) + 6 packedarray + } bind def + /findrgbcustomcolor + { + (AI8_RGB_CustomColor) + 5 packedarray + } bind def + /setcustomcolor + { + exch + aload pop dup + (AI8_CMYK_CustomColor) eq + { + pop pop + 4 + { + 4 index mul + 4 1 roll + } repeat + 5 -1 roll pop + setcmykcolor + } + { + dup (AI8_RGB_CustomColor) eq + { + pop pop + 3 + { + 1 exch sub + 3 index mul + 1 exch sub + 3 1 roll + } repeat + 4 -1 roll pop + setrgbcolor + } + { + pop + 4 + { + 4 index mul 4 1 roll + } repeat + 5 -1 roll pop + setcmykcolor + } ifelse + } ifelse + } + def + } if + /setAIseparationgray + { + false setoverprint + 0 setgray + /setseparationgray where{ + pop setseparationgray + }{ + /setcolorspace where{ + pop + [/Separation (All) /DeviceCMYK {dup dup dup}] setcolorspace + 1 exch sub setcolor + }{ + setgray + }ifelse + }ifelse + } def + + /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def + userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put + userdict /level2? + systemdict /languagelevel known dup + { + pop systemdict /languagelevel get 2 ge + } if + put +/level2ScreenFreq +{ + begin + 60 + HalftoneType 1 eq + { + pop Frequency + } if + HalftoneType 2 eq + { + pop GrayFrequency + } if + HalftoneType 5 eq + { + pop Default level2ScreenFreq + } if + end +} bind def +userdict /currentScreenFreq + level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put +level2? not + { + /setcmykcolor where not + { + /setcmykcolor + { + exch .11 mul add exch .59 mul add exch .3 mul add + 1 exch sub setgray + } def + } if + /currentcmykcolor where not + { + /currentcmykcolor + { + 0 0 0 1 currentgray sub + } def + } if + /setoverprint where not + { + /setoverprint /pop load def + } if + /selectfont where not + { + /selectfont + { + exch findfont exch + dup type /arraytype eq + { + makefont + } + { + scalefont + } ifelse + setfont + } bind def + } if + /cshow where not + { + /cshow + { + [ + 0 0 5 -1 roll aload pop + ] cvx bind forall + } bind def + } if + } if + cleartomark + /anyColor? + { + add add add 0 ne + } bind def + /testColor + { + gsave + setcmykcolor currentcmykcolor + grestore + } bind def + /testCMYKColorThrough + { + testColor anyColor? + } bind def + userdict /composite? + 1 0 0 0 testCMYKColorThrough + 0 1 0 0 testCMYKColorThrough + 0 0 1 0 testCMYKColorThrough + 0 0 0 1 testCMYKColorThrough + and and and + put + composite? not + { + userdict begin + gsave + /cyan? 1 0 0 0 testCMYKColorThrough def + /magenta? 0 1 0 0 testCMYKColorThrough def + /yellow? 0 0 1 0 testCMYKColorThrough def + /black? 0 0 0 1 testCMYKColorThrough def + grestore + /isCMYKSep? cyan? magenta? yellow? black? or or or def + /customColor? isCMYKSep? not def + end + } if + end defaultpacking setpacking +%%EndResource +%%BeginResource: procset Adobe_screens_AI5 1.2 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Custom Halftone Screens ProcSet) +%%Version: 1.2 0 +%%CreationDate: (03/24/93) () +%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) +userdict /defaultpacking currentpacking put true setpacking +systemdict begin +userdict /Adobe_screens_AI5 15 dict dup begin +put +/initialize +{ + Adobe_screens_AI5 begin + /screenid + deviceDPI 600 gt composite? not or + { + -1 + } + { + deviceDPI currentScreenFreq + dup dup 60 ge exch 150 le and deviceDPI 300 le and + { + pop 60 + } if + div 1.41421 div 0.5 add cvi + } ifelse + def + + 2 screenid eq + { + /customsize 16 def + /customdata /customdata2 def + setcustomscreen + } if + + 3 screenid eq + { + /customsize 24 def + /customdata /customdata3 def + setcustomscreen + } if + + 4 screenid eq + { + /customsize 16 def + /customdata /customdata4 def + setcustomscreen + } if + + 5 screenid eq + { + /customsize 20 def + /customdata /customdata5 def + setcustomscreen + } if + + 6 screenid eq + { + /customsize 24 def + /customdata /customdata6 def + setcustomscreen + } if + + 7 screenid eq + { + /customsize 28 def + /customdata /customdata7 def + setcustomscreen + } if + + 8 screenid eq + { + /customsize 16 def + /customdata /customdata8 def + setcustomscreen + } if +} def +/terminate +{ + currentdict Adobe_screens_AI5 eq + { + end + } if +} def +/setcustomscreen +{ + deviceDPI customsize div 0 + { + 1 add 2 div customsize mul cvi exch + 1 add 2 div customsize mul cvi exch + customsize mul add + customdata load exch get 256 div + } setscreen +} def +/customdata2 28 28 mul string def +currentfile customdata2 readhexstring +4180E8694988E2634382EA6B4B8AE061A01939C8A81737C2A21B3BCAAA1636C0 +F8795998F6775796FA7B5B9AF57656952ED8B80727D6B60F2FDABA0626D5B50E +4E8DE6674786EE6F4F8EE5664685ED6EAD1434C6A61F3FCEAE1232C5A51E3ECD +F3745493FE7F5F9EF1725291FD7E5E9D24D3B30C2CDEBE0222D1B10A2ADDBD04 +4483EB6C4C8BE1624281E96A4A89E364A31C3CCBAB1535C1A11A3AC9A91838C3 +FB7C5C9BF4755594F97A5A99F778589730DBBB0525D4B40D2DD9B90828D7B710 +508FE4654584EC6D4D8CE7684887EF70AF1131C4A41D3DCCAC1333C7A72040CF +F0715190FC7D5D9CF2735392FF80609F21D0B00929DCBC0323D2B20B2BDFBF01 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000 +pop pop +/customdata3 28 28 mul string def +currentfile customdata3 readhexstring +011DC7F5E73D0421CBF3E43A021EC8F6E83E0522CCF2E43A2B648BC4A0762F68 +8AC39E732C658CC5A177306989C29D72D5B6521A6192D9B55219608FD6B6531B +6193DAB451185F8FFCEE440C28D2FCED430B27D1FDEF450C29D3FBEC420A26D0 +BEA77D366F83BCA77C356E87BFA87E377082BBA67B346D86145B99E0AE4A1259 +98DFB14E155C9AE1AD4A115897DEB04D0623CDF4E63C0420CAF8EA400723CDF4 +E53B031FC9F7E93F316988C19F752E678EC6A378326A88C09F742D668DC6A278 +DBB350175E91D8B8551C6395DCB24F165D90D7B7541C6294FAEC420925CFFFF1 +470E2BD5F9EB410824CEFEF0460D2AD4BAA57A336C85BEAA80397180B9A47933 +6B84BDA97F387181105797DDAF4C145A9CE3AB480F5696DDAE4B13599BE2AC49 +021EC8F6E83E0522CCF2E43A011DC7F5E73D0421CBF3E43A2C658CC5A1773069 +89C29D722B648BC4A0762F688AC39E73D6B6531B6193DAB451185F8FD5B6521A +6192D9B55219608FFDEF450C29D3FBEC420A26D0FCEE440C28D2FCED430B27D1 +BFA87E377082BBA67B346D86BEA77D366F83BCA77C356E87155C9AE1AD4A1158 +97DEB04D145B99E0AE4A125998DFB14E0723CDF4E53B031FC9F7E93F0623CDF4 +E63C0420CAF8EA40326A88C09F742D668DC6A278316988C19F752E678EC6A378 +DCB24F165D90D7B7541C6294DBB350175E91D8B8551C6395F9EB410824CEFEF0 +460D2AD4FAEC420925CFFFF1470E2BD5B9A479336B84BDA97F387181BAA57A33 +6C85BEAA803971800F5696DDAE4B13599BE2AC49105797DDAF4C145A9CE3AB48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000 +pop pop +/customdata4 28 28 mul string def +currentfile customdata4 readhexstring +1139B8E0FAD2531B133BBAE2F8D05119417180A6AE9A7B4B437382A5AD987949 +C08867272F6F92CAC28A66262E6E90C8E8DE5F070F37B6F2EADD5E060E36B5F0 +FED6571F173FBEE6FDD5561E163EBDE5AB9E7F4F477786A1A99D7E4E467685A3 +2C6C96CEC68E62222A6A95CDC58D64240C34B3F6EED95A020A32B1F5EDDB5C04 +143CBBE3F9D1521A123AB9E1FBD3541C447483A4AC997A4A427281A7AF9B7C4C +C38B65252D6D91C9C1896828307093CBEBDC5D050D35B4F1E9DF60081038B7F3 +FCD4551D153DBCE4FFD758201840BFE7A89C7D4D457584A2AA9F8050487887A0 +296994CCC48C63232B6B97CFC78F61210931B0F4ECDA5B030B33B2F7EFD85901 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000 +pop pop +/customdata5 28 28 mul string def +currentfile customdata5 readhexstring +010B34C3EBFCF7CE3F16020C35C4EDFBF6CD3E15102552A4D6EADDB5632B1126 +54A5D5EADCB3622A3958768499C19E8C7C5E3A59778498C19D8B7B5DC8A99370 +47334C7587AFC9AA936F46324B7485AEF1E5BC6B1E0A2351A3D8F2E4BC6A1E09 +2351A2D7FFF9D14219050F38C6EFFEF9D04118040E37C6EFE8E0B7662D142856 +A8D3E7DFB7652D132856A7D4BF9C8E7F603D5B7A8195BE9A8E7E603C5B798297 +314A7389B2CCAD906D442F497289B1CBAC926E4508214FA1DBF4E2B9671B0720 +4EA0DAF4E3BA691C030D36C5EDFBF6CD3F16010C34C3ECFDF8CF4017122654A6 +D4E9DDB4622A112553A5D6EBDEB5642C3B59788397C09C8B7C5D3A58778599C2 +9E8C7D5FCAAB926E46314B7486AFC8AA947048334D7587B0F2E4BB691D082250 +A1D8F1E6BD6B1F0A2452A3D9FDF8CF4118030E36C5EEFFFAD1421A050F38C7F0 +E6DFB6642C132755A7D3E8E1B8662E152957A8D2BE9A8D7E5F3B5A798296BF9B +8F80613D5C7B80952F487188B1CAAC916D443049728AB3CCAE906C43061F4D9F +DAF3E2BA681C07214FA0DBF5E1B8671A00000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000 +pop pop +/customdata6 28 28 mul string def +currentfile customdata6 readhexstring +081A44B6E0F2FDECC150250C091B45B6E1F3FCEBC04F240C1D336199C7D8DCD3 +A56C37221E33619AC8D7DBD2A46B36214864798091AEB1958C7E694C49657A81 +90ADB0948B7D684BB99D8475593C405C7888A1BEBA9E8574583B3F5B7888A0BD +E4CBAA712E1215326098CFE8E4CCA9712D1114315F97CEE7F5F1C6552B040719 +43B5DFFAF6F0C6542A03061842B4DEF9FFEDC352270E0B1C47B8E3F4FEECC251 +260D0A1C46B7E2F4DAD5A76E39232035639CCAD5D9D4A66D38231F34629BC9D6 +AF938E806A4E4A677C838FABAE928D7F694D4A667B828FAC3E5A778AA3BFBC9F +8772563A3D597689A2BEBB9F8673573A14305E97D1EAE6CDA76F2B0F132F5D96 +D0E9E5CDA8702C10051742B3DDFCF8EEC4522801041641B2DDFBF7EFC5532902 +091B45B6E1F3FCEBC04F240C081A44B6E0F2FDECC150250C1E33619AC8D7DBD2 +A46B36211D336199C7D8DCD3A56C372249657A8190ADB0948B7D684B48647980 +91AEB1958C7E694CBA9E8574583B3F5B7888A0BDB99D8475593C405C7888A1BE +E4CCA9712D1114315F97CEE7E4CBAA712E1215326098CFE8F6F0C6542A030618 +42B4DEF9F5F1C6552B04071943B5DFFAFEECC251260D0A1C46B7E2F4FFEDC352 +270E0B1C47B8E3F4D9D4A66D38231F34629BC9D6DAD5A76E39232035639CCAD5 +AE928D7F694D4A667B828FACAF938E806A4E4A677C838FAB3D597689A2BEBB9F +8673573A3E5A778AA3BFBC9F8772563A132F5D96D0E9E5CDA8702C1014305E97 +D1EAE6CDA76F2B0F041641B2DDFBF7EFC5532902051742B3DDFCF8EEC4522801 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000 +pop pop +/customdata7 28 28 mul string def +currentfile customdata7 readhexstring +01061B44B7E1F5FEFBE6BD4A210C01071B45B8E1F6FDFBE6BC4A200B09132A54 +A7D1EAF5EED9B05D331609142B55A8D2EAF4EED9AF5C32161D2D3D6993C1CBE0 +CEC59B7140301E2E3D6A93C0CADFCDC49A713F3047576C7B828DA2B6A48F867E +6F5A48576C7C828CA1B6A38F867E6E59BAAA958A78634E4451667A8498ADBAAB +968977624E4350657A8398ADE3D4C99F7539251A273C6892C2D7E4D4C89E7539 +241A273B6891C1D6F8F2DDB460371005122A53A7D0ECF9F2DDB360360F051229 +53A6D0EBFFFDE8BE4C220D03081D46B9E3F7FFFCE7BD4B210D02071C46B8E2F7 +F3F0DBB15E34180B152C56A9D3E8F3EFDAB05D34170A142C55A9D2E9DFCCC69C +7341321F2F3F6B94BFC9DECCC59C7241311F2E3E6A94BFCAB5A38E8780705B49 +596D7D808BA0B4A28D877F6F5B48586D7C818BA043506479859AAFBCAC978876 +614C424F64798499AEBBAB968977624D19263B6791C3D8E5D6C79D7337231825 +3A6690C3D7E5D5C79E74382304112952A5CFEDFAF0DBB25E350E03102851A5CE +ECF9F1DCB25F360E01071B45B8E1F6FDFBE6BC4A200B01061B44B7E1F5FEFBE6 +BD4A210C09142B55A8D2EAF4EED9AF5C321609132A54A7D1EAF5EED9B05D3316 +1E2E3D6A93C0CADFCDC49A713F301D2D3D6993C1CBE0CEC59B71403048576C7C +828CA1B6A38F867E6E5947576C7B828DA2B6A48F867E6F5ABAAB968977624E43 +50657A8398ADBAAA958A78634E4451667A8498ADE4D4C89E7539241A273B6891 +C1D6E3D4C99F7539251A273C6892C2D7F9F2DDB360360F05122953A6D0EBF8F2 +DDB460371005122A53A7D0ECFFFCE7BD4B210D02071C46B8E2F7FFFDE8BE4C22 +0D03081D46B9E3F7F3EFDAB05D34170A142C55A9D2E9F3F0DBB15E34180B152C +56A9D3E8DECCC59C7241311F2E3E6A94BFCADFCCC69C7341321F2F3F6B94BFC9 +B4A28D877F6F5B48586D7C818BA0B5A38E8780705B49596D7D808BA0424F6479 +8499AEBBAB968977624D43506479859AAFBCAC978876614C18253A6690C3D7E5 +D5C79E74382319263B6791C3D8E5D6C79D73372303102851A5CEECF9F1DCB25F +360E04112952A5CFEDFAF0DBB25E350E +pop pop +/customdata8 28 28 mul string def +currentfile customdata8 readhexstring +050F2747B6D6EEF8FEF4DCBC4D2D1507111D375F9EC6E0E9EBE6CCA4653D1F13 +2939556F8EA8C1D1D3C3AE9475573B2B4961717D808999B1B39B8B867F73634B +B8A090827A6A5A42445C6C7C8492A2BAD8C8AA97785232222434546E8DACCADA +F0E2CFA768401A0A0C1C365E9DC5E4F2FAF7DFBF50301802040E2646B5D5EDFC +FFF5DDBD4E2E160806102848B7D7EFF9EAE7CDA5663E2014121E38609FC7E1E8 +D2C2AF9576583C2C2A3A56708FA9C0D0B29A8A878074644C4A62727E818898B0 +435B6B7B8593A3BBB9A19183796959412333536D8CADCBDBD9C9AB9677513121 +0B1B355D9CC4E5F3F1E3CEA6673F1909030D2545B4D4ECFDFBF6DEBE4F2F1701 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000 +pop pop +end +end +defaultpacking setpacking +%%EndResource +%%BeginResource: procset AGM_Gradient_Sep 1.0 0 +%%Title: (AGM Gradient Procset) +%%Version: 1.0 0 +%%CreationDate: (4/26/96) () +%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) +userdict /defaultpacking currentpacking put true setpacking +userdict /AGM_Gradient_Sep 5 dict dup begin put +/AGM_Gradient_Sep_private 100 dict def +/initialize{ + AGM_Gradient_Sep begin + AGM_Gradient_Sep_private begin + _compositeJob{ + initializeSinglePassSeps + }{ + initializeMultiPassSeps + }ifelse + initializeSeps + AGM_Gradient_private begin + /_fillSD newSpotDict def + /_rampSD newSpotDict def + /_nCustomColorSD nd + end + AGM_Gradient_Sep_private + { + dup xcheck 1 index type /arraytype eq and + { + bind + }if + pop pop + }forall + AGM_Gradient_Sep + { + dup xcheck 1 index type /arraytype eq and + { + bind + }if + pop pop + }forall + end + + currentdict readonly pop + end +}def +/terminate{ + currentdict AGM_Gradient_Sep eq{ + end + }if +}def +AGM_Gradient_Sep_private begin +/initializeSeps{ + /currentoverprint { _of } def + _noImage not _level2PS not and{ + /linealFill{ + currentoverprint{ + 0 0 1 1 rectfill + }{ + mySave + 8 setImageParms + _color{ + _nCustomColorSD begin + cyan magenta yellow black + + _spotColor{ + spot1/tintImage spot1/tintValue get 1 exch sub makeByte8 put + spot2/tintImage spot2/tintValue get 1 exch sub makeByte8 put + }if + end + + 4{ + makeByte8 4 1 roll + }repeat + true 4 _nCustomColorSD ncolorimage + }{ + _nCustomColorSD/black get 1 exch sub makeByte8 + _nCustomColorSD bwImage + }ifelse + myRestore + }ifelse + }def + }if + /_whiteBytes 1 makeByte8 pt + /knockOut{ + _noImage _level2PS or currentoverprint or{ + gsave + false setoverprint + 1 setgray + 0 0 1 1 rectfill + grestore + }{ + 8 setImageParms _whiteBytes /_image load 5 execImage + }ifelse + }def + /newSpotDict{ + 11 dict dup begin + /nSpots 2 def + /spot1 7 dict def + /spot2 7 dict def + end + }def + /initSpotData + { + begin + /name nd + /tintImage nd + /tintValue nd + /spot_C nd + /spot_M nd + /spot_Y nd + /spot_K nd + end + }def + /initSpotDict{ + begin + /cyanInk nd + /magentaInk nd + /yellowInk nd + /blackInk nd + /cyan nd + /magenta nd + /yellow nd + /black nd + spot1 initSpotData + spot2 initSpotData + end + }def + /copySpotDict{ + /_dst xp + begin + cyanInk magentaInk yellowInk blackInk + cyan magenta yellow black + spot1 spot2 + end + _dst begin + /spot1 spot1 maxlength dict def + /spot2 spot2 maxlength dict def + spot2 copy pop + spot1 copy pop + /black xd + /yellow xd + /magenta xd + /cyan xd + /blackInk xd + /yellowInk xd + /magentaInk xd + /cyanInk xd + end + }def + /setCustomColor + { + 1 index /Black eq{ + 6 1 roll 5 npop + 1 exch sub + setgray + }{ + 6 1 roll _ccAry1 astore exch + dup null eq{ + pop 0 + }if + setcustomcolor + }ifelse + }def + /setCStop{ + /_colorStyle exch pt + + _colorStyle 0 eq{ + 0 0 0 + 4 -1 roll + 1 exch sub + _spotColor{ + /_colorStyle 3 pt + /Black + 1 index + 1 exch sub + }if + }if + _colorStyle 2 eq{ + 3 npop + }if + _rampSD _fillSD copySpotDict + + _colorStyle 4 eq{ + pop + 9 2 roll 3 npop 6 -2 roll + } if + + _colorStyle 3 eq _colorStyle 4 eq or{ + + _fillSD begin + /_spot1 spot1 pt + /_spot2 spot2 pt + end + + exch dup _spot1/name get eq{ + _spot1 _spot2 + }{ + _spot2 _spot1 + }ifelse + begin + begin + /name xd + 1 exch sub /tintValue xd + 4{ + tintValue mul 4 1 roll + }repeat + _spotColor not{ + /tintValue null def + }if + end + /tintValue 0 def + end + }if + _fillSD nsetcustomcolor + }def + /renderCMYK{ + spot1/name get null eq + spot2/name get null eq and + dup not{ + pop + spot1 spotConverted + }if + dup not{ + pop + spot2 spotConverted + }if + }def + /currentInk{ + true + _inRipSep{ + currentcolorspace 0 get + dup /DeviceGray eq + 1 index /DeviceCMYK eq or{ + pop + currentcmykcolor add add add 0 eq{ + pop false + }if + }{ + /Separation eq{ + currentcolor 0 eq{ + pop false + }if + }if + }ifelse + }{ + currentgray 1 eq{ + pop false + }if + }ifelse + }def + /currentInkN{ + + _nCustomColorSD begin + /_spot1 spot1 pt + /_spot2 spot2 pt + renderCMYK + end + { + currentInk + }{ + gsave + _spot1 begin + name null ne{ + spot_C spot_M spot_Y spot_K name tintValue setCustomColor + currentInk + }{ + false + }ifelse + end + _spot2 begin + name null ne{ + spot_C spot_M spot_Y spot_K name tintValue setCustomColor + currentInk + }{ + false + }ifelse + end + grestore + + or + } ifelse + }def + /fill_ /fill load def + /fillOvp{ + currentoverprint{ + _inRipSep{ + currentcolorspace 0 get + dup /DeviceGray eq + 1 index /DeviceCMYK eq or{ + pop + currentcmykcolor add add add 0 eq{ + newpath + }if + }{ + /Separation eq{ + currentcolor 0 eq{ + newpath + }if + }if + }ifelse + }{ + currentgray 1 eq{ + newpath + }if + }ifelse + }if + fill_ + }def + /fill{ + _nCustomColorSD begin + /_spot1 spot1 pt + /_spot2 spot2 pt + renderCMYK + end + + { + fillOvp + }{ + _spot1 begin + gsave + name null ne{ + spot_C spot_M spot_Y spot_K name tintValue setCustomColor + }{ + 1 setgray + }ifelse + fillOvp + grestore + end + _spot2 begin + name null ne{ + gsave + true setoverprint + spot_C spot_M spot_Y spot_K name tintValue setCustomColor + fillOvp + grestore + }if + end + newpath + }ifelse + }def + /expandSpot{ + _spotColor{ + /_len xp + _rampSD begin + spot1 begin + tintImage null ne{ + tintImage _len expandOne /tintImage xd + }if + end + spot2 begin + tintImage null ne{ + tintImage _len expandOne /tintImage xd + }if + end + end + }{ + pop + }ifelse + }def + /rampImage{ + currentoverprint{ + rectImage + }{ + _enabledSmoothShade{ + fillRamp + }{ + _color{ + _rampSD begin + /cyanInk _cyanData 0 ne def + /magentaInk _magentaData 0 ne def + /yellowInk _yellowData 0 ne def + /blackInk _blackData 0 ne def + end + + _nSamples setImageParms + _nSamples expandSpot + _cyanData _magentaData _yellowData _blackData _nSamples 4 expandColor + true 4 _rampSD ncolorimage + }{ + _rampSD begin + /cyanInk false def + /magentaInk false def + /yellowInk false def + /blackInk true def + end + _nSamples setImageParms + _blackData _rampSD bwImage + }ifelse + }ifelse + }ifelse + }def + /nsetcustomcolor where{ + pop + }{ + /nsetcustomcolor + { + /_nCustomColorSD xp + _nCustomColorSD begin + 4 copy + /black xd + /yellow xd + /magenta xd + /cyan xd + 4 copy + 0 ne /blackInk xd + 0 ne /yellowInk xd + 0 ne /magentaInk xd + 0 ne /cyanInk xd + end + setcmykcolor + }def + }ifelse + /nsetcustomcolorend where{ + pop + }{ + /nsetcustomcolorend + { + /_nCustomColorSD null pt + }def + }ifelse +}def +/initializeSinglePassSeps{ + /_decodeNorm [0 1] pt + /_decodeInvert [1 0] pt + /spotConverted + { + begin + name null eq{ + false + }{ + tintValue null eq tintImage null eq and{ + true + }{ + _inDistiller{ + false + }{ + false + currentpagedevice/SeparationColorNames get{name eq or}forall + not + }ifelse + }ifelse + }ifelse + end + }def + /dictImage + { + 20 dict dup begin + /Dict xd + /Decode xd + /DataSource xd + /ImageMatrix xd + /BitsPerComponent xd + /Height xd + /Width xd + /ImageType 1 def + Dict + end + /_image load 1 execImage + }def + /bwImage{ + begin + gsave + currentoverprint{ + blackInk{ + [/Separation /Black /DeviceGray{}] setcolorspace + _decodeInvert dictImage + }{ + 5 npop + }ifelse + }{ + /DeviceGray setcolorspace + _decodeNorm dictImage + }ifelse + grestore + end + }def + /ncolorimage where{ + pop + }{ + /ncolorimage{ + begin + renderCMYK{ + cyanInk + magentaInk and + yellowInk and + blackInk and + not + currentoverprint + and{ + pop pop + gsave + cyanInk{ + 8 copy + [/Separation /Cyan /DeviceGray{}] setcolorspace + 3 npop + _decodeNorm dictImage + }if + magentaInk{ + 8 copy + [/Separation /Magenta /DeviceGray{}] setcolorspace + 4 -1 roll + 3 npop + _decodeNorm dictImage + }if + yellowInk{ + 8 copy + [/Separation /Yellow /DeviceGray{}] setcolorspace + 4 -2 roll + 3 npop + _decodeNorm dictImage + }if + blackInk{ + 4 -3 roll + [/Separation /Black /DeviceGray{}] setcolorspace + 3 npop + _decodeNorm dictImage + }{ + 8 npop + }ifelse + grestore + }{ + /_colorimage load 10 execImage + }ifelse + }{ + 6 npop + gsave + spot1 begin + name null ne tintImage null ne and{ + [/Separation name /DeviceGray{}] setcolorspace + 4 copy + tintImage + name /Black eq{ + _decodeNorm + }{ + _decodeInvert + }ifelse + dictImage + }{ + 1 setgray fill + }ifelse + end + spot2 begin + true setoverprint + name null ne tintImage null ne and{ + [/Separation name /DeviceGray{}] setcolorspace + tintImage + name /Black eq{ + _decodeNorm + }{ + _decodeInvert + }ifelse + dictImage + }{ + 4 npop + 1 setgray fill + }ifelse + end + grestore + }ifelse + end + }def + }ifelse + /getRampColorSpace{ + + /_renderCMYK _rampSD begin renderCMYK end pt + + _renderCMYK not{ + _rampSD begin + [/DeviceN + [ + spot1 begin + name null ne tintImage null ne and{ + name + }if + end + spot2 begin + name null ne tintImage null ne and{ + name + }if + end + ] + _inDistiller { + /DeviceCMYK [ + spot1 begin + name null ne tintImage null ne and{ + spot_C spot_M spot_Y spot_K 1 + }{ + 0 0 0 0 0 + }ifelse + end + spot2 begin + name null ne tintImage null ne and{ + spot_C spot_M spot_Y spot_K 2 + }{ + 0 0 0 0 0 + }ifelse + end + 5 1 roll 6 -2 roll add + dup 1 eq { + pop + 8 /index cvx 1 /exch cvx /sub cvx + 9 1 /roll cvx + }{ + 2 eq { + 8 /index cvx 1 /exch cvx /sub cvx + 10 1 /roll cvx + }if + }ifelse + 4 1 /roll cvx 5 -2 /roll cvx + 8 /index cvx /mul cvx /exch cvx 9 /index cvx /mul cvx /add cvx 7 1 /roll cvx + 3 1 /roll cvx 4 -2 /roll cvx + 7 /index cvx /mul cvx /exch cvx 8 /index cvx /mul cvx /add cvx 6 1 /roll cvx + 2 1 /roll cvx 3 -2 /roll cvx + 6 /index cvx /mul cvx /exch cvx 7 /index cvx /mul cvx /add cvx 5 1 /roll cvx + 5 /index cvx /mul cvx /exch cvx 6 /index cvx /mul cvx /add cvx 4 1 /roll cvx + 6 -2 /roll cvx /pop cvx /pop cvx + ] cvx bind + }{ + /DeviceCMYK {} + }ifelse + ] setcolorspace + end + /_nColorSpace currentcolorspace pt + }if + + _nSamples 1 gt{ + /_ndx 0 pt + [blendColor] cvx exec + }if + _renderCMYK{ + /_C0 [currentcolor] pt + /_C0_Space currentcolorspace pt + }{ + /_C0 [ + _nCustomColorSD begin + spot1 begin + name null ne{ + tintValue + }if + end + spot2 begin + name null ne{ + tintValue + }if + end + end + ] pt + /_C0_Space _nColorSpace pt + }ifelse + + _nSamples 1 gt{ + /_ndx _nSamples 1 sub pt + [blendColor] cvx exec + }if + _renderCMYK{ + /_C1 [currentcolor] pt + /_C1_Space currentcolorspace pt + }{ + /_C1 [ + _nCustomColorSD begin + spot1 begin + name null ne{ + tintValue + }if + end + spot2 begin + name null ne{ + tintValue + }if + end + end + ] pt + /_C1_Space _nColorSpace pt + }ifelse + + /_rampColorSpace _C0_Space pt + _spotColor{ + nsetcustomcolorend + }if + }def +}def +/initializeMultiPassSeps{ + /invertXfer{ + [ + { + 1 exch sub + }/exec load systemdict /currenttransfer get exec /exec load + ] cvx systemdict /settransfer get exec + }def + /ccThrough{ + gsave + 1 setCustomColor + currentcmykcolor + grestore + add add add 0 ne + }def + /spotConverted + { + begin + _isCMYKSep not{ + false + }{ + name null eq{ + false + }{ + tintValue null eq tintImage null eq and{ + true + }{ + spot_C spot_M spot_Y spot_K name ccThrough + }ifelse + }ifelse + }ifelse + end + }def + /spotChannel + { + _isCMYKSep{ + pop false + }{ + /_spotDict xp + _spotDict/name get null eq{ + false + }{ + _spotDict/spot_C get + _spotDict/spot_M get + _spotDict/spot_Y get + _spotDict/spot_K get + _spotDict/name get + ccThrough + }ifelse + }ifelse + }def + /getChannelData + { + _isCMYKSep dup{ + pop renderCMYK + }if + { + _blackPlate{ + 4 1 roll 3 npop blackInk + }{ + _yellowPlate{ + 4 2 roll 3 npop yellowInk + }{ + _magentaPlate{ + 4 3 roll 3 npop magentaInk + }{ + 3 npop cyanInk + }ifelse + }ifelse + }ifelse + { + true /nonZeroData + }{ + true /zeroData + }ifelse + }{ + 4 npop + spot1/name get null ne + spot1 spotChannel and{ + spot1/tintImage get dup null ne{ + false /nonZeroData + }{ + pop false /noData + }ifelse + }{ + spot2/name get null ne + spot2 spotChannel and{ + spot2/tintImage get dup null ne{ + false /nonZeroData + }{ + pop false /noData + }ifelse + }{ + false /noData + }ifelse + }ifelse + }ifelse + }def + /renderChannelData + { + /_tmp xp + _tmp /nonZeroData ne currentoverprint and{ + pop + _tmp /zeroData eq{pop}if + 4 npop + }{ + _tmp /nonZeroData eq{ + { + invertXfer + }if + systemdict/image + get 5 execImage + }{ + pop + _tmp /zeroData eq{pop}if + 4 npop + knockOut + }ifelse + }ifelse + }def + /bwImage{ + begin + gsave + dup dup dup + getChannelData + exch pop false exch + renderChannelData + grestore + end + }def + /ncolorimage{ + begin + pop pop + gsave + spot2/name get null ne spot2 spotChannel and{ + true setoverprint + }if + getChannelData + renderChannelData + grestore + end + }def + /getRampColorSpace{ + + /_renderCMYK _rampSD begin renderCMYK end pt + + _nSamples 1 gt{ + /_ndx 0 pt + [blendColor] cvx exec + }if + + _renderCMYK{ + /_C0 [currentcolor] pt + /_C0_Space currentcolorspace pt + }{ + /_C0 [ + _nCustomColorSD begin + 0 + spot1 begin + name null ne + tintValue null ne and + spot1 spotChannel and{ + pop tintValue + }if + end + spot2 begin + name null ne + tintValue null ne and + spot2 spotChannel and{ + pop tintValue + }if + end + 1 exch sub + end + ] pt + /_C0_Space /DeviceGray pt + }ifelse + + _nSamples 1 gt{ + /_ndx _nSamples 1 sub pt + [blendColor] cvx exec + }if + + _renderCMYK{ + /_C1 [currentcolor] pt + /_C1_Space currentcolorspace pt + }{ + /_C1 [ + _nCustomColorSD begin + 0 + spot1 begin + name null ne + tintValue null ne and + spot1 spotChannel and{ + pop tintValue + }if + end + spot2 begin + name null ne + tintValue null ne and + spot2 spotChannel and{ + pop tintValue + }if + end + 1 exch sub + end + ] pt + /_C1_Space /DeviceGray pt + }ifelse + + /_rampColorSpace _C0_Space pt + _spotColor{ + nsetcustomcolorend + }if + }def +}def +end +end +defaultpacking setpacking +%%EndResource +%%BeginResource: procset AGM_Gradient 1.0 0 +%%Title: (AGM Gradient Procset) +%%Version: 1.0 0 +%%CreationDate: (4/26/96) () +%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) +userdict /defaultpacking currentpacking put true setpacking +userdict /AGM_Gradient 20 dict dup begin put +/AGM_Gradient_private 201 dict def +/initialize +{ + AGM_Gradient begin + AGM_Gradient_private begin + initializeVars + + /bd systemdict/mark get def + /ed + _level2PS + { + (>>) + }{ + (counttomark 2 idiv dup dict begin {def} repeat pop currentdict end) + } ifelse + cvx def + + _level2PS{ + initializeLev2 + }{ + initializeLev1 + }ifelse + + queryDevice + + initializeRectFill + initializeShading + initializeOps + _producingSeps{ + AGM_Gradient_Sep/initialize get exec + }{ + initializeComposite + }ifelse + _illustrator{ + /f{}def + /F{}def + /s{}def + /S{}def + /b{}def + /B{}def + }if + /image where{ + /image get /_image xd + }if + /colorimage where{ + /colorimage get /_colorimage xd + }if + AGM_Gradient_private + { + dup xcheck 1 index type /arraytype eq and + { + bind + }if + pop pop + }forall + AGM_Gradient + { + dup xcheck 1 index type /arraytype eq and + { + bind + }if + pop pop + }forall + end + + currentdict readonly pop + end +}def +/initializeAI +{ + pop pop + AGM_Gradient/AGM_Gradient_private get /_illustrator true put + AGM_Gradient/initialize get exec + AGM_Gradient begin +}def +/unload{ + systemdict/languagelevel known{ + systemdict/languagelevel get 2 ge{ + userdict/AGM_Gradient_Sep 2 copy known{ + undef + }{ + pop pop + }ifelse + userdict/AGM_Gradient 2 copy known{ + undef + }{ + pop pop + }ifelse + }if + }if +}def +/terminate{ + currentdict AGM_Gradient eq{ + end + }if +}def + +AGM_Gradient_private begin +/initializeVars{ + /_d255 256 array def + 0 1 255{ + _d255 exch dup 255 div put + }bind for + /_d255- 256 array def + 0 1 255{ + _d255- exch 1 _d255 2 index get sub put + }bind for + /_sSave nd + /_dUserSpace matrix defaultmatrix def + /_bUMatrix matrix def + /_imageMatrix matrix def + /_saveMatrix matrix def + /_xm matrix def + /_ccAry1 5 array def + /_bbox 4 array pt + /_level2PS + systemdict/languagelevel known dup{ + pop systemdict/languagelevel get 2 ge + }if + def + /_level3PS + _level2PS systemdict/shfill known and + def + currentdict /_illustrator known not{ + /_illustrator false def + }if + +}def +/initializeOps +{ + AGM_Gradient begin + currentdict/Bc known not{ + /Bc{ + + _renderFlag 2 eq _enabledSmoothShade or{ + 6 npop + }{ + pushBSpace + _rampIndex 0 eq{ + pop pop + setCStop + }if + linealFill + popBSpace + }ifelse + + }def + }if + + currentdict/Bg known not{ + /Bg{ + 10 npop + /_gradName xp + /_renderFlag xp + /_enabledSmoothShade false pt + + _renderFlag 2 ne{ + + _illustrator{ + _of setoverprint + }if + + /_enabledSmoothShade + _level3PS{ + _usingSmoothShade + _producingSeps not + currentoverprint not or and + _noImage not and + }{ + false + }ifelse + pt + + _illustrator _eo and _renderFlag 3 eq or{ + eoclip + }{ + clip + }ifelse + + _gradNames _gradName 2 copy known{ + get + mark exch aload pop + /_gradType xp + 1 sub dup /_rampIndex xp + /_maxRampIndex xp + mark exch aload pop + 0 0 + }if + pop pop + getRampData + }{ + mark mark + }ifelse + }def + }if + + currentdict/Bm known not{ + /Bm{ + _renderFlag 2 ne{ + _gradType 0 eq{ + linealRamp + }{ + radialGrad + }ifelse + }{ + 6 npop + }ifelse + }def + }if + + currentdict/Bh known not{ + /Bh{ + 2 npop + /_yHi xp + /_xHi xp + /_radHilite _xHi 0 ne _yHi 0 ne or pt + }def + }if + + currentdict/Bn known not{ + /Bn{ + AGM_Gradient_private begin + dict /_gradNames xp + end + }def + }if + + currentdict/Bd known not{ + /Bd{ + AGM_Gradient begin + AGM_Gradient_private begin + /_nColorsBd xp + /_gradType xp + /_gradName xp + }def + }if + + currentdict/BD known not{ + /BD{ + currentdict/_gradNames known not{ + /_gradNames 20 dict def + }if + ] _nColorsBd _gradType + ] _gradName exch /_gradNames xput + end + end + }def + }if + + currentdict/Bb known not{ + /Bb{ + + AGM_Gradient/AGM_Gradient_private get /_illustrator get not{ + AGM_Gradient begin + }if + AGM_Gradient_private begin + _producingSeps{ + AGM_Gradient_Sep/AGM_Gradient_Sep_private get begin + }if + mySave + }def + }if + + currentdict/BB known not{ + /BB{ + + /_tmp xp + cleartomark cleartomark + + _tmp dup + _renderFlag + + myRestore + + _producingSeps{ + end + }if + + _illustrator dup + end + not { + end + }if + + { + 2 ne exch 0 gt and{ + 2 eq{ + s + }{ + S + }ifelse + }{ + pop newpath + }ifelse + }{ + pop newpath + }ifelse + + + }def + }if + + currentdict/Xm known not{ + /Xm{ + _xm astore pop + }def + }if + + end +}def +/queryDevice{ + /_inDistiller + systemdict /currentdistillerparams known + def + /_inRipSep + _level2PS{ + currentpagedevice/Separations 2 copy known{ + get + }{ + pop pop false + }ifelse + }{ + false + }ifelse + _inDistiller or + def + /_noImage /lv1Fix where{ + pop lv1Fix + }{ + false + }ifelse + def + /_useShells where{ + /_useShells get /_usingShells xp + }{ + /_usingShells false def + }ifelse + + /_useSmoothShade where{ + pop + }{ + /_useSmoothShade false def + }ifelse + /_forceToCMYK where{ + pop + }{ + /_forceToCMYK false def + }ifelse + /_cyanPlate 1 0 0 0 testCMYKColorThrough def + /_magentaPlate 0 1 0 0 testCMYKColorThrough def + /_yellowPlate 0 0 1 0 testCMYKColorThrough def + /_blackPlate 0 0 0 1 testCMYKColorThrough def + /_compositeJob + _cyanPlate _magentaPlate and _yellowPlate and _blackPlate and + def + /_isCMYKSep + _cyanPlate _magentaPlate or _yellowPlate or _blackPlate or + def + /_compositeSpotDevice where{ + pop + }{ + /_compositeSpotDevice _compositeJob not _inRipSep or{ + 1 + }{ + 0 + }ifelse + def + }ifelse + /_producingSeps _compositeSpotDevice 0 ne def + /_deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt def + /_dpiThreshold where{ + pop + }{ + /_dpiThreshold 600 def + }ifelse + /_screenFreqThreshold where{ + pop + }{ + /_screenFreqThreshold 150 def + }ifelse + /_contoneDevice where{ + pop + }{ + /_contoneDevice false def + }ifelse + /_subSampleOK + _deviceDPI _dpiThreshold le + currentScreenFreq _screenFreqThreshold le and + _contoneDevice not and + def +}def +/initializeRectFill{ + /rectfill where dup{ + exch pop not _producingSeps or + }{ + not + }ifelse + { + /rectfill{ + gsave + newpath + 4 2 roll moveto + 1 index 0 rlineto + 0 1 index rlineto + 1 index neg 0 rlineto + pop pop + closepath + fill + grestore + }def + }if +}def +/initializeLev1{ + /currentScreenFreq{ + currentscreen pop pop + }def + /_byte 1 string def + /colorimage where{ + pop + }{ + /colorimage{ + pop pop + /_blackTmp xp + /_yellowTmp xp + /_magentaTmp xp + /_cyanTmp xp + /_cnt 0 pt + [ + _byte dup 0 + _cyanTmp + /_cnt cvx /get cvx _d255 /exch cvx /get cvx .3 /mul cvx + _magentaTmp + /_cnt cvx /get cvx _d255 /exch cvx /get cvx .59 /mul cvx + _yellowTmp + /_cnt cvx /get cvx _d255 /exch cvx /get cvx .11 /mul cvx + _blackTmp + /_cnt cvx /get cvx _d255 /exch cvx /get cvx + /add cvx /add cvx /add cvx 1 /exch cvx /sub cvx + /dup cvx 0 /lt cvx{ + pop 0 + }/if cvx + /dup cvx 1 /gt cvx{ + pop 1 + }/if cvx + 255 /mul cvx /cvi cvx + 256 /mod cvx + /dup cvx 0 /lt cvx{ + pop 0 + }/if cvx + /put cvx + /_cnt dup cvx 1 /add cvx /pt cvx + ] cvx + bind + /_image load 5 execImage + }def + }ifelse +}def +/initializeLev2{ + /level2ScreenFreq{ + begin + 60 + HalftoneType 1 eq{ + pop Frequency + }if + HalftoneType 2 eq{ + pop GrayFrequency + }if + HalftoneType 5 eq{ + pop Default level2ScreenFreq + }if + end + }def + /currentScreenFreq{ + currenthalftone level2ScreenFreq + }def +}def +/initializeShading{ + _useSmoothShade _level3PS and{ + /_usingSmoothShade true pt + initializeLev3_Ops + }{ + /_usingSmoothShade false pt + }ifelse +}def +/initializeLev3_Ops +{ + /initShFill{ + /_index _gradType 0 eq {0}{_maxRampIndex 1 sub} ifelse pt + /_rampFuncsArray _maxRampIndex array pt + /_boundsArray _maxRampIndex 1 sub array pt + /_encodeArray _maxRampIndex 2 mul array pt + /_beginCoord _rampPoint pt + /_colorSpace null pt + /_firstFill _rampIndex _maxRampIndex eq pt + /_lastFill false pt + }def + /linealShFill{ + popBSpace + _xm aload pop pushBSpace + + /_size _index 1 add pt + _size _maxRampIndex lt { + /_rampFuncsArray _rampFuncsArray 0 _size getinterval pt + /_boundsArray _boundsArray 0 _size 1 sub getinterval pt + /_encodeArray _encodeArray 0 _size 2 mul getinterval pt + }if + + bd + /ShadingType 2 + /ColorSpace _colorSpace + _rgbInCMYK{ + /Function [ + _cData sampFunc + _mData sampFunc + _yData sampFunc + _kData sampFunc + ] + }{ + /Function + bd + /FunctionType 3 + /Domain [0 1] + /Functions _rampFuncsArray + /Bounds _boundsArray + /Encode _encodeArray + ed + }ifelse + /Extend [_firstFill _lastFill] + /Domain [0 1] + /Coords [_beginCoord 0 _endCoord 0] + ed + shfill + }def + + /radialShFill{ + /_size _maxRampIndex _index sub pt + _size _maxRampIndex lt { + /_rampFuncsArray _rampFuncsArray _index _size getinterval pt + /_boundsArray _boundsArray _index _size 1 sub getinterval pt + /_encodeArray _encodeArray _index 2 mul _size 2 mul getinterval pt + }if + + /_rampLen _beginCoord _endCoord sub pt + bd + /ShadingType 3 + /ColorSpace _colorSpace + _rgbInCMYK{ + /Function [ + _cData sampFunc + _mData sampFunc + _yData sampFunc + _kData sampFunc + ] + }{ + /Function + bd + /FunctionType 3 + /Domain [0 1] + /Functions _rampFuncsArray + /Bounds _boundsArray + /Encode _encodeArray + ed + }ifelse + /Extend [_lastFill _firstFill] + /Domain [0 1] + /Coords [_xHi _rampLen mul _yHi _rampLen mul _endCoord 0 0 _beginCoord] + ed + shfill + + _radHilite{ + _xHi _rampLen mul _yHi _rampLen mul translate + }if + }def + + % + /sampFunc{ + /_tmp exch pt + bd + _tmp length 1 eq { + _tmp 0 get + /_tmp 2 string pt + dup _tmp 0 3 -1 roll put + _tmp 1 3 -1 roll put + }if + /FunctionType 0 + /Order 1 + /Size [_tmp length] + /Domain [0 1] + /BitsPerSample 8 + /DataSource _tmp + /Range [0 1] + ed + }def + + /fillRamp{ + + + /_invert _midPoint 0.5 lt pt + _rampIndex _maxRampIndex eq { + initShFill + }if + + getRampColorSpace + + _colorSpace null eq{ + /_colorSpace _rampColorSpace pt + }{ + _colorSpace _rampColorSpace ne _rgbInCMYK or{ + /_index _index 1 + _gradType 0 eq{ + sub pt + linealShFill + }{ + add pt + radialShFill + }ifelse + initShFill + /_colorSpace _rampColorSpace pt + } if + }ifelse + /_endCoord _endPoint pt + /_rgbInCMYK false pt + _producingSeps _forceToCMYK or _rgbRamp and { + _spotColor{ + _renderCMYK + }{ + _isCMYKSep + }ifelse + }{ + false + }ifelse + { + _compositeJob{ + /_rgbInCMYK true pt + _cyanData _magentaData _yellowData _blackData _nSamples 4 expandColor + dup length string copy /_kData exch pt + dup length string copy /_yData exch pt + dup length string copy /_mData exch pt + dup length string copy /_cData exch pt + }{ + _rampFuncsArray _index + _cyanPlate{_cyanData}if + _magentaPlate{_magentaData}if + _yellowPlate{_yellowData}if + _blackPlate{_blackData}if + _nSamples expandOne + sampFunc + dup begin /Decode [1 0] def end + put + /_invert false pt + }ifelse + }{ + _rampFuncsArray _index + bd + /FunctionType 2 + /Domain [0 1] + /N 0.5 log _invert{1 _midPoint sub}{_midPoint}ifelse log div + _gradType 0 eq{ + _invert{/C1}{/C0}ifelse _C0 + _invert{/C0}{/C1}ifelse _C1 + }{ + _invert{/C0}{/C1}ifelse _C1 + _invert{/C1}{/C0}ifelse _C0 + }ifelse + ed + put + }ifelse + + _rampIndex 1 ne{ + _boundsArray _index _gradType 1 eq{1 sub}if _endCoord put + } if + + 0 1 _invert {exch}if + _encodeArray _index 2 mul 1 add 3 -1 roll put + _encodeArray _index 2 mul 3 -1 roll put + _rampIndex 1 eq { + /_lastFill true pt + _gradType 0 eq{ + linealShFill + }{ + radialShFill + }ifelse + }if + /_index _index 1 + _gradType 0 eq{ + add pt + }{ + sub pt + }ifelse + }def +}def +/initializeComposite{ + /bwImage{ + pop /_image load 5 execImage + }def + /rampImage{ + _enabledSmoothShade{ + fillRamp + }{ + _color{ + _nSamples setImageParms + + + _rgbRamp _forceToCMYK not and{ + _redData _greenData _blueData _nSamples 3 expandColor + true 3 null ncolorimage + }{ + _cyanData _magentaData _yellowData _blackData _nSamples 4 expandColor + true 4 null ncolorimage + }ifelse + }{ + _nSamples setImageParms _blackData null bwImage + }ifelse + }ifelse + }def + /setCStop{ + /_colorStyle exch pt + _colorStyle 0 eq{ + 1 exch sub + 0 0 0 + 4 -1 roll + }if + + _colorStyle 2 eq{ + _forceToCMYK{ + 3 npop setcmykcolor + }{ + setrgbcolor 4 npop + }ifelse + }if + + _colorStyle 3 eq{ + 1 exch sub /_tmp xp + pop + 4{ + _tmp mul 4 1 roll + }repeat + }if + + _colorStyle 4 eq{ + _forceToCMYK{ + 6 npop setcmykcolor + }{ + 3 -1 roll pop pop + 1 exch sub /_tmp xp + 3{ + 1 exch sub _tmp mul 1 exch sub 3 1 roll + }repeat + setrgbcolor + 4 npop + }ifelse + }if + _colorStyle 2 ne _colorStyle 4 ne and{ + null nsetcustomcolor + }if + }def + /nsetcustomcolor + { + pop setcmykcolor + }def + /nsetcustomcolorend + { + }def + /ncolorimage{ + pop + /_colorimage load 10 execImage + }def + _noImage not _level2PS not and{ + /linealFill{ + 8 setImageParms + _color{ + currentcmykcolor + 4{ + makeByte8 4 1 roll + }repeat + true 4 null ncolorimage + }{ + currentgray makeByte8 null bwImage + }ifelse + }def + }if + /getRampColorSpace{ + _nSamples 1 gt{ + /_ndx 0 pt + [blendColor] cvx exec + }if + /_C0 [currentcolor] pt + /_C0_Space currentcolorspace pt + + _nSamples 1 gt{ + /_ndx _nSamples 1 sub pt + [blendColor] cvx exec + }if + /_C1 [currentcolor] pt + /_C1_Space currentcolorspace pt + + /_rampColorSpace _C0_Space pt + + _spotColor{ + nsetcustomcolorend + }if + }def +}def +/npop{ + {pop}repeat +}def +/xd{ + exch def +}def +/nd{ + null def +}def +/pt{ + AGM_Gradient_private 3 1 roll put +}def +/xp{ + exch pt +}def +/xput{ + dup load dup length exch maxlength eq{ + dup dup load dup + length 2 mul dict copy def + }if + load begin + def + end +}def +/mySave{ + save /_sSave xp +}def +/myRestore{ + _sSave type /savetype eq{ + _sSave restore + }if +}def +/gMark{ + counttomark 2 add -1 roll +}def +/execImage{ + /_tmp xp + { + exec + }stopped{ + $error /errorname get /undefinedresult ne{ + stop + }{ + _tmp npop + }ifelse + }if +}def +/pushBSpace{ + newpath gsave + _bUMatrix astore concat +}def +/popBSpace{ + grestore +}def +/makeByte8{ + /_tmp 0 pt + 255 mul cvi + 8 string 8{ + dup _tmp 3 index put + /_tmp _tmp 1 add pt + }repeat + exch pop +}def +/setImageParms{ + 1 8 2 index 0 0 1 0 0 _imageMatrix astore +}def +/linealFill{ + 0 0 1 1 rectfill +}def +/testCMYKColorThrough{ + gsave + setcmykcolor currentcmykcolor + grestore + add add add 0 ne +}def +/expandOne { + /_tmp xp + dup type /stringtype ne{ + _tmp string + exch + dup 0 ne{ + 255 mul cvi + 0 1 _tmp 1 sub{ + 3 copy + exch put pop + }for + }if + pop + }if +}def +/expandColor{ + /_channels xp + /_len xp + _channels{ + _len expandOne _channels 1 roll + }repeat +}def +/blendColor{ + + _color{ + _rgbRamp _producingSeps not and _forceToCMYK not and{ + _redData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + _greenData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + _blueData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + /setrgbcolor cvx + }{ + _cyanData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + _magentaData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + _yellowData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + _blackData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + + _spotColor{ + _rampSD begin + /_rampSD cvx /begin cvx + + spot1 begin + tintImage dup type /stringtype eq{ + /_ndx cvx /get cvx _d255- /exch cvx /get cvx + }{ + dup null ne{ + name type /nametype ne{ + 1 exch sub + }if + }if + }ifelse + end + /spot1 cvx /tintValue 3 -1 /roll cvx /put cvx + + spot2 begin + tintImage dup type /stringtype eq{ + /_ndx cvx /get cvx _d255- /exch cvx /get cvx + }{ + dup null ne{ + name type /nametype ne{ + 1 exch sub + }if + }if + }ifelse + end + /spot2 cvx /tintValue 3 -1 /roll cvx /put cvx + /end cvx + end + /_rampSD cvx + /nsetcustomcolor cvx + }{ + /setcmykcolor cvx + }ifelse + }ifelse + }{ + _blackData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + + _enabledSmoothShade{ + 1 /exch cvx /sub cvx 0 0 0 4 -1 /roll cvx /setcmykcolor cvx + }{ + /setgray cvx + }ifelse + }ifelse +}def +/useRectImage{ + _subSampleOK _enabledSmoothShade not and{ + { + mark + 0 1 dtransform atan cvi 90 mod 0 eq + 1 0 dtransform atan cvi 90 mod 0 eq + } stopped + { + cleartomark + false + } + { + and exch pop + } ifelse + }{ + false + }ifelse +}def +/linealImage{ + _noImage{ + rectImage + }{ + _producingSeps{ + AGM_Gradient_Sep/AGM_Gradient_Sep_private get + /rampImage get exec + }{ + useRectImage{ + rectImage + }{ + rampImage + }ifelse + }ifelse + }ifelse +}def +/linealRamp{ + pushBSpace + _ramp{ + linealImage + }{ + linealFill + }ifelse + popBSpace + /_rampIndex _rampIndex 1 sub pt + _rampIndex 0 gt{ + getRampData + }if +}def +/radialGrad{ + /_usingShells currentoverprint _producingSeps and _usingShells or pt + /_firstShell true pt + _enabledSmoothShade not{ + currentoverprint _producingSeps and{ + + newpath + clippath pathbbox + 1 add 4 1 roll + 1 add 4 1 roll + 1 sub 4 1 roll + 1 sub 4 1 roll + _bbox astore pop + + newpath + _bbox 0 get _bbox 1 get moveto + _bbox 2 get _bbox 1 get lineto + _bbox 2 get _bbox 3 get lineto + _bbox 0 get _bbox 3 get lineto + closepath + 6 copy + gsave _bUMatrix astore concat + 1 0 moveto 0 0 1 0 360 arc closepath + eoclip fill + popBSpace + }{ + fill + }ifelse + }if + pushBSpace + + _radHilite{ + _xHi _yHi _bUMatrix idtransform /_yHi xp /_xHi xp + _rampPoint 1 lt{ + 1 _rampPoint sub dup _xHi mul exch _yHi mul translate + }if + }if + _rampIndex{ + radialRamp + /_rampIndex _rampIndex 1 sub pt + _rampIndex 0 gt{ + getRampData + }if + }repeat + + popBSpace + +}def +/getNSamples{ + 0 exch + { + dup type /stringtype eq{ + length exch pop exit + }if + pop + }forall + dup 0 eq{ + pop 1 + }if +}def +/getRampData{ + /_rampType gMark pt + /_color _rampType 0 gt pt + /_ccRGB _rampType 5 eq _rampType 6 eq or pt + /_rgbRamp _rampType 4 eq _ccRGB or pt + /_ccProcess _rampType 2 eq _rampType 3 eq or pt + _producingSeps{ + _rampSD initSpotDict + /_spotColor _ccProcess _ccRGB or pt + }{ + /_spotColor false pt + }ifelse + /_ramp true pt + 100 div /_rampPoint xp + 100 div /_midPoint xp + + dup /_colorStyle xp + _colorStyle 0 eq{ + 2 + }{ + _colorStyle 1 eq{ + 5 + }{ + _colorStyle 2 eq{ + 8 + }{ + _colorStyle 3 eq{ + _producingSeps{ + _rampSD /spot1 get begin + /name 3 index def + /spot_K 4 index def + /spot_Y 5 index def + /spot_M 6 index def + /spot_C 7 index def + end + }if + 7 + }{ + _producingSeps{ + _rampSD/spot1 get begin + /name 4 index def + /spot_K 8 index def + /spot_Y 9 index def + /spot_M 10 index def + /spot_C 11 index def + end + }if + 11 + } ifelse + }ifelse + }ifelse + }ifelse + /_tmp xp + _tmp index 100 div /_endPoint xp + + _gradType 1 eq{ + _tmp 1 add index 100 div /_midPoint xp + }if + + _producingSeps{ + _tmp 2 add index /_nextColorStyle xp + _nextColorStyle 3 eq{ + /_tmp _tmp 4 add pt + _tmp index dup + _rampSD/spot1 get /name get ne{ + _rampSD /spot2 get begin + /name xd + /spot_K _tmp 2 add index def + /spot_Y _tmp 3 add index def + /spot_M _tmp 4 add index def + /spot_C _tmp 5 add index def + end + }{ + pop + }ifelse + }if + _nextColorStyle 4 eq{ + /_tmp _tmp 5 add pt + _tmp index dup + _rampSD/spot1 get /name get ne{ + _rampSD /spot2 get begin + /name xd + /spot_K _tmp 5 add index def + /spot_Y _tmp 6 add index def + /spot_M _tmp 7 add index def + /spot_C _tmp 8 add index def + end + }{ + pop + }ifelse + }if + }if + _rampType 3 eq _rampType 6 eq or{ + /_tint2Data gMark pt + }if + _ccProcess _ccRGB or{ + /_tint1Data gMark pt + }if + _rgbRamp{ + /_blueData gMark pt + /_greenData gMark pt + /_redData gMark pt + }if + + _producingSeps{ + _ccProcess _ccRGB or{ + _rampType 3 eq _rampType 6 eq or{ + _rampSD /spot2 get begin + /tintImage _gradType 0 eq{ + _tint2Data + }{ + _tint1Data + }ifelse + def + name null eq{ + /name /Black def + }if + end + }if + _rampSD /spot1 get begin + /tintImage _gradType 0 eq _rampType 2 eq or _rampType 5 eq or{ + _tint1Data + }{ + _tint2Data + }ifelse + def + _rampType 2 eq _rampType 5 eq or{ + name null eq{ + /name _rampSD/spot2 get /name get def + /spot_C _rampSD/spot2 get /spot_C get def + /spot_M _rampSD/spot2 get /spot_M get def + /spot_Y _rampSD/spot2 get /spot_Y get def + /spot_K _rampSD/spot2 get /spot_K get def + _rampSD/spot2 get /name null put + }if + }{ + name null eq{ + /name /Black def + }if + }ifelse + end + }if + }if + /_blackData gMark pt + _rampType 0 gt{ + counttomark 4 add -3 roll + /_yellowData xp + /_magentaData xp + /_cyanData xp + }if + _ramp{ + /_nSamples + [ + _rampType 0 eq {_blackData}if + _rampType 1 eq {_cyanData _magentaData _yellowData _blackData}if + _rampType 2 eq {_cyanData _magentaData _yellowData _blackData _tint1Data}if + _rampType 3 eq {_cyanData _magentaData _yellowData _blackData _tint1Data _tint2Data}if + _rampType 4 eq {_cyanData _magentaData _yellowData _blackData _redData _greenData _blueData}if + _rampType 5 eq {_cyanData _magentaData _yellowData _blackData _redData _greenData _blueData _tint1Data}if + _rampType 6 eq {_cyanData _magentaData _yellowData _blackData _redData _greenData _blueData _tint1Data _tint2Data}if + ] getNSamples pt + _enabledSmoothShade not {/_ramp _nSamples 1 gt pt} if + } if + + setCStop +}def +/rectImage{ + gsave + /_sInc 1 pt + /_bInc 1 _nSamples div pt + /_nSubSamples _nSamples pt + /_optimize false pt + + _subSampleOK{ + /_uRampLen 1 0 dtransform _dUserSpace idtransform dup mul exch dup mul add sqrt pt + /_pChange _uRampLen 0 eq{0}{_nSamples _uRampLen div}ifelse pt + + _pChange .5 gt dup /_optimize xp{ + /_nSubSamples _uRampLen 2 div round cvi dup 1 le{pop 2}if pt + /_bInc 1 _nSubSamples div pt + /_sInc _nSamples 1 sub _nSubSamples 1 sub div pt + }if + }if + 0 + _nSubSamples + [ + /dup cvx + _optimize { + /round cvx /cvi cvx + } if + /_ndx /exch cvx /pt cvx + blendColor + 0 0 _bInc 1 /rectfill cvx + _bInc 0 /translate cvx + _sInc /add cvx + ] cvx + bind + repeat + pop + _spotColor{ + nsetcustomcolorend + }if + grestore +}def +/radialInit{ + /_nRadSamples _nSamples dup 0 eq{pop 1}if pt + /_sInc -1 pt + /_rampLen _rampPoint _endPoint sub pt + /_bInc _rampLen _nSamples div neg pt + /_optimize false pt + _subSampleOK{ + /_uRampLen + _rampLen 0 dtransform _dUserSpace idtransform dup mul exch dup mul add sqrt + 0 _rampLen dtransform _dUserSpace idtransform dup mul exch dup mul add sqrt + 2 copy lt{ + exch + }if pop + pt + /_pChange + _uRampLen 0 eq{ + 0 + }{ + _nSamples _uRampLen div + }ifelse + pt + _pChange .5 gt dup /_optimize xp{ + /_nRadSamples _uRampLen 2 div round cvi dup 1 le{pop 2}if pt + /_bInc _rampLen _nRadSamples div neg pt + /_sInc _nSamples 1 sub _nRadSamples 1 sub div neg pt + }if + }if + _radHilite{ + /_xBCInc _xHi _rampLen mul _nRadSamples div pt + /_yBCInc _yHi _rampLen mul _nRadSamples div pt + }if +}def +/radialRamp{ + _enabledSmoothShade{ + fillRamp + }{ + /_saveMatrix _saveMatrix currentmatrix def + + radialInit + + % + % + true + _producingSeps _rgbRamp not and{ + _nSamples 1 gt{ + pop + /_ndx 0 pt + [blendColor] cvx exec + currentInkN + /_ndx _nSamples 1 sub pt + [blendColor] cvx exec + currentInkN + or + }if + }if + { + _rampPoint + + _nSamples 1 sub + + _nRadSamples + [ + /dup cvx + + _optimize{ + /round cvx /cvi cvx + }if + + /_ndx /exch cvx /pt cvx + + _usingShells{ + /_firstShell cvx{ + /_firstShell false pt + }{ + 0 0 3 index 360 0 arcn fill + }/ifelse cvx + }if + + blendColor + + _usingShells{ + 0 0 3 /index cvx 0 360 /arc cvx + }{ + 0 0 3 /index cvx 0 360 /arc cvx /fill cvx + }ifelse + + /exch cvx _bInc /add cvx /exch cvx + + _sInc /add cvx + + _radHilite{ + _xBCInc _yBCInc /translate cvx + }if + ] cvx bind + repeat + + pop pop + }{ + _usingShells{ + 0 0 _rampPoint 360 0 arcn fill + }if + }ifelse + + _saveMatrix setmatrix + + _radHilite{ + _xHi _rampLen mul _yHi _rampLen mul translate + }if + + _usingShells _rampIndex 1 eq and{ + fill + }if + + _spotColor{ + nsetcustomcolorend + }if + }ifelse +}def +end +end +defaultpacking setpacking +%%EndResource +%%BeginProcSet: Adobe_ColorImage_AI6 1.3 0 +userdict /Adobe_ColorImage_AI6 known not +{ + userdict /Adobe_ColorImage_AI6 53 dict put +} if +userdict /Adobe_ColorImage_AI6 get begin +/initialize { + Adobe_ColorImage_AI6 begin + Adobe_ColorImage_AI6 { + dup type /arraytype eq { + dup xcheck { + bind + } if + } if + pop pop + } forall +} def +/terminate { end } def +currentdict /Adobe_ColorImage_AI6_Vars known not { + /Adobe_ColorImage_AI6_Vars 41 dict def +} if +Adobe_ColorImage_AI6_Vars begin + /plateindex -1 def + /_newproc null def + /_proc1 null def + /_proc2 null def + /sourcearray 4 array def + /_ptispace null def + /_ptiname null def + /_pti0 0 def + /_pti1 0 def + /_ptiproc null def + /_ptiscale 0 def + /_pticomps 0 def + /_ptibuf 0 string def + /_gtigray 0 def + /_cticmyk null def + /_rtirgb null def + /XIEnable true def + /XIType 0 def + /XIEncoding 0 def + /XICompression 0 def + /XIChannelCount 0 def + /XIBitsPerPixel 0 def + /XIImageHeight 0 def + /XIImageWidth 0 def + /XIImageMatrix null def + /XIRowBytes 0 def + /XIFile null def + /XIBuffer1 null def + /XIBuffer2 null def + /XIBuffer3 null def + /XIDataProc null def + /XIColorSpace /DeviceGray def + /XIColorValues 0 def + /XIPlateList false def +end +/ci6colorimage /colorimage where {/colorimage get}{null} ifelse def +/ci6image systemdict /image get def +/ci6curtransfer systemdict /currenttransfer get def +/ci6curoverprint /currentoverprint where {/currentoverprint get}{{_of}} ifelse def +/ci6foureq { + 4 index ne { + pop pop pop false + }{ + 4 index ne { + pop pop false + }{ + 4 index ne { + pop false + }{ + 4 index eq + } ifelse + } ifelse + } ifelse +} def +/ci6testplate { + Adobe_ColorImage_AI6_Vars begin + /plateindex -1 def + /setcmykcolor where { + pop + gsave + 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub + grestore + 1 0 0 0 ci6foureq { + /plateindex 0 def + }{ + 0 1 0 0 ci6foureq { + /plateindex 1 def + }{ + 0 0 1 0 ci6foureq { + /plateindex 2 def + }{ + 0 0 0 1 ci6foureq { + /plateindex 3 def + }{ + 0 0 0 0 ci6foureq { + /plateindex 5 def + } if + } ifelse + } ifelse + } ifelse + } ifelse + pop pop pop pop + } if + plateindex + end +} def +/ci6concatprocs { + /packedarray where { + pop dup type /packedarraytype eq 2 index type + /packedarraytype eq or + }{ + false + } ifelse + { + /_proc2 exch cvlit def + /_proc1 exch cvlit def + _proc1 aload pop + _proc2 aload pop + _proc1 length + _proc2 length add + packedarray cvx + }{ + /_proc2 exch cvlit def + /_proc1 exch cvlit def + /_newproc _proc1 length _proc2 length add array def + _newproc 0 _proc1 putinterval + _newproc _proc1 length _proc2 putinterval + _newproc cvx + } ifelse +} def +/ci6istint { + type /arraytype eq +} def +/ci6isspot { + dup type /arraytype eq { + dup length 1 sub get /Separation eq + }{ + pop false + } ifelse +} def +/ci6spotname { + dup ci6isspot {dup length 2 sub get}{pop ()} ifelse +} def +/ci6altspace { + aload pop pop pop ci6colormake +} def +/ci6numcomps { + dup /DeviceGray eq { + pop 1 + }{ + dup /DeviceRGB eq { + pop 3 + }{ + /DeviceCMYK eq { + 4 + }{ + 1 + } ifelse + } ifelse + } ifelse +} def +/ci6marksplate { + dup /DeviceGray eq { + pop plateindex 3 eq + }{ + dup /DeviceRGB eq { + pop plateindex 5 ne + }{ + dup /DeviceCMYK eq { + pop plateindex 5 ne + }{ + dup ci6isspot { + /findcmykcustomcolor where { + pop + dup length 2 sub get + 0.1 0.1 0.1 0.1 5 -1 roll + findcmykcustomcolor 1 setcustomcolor + systemdict /currentgray get exec + 1 ne + }{ + pop plateindex 5 ne + } ifelse + }{ + pop plateindex 5 ne + } ifelse + } ifelse + } ifelse + } ifelse +} def +/ci6colormake { + dup ci6numcomps + exch 1 index 2 add 1 roll + dup 1 eq {pop}{array astore} ifelse + exch +} def +/ci6colorexpand { + dup ci6spotname exch + dup ci6istint { + ci6altspace + exch 4 1 roll + }{ + 1 3 1 roll + } ifelse +} def +/ci6colortint { + dup /DeviceGray eq { + 3 1 roll 1 exch sub mul 1 exch sub exch + }{ + dup /DeviceRGB eq { + 3 1 roll {1 exch sub 1 index mul 1 exch sub exch} forall pop 3 array astore exch + }{ + dup /DeviceCMYK eq { + 3 1 roll {1 index mul exch} forall pop 4 array astore exch + }{ + 3 1 roll mul exch + } ifelse + } ifelse + } ifelse +} def +/ci6colortocmyk { + dup /DeviceGray eq { + pop 1 exch sub 0 0 0 4 -1 roll 4 array astore + }{ + dup /DeviceRGB eq { + pop aload pop _rgbtocmyk 4 array astore + }{ + dup /DeviceCMYK eq { + pop + }{ + ci6altspace ci6colortint ci6colortocmyk + } ifelse + } ifelse + } ifelse +} def +/ci6makeimagedict { + 7 dict begin + /ImageType 1 def + /Decode exch def + /DataSource exch def + /ImageMatrix exch def + /BitsPerComponent exch def + /Height exch def + /Width exch def + currentdict end +} def +/ci6stringinvert { + 0 1 2 index length 1 sub { + dup 2 index exch get 255 exch sub 2 index 3 1 roll put + } for +} def +/ci6stringknockout { + 0 1 2 index length 1 sub { + 255 2 index 3 1 roll put + } for +} def +/ci6stringapply { + 0 1 4 index length 1 sub { + dup + 4 index exch get + 3 index 3 1 roll + 3 index exec + } for + pop exch pop +} def +/ci6walkrgbstring { + 0 3 index + dup length 1 sub 0 3 3 -1 roll { + 3 getinterval {} forall + 5 index exec + 3 index + } for + + 5 {pop} repeat +} def +/ci6walkcmykstring +{ + 0 3 index + dup length 1 sub 0 4 3 -1 roll { + 4 getinterval {} forall + + 6 index exec + + 3 index + + } for + + 5 { pop } repeat + +} def +/ci6putrgbtograystr +{ + .11 mul exch + + .59 mul add exch + + .3 mul add + + cvi 3 copy put + + pop 1 add +} def +/ci6putcmyktograystr +{ + exch .11 mul add + + exch .59 mul add + + exch .3 mul add + + dup 255 gt { pop 255 } if + + 255 exch sub cvi 3 copy put + + pop 1 add +} def +/ci6rgbtograyproc { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + XIBuffer3 + dup 3 1 roll + + /ci6putrgbtograystr load exch + ci6walkrgbstring + end +} def +/ci6cmyktograyproc { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + XIBuffer3 + dup 3 1 roll + + /ci6putcmyktograystr load exch + ci6walkcmykstring + end +} def +/ci6separatecmykproc { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + + XIBuffer3 + + 0 2 index + + plateindex 4 2 index length 1 sub { + get 255 exch sub + + 3 copy put pop 1 add + + 2 index + } for + pop pop exch pop + end +} def + +/ci6compositeimage { + dup 1 eq { + pop pop image + }{ + /ci6colorimage load null ne { + ci6colorimage + }{ + 3 1 roll pop + sourcearray 0 3 -1 roll put + 3 eq {/ci6rgbtograyproc}{/ci6cmyktograyproc} ifelse load + image + } ifelse + } ifelse +} def +/ci6knockoutimage { + gsave + 0 ci6curtransfer exec 1 ci6curtransfer exec + eq { + 0 ci6curtransfer exec 0.5 lt + }{ + 0 ci6curtransfer exec 1 ci6curtransfer exec gt + } ifelse + {{pop 0}}{{pop 1}} ifelse + systemdict /settransfer get exec + ci6compositeimage + grestore +} def +/ci6drawimage { + ci6testplate -1 eq { + pop ci6compositeimage + }{ + dup type /arraytype eq { + dup length plateindex gt {plateindex get}{pop false} ifelse + }{ + { + true + }{ + dup 1 eq {plateindex 3 eq}{plateindex 3 le} ifelse + } ifelse + } ifelse + { + dup 1 eq { + pop pop ci6image + }{ + dup 3 eq { + ci6compositeimage + }{ + pop pop + sourcearray 0 3 -1 roll put + /ci6separatecmykproc load + ci6image + } ifelse + } ifelse + }{ + ci6curoverprint { + 7 {pop} repeat + }{ + ci6knockoutimage + } ifelse + } ifelse + } ifelse +} def +/ci6proctintimage { + /_ptispace exch store /_ptiname exch store /_pti1 exch store /_pti0 exch store /_ptiproc exch store + /_pticomps _ptispace ci6numcomps store + /_ptiscale _pti1 _pti0 sub store + level2? { + _ptiname length 0 gt version cvr 2012 ge and { + [/Separation _ptiname _ptispace {_ptiproc}] setcolorspace + [_pti0 _pti1] ci6makeimagedict ci6image + }{ + [/Indexed _ptispace 255 {255 div _ptiscale mul _pti0 add _ptiproc}] setcolorspace + [0 255] ci6makeimagedict ci6image + } ifelse + }{ + _pticomps 1 eq { + { + dup + { + 255 div _ptiscale mul _pti0 add _ptiproc 255 mul cvi put + } ci6stringapply + } ci6concatprocs ci6image + }{ + { + dup length _pticomps mul dup _ptibuf length ne {/_ptibuf exch string store}{pop} ifelse + _ptibuf { + exch _pticomps mul exch 255 div _ptiscale mul _pti0 add _ptiproc + _pticomps 2 add -2 roll + _pticomps 1 sub -1 0 { + 1 index add 2 index exch + 5 -1 roll + 255 mul cvi put + } for + pop pop + } ci6stringapply + } ci6concatprocs false _pticomps + /ci6colorimage load null eq {7 {pop} repeat}{ci6colorimage} ifelse + } ifelse + } ifelse +} def +/ci6graytintimage { + /_gtigray 5 -1 roll store + {1 _gtigray sub mul 1 exch sub} 4 1 roll + /DeviceGray ci6proctintimage +} def +/ci6cmyktintimage { + /_cticmyk 5 -1 roll store + {_cticmyk {1 index mul exch} forall pop} 4 1 roll + /DeviceCMYK ci6proctintimage +} def +/ci6rgbtintimage { + /_rtirgb 5 -1 roll store + {_rtirgb {1 exch sub 1 index mul 1 exch sub exch} forall pop} 4 1 roll + /DeviceRGB ci6proctintimage +} def +/ci6tintimage { + ci6testplate -1 eq { + ci6colorexpand + 3 -1 roll 5 -1 roll {0}{0 exch} ifelse 4 2 roll + dup /DeviceGray eq { + pop ci6graytintimage + }{ + dup /DeviceRGB eq { + pop ci6rgbtintimage + }{ + pop ci6cmyktintimage + } ifelse + } ifelse + }{ + dup ci6marksplate { + plateindex 5 lt { + ci6colortocmyk plateindex get + dup 0 eq ci6curoverprint and { + 7 {pop} repeat + }{ + 1 exch sub + exch {1 0}{0 1} ifelse () ci6graytintimage + } ifelse + }{ + pop exch {0}{0 exch} ifelse 0 3 1 roll () ci6graytintimage + } ifelse + }{ + ci6curoverprint { + 8 {pop} repeat + }{ + pop pop pop + {pop 1} 0 1 () /DeviceGray ci6proctintimage + } ifelse + } ifelse + } ifelse +} def +/XINullImage { +} def +/XIImageMask { + XIImageWidth XIImageHeight false + [XIImageWidth 0 0 XIImageHeight neg 0 0] + /XIDataProc load + imagemask +} def +/XIImageTint { + XIImageWidth XIImageHeight XIBitsPerPixel + [XIImageWidth 0 0 XIImageHeight neg 0 0] + /XIDataProc load + XIType 3 eq XIColorValues XIColorSpace ci6tintimage +} def +/XIImage { + XIImageWidth XIImageHeight XIBitsPerPixel + [XIImageWidth 0 0 XIImageHeight neg 0 0] + /XIDataProc load + false XIChannelCount XIPlateList ci6drawimage +} def +/XG { + pop pop +} def +/XF { + 13 {pop} repeat +} def +/Xh { + Adobe_ColorImage_AI6_Vars begin + gsave + /XIType exch def + /XIImageHeight exch def + /XIImageWidth exch def + /XIImageMatrix exch def + 0 0 moveto + XIImageMatrix concat + XIImageWidth XIImageHeight scale + + /_lp /null ddef + _fc + /_lp /imagemask ddef + end +} def +/XH { + Adobe_ColorImage_AI6_Vars begin + grestore + end +} def +/XIEnable { + Adobe_ColorImage_AI6_Vars /XIEnable 3 -1 roll put +} def +/XC { + Adobe_ColorImage_AI6_Vars begin + ci6colormake + /XIColorSpace exch def + /XIColorValues exch def + end +} def +/XIPlates { + Adobe_ColorImage_AI6_Vars begin + /XIPlateList exch def + end +} def +/XI +{ + Adobe_ColorImage_AI6_Vars begin + gsave + /XIType exch def + cvi dup + 256 idiv /XICompression exch store + 256 mod /XIEncoding exch store + pop pop + /XIChannelCount exch def + /XIBitsPerPixel exch def + /XIImageHeight exch def + /XIImageWidth exch def + pop pop pop pop + /XIImageMatrix exch def + XIBitsPerPixel 1 eq { + XIImageWidth 8 div ceiling cvi + }{ + XIImageWidth XIChannelCount mul + } ifelse + /XIRowBytes exch def + XIEnable { + /XIBuffer3 XIImageWidth string def + XICompression 0 eq { + /XIBuffer1 XIRowBytes string def + XIEncoding 0 eq { + {currentfile XIBuffer1 readhexstring pop} + }{ + {currentfile XIBuffer1 readstring pop} + } ifelse + }{ + /XIBuffer1 256 string def + /XIBuffer2 XIRowBytes string def + {currentfile XIBuffer1 readline pop (%) anchorsearch {pop} if} + /ASCII85Decode filter /DCTDecode filter + /XIFile exch def + {XIFile XIBuffer2 readstring pop} + } ifelse + /XIDataProc exch def + + XIType 1 ne { + 0 setgray + } if + XIType 1 eq { + XIImageMask + }{ + XIType 2 eq XIType 3 eq or { + XIImageTint + }{ + XIImage + } ifelse + } ifelse + }{ + XINullImage + } ifelse + /XIPlateList false def + grestore + end +} def +end +%%EndProcSet +%%BeginResource: procset Adobe_Illustrator_AI5 1.3 0 +%%Title: (Adobe Illustrator (R) Version 8.0 Full Prolog) +%%Version: 1.3 0 +%%CreationDate: (3/7/1994) () +%%Copyright: ((C) 1987-1998 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_Illustrator_AI5_vars 112 dict dup begin +put +/_?cmyk false def +/_eo false def +/_lp /none def +/_pf +{ +} def +/_ps +{ +} def +/_psf +{ +} def +/_pss +{ +} def +/_pjsf +{ +} def +/_pjss +{ +} def +/_pola 0 def +/_doClip 0 def +/cf currentflat def +/_lineorientation 0 def +/_charorientation 0 def +/_yokoorientation 0 def +/_tm matrix def +/_renderStart +[ +/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 +] def +/_renderEnd +[ +null null null null /i1 /i1 /i1 /i1 +] def +/_render -1 def +/_shift [0 0] def +/_ax 0 def +/_ay 0 def +/_cx 0 def +/_cy 0 def +/_leading +[ +0 0 +] def +/_ctm matrix def +/_mtx matrix def +/_sp 16#020 def +/_hyphen (-) def +/_fontSize 0 def +/_fontAscent 0 def +/_fontDescent 0 def +/_fontHeight 0 def +/_fontRotateAdjust 0 def +/Ss 256 string def +Ss 0 (fonts/) putinterval +/_cnt 0 def +/_scale [1 1] def +/_nativeEncoding 0 def +/_useNativeEncoding 0 def +/_tempEncode 0 def +/_pntr 0 def +/_tDict 2 dict def +/_hfname 100 string def +/_hffound false def +/Tx +{ +} def +/Tj +{ +} def +/CRender +{ +} def +/_AI3_savepage +{ +} def +/_gf null def +/_cf 4 array def +/_rgbf 3 array def +/_if null def +/_of false def +/_fc +{ +} def +/_gs null def +/_cs 4 array def +/_rgbs 3 array def +/_is null def +/_os false def +/_sc +{ +} def +/_pd 1 dict def +/_ed 15 dict def +/_pm matrix def +/_fm null def +/_fd null def +/_fdd null def +/_sm null def +/_sd null def +/_sdd null def +/_i null def +/_lobyte 0 def +/_hibyte 0 def +/_cproc null def +/_cscript 0 def +/_hvax 0 def +/_hvay 0 def +/_hvwb 0 def +/_hvcx 0 def +/_hvcy 0 def +/_bitfont null def +/_bitlobyte 0 def +/_bithibyte 0 def +/_bitkey null def +/_bitdata null def +/_bitindex 0 def +/discardSave null def +/buffer 256 string def +/beginString null def +/endString null def +/endStringLength null def +/layerCnt 1 def +/layerCount 1 def +/perCent (%) 0 get def +/perCentSeen? false def +/newBuff null def +/newBuffButFirst null def +/newBuffLast null def +/clipForward? false def +end +userdict /Adobe_Illustrator_AI5 known not { + userdict /Adobe_Illustrator_AI5 100 dict put +} if +userdict /Adobe_Illustrator_AI5 get begin +/initialize +{ + Adobe_Illustrator_AI5 dup begin + Adobe_Illustrator_AI5_vars begin + /_aicmykps where {pop /_?cmyk _aicmykps def}if + discardDict + { + bind pop pop + } forall + dup /nc get begin + { + dup xcheck 1 index type /operatortype ne and + { + bind + } if + pop pop + } forall + end + newpath +} def +/terminate +{ + end + end +} def +/_ +null def +/ddef +{ + Adobe_Illustrator_AI5_vars 3 1 roll put +} def +/xput +{ + dup load dup length exch maxlength eq + { + dup dup load dup + length 2 mul dict copy def + } if + load begin + def + end +} def +/npop +{ + { + pop + } repeat +} def +/hswj +{ + dup stringwidth 3 2 roll + { + _hvwb eq { exch _hvcx add exch _hvcy add } if + exch _hvax add exch _hvay add + } cforall +} def +/vswj +{ + 0 0 3 -1 roll + { + dup 255 le + _charorientation 1 eq + and + { + dup cstring stringwidth 5 2 roll + _hvwb eq { exch _hvcy sub exch _hvcx sub } if + exch _hvay sub exch _hvax sub + 4 -1 roll sub exch + 3 -1 roll sub exch + } + { + _hvwb eq { exch _hvcy sub exch _hvcx sub } if + exch _hvay sub exch _hvax sub + _fontHeight sub + } ifelse + } cforall +} def +/swj +{ + 6 1 roll + /_hvay exch ddef + /_hvax exch ddef + /_hvwb exch ddef + /_hvcy exch ddef + /_hvcx exch ddef + _lineorientation 0 eq { hswj } { vswj } ifelse +} def +/sw +{ + 0 0 0 6 3 roll swj +} def +/vjss +{ + 4 1 roll + { + dup cstring + dup length 1 eq + _charorientation 1 eq + and + { + -90 rotate + currentpoint + _fontRotateAdjust add + moveto + gsave + false charpath currentpoint + 5 index setmatrix stroke + grestore + _fontRotateAdjust sub + moveto + _sp eq + { + 5 index 5 index rmoveto + } if + 2 copy rmoveto + 90 rotate + } + { + currentpoint + _fontHeight sub + 5 index sub + 3 index _sp eq + { + 9 index sub + } if + + currentpoint + exch 4 index stringwidth pop 2 div sub + exch _fontAscent sub + moveto + + gsave + 2 index false charpath + 6 index setmatrix stroke + grestore + + moveto pop pop + } ifelse + } cforall + 6 npop +} def +/hjss +{ + 4 1 roll + { + dup cstring + gsave + false charpath currentpoint + 5 index setmatrix stroke + grestore + moveto + _sp eq + { + 5 index 5 index rmoveto + } if + 2 copy rmoveto + } cforall + 6 npop +} def +/jss +{ + _lineorientation 0 eq { hjss } { vjss } ifelse +} def +/ss +{ + 0 0 0 7 3 roll jss +} def +/vjsp +{ + 4 1 roll + { + dup cstring + dup length 1 eq + _charorientation 1 eq + and + { + -90 rotate + currentpoint + _fontRotateAdjust add + moveto + false charpath + currentpoint + _fontRotateAdjust sub + moveto + _sp eq + { + 5 index 5 index rmoveto + } if + 2 copy rmoveto + 90 rotate + } + { + currentpoint + _fontHeight sub + 5 index sub + 3 index _sp eq + { + 9 index sub + } if + + currentpoint + exch 4 index stringwidth pop 2 div sub + exch _fontAscent sub + moveto + + 2 index false charpath + + moveto pop pop + } ifelse + } cforall + 6 npop +} def +/hjsp +{ + 4 1 roll + { + dup cstring + false charpath + _sp eq + { + 5 index 5 index rmoveto + } if + 2 copy rmoveto + } cforall + 6 npop +} def +/jsp +{ + matrix currentmatrix + _lineorientation 0 eq {hjsp} {vjsp} ifelse +} def +/sp +{ + matrix currentmatrix + 0 0 0 7 3 roll + _lineorientation 0 eq {hjsp} {vjsp} ifelse +} def +/pl +{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform +} def +/setstrokeadjust where +{ + pop true setstrokeadjust + /c + { + curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll curveto + } def + /V + /v load def + /y + { + 2 copy curveto + } def + /Y + /y load def + /l + { + lineto + } def + /L + /l load def + /m + { + moveto + } def +} +{ + /c + { + pl curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll pl curveto + } def + /V + /v load def + /y + { + pl 2 copy curveto + } def + /Y + /y load def + /l + { + pl lineto + } def + /L + /l load def + /m + { + pl moveto + } def +} ifelse +/d +{ + setdash +} def +/cf +{ +} def +/i +{ + dup 0 eq + { + pop cf + } if + setflat +} def +/j +{ + setlinejoin +} def +/J +{ + setlinecap +} def +/M +{ + setmiterlimit +} def +/w +{ + setlinewidth +} def +/XR +{ + 0 ne + /_eo exch ddef +} def +/H +{ +} def +/h +{ + closepath +} def +/N +{ + _pola 0 eq + { + _doClip 1 eq + { + _eo {eoclip} {clip} ifelse /_doClip 0 ddef + } if + newpath + } + { + /CRender + { + N + } ddef + } ifelse +} def +/n +{ + N +} def +/F +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc + /_doClip 0 ddef + } + { + _pf + } ifelse + } + { + /CRender + { + F + } ddef + } ifelse +} def +/f +{ + closepath + F +} def +/S +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + _ps + } ifelse + } + { + /CRender + { + S + } ddef + } ifelse +} def +/s +{ + closepath + S +} def +/B +{ + _pola 0 eq + { + _doClip 1 eq + gsave F grestore + { + gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + S + } ifelse + } + { + /CRender + { + B + } ddef + } ifelse +} def +/b +{ + closepath + B +} def +/W +{ + /_doClip 1 ddef +} def +/* +{ + count 0 ne + { + dup type /stringtype eq + { + pop + } if + } if + newpath +} def +/u +{ +} def +/U +{ +} def +/q +{ + _pola 0 eq + { + gsave + } if +} def +/Q +{ + _pola 0 eq + { + grestore + } if +} def +/*u +{ + _pola 1 add /_pola exch ddef +} def +/*U +{ + _pola 1 sub /_pola exch ddef + _pola 0 eq + { + CRender + } if +} def +/D +{ + pop +} def +/*w +{ +} def +/*W +{ +} def +/` +{ + /_i save ddef + clipForward? + { + nulldevice + } if + 6 1 roll 4 npop + concat pop + userdict begin + /showpage + { + } def + 0 setgray + 0 setlinecap + 1 setlinewidth + 0 setlinejoin + 10 setmiterlimit + [] 0 setdash + /setstrokeadjust where {pop false setstrokeadjust} if + newpath + 0 setgray + false setoverprint +} def +/~ +{ + end + _i restore +} def +/_rgbtocmyk +{ + 3 + { + 1 exch sub 3 1 roll + } repeat + 3 copy 1 4 1 roll + 3 + { + 3 index 2 copy gt + { + exch + } if + pop 4 1 roll + } repeat + pop pop pop + 4 1 roll + 3 + { + 3 index sub + 3 1 roll + } repeat + 4 -1 roll +} def +/setrgbfill +{ + _rgbf astore pop + /_fc + { + _lp /fill ne + { + _of setoverprint + _rgbf aload pop setrgbcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + hvashow + } ddef + /_pjsf + { + _fc + hvawidthshow + } ddef + /_lp /none ddef +} def +/setrgbstroke +{ + _rgbs astore pop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _rgbs aload pop setrgbcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/O +{ + 0 ne + /_of exch ddef + /_lp /none ddef +} def +/R +{ + 0 ne + /_os exch ddef + /_lp /none ddef +} def +/g +{ + /_gf exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _gf setgray + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + hvashow + } ddef + /_pjsf + { + _fc + hvawidthshow + } ddef + /_lp /none ddef +} def +/G +{ + /_gs exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _gs setgray + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/k +{ + _cf astore pop + /_fc + { + _lp /fill ne + { + _of setoverprint + _cf aload pop setcmykcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + hvashow + } ddef + /_pjsf + { + _fc + hvawidthshow + } ddef + /_lp /none ddef +} def +/K +{ + _cs astore pop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _cs aload pop setcmykcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/Xa +{ + _?cmyk { + 3 npop k + }{ + setrgbfill 4 npop + } ifelse +} def +/XA +{ + _?cmyk { + 3 npop K + }{ + setrgbstroke 4 npop + } ifelse +} def +/Xs +{ + /_gf exch ddef + 5 npop + /_fc + { + _lp /fill ne + { + _of setoverprint + _gf setAIseparationgray + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + hvashow + } ddef + /_pjsf + { + _fc + hvawidthshow + } ddef + /_lp /none ddef +} def +/XS +{ + /_gs exch ddef + 5 npop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _gs setAIseparationgray + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/Xx +{ + exch + /_gf exch ddef + 0 eq { + findcmykcustomcolor + }{ + _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse + { + 4 1 roll 3 npop + findcmykcustomcolor + }{ + 8 -4 roll 4 npop + findrgbcustomcolor + } ifelse + } ifelse + /_if exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _if _gf 1 exch sub setcustomcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + hvashow + } ddef + /_pjsf + { + _fc + hvawidthshow + } ddef + /_lp /none ddef +} def +/XX +{ + exch + /_gs exch ddef + 0 eq { + findcmykcustomcolor + }{ + _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse + { + 4 1 roll 3 npop + findcmykcustomcolor + }{ + 8 -4 roll 4 npop + findrgbcustomcolor + } ifelse + } ifelse + /_is exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _is _gs 1 exch sub setcustomcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/x +{ + /_gf exch ddef + findcmykcustomcolor + /_if exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _if _gf 1 exch sub setcustomcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + hvashow + } ddef + /_pjsf + { + _fc + hvawidthshow + } ddef + /_lp /none ddef +} def +/X +{ + /_gs exch ddef + findcmykcustomcolor + /_is exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _is _gs 1 exch sub setcustomcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/XK +{ + 3 -1 roll pop + 0 eq + { + 1 exch sub + 3 {dup 3 1 roll mul 5 1 roll} repeat + mul 4 1 roll + K + } + { + 1 exch sub 4 1 roll + 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat + 4 -1 roll pop + XA + } ifelse +} def +/Xk +{ + 3 -1 roll pop + 0 eq + { + 1 exch sub + 3 {dup 3 1 roll mul 5 1 roll} repeat + mul 4 1 roll + k + } + { + 1 exch sub 4 1 roll + 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat + 4 -1 roll pop + Xa + } ifelse +} def +/A +{ + pop +} def +/annotatepage +{ +userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse +} def +/XT { + pop pop +} def +/Xt { + pop +} def +/discard +{ + save /discardSave exch store + discardDict begin + /endString exch store + gt38? + { + 2 add + } if + load + stopped + pop + end + discardSave restore +} bind def +userdict /discardDict 7 dict dup begin +put +/pre38Initialize +{ + /endStringLength endString length store + /newBuff buffer 0 endStringLength getinterval store + /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store + /newBuffLast newBuff endStringLength 1 sub 1 getinterval store +} def +/shiftBuffer +{ + newBuff 0 newBuffButFirst putinterval + newBuffLast 0 + currentfile read not + { + stop + } if + put +} def +0 +{ + pre38Initialize + mark + currentfile newBuff readstring exch pop + { + { + newBuff endString eq + { + cleartomark stop + } if + shiftBuffer + } loop + } + { + stop + } ifelse +} def +1 +{ + pre38Initialize + /beginString exch store + mark + currentfile newBuff readstring exch pop + { + { + newBuff beginString eq + { + /layerCount dup load 1 add store + } + { + newBuff endString eq + { + /layerCount dup load 1 sub store + layerCount 0 eq + { + cleartomark stop + } if + } if + } ifelse + shiftBuffer + } loop + } if +} def +2 +{ + mark + { + currentfile buffer {readline} stopped { + % assume error was due to overfilling the buffer + }{ + not + { + stop + } if + endString eq { + cleartomark stop + } if + }ifelse + } loop +} def +3 +{ + /beginString exch store + /layerCnt 1 store + mark + { + currentfile buffer {readline} stopped { + % assume error was due to overfilling the buffer + }{ + not + { + stop + } if + dup beginString eq + { + pop /layerCnt dup load 1 add store + } + { + endString eq + { + layerCnt 1 eq + { + cleartomark stop + } + { + /layerCnt dup load 1 sub store + } ifelse + } if + } ifelse + }ifelse + } loop +} def +end +userdict /clipRenderOff 15 dict dup begin +put +{ + /n /N /s /S /f /F /b /B +} +{ + { + _doClip 1 eq + { + /_doClip 0 ddef _eo {eoclip} {clip} ifelse + } if + newpath + } def +} forall +/Tr /pop load def +/Bb {} def +/BB /pop load def +/Bg {12 npop} def +/Bm {6 npop} def +/Bc /Bm load def +/Bh {4 npop} def +end +/Lb +{ + 6 npop + 7 2 roll + 5 npop + 0 eq + { + 0 eq + { + (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard + } + { + + /clipForward? true def + + /Tx /pop load def + /Tj /pop load def + + currentdict end clipRenderOff begin begin + } ifelse + } + { + 0 eq + { + save /discardSave exch store + } if + } ifelse +} bind def +/LB +{ + discardSave dup null ne + { + restore + } + { + pop + clipForward? + { + currentdict + end + end + begin + + /clipForward? false ddef + } if + } ifelse +} bind def +/Pb +{ + pop pop + 0 (%AI5_EndPalette) discard +} bind def +/Np +{ + 0 (%AI5_End_NonPrinting--) discard +} bind def +/Ln /pop load def +/Ap +/pop load def +/Ar +{ + 72 exch div + 0 dtransform dup mul exch dup mul add sqrt + dup 1 lt + { + pop 1 + } if + setflat +} def +/Mb +{ + q +} def +/Md +{ +} def +/MB +{ + Q +} def +/nc 4 dict def +nc begin +/setgray +{ + pop +} bind def +/setcmykcolor +{ + 4 npop +} bind def +/setrgbcolor +{ + 3 npop +} bind def +/setcustomcolor +{ + 2 npop +} bind def +currentdict readonly pop +end +/XP +{ + 4 npop +} bind def +/XD +{ + pop +} bind def +end +setpacking +%%EndResource +%%BeginResource: procset Adobe_pattern_AI5 1.1 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Pattern Operators) +%%Version: 1.1 0 +%%CreationDate: (03/26/93) () +%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_Illustrator_AI5 known not { + userdict /Adobe_Illustrator_AI5 95 dict put +} if +userdict /Adobe_Illustrator_AI5 get begin +/@ +{ +} def +/& +{ +} def +/dp +{ + dup null eq + { + pop + _dp 0 ne + { + 0 1 _dp 1 sub _dl mod + { + _da exch get 3 get + } for + _dp 1 sub _dl mod 1 add packedarray + _da 0 get aload pop 8 -1 roll 5 -1 roll pop 4 1 roll + definepattern pop + } if + } + { + _dp 0 ne _dp _dl mod 0 eq and + { + null dp + } if + 7 packedarray _da exch _dp _dl mod exch put + _dp _dl mod _da 0 get 4 get 2 packedarray + /_dp _dp 1 add def + } ifelse +} def +/E +{ + _ed begin + dup 0 get type /arraytype ne + { + 0 + { + dup 1 add index type /arraytype eq + { + 1 add + } + { + exit + } ifelse + } loop + array astore + } if + /_dd exch def + /_ury exch def + /_urx exch def + /_lly exch def + /_llx exch def + /_n exch def + /_y 0 def + /_dl 4 def + /_dp 0 def + /_da _dl array def + 0 1 _dd length 1 sub + { + /_d exch _dd exch get def + 0 2 _d length 2 sub + { + /_x exch def + /_c false def + /_r _d _x 1 add get cvlit def + _r _ ne + { + _urx _llx sub _ury _lly sub + [ + 1 0 0 1 0 0 + ] + [ + /save cvx + _llx neg _lly neg /translate cvx + _c + { + nc /begin cvx + } if + _r dup type /stringtype eq + { + cvx + } + { + { + exec + } /forall cvx + } ifelse + _c + { + /end cvx + } if + /restore cvx + ] cvx + /_fn 12 _n length add string def + _y _fn cvs pop + /_y _y 1 add def + _fn 12 _n putinterval + _fn _c false dp + _d exch _x 1 add exch put + } if + } for + } for + null dp + _n _dd /_pd + end + xput +} def +/fc +{ + _fm dup concatmatrix pop +} def +/p +{ + /_fm exch ddef + 9 -2 roll _pm translate fc + 7 -2 roll _pm scale fc + 5 -1 roll _pm rotate fc + 4 -2 roll exch 0 ne + { + dup _pm rotate fc + 1 -1 _pm scale fc + neg _pm rotate fc + } + { + pop + } ifelse + dup _pm rotate fc + exch dup sin exch cos div 1 0 0 1 0 6 2 roll + _pm astore fc + neg _pm rotate fc + _pd exch get /_fdd exch ddef + /_pf + { + save + /_doClip 0 ddef + 0 1 _fdd length 1 sub + { + /_fd exch _fdd exch get ddef + _fd + 0 2 _fd length 2 sub + { + gsave + 2 copy get dup _ ne + { + cvx exec _fc + } + { + pop + } ifelse + 2 copy 1 add get dup _ ne + { + aload pop findfont _fm + patternfill + } + { + pop + fill + } ifelse + grestore + pop + } for + pop + } for + restore + newpath + } ddef + /_psf + { + save + /_doClip 0 ddef + 0 1 _fdd length 1 sub + { + /_fd exch _fdd exch get ddef + _fd + 0 2 _fd length 2 sub + { + gsave + 2 copy get dup _ ne + { + cvx exec _fc + } + { + pop + } ifelse + 2 copy 1 add get dup _ ne + { + aload pop findfont _fm + 9 copy 6 npop patternashow + } + { + pop + 6 copy 3 npop hvashow + } ifelse + grestore + pop + } for + pop + } for + restore + sw rmoveto + } ddef + /_pjsf + { + save + /_doClip 0 ddef + 0 1 _fdd length 1 sub + { + /_fd exch _fdd exch get ddef + _fd + 0 2 _fd length 2 sub + { + gsave + 2 copy get dup _ ne + { + cvx exec _fc + } + { + pop + } ifelse + 2 copy 1 add get dup _ ne + { + aload pop findfont _fm + 12 copy 6 npop patternawidthshow + } + { + pop 9 copy 3 npop hvawidthshow + } ifelse + grestore + pop + } for + pop + } for + restore + swj rmoveto + } ddef + /_lp /none ddef +} def +/sc +{ + _sm dup concatmatrix pop +} def +/P +{ + /_sm exch ddef + 9 -2 roll _pm translate sc + 7 -2 roll _pm scale sc + 5 -1 roll _pm rotate sc + 4 -2 roll exch 0 ne + { + dup _pm rotate sc + 1 -1 _pm scale sc + neg _pm rotate sc + } + { + pop + } ifelse + dup _pm rotate sc + exch dup sin exch cos div 1 0 0 1 0 6 2 roll + _pm astore sc + neg _pm rotate sc + _pd exch get /_sdd exch ddef + /_ps + { + save + /_doClip 0 ddef + 0 1 _sdd length 1 sub + { + /_sd exch _sdd exch get ddef + _sd + 0 2 _sd length 2 sub + { + gsave + 2 copy get dup _ ne + { + cvx exec _sc + } + { + pop + } ifelse + 2 copy 1 add get dup _ ne + { + aload pop findfont _sm + patternstroke + } + { + pop stroke + } ifelse + grestore + pop + } for + pop + } for + restore + newpath + } ddef + /_pss + { + save + /_doClip 0 ddef + 0 1 _sdd length 1 sub + { + /_sd exch _sdd exch get ddef + _sd + 0 2 _sd length 2 sub + { + gsave + 2 copy get dup _ ne + { + cvx exec _sc + } + { + pop + } ifelse + 2 copy 1 add get dup _ ne + { + aload pop findfont _sm + 10 copy 6 npop patternashowstroke + } + { + pop 7 copy 3 npop ss + } ifelse + grestore + pop + } for + pop + } for + restore + pop sw rmoveto + } ddef + /_pjss + { + save + /_doClip 0 ddef + 0 1 _sdd length 1 sub + { + /_sd exch _sdd exch get ddef + _sd + 0 2 _sd length 2 sub + { + gsave + 2 copy get dup _ ne + { + cvx exec _sc + } + { + pop + } ifelse + 2 copy 1 add get dup _ ne + { + aload pop findfont _sm + 13 copy 6 npop patternawidthshowstroke + } + { + pop 10 copy 3 npop jss + } ifelse + grestore + pop + } for + pop + } for + restore + pop swj rmoveto + } ddef + /_lp /none ddef +} def +end +userdict /Adobe_pattern_AI5 18 dict dup begin +put +/initialize +{ + /definepattern where + { + pop + pop pop + } + { + begin + begin + Adobe_pattern_AI5 begin + Adobe_pattern_AI5 + { + dup xcheck + { + bind + } if + pop pop + } forall + mark + cachestatus 7 1 roll pop pop pop pop exch pop exch + { + { + 10000 add + dup 2 index gt + { + exit + } if + dup setcachelimit + } loop + } stopped + cleartomark + end + + end + end + + Adobe_pattern_AI5 begin + } ifelse +} def +/terminate +{ + currentdict Adobe_pattern_AI5 eq + { + end + } if +} def +errordict +/nocurrentpoint +{ + pop + stop +} put +errordict +/invalidaccess +{ + pop + stop +} put +/patternencoding +256 array def +0 1 255 +{ + patternencoding exch ( ) 2 copy exch 0 exch put cvn put +} for +/definepattern +{ + 17 dict begin + /uniform exch def + /cache exch def + /key exch def + /procarray exch def + /mtx exch matrix invertmatrix def + /height exch def + /width exch def + /ctm matrix currentmatrix def + /ptm matrix def + /str 32 string def + /slice 9 dict def + slice /s 1 put + slice /q 256 procarray length div sqrt floor cvi put + slice /b 0 put + /FontBBox + [ + 0 0 0 0 + ] def + /FontMatrix mtx matrix copy def + /Encoding patternencoding def + /FontType 3 def + /BuildChar + { + exch + begin + /setstrokeadjust where {pop true setstrokeadjust} if + slice begin + dup q dup mul mod s idiv /i exch def + dup q dup mul mod s mod /j exch def + q dup mul idiv procarray exch get + /xl j width s div mul def + /xg j 1 add width s div mul def + /yl i height s div mul def + /yg i 1 add height s div mul def + uniform + { + 1 1 + } + { + width 0 dtransform + dup mul exch dup mul add sqrt dup 1 add exch div + 0 height dtransform + dup mul exch dup mul add sqrt dup 1 add exch div + } ifelse + width 0 cache + { + xl 4 index mul yl 4 index mul xg 6 index mul yg 6 index mul + setcachedevice + } + { + setcharwidth + } ifelse + gsave + scale + newpath + xl yl moveto + xg yl lineto + xg yg lineto + xl yg lineto + closepath + clip + newpath + end + end + exec + grestore + } def + key currentdict definefont + end +} def +/patterncachesize +{ + gsave + newpath + 0 0 moveto + width 0 lineto + width height lineto + 0 height lineto + closepath + patternmatrix setmatrix + pathbbox + exch ceiling 4 -1 roll floor sub 3 1 roll + ceiling exch floor sub + mul 1 add + grestore +} def +/patterncachelimit +{ + cachestatus 7 1 roll 6 npop 8 mul +} def +/patternpath +{ + exch dup begin + setfont + ctm setmatrix + concat + slice exch /b exch slice /q get dup mul mul put + FontMatrix concat + uniform + { + width 0 dtransform round width div exch round width div exch + 0 height dtransform round height div exch height div exch + 0 0 transform round exch round exch + ptm astore setmatrix + } + { + ptm currentmatrix pop + } ifelse + { + currentpoint + } stopped not + { + 2 npop + pathbbox + true + 4 index 3 index eq + 4 index 3 index eq + and + { + pop false + { + { + 2 npop + } + { + 3 npop true + } + { + 7 npop true + } + { + pop true + } pathforall + } stopped + { + 5 npop true + } if + } if + { + height div ceiling height mul 4 1 roll + width div ceiling width mul 4 1 roll + height div floor height mul 4 1 roll + width div floor width mul 4 1 roll + 2 index sub height div ceiling cvi exch + 3 index sub width div ceiling cvi exch + 4 2 roll moveto + FontMatrix mtx invertmatrix + dup dup 4 get exch 5 get rmoveto + ptm ptm concatmatrix pop + slice /s + patterncachesize patterncachelimit div ceiling sqrt ceiling cvi + dup slice /q get gt + { + pop slice /q get + } if + put + 0 1 slice /s get dup mul 1 sub + { + slice /b get add + gsave + 0 1 str length 1 sub + { + str exch 2 index put + } for + pop + dup + { + gsave + ptm setmatrix + 1 index str length idiv + { + str show + } repeat + 1 index str length mod str exch 0 exch getinterval show + grestore + 0 height rmoveto + } repeat + grestore + } for + 2 npop + } + { + 4 npop + } ifelse + } if + end +} def +/patternclip +{ + _eo {eoclip} {clip} ifelse +} def +/patternstrokepath +{ + strokepath +} def +/patternmatrix +matrix def +/patternfill +{ + dup type /dicttype eq + { + Adobe_pattern_AI5 /patternmatrix get + } if + gsave + patternclip + Adobe_pattern_AI5 /patternpath get exec + grestore + newpath +} def +/patternstroke +{ + dup type /dicttype eq + { + Adobe_pattern_AI5 /patternmatrix get + } if + gsave + patternstrokepath + true + { + { + { + newpath + moveto + } + { + lineto + } + { + curveto + } + { + closepath + 3 copy + Adobe_pattern_AI5 /patternfill get exec + } pathforall + 3 npop + } stopped + { + 5 npop + patternclip + Adobe_pattern_AI5 /patternfill get exec + } if + } + { + patternclip + Adobe_pattern_AI5 /patternfill get exec + } ifelse + grestore + newpath +} def +/vpatternawidthshow +{ + 6 1 roll + /_hvay exch ddef + /_hvax exch ddef + /_hvwb exch ddef + /_hvcy exch ddef + /_hvcx exch ddef + + { + dup cstring + dup length 1 eq + _charorientation 1 eq + and + { + -90 rotate + currentpoint + _fontRotateAdjust add + moveto + gsave + false charpath currentpoint + 5 index 5 index 5 index Adobe_pattern_AI5 /patternfill get exec + grestore + _fontRotateAdjust sub + moveto + _hvwb eq { _hvcx _hvcy rmoveto } if + _hvax _hvay rmoveto + 90 rotate + } + { + currentpoint + _fontHeight sub + _hvax sub + 3 index _hvwb eq { _hvcx sub } if + currentpoint + exch 4 index stringwidth pop 2 div sub + exch _fontAscent sub + moveto + gsave + 2 index false charpath + 6 index 6 index 6 index Adobe_pattern_AI5 /patternfill get exec + grestore + newpath moveto pop pop + } ifelse + } cforall + 3 npop +} def +/hpatternawidthshow +{ + { + dup cstring exch + gsave + 3 index eq { 5 index 5 index rmoveto } if + false charpath currentpoint + 9 index 9 index 9 index + Adobe_pattern_AI5 /patternfill get exec + grestore + newpath moveto + 2 copy rmoveto + } cforall + 8 npop +} def +/patternashow +{ +0 0 0 6 3 roll +patternawidthshow +} def +/patternawidthshow +{ + 6 index type /dicttype eq + { + Adobe_pattern_AI5 /patternmatrix get 7 1 roll + } if + _lineorientation 0 eq { hpatternawidthshow } { vpatternawidthshow } ifelse +} def +/vpatternawidthshowstroke +{ + 7 1 roll + 6 1 roll + /_hvay exch ddef + /_hvax exch ddef + /_hvwb exch ddef + /_hvcy exch ddef + /_hvcx exch ddef + { + dup cstring + dup length 1 eq + _charorientation 1 eq + and + { + -90 rotate + currentpoint + _fontRotateAdjust add + moveto + gsave + false charpath currentpoint + 3 index setmatrix + 6 index 6 index 6 index Adobe_pattern_AI5 /patternstroke get exec + grestore + _fontRotateAdjust sub + moveto + _hvwb eq { _hvcx _hvcy rmoveto } if + _hvax _hvay rmoveto + 90 rotate + } + { + currentpoint + _fontHeight sub + _hvax sub + 3 index _hvwb eq { _hvcx sub } if + currentpoint + exch 4 index stringwidth pop 2 div sub + exch _fontAscent sub + moveto + gsave + 2 index false charpath + 4 index setmatrix + 7 index 7 index 7 index Adobe_pattern_AI5 /patternstroke get exec + grestore + newpath moveto pop pop + } ifelse + } cforall + 4 npop +} def +/hpatternawidthshowstroke +{ + 7 1 roll + { + dup cstring exch + gsave + 3 index eq { 5 index 5 index rmoveto } if + false charpath currentpoint + 7 index setmatrix + 10 index 10 index 10 index + Adobe_pattern_AI5 /patternstroke get exec + grestore + newpath moveto + 2 copy rmoveto + } cforall + 9 npop +} def +/patternashowstroke +{ + 0 0 0 7 3 roll + patternawidthshowstroke +} def +/patternawidthshowstroke +{ + 7 index type /dicttype eq + { + patternmatrix /patternmatrix get 8 1 roll + } if + _lineorientation 0 eq { hpatternawidthshowstroke } { vpatternawidthshowstroke } ifelse +} def +end +setpacking +%%EndResource +%%BeginResource: procset Adobe_cshow 2.0 8 +%%Title: (Writing System Operators) +%%Version: 2.0 8 +%%CreationDate: (1/23/89) () +%%Copyright: ((C) 1992-1996 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_cshow 14 dict dup begin put +/initialize +{ + Adobe_cshow begin + Adobe_cshow + { + dup xcheck + { + bind + } if + pop pop + } forall + end + Adobe_cshow begin +} def +/terminate +{ +currentdict Adobe_cshow eq + { + end + } if +} def +/cforall +{ + /_lobyte 0 ddef + /_hibyte 0 ddef + /_cproc exch ddef + /_cscript currentfont /FontScript known { currentfont /FontScript get } { -1 } ifelse ddef + { + /_lobyte exch ddef + _hibyte 0 eq + _cscript 1 eq + _lobyte 129 ge _lobyte 159 le and + _lobyte 224 ge _lobyte 252 le and or and + _cscript 2 eq + _lobyte 161 ge _lobyte 254 le and and + _cscript 3 eq + _lobyte 161 ge _lobyte 254 le and and + _cscript 25 eq + _lobyte 161 ge _lobyte 254 le and and + _cscript -1 eq + or or or or and + { + /_hibyte _lobyte ddef + } + { + _hibyte 256 mul _lobyte add + _cproc + /_hibyte 0 ddef + } ifelse + } forall +} def +/cstring +{ + dup 256 lt + { + (s) dup 0 4 3 roll put + } + { + dup 256 idiv exch 256 mod + (hl) dup dup 0 6 5 roll put 1 4 3 roll put + } ifelse +} def +/clength +{ + 0 exch + { 256 lt { 1 } { 2 } ifelse add } cforall +} def +/hawidthshow +{ + { + dup cstring + show + _hvax _hvay rmoveto + _hvwb eq { _hvcx _hvcy rmoveto } if + } cforall +} def +/vawidthshow +{ + { + dup 255 le + _charorientation 1 eq + and + { + -90 rotate + 0 _fontRotateAdjust rmoveto + cstring + _hvcx _hvcy _hvwb _hvax _hvay 6 -1 roll awidthshow + 0 _fontRotateAdjust neg rmoveto + 90 rotate + } + { + currentpoint + _fontHeight sub + exch _hvay sub exch _hvax sub + 2 index _hvwb eq { exch _hvcy sub exch _hvcx sub } if + 3 2 roll + cstring + dup stringwidth pop 2 div neg _fontAscent neg rmoveto + show + moveto + } ifelse + } cforall +} def +/hvawidthshow +{ + 6 1 roll + /_hvay exch ddef + /_hvax exch ddef + /_hvwb exch ddef + /_hvcy exch ddef + /_hvcx exch ddef + _lineorientation 0 eq { hawidthshow } { vawidthshow } ifelse +} def +/hvwidthshow +{ + 0 0 3 -1 roll hvawidthshow +} def +/hvashow +{ + 0 0 0 6 -3 roll hvawidthshow +} def +/hvshow +{ + 0 0 0 0 0 6 -1 roll hvawidthshow +} def +currentdict readonly pop end +setpacking +%%EndResource +%%BeginResource: procset Adobe_shading_AI8 1.0 0 +%%Title: (Adobe Illustrator 8 Shading Procset) +%%Version: 1.0 0 +%%CreationDate: (12/17/97) () +%%Copyright: ((C) 1987-1997 Adobe Systems Incorporated All Rights Reserved) +userdict /defaultpacking currentpacking put true setpacking +userdict /Adobe_shading_AI8 10 dict dup begin put +/initialize { + Adobe_shading_AI8 begin + Adobe_shading_AI8 bdprocs + Mesh /initialize get exec +} def +/terminate { + currentdict Adobe_shading_AI8 eq { + end + } if +} def +/bdprocs { + { + dup xcheck 1 index type /arraytype eq and { + bind + } if + pop pop + } forall +} def +/X! {pop} def +/X# {pop pop} def +/Mesh 40 dict def +Mesh begin +/initialize { + Mesh bdprocs + Mesh begin + /emulate? /AI8MeshEmulation where { + pop AI8MeshEmulation + }{ + systemdict /shfill known not + } ifelse def + end +} def +/bd { + shadingdict begin +} def +/paint { + emulate? { + end + }{ + /_lp /none ddef _fc /_lp /none ddef + + /AIColorSpace AIColorSpace tocolorspace store + /ColorSpace AIColorSpace topsspace store + + version_ge_3010.106 not systemdict /setsmoothness known and { + 0.0001 setsmoothness + } if + + composite? { + /DataSource getdatasrc def + Matrix concat + currentdict end + shfill + }{ + AIColorSpace makesmarks AIPlateList markingplate and not isoverprint and { + end + }{ + /ColorSpace /DeviceGray store + /Decode [0 1 0 1 0 1] store + /DataSource getplatesrc def + Matrix concat + currentdict end + shfill + } ifelse + } ifelse + } ifelse +} def +/shadingdict 12 dict def +shadingdict begin + /ShadingType 6 def + /BitsPerCoordinate 16 def + /BitsPerComponent 8 def + /BitsPerFlag 8 def +end +/datafile null def +/databuf 256 string def +/dataptr 0 def +/srcspace null def +/srcchannels 0 def +/dstchannels 0 def +/dstplate 0 def +/srctodstcolor null def +/getplatesrc { + /srcspace AIColorSpace store + /srcchannels AIColorSpace getnchannels store + /dstchannels 1 store + /dstplate getplateindex store + /srctodstcolor srcspace makesmarks { + dstplate 4 eq { + {1 exch sub} + }{ + {srcspace tocmyk 3 dstplate sub index 1 exch sub 5 1 roll 4 {pop} repeat} + } ifelse + }{ + {srcchannels {pop} repeat 1} + } ifelse store + /datafile getdatasrc store + /rdpatch168 load DataLength () /SubFileDecode filter +} def +/getdatasrc { + /rdcmntline load /ASCII85Decode filter +} def +/rdpatch168 { + /dataptr 0 store + 49 rdcount + 4 { + dup {pop srcchannels getint8} if + dup {pop srctodstcolor dstchannels putint8 true} if + } repeat + {databuf 0 dataptr getinterval}{()} ifelse +} def +/rdpatch3216 { + /dataptr 0 store + 97 rdcount + 4 { + dup {pop srcchannels getint16} if + dup {pop srctodstcolor dstchannels putint16 true} if + } repeat + {databuf 0 dataptr getinterval}{()} ifelse +} def +/rdcount { + dup 0 gt { + datafile databuf dataptr 4 -1 roll getinterval readstring + exch length dataptr add /dataptr exch store + }{ + true + } ifelse +} def +/getint8 { + mark true 3 -1 roll + { + dup {pop datafile read} if + dup {pop 255 div true} if + } repeat + { + counttomark 1 add -1 roll pop true + }{ + cleartomark false + } ifelse +} def +/putint8 { + dup dataptr add /dataptr exch store + dataptr exch + { + 1 sub exch + 255 mul cvi + databuf 2 index + 3 -1 roll put + } repeat + pop +} def +/getint16 { + mark true 3 -1 roll + { + dup {pop datafile read} if + dup {pop 256 mul datafile read} if + dup {pop add 65535 div true} if + } repeat + { + counttomark 1 add -1 roll pop true + }{ + cleartomark false + } ifelse +} def +/putint16 { + dup 2 mul dataptr add /dataptr exch store + dataptr exch + { + 2 sub exch + 65535 mul cvi dup + 256 idiv databuf 3 index 3 -1 roll put + 256 mod databuf 2 index 1 add 3 -1 roll put + } repeat + pop +} def +/srcbuf 256 string def +/rdcmntline { + currentfile srcbuf readline pop + (%) anchorsearch {pop} if +} def +/getplateindex { + 0 [cyan? magenta? yellow? black? customColor?] {{exit} if 1 add} forall +} def +/aicsarray 4 array def +/aicsaltvals 4 array def +/aicsaltcolr aicsaltvals def +/tocolorspace { + dup type /arraytype eq { + mark exch aload pop + aicsarray 0 3 -1 roll put + aicsarray 1 3 -1 roll put + dup aicsarray 2 3 -1 roll put + gettintxform aicsarray 3 3 -1 roll put + counttomark aicsaltvals 0 3 -1 roll getinterval /aicsaltcolr exch store + aicsaltcolr astore pop pop + aicsarray + } if +} def +/subtintxform {aicsaltcolr {1 index mul exch} forall pop} def +/addtintxform {aicsaltcolr {1 sub 1 index mul 1 add exch} forall pop} def +/gettintxform { + /DeviceRGB eq {/addtintxform}{/subtintxform} ifelse load +} def +/getnchannels { + dup type /arraytype eq {0 get} if + colorspacedict exch get begin Channels end +} def +/makesmarks { + composite? { + pop true + }{ + dup dup type /arraytype eq {0 get} if + colorspacedict exch get begin MarksPlate end + } ifelse +} def +/markingplate { + composite? { + pop true + }{ + dup type /arraytype eq { + dup length getplateindex gt {getplateindex get}{pop false} ifelse + } if + } ifelse +} def +/tocmyk { + dup dup type /arraytype eq {0 get} if + colorspacedict exch get begin ToCMYK end +} def +/topsspace { + dup dup type /arraytype eq {0 get} if + colorspacedict exch get begin ToPSSpace end +} def +/colorspacedict 5 dict dup begin + /DeviceGray 4 dict dup begin + /Channels 1 def + /MarksPlate {pop black?} def + /ToCMYK {pop 1 exch sub 0 0 0 4 -1 roll} def + /ToPSSpace {} def + end def + /DeviceRGB 4 dict dup begin + /Channels 3 def + /MarksPlate {pop isCMYKSep?} def + /ToCMYK {pop _rgbtocmyk} def + /ToPSSpace {} def + end def + /DeviceCMYK 4 dict dup begin + /Channels 4 def + /MarksPlate {pop isCMYKSep?} def + /ToCMYK {pop} def + /ToPSSpace {} def + end def + /Separation 4 dict dup begin + /Channels 1 def + /MarksPlate { + /findcmykcustomcolor where { + pop dup 1 exch ToCMYK 5 -1 roll 1 get + findcmykcustomcolor 1 setcustomcolor + systemdict /currentgray get exec + 1 ne + }{ + pop false + } ifelse + } def + /ToCMYK { + dup 2 get mark exch 4 2 roll + 3 get exec + counttomark -1 roll tocmyk + 5 -1 roll pop + } def + /ToPSSpace {} def + end def + /Process 4 dict dup begin + /Channels 1 def + /MarksPlate { + isCMYKSep? { + 1 exch ToCMYK 4 array astore getplateindex get 0 ne + }{ + pop false + } ifelse + } def + /ToCMYK { + dup 2 get mark exch 4 2 roll + 3 get exec + counttomark -1 roll tocmyk + 5 -1 roll pop + } def + /ToPSSpace { + 4 array copy dup 0 /Separation put + } def + end def +end def +/isoverprint { + /currentoverprint where {pop currentoverprint}{_of} ifelse +} def +/version_ge_3010.106 { + version {cvr} stopped { + pop + false + }{ + 3010.106 ge + } ifelse +} def +end +end +defaultpacking setpacking +%%EndResource +%%EndProlog +%%BeginSetup +userdict /_useSmoothShade true put +userdict /_aicmykps false put +userdict /_forceToCMYK false put +Adobe_level2_AI5 /initialize get exec +Adobe_cshow /initialize get exec +Adobe_screens_AI5 /initialize get exec +Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 AGM_Gradient /initializeAI get exec +Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_pattern_AI5 /initialize get exec +Adobe_ColorImage_AI6 /initialize get exec +Adobe_shading_AI8 /initialize get exec +Adobe_Illustrator_AI5 /initialize get exec +%AI5_Begin_NonPrinting +Np +%AI8_PluginGroupInfo +(Adobe Flare Plugin) (Flare) (flare.aip) +%AI8_PluginGroupInfo +(Adobe Deform Plugin) (Adobe H\374llen-Zusatzmodul) (Envelope and Warp.aip) +%AI8_PluginGroupInfo +(Adobe Planar Group) (Adobe-Zusatzmodul Interaktiv malen) (Live Paint.aip) +%AI8_PluginGroupInfo +(Adobe Perspective Plugin Group) (Adobe Perspective Plugin Group) (Perspective.aip) +%AI8_PluginGroupInfo +(Adobe Vectorized Object) (Nachgezeichnetes Bild) (Illustrator.exe) +%AI8_PluginGroupInfo +(Adobe Path Blends) (Adobe Angleichungen-Zusatzmodul) (Live Blends.aip) +%AI8_PluginGroupInfo +(Adobe Symbolism) (Adobe Symbolism) (Symbolism.aip) +%AI8_PluginGroupInfo +(Adobe PatternOnPath Brush Tool) (Adobe Musterpinsel-Zusatzmodul) (ArtOnPath.aip) +%AI8_PluginGroupInfo +(Adobe PatternOnPath Brush Tool) (Adobe Musterpinsel-Zusatzmodul) (ArtOnPath.aip) +%AI8_PluginGroupInfo +(Adobe ArtOnPath Brush Tool) (Adobe Bildpinsel-Zusatzmodul) (ArtOnPath.aip) +%AI8_PluginGroupInfo +(Adobe ArtOnPath Brush Tool) (Adobe Bildpinsel-Zusatzmodul) (ArtOnPath.aip) +%AI8_PluginGroupInfo +(Adobe Calligraphic Brush Tool) (Adobe Kalligrafiepinsel-Zusatzmodul) (Calligraphic Brush Tool.aip) +%AI8_PluginGroupInfo +(Adobe Scatter Brush Tool) (Adobe Spezialpinsel-Zusatzmodul) (Scatter Brush Tool.aip) +%AI8_PluginGroupInfo +(Adobe Scatter Brush Tool) (Adobe Spezialpinsel-Zusatzmodul) (Scatter Brush Tool.aip) +%AI8_PluginGroupInfo +(Adobe Pattern Editor Plugin Group) (Adobe Pattern Editor Plugin Group) (Swatch Libraries.aip) +%AI8_PluginGroupInfo +(Pathfinder Suite) (Adobe Zusammengesetzte Form) (PathFinder Suite.aip) +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +13 Bn +%AI5_BeginGradient: (Orange, Gelb) +(Orange, Gelb) 0 5 Bd +[ +< +05050505050505050505050505050505050505050505050505050505060606060606060606060606 +0606060606 +> +< +BBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3 +E4E5E6E7E8 +> +< +D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4 +D4D4D4D4D4 +> +0 +1 %_Br +< +03030303030303030303030303030404040404040404040404040404040404040404040404040404 +040404040404040405050505050505 +> +< +8485868788898A8B8C8D8E8F9091929495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABAC +ADAEAFB0B1B2B3B4B5B6B7B8B9BABB +> +< +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 +D6D6D6D6D6D6D6D6D6D5D5D5D5D5D5 +> +0 +1 %_Br +< +02020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020303030303030303030303030303030303030303030303030303030303 +> +< +38393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F5051525455565758595A5B5C5D5E5F60 +6162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F8081828384 +> +< +FFFEFEFDFDFCFCFBFBFAFAF9F9F8F8F7F7F6F5F5F4F4F3F3F2F2F1F1F0F0EFEFEEEEEDECECEBEBEA +EAE9E9E8E8E7E7E6E6E5E5E4E4E3E2E2E1E1E0E0DFDFDEDEDDDDDCDCDBDBDAD9D9D8D8D7 +> +0 +1 %_Br +< +00000000000000000000000000000000000000000101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +0101010101010101010101010102020202020202020202020202020202020202020202020202 +> +< +000102030405060708090A0B0B0C0D0E0F101112121314151616171819191A1B1C1C1D1E1E1F2020 +212222232324252526262727282829292A2A2B2B2C2C2D2D2E2E2E2F2F3030303131313232323333 +3333343434343535353536363636363637373737373737373838383838383838383838383838 +> +< +DBDCDDDDDEDEDFE0E0E1E1E2E3E3E4E4E5E5E6E6E7E7E8E9E9EAEAEAEBEBECECEDEDEEEEEFEFEFF0 +F0F1F1F1F2F2F3F3F3F4F4F4F5F5F5F6F6F6F7F7F7F7F8F8F8F9F9F9F9FAFAFAFAFAFBFBFBFBFBFC +FCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +> +0 +1 %_Br +[ +0.0235 0.91 0.83 0 1 50 100 %_BS +%_0.0235 0.91 0.83 0 1 50 100 Bs +0.0184 0.7341 0.8365 0 1 50 88.764 %_BS +%_0.0184 0.7341 0.8365 0 1 50 88.764 Bs +0.0121 0.5186 0.8445 0 1 50 66.8539 %_BS +%_0.0121 0.5186 0.8445 0 1 50 66.8539 Bs +0.0061 0.22 1 0 1 50 28.0899 %_BS +%_0.0061 0.22 1 0 1 50 28.0899 Bs +0 0 0.86 0 1 28 0 %_BS +%_0 0 0.86 0 1 28 0 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Sehr weiche schwarze Vignette) +(Sehr weiche schwarze Vignette) 1 3 Bd +[ +0.2 +0.2 +0.2 +1 +1 %_Br +0.2 +0.2 +0.2 +1 +1 %_Br +[ +0.2 0.2 0.2 1 1 56.0729 57.4443 %_BS +%_0.2 0.2 0.2 1 1 56.0729 57.4443 Bs +0.2 0.2 0.2 1 1 31.8603 79.7713 %_BS +%_0.2 0.2 0.2 1 1 31.8603 79.7713 Bs +0.2 0.2 0.2 1 1 50 100 %_BS +%_0.2 0.2 0.2 1 1 50 100 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 14) +(Unnamed gradient 14) 1 4 Bd +[ +< +000102030405060708090A0B0C0D0E0F10111212131415161718191A1B1C1D1D1E1F202122232425 +25262728292A2B2B2C2D2E2F303031323334353536373839393A3B3C3C3D3E3F3F40414242434445 +4546474848494A4A4B4C4D4D4E4F4F5051515253535455555656575858595A5A5B5B5C5D5D5E5E5F +5F6061616262636364646566666767686869696A6A6B6B6C6C6D6D6D6E6E6F6F7070717171727273 +737374747575757676767777777878787979797A7A7A7B7B7B7B7C7C7C7C7D7D7D7D7E7E7E7E7E7F +7F7F7F7F8080808080808080818181818181818181 +> +< +000001010102020203030304040404050505060606070707080808080909090A0A0A0A0B0B0B0C0C +0C0C0D0D0D0E0E0E0E0F0F0F10101010111111111212121213131313141414141515151516161616 +171717171818181818191919191A1A1A1A1A1B1B1B1B1C1C1C1C1C1D1D1D1D1D1E1E1E1E1E1F1F1F +1F1F1F20202020202121212121212222222222222323232323232324242424242424252525252525 +25262626262626262627272727272727272728282828282828282828282929292929292929292929 +292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A +> +< +00000000000000000101010101010101010101010101010202020202020202020202020202020203 +03030303030303030303030303030303040404040404040404040404040404040404050505050505 +05050505050505050505050505050606060606060606060606060606060606060606060607070707 +07070707070707070707070707070707070707070707070808080808080808080808080808080808 +08080808080808080808080808080808080808080909090909090909090909090909090909090909 +090909090909090909090909090909090909090909 +> +< +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101 +> +1 %_Br +< +8182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8 +A9AAABACADAEAFB0B1B2B3B4B5B6B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1 +D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECED +> +< +2A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F5051 +52535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576777879 +7A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495 +> +< +09090909090909090909090909090909090908080808080808080808080808080808080808080808 +08080808080808080808080808080707070707070707070707070707070707070707070707070707 +07070707070707070706060606060606060606060606060606060606 +> +< +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000 +> +1 %_Br +< +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE +EEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF +EFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 +> +< +95959696969797979898989999999A9A9A9B9B9B9C9C9C9D9D9D9E9E9F9F9FA0A0A0A1A1A1A2A2A3 +A3A3A4A4A4A5A5A5A6A6A7A7A7A8A8A8A9A9AAAAAAABABABACACADADADAEAEAEAFAFB0B0B0B1B1B1 +B2B2B3B3B3B4B4B5B5B5B6B6B6B7B7B8B8 +> +< +06070708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1E1E1F20212223242526272829 +2A2B2C2C2D2E2F303132333435363738393A3B3C3D3E3F40414243444445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F60 +> +< +0001020203040506070708090A0B0C0D0E0F0F101112131415161718191A1B1C1C1D1E1F20212223 +2425262728292A2B2C2D2E2F30313232333435363738393A3B3C3D3E3F404142434445464748494A +4B4C4D4E4F505152535455565758595A5B +> +1 %_Br +[ +0 0 0 0 1 33.3333 0 %_BS +%_0 0 0 0 1 33.3333 0 Bs +0.5059 0.1647 0.0353 0.0039 1 50 29.2135 %_BS +%_0.5059 0.1647 0.0353 0.0039 1 50 29.2135 Bs +0.9294 0.5843 0.0235 0 1 51.9231 64.6067 %_BS +%_0.9294 0.5843 0.0235 0 1 51.9231 64.6067 Bs +0.9412 0.7216 0.3765 0.3569 1 51.9231 100 %_BS +%_0.9412 0.7216 0.3765 0.3569 1 51.9231 100 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 18) +(Unnamed gradient 18) 1 4 Bd +[ +< +000102030405060708090A0B0C0D0E0F10111212131415161718191A1B1C1D1D1E1F202122232425 +25262728292A2B2B2C2D2E2F303031323334353536373839393A3B3C3C3D3E3F3F40414242434445 +4546474848494A4A4B4C4D4D4E4F4F5051515253535455555656575858595A5A5B5B5C5D5D5E5E5F +5F6061616262636364646566666767686869696A6A6B6B6C6C6D6D6D6E6E6F6F7070717171727273 +737374747575757676767777777878787979797A7A7A7B7B7B7B7C7C7C7C7D7D7D7D7E7E7E7E7E7F +7F7F7F7F8080808080808080818181818181818181 +> +< +000001010102020203030304040404050505060606070707080808080909090A0A0A0A0B0B0B0C0C +0C0C0D0D0D0E0E0E0E0F0F0F10101010111111111212121213131313141414141515151516161616 +171717171818181818191919191A1A1A1A1A1B1B1B1B1C1C1C1C1C1D1D1D1D1D1E1E1E1E1E1F1F1F +1F1F1F20202020202121212121212222222222222323232323232324242424242424252525252525 +25262626262626262627272727272727272728282828282828282828282929292929292929292929 +292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A +> +< +00000000000000000101010101010101010101010101010202020202020202020202020202020203 +03030303030303030303030303030303040404040404040404040404040404040404050505050505 +05050505050505050505050505050606060606060606060606060606060606060606060607070707 +07070707070707070707070707070707070707070707070808080808080808080808080808080808 +08080808080808080808080808080808080808080909090909090909090909090909090909090909 +090909090909090909090909090909090909090909 +> +< +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101 +> +1 %_Br +< +8182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8 +A9AAABACADAEAFB0B1B2B3B4B5B6B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1 +D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECED +> +< +2A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F5051 +52535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576777879 +7A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495 +> +< +09090909090909090909090909090909090908080808080808080808080808080808080808080808 +08080808080808080808080808080707070707070707070707070707070707070707070707070707 +07070707070707070706060606060606060606060606060606060606 +> +< +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000 +> +1 %_Br +< +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC +ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC +ECECECECECECECECECECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB +EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB +> +< +959595969696969697979797979898989899999999999A9A9A9A9B9B9B9B9B9C9C9C9C9D9D9D9D9E +9E9E9E9E9F9F9F9FA0A0A0A0A1A1A1A1A2A2A2A2A2A3A3A3A3A4A4A4A4A5A5A5A5A6A6A6A6A7A7A7 +A7A7A8A8A8A8A9A9A9A9AAAAAAAAABABABABACACACACADADADADAEAEAEAEAFAFAFAFB0B0B0B0B1B1 +B1B1B1B2B2B2B2B3B3B3B3B4B4B4B4B5B5B5B5B6B6B6B6B7B7B7B7B8B8B8B8B9B9B9B9BABABABABB +BBBBBBBCBCBCBCBDBDBDBDBEBEBEBEBFBFBFBFC0C0C0C1C1C1 +> +< +06060707080809090A0A0B0B0C0D0D0E0E0F0F1010111112131314141515161617181819191A1A1B +1B1C1D1D1E1E1F1F20212122222324242525262627282829292A2B2B2C2C2D2D2E2F2F3030313232 +3333343535363637383839393A3A3B3C3C3D3D3E3F3F404041424243434445454646474848494A4A +4B4B4C4D4D4E4E4F50505151525353545455565657585859595A5B5B5C5C5D5E5E5F5F6061616263 +63646465666667676869696A6B6B6C6C6D6E6E6F7070717172 +> +< +0001010203040505060708090A0B0B0C0D0E0F10111212131415161718191A1A1B1C1D1E1F202122 +23242425262728292A2B2C2D2E2F30313132333435363738393A3B3C3D3E3F404141424344454647 +48494A4B4C4D4E4F50515253545556565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E +6F70717273747576777879797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495 +969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAE +> +1 %_Br +[ +0 0 0 0 1 33.3333 0 %_BS +%_0 0 0 0 1 33.3333 0 Bs +0.5059 0.1647 0.0353 0.0039 1 50 35.955 %_BS +%_0.5059 0.1647 0.0353 0.0039 1 50 35.955 Bs +0.9294 0.5843 0.0235 0 1 51.9231 85.3932 %_BS +%_0.9294 0.5843 0.0235 0 1 51.9231 85.3932 Bs +0.9216 0.7569 0.4471 0.6824 1 51.9231 100 %_BS +%_0.9216 0.7569 0.4471 0.6824 1 51.9231 100 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 35) +(Unnamed gradient 35) 0 2 Bd +[ +0 +< +666564636261605F5E5D5C5B5A5958565554535251504F4E4D4C4B4A49484746454443424140 +> +1 +0 +1 %_Br +[ +0 0.25 1 0 1 50 76.0736 %_BS +%_0 0.25 1 0 1 50 76.0736 Bs +0 0.4 1 0 1 50 23.3129 %_BS +%_0 0.4 1 0 1 50 23.3129 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 4) +(Unnamed gradient 4) 1 2 Bd +[ +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F8081 +> +< +0000010101020202030303040404050505060606070707070808080909090A0A0A0B0B0B0C0C0C0D +0D0D0E0E0E0F0F0F101010111111121212131313141414151515151616161717171818181919191A +1A1A1B1B1B1C1C1C1D1D1D1E1E1E1F1F1F2020202121212222222323232324242425252526262627 +27272828282929292A2A +> +< +00000000000000000101010101010101010101010101020202020202020202020202020203030303 +03030303030303030303030404040404040404040404040404050505050505050505050505050506 +06060606060606060606060606060707070707070707070707070707080808080808080808080808 +08080909090909090909 +> +< +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101 +> +1 %_Br +[ +0 0 0 0 1 50 0 %_BS +%_0 0 0 0 1 50 0 Bs +0.5059 0.1647 0.0353 0.0039 1 50 100 %_BS +%_0.5059 0.1647 0.0353 0.0039 1 50 100 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 41) +(Unnamed gradient 41) 1 2 Bd +[ +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1E1F202122232425262728 +292A2B2C2D2E2F303132333435363738393A +> +< +000101020303040405060607080809090A0B0B0C0D0D0E0F0F101011121213141415151617171819 +191A1B1B1C1C1D1E1E1F2020212122232324 +> +< +00000001010101020202020303030303040404040505050505060606060707070708080808080909 +09090A0A0A0A0A0B0B0B0B0C0C0C0C0D0D0D +> +< +00000000000000000000000000000001010101010101010101010101010101010101010101010101 +010101020202020202020202020202020202 +> +1 %_Br +[ +0 0 0 0 1 50 0 %_BS +%_0 0 0 0 1 50 0 Bs +0.2275 0.1412 0.051 0.0078 1 50 100 %_BS +%_0.2275 0.1412 0.051 0.0078 1 50 100 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 5) +(Unnamed gradient 5) 1 4 Bd +[ +< +000102030405060708090A0B0C0D0E0F10111212131415161718191A1B1C1D1D1E1F202122232425 +25262728292A2B2B2C2D2E2F303031323334353536373839393A3B3C3C3D3E3F3F40414242434445 +4546474848494A4A4B4C4D4D4E4F4F5051515253535455555656575858595A5A5B5B5C5D5D5E5E5F +5F6061616262636364646566666767686869696A6A6B6B6C6C6D6D6D6E6E6F6F7070717171727273 +737374747575757676767777777878787979797A7A7A7B7B7B7B7C7C7C7C7D7D7D7D7E7E7E7E7E7F +7F7F7F7F8080808080808080818181818181818181 +> +< +000001010102020203030304040404050505060606070707080808080909090A0A0A0A0B0B0B0C0C +0C0C0D0D0D0E0E0E0E0F0F0F10101010111111111212121213131313141414141515151516161616 +171717171818181818191919191A1A1A1A1A1B1B1B1B1C1C1C1C1C1D1D1D1D1D1E1E1E1E1E1F1F1F +1F1F1F20202020202121212121212222222222222323232323232324242424242424252525252525 +25262626262626262627272727272727272728282828282828282828282929292929292929292929 +292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A +> +< +00000000000000000101010101010101010101010101010202020202020202020202020202020203 +03030303030303030303030303030303040404040404040404040404040404040404050505050505 +05050505050505050505050505050606060606060606060606060606060606060606060607070707 +07070707070707070707070707070707070707070707070808080808080808080808080808080808 +08080808080808080808080808080808080808080909090909090909090909090909090909090909 +090909090909090909090909090909090909090909 +> +< +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101 +> +1 %_Br +< +8182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8 +A9AAABACADAEAFB0B1B2B3B4B5B6B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1 +D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECED +> +< +2A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F5051 +52535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576777879 +7A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495 +> +< +09090909090909090909090909090909090908080808080808080808080808080808080808080808 +08080808080808080808080808080707070707070707070707070707070707070707070707070707 +07070707070707070706060606060606060606060606060606060606 +> +< +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000 +> +1 %_Br +< +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC +ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC +ECECECECECECECECECECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB +EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB +> +< +959595969696969697979797979898989899999999999A9A9A9A9B9B9B9B9B9C9C9C9C9D9D9D9D9E +9E9E9E9E9F9F9F9FA0A0A0A0A1A1A1A1A2A2A2A2A2A3A3A3A3A4A4A4A4A5A5A5A5A6A6A6A6A7A7A7 +A7A7A8A8A8A8A9A9A9A9AAAAAAAAABABABABACACACACADADADADAEAEAEAEAFAFAFAFB0B0B0B0B1B1 +B1B1B1B2B2B2B2B3B3B3B3B4B4B4B4B5B5B5B5B6B6B6B6B7B7B7B7B8B8B8B8B9B9B9B9BABABABABB +BBBBBBBCBCBCBCBDBDBDBDBEBEBEBEBFBFBFBFC0C0C0C1C1C1 +> +< +06060707080809090A0A0B0B0C0D0D0E0E0F0F1010111112131314141515161617181819191A1A1B +1B1C1D1D1E1E1F1F20212122222324242525262627282829292A2B2B2C2C2D2D2E2F2F3030313232 +3333343535363637383839393A3A3B3C3C3D3D3E3F3F404041424243434445454646474848494A4A +4B4B4C4D4D4E4E4F50505151525353545455565657585859595A5B5B5C5C5D5E5E5F5F6061616263 +63646465666667676869696A6B6B6C6C6D6E6E6F7070717172 +> +< +0001010203040505060708090A0B0B0C0D0E0F10111212131415161718191A1A1B1C1D1E1F202122 +23242425262728292A2B2C2D2E2F30313132333435363738393A3B3C3D3E3F404141424344454647 +48494A4B4C4D4E4F50515253545556565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E +6F70717273747576777879797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495 +969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAE +> +1 %_Br +[ +0 0 0 0 1 33.3333 0 %_BS +%_0 0 0 0 1 33.3333 0 Bs +0.5059 0.1647 0.0353 0.0039 1 50 56.7416 %_BS +%_0.5059 0.1647 0.0353 0.0039 1 50 56.7416 Bs +0.9294 0.5843 0.0235 0 1 51.9231 85.3932 %_BS +%_0.9294 0.5843 0.0235 0 1 51.9231 85.3932 Bs +0.9216 0.7569 0.4471 0.6824 1 51.9231 100 %_BS +%_0.9216 0.7569 0.4471 0.6824 1 51.9231 100 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 51) +(Unnamed gradient 51) 0 2 Bd +[ +< +1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F +1F202020202020202021212121212121222222222223232323232324242424252525252526262626 +27272728282828292929292A2A2A2B2B2B2C2C2C2D2D2D2E2E2E2F2F2F3030313131323233333334 +3435353636363737383839393A3A3B3B3C3C3C3D3E3E3F3F40404141424243434444454646474748 +49494A4A4B4C4C4D4D4E4F4F5051515253535455555657575859595A5B5C5C5D5E5F5F6061626263 +646566666768696A6A6B6C6D6E6E6F70717273747475767778797A7B7C7C7D7E7F80818283848586 +8788898A8B8C8D8E +> +< +16161616161616161616161616161616161616161616161616161616161616171717171717171717 +17171718181818181818181819191919191919191A1A1A1A1A1A1B1B1B1B1B1B1C1C1C1C1C1D1D1D +1D1D1E1E1E1E1E1F1F1F1F2020202021212121222222222323232424242525252526262627272728 +28282929292A2A2A2B2B2C2C2C2D2D2D2E2E2F2F2F30303131323232333334343535353636373738 +3839393A3A3B3B3C3C3D3D3E3E3F3F4040414142434344444545464747484849494A4B4B4C4C4D4E +4E4F5050515252535354555556575758595A5A5B5C5C5D5E5E5F606161626364646566676768696A +6A6B6C6D6E6E6F70 +> +< +11111111111111111111111111111111111111111111111111111111111111121212121212121212 +12121213131313131313131314141414141414151515151515161616161616171717171718181818 +18191919191A1A1A1A1A1B1B1B1B1C1C1C1D1D1D1D1E1E1E1F1F1F1F202020212121222222232323 +242424252525262627272728282929292A2A2B2B2B2C2C2D2D2E2E2E2F2F30303131323233333434 +353536363737383839393A3A3B3B3C3D3D3E3E3F3F404041424243434445454646474848494A4A4B +4C4C4D4E4E4F5050515252535454555656575859595A5B5C5C5D5E5F5F6061626263646566666768 +696A6A6B6C6D6E6F +> +< +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000010101010101010101010101010101010101010101010101010101010102020202020202 +02020202020202020202020203030303030303030303030303030304040404040404040404040405 +05050505050505050505050606060606060606060607070707070707070708080808080808080809 +090909090909090A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0C0C0C0C0C0C0C0D0D0D0D0D0D0D0E0E0E0E +0E0E0E0F0F0F0F0F0F10101010101011111111111112121212121313131313131414141414151515 +1515161616161617 +> +1 %_Br +[ +0.555993 0.439094 0.433417 0.088563 1 50 100 %_BS +%_0.555993 0.439094 0.433417 0.088563 1 50 100 Bs +0.115175 0.08484 0.065003 0 1 73.0337 0 %_BS +%_0.115175 0.08484 0.065003 0 1 73.0337 0 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 54) +(Unnamed gradient 54) 0 2 Bd +[ +< +1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F202020202020202121 +2121212122222222222323232323242424242525252526262627272727282828292929292A2A2A2B +2B2B2C2C2C2D2D2E2E2E2F2F2F30303131313232333333343435353636373737383839393A3A3B3B +3C3C3D3D3E3E3F3F4040414142434344444545464747484849494A4B4B4C4C4D4E4E4F5050515252 +535354555556575858595A5A5B5C5C5D5E5F5F606161626364646566676768696A6B6B6C6D6E6F6F +7071727373747576777878797A7B7C7D7E7F7F80818283848586878888898A8B8C8D8E8F90919293 +9495969798999A9B9C9D +> +< +16161616161616161616161616161616161616161616171717171717171717171718181818181818 +181919191919191A1A1A1A1A1A1B1B1B1B1B1C1C1C1C1C1D1D1D1D1D1E1E1E1E1F1F1F1F20202020 +212121222222222323232424242525252626262727272828282929292A2A2A2B2B2C2C2C2D2D2D2E +2E2F2F30303031313232323333343435353636373737383839393A3A3B3B3C3C3D3D3E3E3F3F4040 +414242434344444545464647484849494A4A4B4C4C4D4D4E4F4F5050515252535454555656575758 +59595A5B5B5C5D5D5E5F6060616262636464656667676869696A6B6C6C6D6E6F6F70717273737475 +76767778797A7A7B7C7D +> +< +11111111111111111111111111111111111111111111121212121212121212121313131313131313 +1414141414141515151515151616161616171717171718181818191919191A1A1A1A1B1B1B1B1C1C +1C1D1D1D1D1E1E1E1F1F1F2020202121212222222323232424242525262626272728282829292A2A +2A2B2B2C2C2D2D2E2E2E2F2F30303131323233333434353536363737383839393A3A3B3B3C3C3D3E +3E3F3F40404141424343444445464647474849494A4B4B4C4C4D4E4E4F5050515252535454555656 +575858595A5B5B5C5D5D5E5F60606162636364656666676869696A6B6C6C6D6E6F70707172737475 +75767778797A7A7B7C7D +> +< +00000000000000000000000000000000000000000000000000000101010101010101010101010101 +01010101010202020202020202020202020203030303030303030303030404040404040404040505 +050505050505060606060606060607070707070707080808080808080909090909090A0A0A0A0A0A +0B0B0B0B0B0B0C0C0C0C0C0D0D0D0D0D0E0E0E0E0E0F0F0F0F0F1010101010111111111112121212 +131313131414141414151515151616161617171717181818181919191A1A1A1A1B1B1B1B1C1C1C1D +1D1D1D1E1E1E1F1F1F1F202020212121222222222323232424242525252626262727272828282929 +292A2A2A2B2B2B2C2C2C +> +1 %_Br +[ +0.614191 0.489448 0.489815 0.173739 1 50 100 %_BS +%_0.614191 0.489448 0.489815 0.173739 1 50 100 Bs +0.115175 0.08484 0.065003 0 1 70.2247 0 %_BS +%_0.115175 0.08484 0.065003 0 1 70.2247 0 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 83) +(Unnamed gradient 83) 1 2 Bd +[ +< +A6A5A4A3A2A1A09F9E9D9C9B9A9897969594939291908F8E8D8C +> +0 +1 +< +1A1817161514131211100F0E0D0C0B0A09080706050403020100 +> +1 %_Br +[ +0.65 0 1 0.1 1 50 34.7917 %_BS +%_0.65 0 1 0.1 1 50 34.7917 Bs +0.55 0 1 0 1 50 76.0736 %_BS +%_0.55 0 1 0 1 50 76.0736 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Verblassender Himmel) +(Verblassender Himmel) 0 2 Bd +[ +0.8 +0.4 +0 +< +00 +> +1 %_Br +[ +0.8 0.4 0 0.000031 1 50 100 %_BS +%_0.8 0.4 0 0.000031 1 50 100 Bs +0.8 0.4 0 0 1 50 0 %_BS +%_0.8 0.4 0 0 1 50 0 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Wei\737, Schwarz) +(Wei\737, Schwarz) 0 2 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +[ +0 0 0 1 1 50 100 %_BS +%_0 0 0 1 1 50 100 Bs +0 0 0 0 1 50 0 %_BS +%_0 0 0 0 1 50 0 Bs +BD +%AI5_EndGradient +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI3_BeginPattern: (Pompadour) +(Pompadour) 218.1958 183.1699 385.1958 350.1699 [ +%AI3_Tile +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +407.2622 96.3711 m +407.3872 96.3711 407.4927 96.4629 407.5103 96.585 c +409.8911 112.5996 419.1646 125.9746 431.9028 133.9814 c +432.0063 134.0449 432.0493 134.1758 432.0044 134.29 c +431.9575 134.4023 431.8384 134.4688 431.7173 134.4443 c +421.2466 132.3398 411.9243 126.5811 405.27 118.4141 C +400.645 131.7891 390.0337 140.418 376.9692 144.0654 C +381.7778 149.6582 379.2622 157.5986 371.8501 158.9023 c +371.7368 158.9229 371.6255 158.8643 371.5767 158.7607 c +371.5278 158.6563 371.5552 158.5322 371.6431 158.46 c +375.6157 155.1143 374.1626 147.04 362.3052 147.04 c +354.5103 147.04 349.4849 150.2188 349.4849 154.5254 c +349.4849 157.9102 352.5474 159.7559 355.1255 159.7559 c +359.5415 159.7559 362.0649 155.7949 360.1685 152.2129 c +360.1138 152.1104 360.1353 151.9814 360.2231 151.9033 c +360.311 151.8271 360.4399 151.8184 360.5376 151.8857 c +362.7856 153.4492 364.356 155.5059 364.356 158.6768 c +364.356 164.0635 359.3306 169.8066 351.0239 169.8066 c +342.1021 169.8066 334.0005 162.9355 334.0005 154.5254 c +334.0005 142.71 344.0493 137.0918 354.6138 136.0918 C +350.2485 134.4189 346.981 129.5664 v +346.9146 129.4697 346.9243 129.3418 347.0024 129.2559 c +347.0806 129.1689 347.2056 129.1475 347.3091 129.2012 c +353.1392 132.2822 359.7954 133.9453 366.811 133.9453 c +386.4321 133.9453 403.3579 117.541 407.0103 96.5801 c +407.0317 96.4561 407.1392 96.3691 407.2622 96.3711 c +f +483.9399 148.7773 m +488.5493 156.4551 490.1919 169.627 485.897 179.46 c +485.8481 179.5703 485.8833 179.6992 485.9829 179.7686 c +486.0806 179.8379 486.2153 179.8281 486.3032 179.7461 c +491.1099 175.1914 495.2427 164.5684 493.0083 152.2871 C +496.106 149.8936 498.0532 147.5176 499.522 144.335 c +499.5688 144.2314 499.5415 144.1104 499.4556 144.0352 c +499.3696 143.9629 499.2446 143.9551 499.1489 144.0186 c +494.1528 147.3809 489.686 148.5283 483.9399 148.7773 C +f +473.3306 28.9707 m +473.4009 28.8672 473.3833 28.7266 473.2915 28.6426 c +473.1978 28.5586 473.0571 28.5547 472.9595 28.6348 c +466.145 34.1621 457.0845 37.6895 445.9243 37.6895 c +418.3521 37.6895 400.9517 21.1719 398.2173 3.76367 c +398.1997 3.65234 398.1099 3.56641 397.9985 3.55078 c +397.8872 3.53711 397.7778 3.59766 397.7329 3.70117 c +395.0083 9.95898 393.3657 19.0352 401.7817 31.209 c +406.8169 38.4941 412.9106 43.5098 412.9106 50.0273 c +412.9106 54.2852 410.6509 57.1797 407.2231 57.1797 c +403.6177 57.1797 401.2876 54.0918 401.2876 50.625 c +401.2876 48.877 401.7915 47.1465 402.6958 45.5801 c +402.7544 45.4766 402.7368 45.3496 402.6509 45.2676 c +402.5649 45.1875 402.436 45.1758 402.3384 45.2402 c +399.3657 47.1777 396.7114 50.6367 396.7114 55.5117 c +396.7114 62.6836 402.8442 68.6816 411.1802 68.6816 c +420.1548 68.6816 427.5044 61.6328 427.5044 51.4922 c +427.5044 48.0156 426.5142 43.8242 424.0415 40.3613 C +427.4263 43.1875 429.2329 45.1875 430.7192 49.5117 C +441.1196 51.3223 452.2251 49.6602 461.0493 43.8691 C +461.3052 49.9707 463.3013 55.0605 467.3931 59.1875 c +467.4771 59.2715 467.6079 59.2852 467.7075 59.2227 c +467.8091 59.1582 467.8521 59.0332 467.811 58.9219 c +464.9341 50.9199 466.8657 38.7246 473.3306 28.9707 c +f +560.6978 35.6055 m +558.4517 30.8066 553.2388 28.1211 547.2368 28.0117 c +547.1118 28.0098 547.0044 28.0977 546.9829 28.2188 c +546.9595 28.3418 547.0278 28.4609 547.1431 28.5039 c +549.1899 29.2578 550.8052 30.5762 551.6646 32.4141 c +553.8774 37.1426 550.2974 43.5098 543.6509 46.7832 c +543.5728 46.8223 543.52 46.8965 543.5103 46.9824 c +543.5005 47.0684 543.5337 47.1523 543.6001 47.207 c +547.8911 50.7266 553.0122 57.2617 553.0122 70.627 c +553.0122 89.3086 540.8579 107.0898 524.7368 107.0898 c +515.5239 107.0898 508.104 100.6934 504.2661 91.0977 C +508.4868 96.8564 514.2446 101.2051 522.1782 101.2051 c +533.8208 101.2051 543.0337 88.7969 543.0337 70.8828 c +543.0337 53.9941 531.1333 34.2891 515.2681 34.2891 c +506.5669 34.2891 500.0435 41.3281 500.0435 50.4121 c +500.0435 58.4746 505.2896 63.0781 511.1763 63.0781 c +515.6099 63.0781 518.6685 59.9473 519.6196 56.5527 c +519.6509 56.4375 519.6001 56.3164 519.4927 56.2598 c +519.3872 56.2051 519.2583 56.2305 519.1802 56.3223 c +518.4282 57.2168 517.2837 57.9609 515.5259 57.9609 c +512.5825 57.9609 511.0474 55.4316 511.0474 53.6113 c +511.0474 50.1563 513.606 47.7246 517.4458 47.7246 c +522.6899 47.7246 526.7856 53.4824 526.7856 60.9023 c +526.7856 70.1152 517.9556 78.5586 509.1274 78.5586 c +500.106 78.5586 490.4478 70.5 490.4478 55.5293 c +490.4478 40.8164 500.4282 23.9258 516.2935 23.9258 c +525.5435 23.9258 533.4048 28.0957 539.436 35.002 c +539.5161 35.0918 539.6489 35.1152 539.7544 35.0547 c +539.8599 34.9941 539.9067 34.8672 539.8677 34.752 c +535.4341 21.8164 537.9126 9.60742 544.688 9.60742 c +548.0024 9.60742 549.6899 11.9863 549.6899 14.5234 c +549.6899 17.1309 547.7915 19.2852 544.7212 19.6777 c +544.6001 19.6934 544.5063 19.793 544.4985 19.9141 c +544.4927 20.0352 544.5708 20.1465 544.6899 20.1758 c +551.5044 21.9395 558.5142 18.2285 558.5142 11.1328 c +558.5142 4.85547 553.1372 0.001953 546.1021 0.001953 c +535.4653 0.001953 530.3774 11.2715 532.6431 21.5371 C +527.1841 14.4922 519.0903 8.70117 507.4653 8.70117 c +483.9224 8.70117 472.0239 35.5703 472.0239 53.6113 c +472.0239 69.9883 475.3501 80.4785 482.2603 88.5391 C +474.1978 82.3984 470.8716 75.6172 469.3384 66.2773 C +463.1958 57.832 447.2036 57.832 v +440.5161 57.832 434.2739 60.3086 429.4302 64.998 C +429.4282 64.9961 429.4263 64.9941 429.4243 64.9902 C +429.3892 65.0313 429.3501 65.0703 429.3149 65.1094 C +428.9946 65.4238 428.6802 65.748 428.3716 66.082 C +423.3091 70.9316 413.1802 75.4785 403.9399 71.6797 c +403.8345 71.6367 403.7134 71.6699 403.6431 71.7578 c +403.5728 71.8477 403.5708 71.9727 403.6392 72.0645 c +408.0454 78.0898 415.6626 80.0059 421.3169 79.1309 C +420.272 82.8457 419.6938 87.0117 419.6938 91.6094 c +419.6938 108.0137 428.4927 119.5801 438.106 125.2109 C +434.9517 129.0137 435.5962 134.9883 439.1372 139.0449 c +439.2173 139.1357 439.3481 139.1582 439.4536 139.0996 c +439.5571 139.041 439.606 138.918 439.5708 138.8018 c +437.8403 133.2695 442.9634 128.6523 449.7524 128.9004 c +449.8755 128.9033 449.9829 128.8193 450.0103 128.6992 c +450.0356 128.5801 449.9712 128.457 449.8579 128.4111 c +439.7212 124.248 433.0005 115.4316 433.0005 104.4033 c +433.0005 92.8906 439.9087 83.5488 451.0415 83.5488 c +460.1255 83.5488 469.2095 91.8672 469.2095 102.2285 c +469.2095 110.2891 464.731 115.0225 458.9731 115.0225 c +453.9849 115.0225 450.0181 111.5684 450.0181 107.4736 c +450.0181 101.6211 456.6001 99.499 460.1118 104.1309 c +460.1821 104.2227 460.3032 104.2559 460.4087 104.2129 c +460.5161 104.1699 460.5806 104.0625 460.5669 103.9482 c +460.0435 99.5586 456.8149 95.4482 451.8091 95.4482 c +447.2036 95.4482 442.4692 99.2861 442.4692 107.4746 c +442.4692 117.1982 451.8071 127.0508 467.1606 127.0508 c +488.1431 127.0508 499.5317 103.3809 489.2974 84.4453 C +494.5415 90.459 499.2759 96.8555 499.2759 108.2432 c +499.2759 129.75 478.0122 144.291 452.9224 135.7441 c +452.8032 135.7021 452.6724 135.7559 452.6157 135.8672 c +452.5571 135.9785 452.5884 136.1143 452.6899 136.1895 c +459.6958 141.2979 467.0337 148.8262 467.0337 161.4668 c +467.0337 174.6475 458.3345 183.9854 444.772 183.9854 c +434.2798 183.9854 427.6274 177.5879 427.6274 170.04 c +427.6274 164.2822 431.3462 159.6768 437.7349 159.6768 c +447.2466 159.6768 450.481 170.0195 445.5591 174.6445 c +445.4751 174.7236 445.4556 174.8516 445.5103 174.9521 c +445.5669 175.0547 445.6841 175.1055 445.7974 175.0762 c +450.5669 173.8398 455.1353 169.0068 455.1353 161.7236 c +455.1353 149.1855 443.4927 140.8682 430.6978 140.8682 c +424.7017 140.8682 418.8989 142.623 414.2271 145.9102 C +414.7778 150.0635 413.3579 154.6602 411.2603 157.752 C +413.2095 150.8848 411.1021 139.5732 400.5864 139.5732 c +394.6958 139.5732 390.8013 144.1025 390.8013 149.4551 c +390.8013 155.7793 396.147 158.7314 400.4966 158.125 c +400.6118 158.1104 400.7017 158.0186 400.7134 157.9023 c +400.7271 157.7891 400.6606 157.6797 400.5532 157.6367 c +398.9673 157.0293 397.6118 155.3691 397.6118 153.373 c +397.6118 150.873 399.52 149.3906 401.52 149.3906 c +404.8149 149.3906 406.645 153.0605 405.4927 157.1104 C +405.5044 157.1104 L +404.4321 159.9473 403.8286 163.1152 403.8286 166.6055 c +403.8286 183.3672 422.0103 199.3398 444.9497 199.3398 c +469.1626 199.3398 482.0044 182.0664 482.0044 164.2822 c +482.0044 154.7461 478.4224 147.5225 473.8149 142.915 C +493.7368 145.0332 506.313 136.5176 513.0942 124.2354 C +508.6157 120.3975 506.9536 114.7676 Y +512.3267 121.8057 521.5376 127.9453 534.4595 127.9453 c +554.0356 127.9453 569.3911 108.7539 569.3911 88.1563 c +569.3911 75.084 564.5884 62.375 554.8267 53.9102 C +560.8638 48.8809 563.4731 41.5391 560.6978 35.6055 c +f +*U +*u +482.2114 160.9053 m +482.1782 160.7852 482.2388 160.6582 482.3521 160.6094 c +497.1763 154.0957 507.6372 141.6289 512.0063 127.2324 c +512.0415 127.1152 512.1548 127.0391 512.2778 127.0527 c +512.3989 127.0664 512.4946 127.166 512.5024 127.2871 c +513.229 137.9434 510.1274 148.4531 504.0005 157.0234 C +518.1216 157.9648 529.2407 165.9297 536.1997 177.5723 C +540.3286 171.46 548.6509 171.7969 551.8599 178.6035 c +551.9106 178.708 551.8833 178.832 551.7954 178.9063 c +551.7075 178.9805 551.5806 178.9873 551.4868 178.9219 c +547.2134 175.9688 539.8071 179.498 542.9282 190.9355 c +544.981 198.4561 549.3716 202.4668 553.5259 201.333 c +556.7915 200.4414 557.7661 197.002 557.0864 194.5146 c +555.9243 190.2539 551.438 188.8623 548.481 191.6357 c +548.397 191.7158 548.2681 191.7285 548.1704 191.6641 c +548.0728 191.5986 548.0298 191.4775 548.0688 191.3662 c +548.9868 188.7852 550.5571 186.7285 553.6157 185.8936 c +558.811 184.4756 565.6743 187.8115 567.8618 195.8252 c +570.2114 204.4316 565.7153 214.0566 557.604 216.2715 c +546.2036 219.3818 538.1392 211.166 534.3931 201.2383 C +533.9263 205.8896 530.1079 210.3203 v +530.0317 210.4092 529.9048 210.4336 529.8013 210.3818 c +529.6978 210.3291 529.6431 210.2129 529.6665 210.0996 c +531.106 203.6641 530.9575 196.8047 529.1099 190.0361 c +523.9438 171.1074 503.6626 159.0977 482.479 161.0938 c +482.354 161.1055 482.2407 161.0254 482.2114 160.9053 c +f +512.5806 73.1348 m +518.7739 66.666 531.0493 61.6133 541.6646 63.168 c +541.7856 63.1855 541.9009 63.1172 541.9399 63.0039 c +541.981 62.8906 541.936 62.7637 541.8345 62.7012 c +536.1743 59.2617 524.8384 58.0723 513.5786 63.4609 C +510.4536 61.1035 507.6489 59.8496 504.1919 59.2715 c +504.0806 59.2539 503.9692 59.3125 503.9204 59.4141 c +503.8735 59.5156 503.8989 59.6387 503.9849 59.7148 c +508.5454 63.6484 510.8286 67.6563 512.5806 73.1348 C +f +399.7935 114.9121 m +399.6763 114.8711 399.5454 114.9258 399.4888 115.0371 c +399.4321 115.1484 399.4653 115.2852 399.5688 115.3594 c +406.6938 120.4785 412.4829 128.291 415.4204 139.0566 c +422.6802 165.6563 411.3267 186.792 395.2544 194.0146 c +395.1509 194.0605 395.0903 194.1689 395.106 194.2803 c +395.1216 194.3926 395.2095 194.4814 395.3208 194.4971 c +402.0747 195.4785 411.2622 194.6729 420.7915 183.3486 c +426.4927 176.5732 429.7271 169.373 436.0142 167.6563 c +440.1216 166.5352 443.5103 167.9551 444.4126 171.2617 c +445.3618 174.7393 442.9966 177.8018 439.6528 178.7148 c +437.9653 179.1738 436.1626 179.1436 434.4146 178.6836 c +434.2993 178.6533 434.1821 178.7051 434.1255 178.8086 c +434.0708 178.9121 434.0923 179.04 434.1802 179.1172 c +436.8325 181.4746 440.8677 183.125 445.5708 181.8408 c +452.4907 179.9531 456.6606 172.457 454.4673 164.415 c +452.104 155.7578 443.3696 150.5234 433.5864 153.1934 c +430.2329 154.1084 426.4497 156.168 423.7603 159.4648 C +425.5942 155.4551 427.0493 153.1855 430.8286 150.6133 C +429.8364 140.1035 425.3091 129.8271 417.4009 122.8389 C +423.2192 120.9863 427.604 117.7207 430.5083 112.6855 c +430.5669 112.582 430.5454 112.4531 430.4595 112.373 c +430.3696 112.293 430.2388 112.2832 430.1411 112.3535 c +423.1802 117.2344 410.9048 118.582 399.7935 114.9121 c +f +383.1919 28.8809 m +379.1548 32.3105 377.936 38.0469 379.4106 43.8672 c +379.4419 43.9883 379.5552 44.0684 379.6782 44.0566 c +379.8032 44.0469 379.8989 43.9492 379.9106 43.8281 c +380.0981 41.6543 380.9458 39.748 382.4927 38.4355 c +386.4712 35.0566 393.5571 36.834 398.4634 42.3828 c +398.522 42.4492 398.6079 42.4805 398.6938 42.4668 c +398.7798 42.4531 398.8521 42.3984 398.8872 42.3203 c +401.1528 37.2539 406.1079 30.5938 419.0005 27.0742 c +437.0239 22.1563 457.3794 29.1992 461.6235 44.752 c +464.0493 53.6406 459.8306 62.4824 451.5845 68.7109 C +456.0298 63.123 458.7075 56.4238 456.6177 48.7695 c +453.5532 37.5391 439.1567 31.918 421.8755 36.6348 c +405.5825 41.0801 389.7075 57.748 393.8833 73.0547 c +396.1743 81.4492 404.6821 85.8887 413.4458 83.4961 c +421.2231 81.375 424.2837 75.1016 422.7329 69.4219 c +421.5669 65.1445 417.7407 63.0195 414.2153 62.9941 c +414.0962 62.9941 413.9927 63.0762 413.9653 63.1934 c +413.9419 63.3105 413.9985 63.4277 414.1079 63.4785 c +415.1704 63.9688 416.188 64.877 416.6509 66.5742 c +417.4263 69.4121 415.3911 71.5605 413.6353 72.0391 c +410.3032 72.9492 407.2837 71.1211 406.272 67.416 c +404.8911 62.3574 409.3677 56.8906 416.5239 54.9355 c +425.4126 52.5117 435.8833 58.8066 438.2075 67.3223 c +440.5825 76.0254 435.3501 87.4648 420.9087 91.4063 c +406.7153 95.2813 387.7935 90.0996 383.6157 74.793 c +381.1802 65.8691 383.1333 57.1875 388.2075 49.5508 c +388.2739 49.4512 388.2622 49.3164 388.1763 49.2305 c +388.0884 49.1445 387.9536 49.1328 387.854 49.2012 c +376.5415 56.8828 364.1118 57.707 362.3267 51.1699 c +361.4536 47.9727 363.3052 45.7188 365.7524 45.0508 c +368.2681 44.3652 370.8462 45.6289 372.0337 48.4883 c +372.0806 48.5996 372.2017 48.6641 372.3208 48.6406 c +372.438 48.6133 372.5259 48.5098 372.522 48.3867 c +372.4302 41.3477 367.0044 35.5625 360.1587 37.4316 c +354.1021 39.084 350.8364 45.5488 352.688 52.3359 c +355.4888 62.5977 367.6997 64.5391 377.0063 59.6504 C +371.647 66.7715 368.1919 76.1035 371.2524 87.3184 c +377.4517 110.0313 406.5044 114.4355 423.9087 109.6855 c +439.7075 105.373 448.9517 99.4023 454.9087 90.6152 C +451.1079 100.0098 445.4419 105.0039 436.8345 108.9434 C +430.3052 117.0918 434.5161 132.5195 v +436.2759 138.9707 440.3091 144.3418 446.1079 147.7793 C +446.1079 147.7813 446.106 147.7842 446.1021 147.7871 C +446.1509 147.8105 446.1997 147.8379 446.2466 147.8613 C +446.6333 148.0879 447.0298 148.3057 447.4321 148.5146 C +453.4438 152.1211 460.4966 160.6973 459.2661 170.6113 c +459.2524 170.7236 459.3149 170.832 459.4185 170.877 c +459.5239 170.9219 459.645 170.8896 459.7153 170.8018 c +464.3677 164.9629 464.2114 157.1104 461.8794 151.8857 C +465.7368 151.915 469.9087 151.375 474.3442 150.165 c +490.1685 145.8457 499.0122 134.3135 501.9126 123.5566 C +506.4106 125.5977 512.0063 123.4043 514.9888 118.9199 c +515.0532 118.8184 515.0415 118.6855 514.9575 118.5996 c +514.8735 118.5156 514.7407 118.5 514.6392 118.5645 c +509.7583 121.6914 503.9556 117.9648 502.4048 111.3496 c +502.3774 111.2305 502.2681 111.1484 502.145 111.1543 c +502.022 111.1602 501.9204 111.2539 501.9067 111.377 c +500.5591 122.251 493.8228 131.0566 483.1841 133.96 c +472.0767 136.9922 461.2446 132.7852 458.3149 122.0469 c +455.9224 113.2832 461.5571 102.3301 471.5513 99.6016 c +479.3286 97.4785 485.0747 100.5527 486.5903 106.1074 c +487.9048 110.9199 485.6157 115.6563 481.6665 116.7344 c +476.0181 118.2754 472.2388 112.4844 475.7837 107.877 c +475.8521 107.7852 475.854 107.6602 475.7837 107.5684 c +475.7153 107.4766 475.5923 107.4434 475.4868 107.4863 c +471.3892 109.1465 468.2739 113.3418 469.5923 118.1729 c +470.8052 122.6152 475.7544 126.1729 483.6548 124.0166 c +493.0356 121.457 500.0806 109.8555 496.0376 95.043 c +490.5142 74.7988 464.6802 70.0449 449.1079 84.9043 C +453.5278 78.2617 458.4517 72.0098 469.438 69.0117 c +490.188 63.3496 509.813 80.0332 508.1724 106.4902 c +508.1646 106.6152 508.2505 106.7285 508.3735 106.7539 c +508.4946 106.7813 508.6196 106.7129 508.6646 106.5977 c +511.7466 98.4922 517.0786 89.4316 529.2739 86.1035 c +541.9888 82.6328 553.2876 88.5664 556.8599 101.6504 c +559.6216 111.7734 555.2017 119.875 547.9204 121.8623 c +542.3657 123.3789 536.9419 121.0039 535.2603 114.8398 c +532.7563 105.6641 541.8833 99.8203 547.6411 103.3516 c +547.7388 103.4121 547.8677 103.3965 547.9497 103.3164 c +548.0337 103.2363 548.0513 103.1094 547.9927 103.0078 c +545.5454 98.7324 539.6802 95.5977 532.6548 97.5156 c +520.5571 100.8164 515.6001 114.2383 518.9673 126.5811 c +520.5454 132.3652 523.7681 137.502 528.1685 141.1426 C +532.0298 139.5186 536.8384 139.6777 540.3735 140.8867 C +533.2349 140.8154 522.8794 145.8262 525.647 155.9707 c +527.1978 161.6533 532.5923 164.2188 537.7563 162.8086 c +543.8579 161.1436 545.2974 155.21 543.5688 151.1729 c +543.522 151.0654 543.4106 151.0039 543.2974 151.0225 c +543.1821 151.04 543.0942 151.1318 543.0825 151.2471 c +542.9146 152.9375 541.6685 154.6836 539.7446 155.208 c +537.3325 155.8662 535.3989 154.415 534.8735 152.4854 c +534.0044 149.3066 537.063 146.5752 541.2739 146.6211 C +541.27 146.6094 L +544.2896 146.8984 547.5044 146.6445 550.8716 145.7266 c +567.0415 141.3125 577.6646 119.5674 571.6235 97.4375 c +565.2485 74.0781 545.2056 66.2363 528.0474 70.9199 c +518.8481 73.4297 512.8228 78.7871 509.5903 84.4453 C +506.3892 64.668 494.8618 54.7793 481.229 51.4707 C +478.7056 56.8008 473.7114 59.8867 Y +479.0864 52.8496 482.5845 42.3477 479.1821 29.8809 c +474.0278 10.9961 451.4712 1.23438 431.6001 6.6582 c +418.9888 10.0996 407.9927 18.0801 402.397 29.7266 C +395.9556 25.2266 388.186 24.6406 383.1919 28.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +530.1294 102.9688 m +530.0044 102.9688 529.8989 102.877 529.8794 102.7539 c +527.5005 86.7402 518.2271 73.3652 505.4888 65.3594 c +505.3853 65.2949 505.3403 65.1641 505.3872 65.0508 c +505.4321 64.9375 505.5532 64.8711 505.6724 64.8965 c +516.145 67 525.4653 72.7598 532.1216 80.9277 C +536.7466 67.5508 547.3579 58.9219 560.4224 55.2734 C +555.6138 49.6816 558.1294 41.7402 565.5415 40.4375 c +565.6548 40.416 565.7661 40.4746 565.8149 40.5781 c +565.8638 40.6816 565.8364 40.8066 565.7485 40.8809 c +561.7759 44.2266 563.229 52.3008 575.0864 52.3008 c +582.8804 52.3008 587.9077 49.1211 587.9077 44.8145 c +587.9077 41.4297 584.8452 39.584 582.2651 39.584 c +577.8511 39.584 575.3267 43.5449 577.2231 47.127 c +577.2778 47.2305 577.2563 47.3574 577.1685 47.4355 c +577.0806 47.5137 576.9517 47.5215 576.854 47.4551 c +574.606 45.8906 573.0356 43.834 573.0356 40.6641 c +573.0356 35.2773 578.062 29.5352 586.3687 29.5332 c +595.2905 29.5332 603.3921 36.4043 603.3921 44.8145 c +603.3921 56.6309 593.3433 62.248 582.7788 63.248 C +587.144 64.9219 590.4116 69.7734 v +590.478 69.8691 590.4683 69.998 590.3901 70.084 c +590.312 70.1719 590.1851 70.1934 590.0835 70.1387 c +584.2534 67.0566 577.5942 65.3945 570.5806 65.3945 c +550.9575 65.3945 534.0337 81.7988 530.3813 102.7607 c +530.3599 102.8818 530.2524 102.9727 530.1294 102.9688 c +f +453.4517 50.5625 m +448.8442 42.8867 447.1997 29.7129 451.4946 19.8809 c +451.5435 19.7695 451.5083 19.6406 451.4087 19.5703 c +451.3091 19.502 451.1763 19.5117 451.0884 19.5957 c +446.2817 24.1484 442.1489 34.7715 444.3833 47.0527 C +441.2876 49.4473 439.3384 51.8223 437.8696 55.0059 c +437.8228 55.1074 437.8501 55.2305 437.936 55.3047 c +438.022 55.377 438.147 55.3848 438.2427 55.3203 c +443.2388 51.959 447.7056 50.8125 453.4517 50.5625 C +f +464.0591 170.3691 m +463.9907 170.4727 464.0083 170.6133 464.1001 170.6973 c +464.1938 170.7813 464.3345 170.7852 464.4321 170.7061 c +471.2466 165.1797 480.3071 161.6504 491.4673 161.6504 c +519.0376 161.6504 536.4399 178.1689 539.1743 195.5771 c +539.1919 195.6885 539.2817 195.7734 539.3931 195.7891 c +539.5044 195.8047 539.6138 195.7422 539.6587 195.6396 c +542.3833 189.3818 544.0259 180.3057 535.6099 168.1309 c +530.5747 160.8457 524.479 155.8311 524.479 149.3145 c +524.479 145.0566 526.7407 142.1602 530.1685 142.1602 c +533.7739 142.1602 536.106 145.248 536.104 148.7148 c +536.104 150.4629 535.6001 152.1934 534.6958 153.7607 c +534.6372 153.8633 534.6548 153.9902 534.7407 154.0723 c +534.8247 154.1523 534.9556 154.165 535.0532 154.1016 c +538.0259 152.1641 540.6802 148.7021 540.6802 143.8281 c +540.6802 136.6563 534.5474 130.6602 526.2095 130.6602 c +517.2368 130.6602 509.8872 137.709 509.8872 147.8477 c +509.8872 151.3262 510.8755 155.5156 513.3501 158.9805 C +509.9653 156.1523 508.1587 154.1523 506.6724 149.8271 C +496.272 148.0186 485.1665 149.6797 476.3403 155.4727 C +476.0864 149.3711 474.0903 144.2793 469.9985 140.1533 c +469.9146 140.0684 469.7837 140.0547 469.6841 140.1182 c +469.5825 140.1816 469.5415 140.3066 469.5806 140.4189 c +472.4575 148.4199 470.5239 160.6152 464.0591 170.3691 c +f +376.6938 163.7344 m +378.938 168.5352 384.1528 171.2188 390.1548 171.3271 c +390.2798 171.3311 390.3872 171.2432 390.4087 171.1211 c +390.4321 170.998 390.3638 170.8779 390.2485 170.8359 c +388.2017 170.082 386.5864 168.7637 385.7271 166.9258 c +383.5142 162.1973 387.0942 155.8301 393.7407 152.5566 c +393.8188 152.5186 393.8716 152.4434 393.8813 152.3594 c +393.8911 152.2725 393.856 152.1885 393.7915 152.1318 c +389.5005 148.6143 384.3794 142.0781 384.3794 128.7148 c +384.3774 110.0322 396.5337 92.25 412.6548 92.25 c +421.8677 92.25 429.2876 98.6465 433.1255 108.2422 C +428.9028 102.4844 423.145 98.1348 415.2114 98.1348 c +403.5708 98.1348 394.3579 110.5439 394.356 128.459 c +394.356 145.3457 406.2583 165.0518 422.1216 165.0508 c +430.8247 165.0488 437.3481 158.0117 437.3481 148.9277 c +437.3481 140.8672 432.1021 136.2637 426.2173 136.2637 c +421.7798 136.2637 418.7231 139.3936 417.772 142.7871 c +417.7388 142.9023 417.7915 143.0254 417.897 143.0811 c +418.0044 143.1357 418.1333 143.1104 418.2114 143.0186 c +418.9634 142.124 420.1079 141.3809 421.8657 141.3809 c +424.8091 141.3789 426.3442 143.9082 426.3442 145.7285 c +426.3442 149.1836 423.7856 151.6152 419.9458 151.6152 c +414.7036 151.6152 410.606 145.8564 410.606 138.4385 c +410.606 129.2236 419.436 120.7813 428.2642 120.7813 c +437.2856 120.7813 446.9438 128.8408 446.9438 143.8125 c +446.9419 158.5234 436.9653 175.4141 421.0981 175.4141 c +411.8481 175.4141 403.9849 171.2441 397.9556 164.3398 c +397.8755 164.248 397.7427 164.2246 397.6392 164.2852 c +397.5317 164.3477 397.4849 164.4727 397.5239 164.5879 c +401.9575 177.5234 399.4771 189.7344 392.7036 189.7324 c +389.3892 189.7324 387.7017 187.3535 387.7017 184.8154 c +387.7017 182.21 389.6001 180.0566 392.6704 179.6611 c +392.7915 179.6475 392.8833 179.5479 392.8931 179.4268 c +392.8989 179.3047 392.8188 179.1943 392.7017 179.1641 c +385.8872 177.4004 378.8774 181.1133 378.8774 188.2061 c +378.8774 194.4854 384.2544 199.3398 391.2896 199.3398 c +401.9263 199.3379 407.0142 188.0684 404.7485 177.8047 C +410.2075 184.8486 418.3013 190.6396 429.9263 190.6396 c +453.4692 190.6396 465.3677 163.7715 465.3677 145.7285 c +465.3677 129.3525 462.0415 118.8604 455.1313 110.8018 C +463.1938 116.9404 466.52 123.7227 468.0552 133.0645 C +474.1958 141.5078 490.188 141.5078 v +496.8755 141.5078 503.1177 139.0322 507.9614 134.3438 C +507.9634 134.3447 507.9653 134.3477 507.9673 134.3486 C +508.0024 134.3105 508.0396 134.2695 508.0767 134.2314 C +508.397 133.915 508.7114 133.5918 509.02 133.2578 C +514.0806 128.4102 524.2114 123.8633 533.4517 127.6602 c +533.5571 127.7031 533.6782 127.6699 533.7485 127.582 c +533.8188 127.4932 533.8188 127.3672 533.7524 127.2754 c +529.3462 121.252 521.729 119.335 516.0747 120.21 C +517.1177 116.4941 517.6958 112.3281 517.6958 107.7305 c +517.6978 91.3262 508.8989 79.7598 499.2856 74.1289 C +502.438 70.3281 501.7954 64.3535 498.2544 60.2949 c +498.1743 60.2051 498.0435 60.1816 497.938 60.2402 c +497.8345 60.2988 497.7837 60.4238 497.8188 60.5391 c +499.5513 66.0703 494.4282 70.6875 487.6392 70.4395 c +487.5161 70.4355 487.4067 70.5195 487.3813 70.6406 c +487.356 70.7617 487.4185 70.8828 487.5337 70.9277 c +497.6685 75.0918 504.3911 83.9102 504.3892 94.9355 c +504.3911 106.4492 497.481 115.79 486.3501 115.79 c +477.2661 115.79 468.1821 107.4727 468.1821 97.1133 c +468.1821 89.0508 472.6587 84.3184 478.4165 84.3164 c +483.4067 84.3184 487.3735 87.7715 487.3735 91.8672 c +487.3735 97.7188 480.7896 99.8408 477.2778 95.209 c +477.2095 95.1172 477.0864 95.084 476.981 95.127 c +476.8755 95.1689 476.811 95.2773 476.8228 95.3926 c +477.3462 99.7813 480.5767 103.8926 485.5825 103.8926 c +490.188 103.8926 494.9224 100.0518 494.9224 91.8652 c +494.9224 82.1406 485.5845 72.291 470.231 72.2891 c +449.2466 72.2891 437.8599 95.959 448.0942 114.8945 C +442.8501 108.8809 438.1157 102.4844 438.1157 91.0977 c +438.1138 69.5898 459.3794 55.0488 484.4692 63.5977 c +484.5884 63.6367 484.7192 63.584 484.7759 63.4746 c +484.8345 63.3633 484.8013 63.2266 484.6997 63.1523 c +477.6938 58.043 470.356 50.5137 470.356 37.873 c +470.356 24.6934 479.0552 15.3535 492.6196 15.3535 c +503.1099 15.3535 509.7642 21.752 509.7642 29.2988 c +509.7642 35.0566 506.0454 39.6641 499.6567 39.6641 c +490.1431 39.6641 486.9087 29.3203 491.8325 24.6953 c +491.9165 24.6152 491.936 24.4902 491.8813 24.3887 c +491.8247 24.2871 491.7056 24.2344 491.5942 24.2637 c +486.8247 25.5 482.2563 30.332 482.2563 37.6152 c +482.2544 50.1563 493.897 58.4727 506.6919 58.4727 c +512.688 58.4727 518.4907 56.7188 523.1646 53.4297 C +522.6118 49.2773 524.0317 44.6816 526.1313 41.5879 C +524.1821 48.457 526.2915 59.7656 536.8032 59.7676 c +542.6958 59.7656 546.5903 55.2383 546.5903 49.8867 c +546.5903 43.5605 541.2446 40.6094 536.895 41.2148 c +536.7798 41.2305 536.6899 41.3223 536.6763 41.4375 c +536.6646 41.5527 536.731 41.6602 536.8384 41.7031 c +538.4243 42.3105 539.7817 43.9727 539.7817 45.9668 c +539.7817 48.4668 537.8696 49.9492 535.8696 49.9492 c +532.5767 49.9492 530.7466 46.2793 531.8989 42.2305 C +531.8872 42.2285 L +532.9595 39.3926 533.561 36.2246 533.561 32.7363 c +533.561 15.9746 515.3813 0.001953 492.4399 0 c +468.229 0 455.3872 17.2734 455.3892 35.0566 c +455.3892 44.5938 458.9692 51.8184 463.5767 56.4258 C +443.6548 54.3066 431.0786 62.8223 424.2974 75.1035 C +428.7759 78.9414 430.438 84.5723 Y +425.0649 77.5352 415.854 71.3945 402.9321 71.3945 c +383.356 71.3945 368.0005 90.5859 368.0005 111.1836 c +368.0005 124.2568 372.8032 136.9648 382.5649 145.4307 C +376.5278 150.459 373.9185 157.8018 376.6938 163.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +240.2622 96.3711 m +240.3872 96.3711 240.4927 96.4629 240.5103 96.585 c +242.8911 112.5996 252.1646 125.9746 264.9028 133.9814 c +265.0063 134.0449 265.0493 134.1758 265.0044 134.29 c +264.9575 134.4023 264.8384 134.4688 264.7173 134.4443 c +254.2466 132.3398 244.9243 126.5811 238.27 118.4141 C +233.644 131.7891 223.0337 140.418 209.9692 144.0654 C +214.7778 149.6582 212.2622 157.5986 204.8501 158.9023 c +204.7368 158.9229 204.6245 158.8643 204.5757 158.7607 c +204.5278 158.6563 204.5542 158.5322 204.6421 158.46 c +208.6157 155.1143 207.1616 147.04 195.3052 147.04 c +187.5103 147.04 182.4849 150.2188 182.4849 154.5254 c +182.4849 157.9102 185.5464 159.7559 188.1255 159.7559 c +192.5415 159.7559 195.0649 155.7949 193.1675 152.2129 c +193.1128 152.1104 193.1353 151.9814 193.2231 151.9033 c +193.311 151.8271 193.4399 151.8184 193.5366 151.8857 c +195.7856 153.4492 197.356 155.5059 197.356 158.6768 c +197.356 164.0635 192.3306 169.8066 184.0239 169.8066 c +175.1021 169.8066 167.0005 162.9355 167.0005 154.5254 c +167.0005 142.71 177.0493 137.0918 187.6138 136.0918 C +183.2485 134.4189 179.98 129.5664 v +179.9146 129.4697 179.9243 129.3418 180.0015 129.2559 c +180.0796 129.1689 180.2056 129.1475 180.3091 129.2012 c +186.1392 132.2822 192.7954 133.9453 199.811 133.9453 c +219.4321 133.9453 236.3579 117.541 240.0103 96.5801 c +240.0317 96.4561 240.1382 96.3691 240.2622 96.3711 c +f +316.9399 148.7773 m +321.5493 156.4551 323.1919 169.627 318.897 179.46 c +318.8481 179.5703 318.8833 179.6992 318.9829 179.7686 c +319.0806 179.8379 319.2153 179.8281 319.3032 179.7461 c +324.1099 175.1914 328.2427 164.5684 326.0083 152.2871 C +329.106 149.8936 331.0532 147.5176 332.522 144.335 c +332.5688 144.2314 332.5415 144.1104 332.4556 144.0352 c +332.3696 143.9629 332.2446 143.9551 332.1489 144.0186 c +327.1528 147.3809 322.686 148.5283 316.9399 148.7773 C +f +306.3306 28.9707 m +306.4009 28.8672 306.3833 28.7266 306.2915 28.6426 c +306.1978 28.5586 306.0571 28.5547 305.9595 28.6348 c +299.145 34.1621 290.0845 37.6895 278.9243 37.6895 c +251.3521 37.6895 233.9517 21.1719 231.2163 3.76367 c +231.1987 3.65234 231.1099 3.56641 230.9985 3.55078 c +230.8862 3.53711 230.7778 3.59766 230.7329 3.70117 c +228.0073 9.95898 226.3657 19.0352 234.7817 31.209 c +239.8159 38.4941 245.9106 43.5098 245.9106 50.0273 c +245.9106 54.2852 243.6509 57.1797 240.2231 57.1797 c +236.6177 57.1797 234.2866 54.0918 234.2866 50.625 c +234.2866 48.877 234.7915 47.1465 235.6958 45.5801 c +235.7544 45.4766 235.7358 45.3496 235.6509 45.2676 c +235.5649 45.1875 235.436 45.1758 235.3384 45.2402 c +232.3657 47.1777 229.7114 50.6367 229.7114 55.5117 c +229.7114 62.6836 235.8442 68.6816 244.1802 68.6816 c +253.1548 68.6816 260.5044 61.6328 260.5044 51.4922 c +260.5044 48.0156 259.5142 43.8242 257.0415 40.3613 C +260.4263 43.1875 262.2329 45.1875 263.7192 49.5117 C +274.1196 51.3223 285.2251 49.6602 294.0493 43.8691 C +294.3052 49.9707 296.3013 55.0605 300.3931 59.1875 c +300.4771 59.2715 300.6079 59.2852 300.7075 59.2227 c +300.8091 59.1582 300.8521 59.0332 300.811 58.9219 c +297.9341 50.9199 299.8657 38.7246 306.3306 28.9707 c +f +393.6978 35.6055 m +391.4517 30.8066 386.2388 28.1211 380.2368 28.0117 c +380.1118 28.0098 380.0044 28.0977 379.9829 28.2188 c +379.9595 28.3418 380.0278 28.4609 380.1431 28.5039 c +382.1899 29.2578 383.8052 30.5762 384.6646 32.4141 c +386.8774 37.1426 383.2974 43.5098 376.6509 46.7832 c +376.5728 46.8223 376.52 46.8965 376.5103 46.9824 c +376.5005 47.0684 376.5337 47.1523 376.6001 47.207 c +380.8911 50.7266 386.0122 57.2617 386.0122 70.627 c +386.0122 89.3086 373.8579 107.0898 357.7368 107.0898 c +348.5239 107.0898 341.104 100.6934 337.2661 91.0977 C +341.4868 96.8564 347.2446 101.2051 355.1782 101.2051 c +366.8208 101.2051 376.0337 88.7969 376.0337 70.8828 c +376.0337 53.9941 364.1333 34.2891 348.2681 34.2891 c +339.5669 34.2891 333.0435 41.3281 333.0435 50.4121 c +333.0435 58.4746 338.2896 63.0781 344.1763 63.0781 c +348.6099 63.0781 351.6685 59.9473 352.6196 56.5527 c +352.6509 56.4375 352.6001 56.3164 352.4927 56.2598 c +352.3872 56.2051 352.2583 56.2305 352.1802 56.3223 c +351.4282 57.2168 350.2837 57.9609 348.5259 57.9609 c +345.5825 57.9609 344.0474 55.4316 344.0474 53.6113 c +344.0474 50.1563 346.606 47.7246 350.4458 47.7246 c +355.6899 47.7246 359.7856 53.4824 359.7856 60.9023 c +359.7856 70.1152 350.9556 78.5586 342.1274 78.5586 c +333.106 78.5586 323.4478 70.5 323.4478 55.5293 c +323.4478 40.8164 333.4282 23.9258 349.2935 23.9258 c +358.5435 23.9258 366.4048 28.0957 372.436 35.002 c +372.5161 35.0918 372.6489 35.1152 372.7544 35.0547 c +372.8599 34.9941 372.9067 34.8672 372.8677 34.752 c +368.4341 21.8164 370.9126 9.60742 377.688 9.60742 c +381.0024 9.60742 382.6899 11.9863 382.6899 14.5234 c +382.6899 17.1309 380.7915 19.2852 377.7212 19.6777 c +377.6001 19.6934 377.5063 19.793 377.4985 19.9141 c +377.4927 20.0352 377.5708 20.1465 377.6899 20.1758 c +384.5044 21.9395 391.5142 18.2285 391.5142 11.1328 c +391.5142 4.85547 386.1372 0.001953 379.1021 0.001953 c +368.4653 0.001953 363.3774 11.2715 365.6431 21.5371 C +360.1841 14.4922 352.0903 8.70117 340.4653 8.70117 c +316.9224 8.70117 305.0239 35.5703 305.0239 53.6113 c +305.0239 69.9883 308.3501 80.4785 315.2603 88.5391 C +307.1978 82.3984 303.8716 75.6172 302.3384 66.2773 C +296.1958 57.832 280.2036 57.832 v +273.5161 57.832 267.2739 60.3086 262.4302 64.998 C +262.4282 64.9961 262.4263 64.9941 262.4243 64.9902 C +262.3892 65.0313 262.3501 65.0703 262.3149 65.1094 C +261.9946 65.4238 261.6802 65.748 261.3716 66.082 C +256.3091 70.9316 246.1802 75.4785 236.9399 71.6797 c +236.8345 71.6367 236.7134 71.6699 236.6431 71.7578 c +236.5728 71.8477 236.5708 71.9727 236.6382 72.0645 c +241.0454 78.0898 248.6626 80.0059 254.3169 79.1309 C +253.272 82.8457 252.6938 87.0117 252.6938 91.6094 c +252.6938 108.0137 261.4927 119.5801 271.106 125.2109 C +267.9517 129.0137 268.5962 134.9883 272.1372 139.0449 c +272.2173 139.1357 272.3481 139.1582 272.4536 139.0996 c +272.5571 139.041 272.606 138.918 272.5708 138.8018 c +270.8403 133.2695 275.9634 128.6523 282.7524 128.9004 c +282.8755 128.9033 282.9829 128.8193 283.0103 128.6992 c +283.0356 128.5801 282.9712 128.457 282.8579 128.4111 c +272.7212 124.248 266.0005 115.4316 266.0005 104.4033 c +266.0005 92.8906 272.9087 83.5488 284.0415 83.5488 c +293.1255 83.5488 302.2095 91.8672 302.2095 102.2285 c +302.2095 110.2891 297.731 115.0225 291.9731 115.0225 c +286.9849 115.0225 283.0181 111.5684 283.0181 107.4736 c +283.0181 101.6211 289.6001 99.499 293.1118 104.1309 c +293.1821 104.2227 293.3032 104.2559 293.4087 104.2129 c +293.5161 104.1699 293.5806 104.0625 293.5669 103.9482 c +293.0435 99.5586 289.8149 95.4482 284.8091 95.4482 c +280.2036 95.4482 275.4692 99.2861 275.4692 107.4746 c +275.4692 117.1982 284.8071 127.0508 300.1606 127.0508 c +321.1431 127.0508 332.5317 103.3809 322.2974 84.4453 C +327.5415 90.459 332.2759 96.8555 332.2759 108.2432 c +332.2759 129.75 311.0122 144.291 285.9224 135.7441 c +285.8032 135.7021 285.6724 135.7559 285.6157 135.8672 c +285.5571 135.9785 285.5884 136.1143 285.6899 136.1895 c +292.6958 141.2979 300.0337 148.8262 300.0337 161.4668 c +300.0337 174.6475 291.3345 183.9854 277.772 183.9854 c +267.2798 183.9854 260.6274 177.5879 260.6274 170.04 c +260.6274 164.2822 264.3462 159.6768 270.7349 159.6768 c +280.2466 159.6768 283.481 170.0195 278.5591 174.6445 c +278.4751 174.7236 278.4556 174.8516 278.5103 174.9521 c +278.5669 175.0547 278.6841 175.1055 278.7974 175.0762 c +283.5669 173.8398 288.1353 169.0068 288.1353 161.7236 c +288.1353 149.1855 276.4927 140.8682 263.6978 140.8682 c +257.7017 140.8682 251.8989 142.623 247.2271 145.9102 C +247.7778 150.0635 246.3579 154.6602 244.2603 157.752 C +246.2095 150.8848 244.1021 139.5732 233.5864 139.5732 c +227.6958 139.5732 223.8013 144.1025 223.8013 149.4551 c +223.8013 155.7793 229.147 158.7314 233.4966 158.125 c +233.6118 158.1104 233.7007 158.0186 233.7134 157.9023 c +233.7271 157.7891 233.6606 157.6797 233.5532 157.6367 c +231.9673 157.0293 230.6108 155.3691 230.6108 153.373 c +230.6108 150.873 232.52 149.3906 234.52 149.3906 c +237.8149 149.3906 239.645 153.0605 238.4927 157.1104 C +238.5044 157.1104 L +237.4312 159.9473 236.8286 163.1152 236.8286 166.6055 c +236.8286 183.3672 255.0103 199.3398 277.9497 199.3398 c +302.1626 199.3398 315.0044 182.0664 315.0044 164.2822 c +315.0044 154.7461 311.4224 147.5225 306.8149 142.915 C +326.7368 145.0332 339.313 136.5176 346.0942 124.2354 C +341.6157 120.3975 339.9536 114.7676 Y +345.3267 121.8057 354.5376 127.9453 367.4595 127.9453 c +387.0356 127.9453 402.3911 108.7539 402.3911 88.1563 c +402.3911 75.084 397.5884 62.375 387.8267 53.9102 C +393.8638 48.8809 396.4731 41.5391 393.6978 35.6055 c +f +*U +*u +315.2114 160.9053 m +315.1782 160.7852 315.2388 160.6582 315.3521 160.6094 c +330.1763 154.0957 340.6372 141.6289 345.0063 127.2324 c +345.0415 127.1152 345.1548 127.0391 345.2778 127.0527 c +345.3989 127.0664 345.4946 127.166 345.5024 127.2871 c +346.229 137.9434 343.1274 148.4531 337.0005 157.0234 C +351.1216 157.9648 362.2407 165.9297 369.1997 177.5723 C +373.3286 171.46 381.6509 171.7969 384.8599 178.6035 c +384.9106 178.708 384.8833 178.832 384.7954 178.9063 c +384.7075 178.9805 384.5806 178.9873 384.4868 178.9219 c +380.2134 175.9688 372.8071 179.498 375.9282 190.9355 c +377.981 198.4561 382.3716 202.4668 386.5259 201.333 c +389.7915 200.4414 390.7661 197.002 390.0864 194.5146 c +388.9243 190.2539 384.438 188.8623 381.481 191.6357 c +381.397 191.7158 381.2681 191.7285 381.1704 191.6641 c +381.0728 191.5986 381.0298 191.4775 381.0688 191.3662 c +381.9868 188.7852 383.5571 186.7285 386.6157 185.8936 c +391.811 184.4756 398.6743 187.8115 400.8618 195.8252 c +403.2114 204.4316 398.7153 214.0566 390.604 216.2715 c +379.2036 219.3818 371.1392 211.166 367.3931 201.2383 C +366.9263 205.8896 363.1079 210.3203 v +363.0317 210.4092 362.9048 210.4336 362.8013 210.3818 c +362.6978 210.3291 362.6431 210.2129 362.6665 210.0996 c +364.106 203.6641 363.9575 196.8047 362.1099 190.0361 c +356.9438 171.1074 336.6626 159.0977 315.479 161.0938 c +315.354 161.1055 315.2407 161.0254 315.2114 160.9053 c +f +345.5806 73.1348 m +351.7739 66.666 364.0493 61.6133 374.6646 63.168 c +374.7856 63.1855 374.9009 63.1172 374.9399 63.0039 c +374.981 62.8906 374.936 62.7637 374.8345 62.7012 c +369.1743 59.2617 357.8384 58.0723 346.5786 63.4609 C +343.4536 61.1035 340.6489 59.8496 337.1919 59.2715 c +337.0806 59.2539 336.9692 59.3125 336.9204 59.4141 c +336.8735 59.5156 336.8989 59.6387 336.9849 59.7148 c +341.5454 63.6484 343.8286 67.6563 345.5806 73.1348 C +f +232.7935 114.9121 m +232.6753 114.8711 232.5444 114.9258 232.4878 115.0371 c +232.4312 115.1484 232.4644 115.2852 232.5679 115.3594 c +239.6938 120.4785 245.4829 128.291 248.4204 139.0566 c +255.6802 165.6563 244.3267 186.792 228.2534 194.0146 c +228.1499 194.0605 228.0903 194.1689 228.105 194.2803 c +228.1216 194.3926 228.2085 194.4814 228.3198 194.4971 c +235.0747 195.4785 244.2622 194.6729 253.7915 183.3486 c +259.4927 176.5732 262.7271 169.373 269.0142 167.6563 c +273.1216 166.5352 276.5103 167.9551 277.4126 171.2617 c +278.3618 174.7393 275.9966 177.8018 272.6528 178.7148 c +270.9653 179.1738 269.1626 179.1436 267.4146 178.6836 c +267.2993 178.6533 267.1821 178.7051 267.1255 178.8086 c +267.0708 178.9121 267.0923 179.04 267.1802 179.1172 c +269.8325 181.4746 273.8677 183.125 278.5708 181.8408 c +285.4907 179.9531 289.6606 172.457 287.4673 164.415 c +285.104 155.7578 276.3696 150.5234 266.5864 153.1934 c +263.2329 154.1084 259.4497 156.168 256.7603 159.4648 C +258.5942 155.4551 260.0493 153.1855 263.8286 150.6133 C +262.8364 140.1035 258.3091 129.8271 250.4009 122.8389 C +256.2192 120.9863 260.604 117.7207 263.5083 112.6855 c +263.5669 112.582 263.5454 112.4531 263.4595 112.373 c +263.3696 112.293 263.2388 112.2832 263.1411 112.3535 c +256.1802 117.2344 243.9048 118.582 232.7935 114.9121 c +f +216.1919 28.8809 m +212.1538 32.3105 210.936 38.0469 212.4106 43.8672 c +212.4419 43.9883 212.5542 44.0684 212.6772 44.0566 c +212.8022 44.0469 212.8989 43.9492 212.9097 43.8281 c +213.0981 41.6543 213.9448 39.748 215.4917 38.4355 c +219.4712 35.0566 226.5562 36.834 231.4634 42.3828 c +231.522 42.4492 231.6079 42.4805 231.6929 42.4668 c +231.7788 42.4531 231.8511 42.3984 231.8862 42.3203 c +234.1519 37.2539 239.1079 30.5938 252.0005 27.0742 c +270.0239 22.1563 290.3794 29.1992 294.6235 44.752 c +297.0493 53.6406 292.8306 62.4824 284.5845 68.7109 C +289.0298 63.123 291.7075 56.4238 289.6177 48.7695 c +286.5532 37.5391 272.1567 31.918 254.8755 36.6348 c +238.5825 41.0801 222.7065 57.748 226.8833 73.0547 c +229.1743 81.4492 237.6821 85.8887 246.4458 83.4961 c +254.2231 81.375 257.2837 75.1016 255.7329 69.4219 c +254.5669 65.1445 250.7407 63.0195 247.2153 62.9941 c +247.0962 62.9941 246.9927 63.0762 246.9653 63.1934 c +246.9419 63.3105 246.9985 63.4277 247.1079 63.4785 c +248.1704 63.9688 249.188 64.877 249.6509 66.5742 c +250.4263 69.4121 248.3911 71.5605 246.6353 72.0391 c +243.3022 72.9492 240.2827 71.1211 239.271 67.416 c +237.8911 62.3574 242.3667 56.8906 249.5239 54.9355 c +258.4126 52.5117 268.8833 58.8066 271.2075 67.3223 c +273.5825 76.0254 268.3501 87.4648 253.9087 91.4063 c +239.7153 95.2813 220.7925 90.0996 216.6157 74.793 c +214.1802 65.8691 216.1333 57.1875 221.2075 49.5508 c +221.2739 49.4512 221.2612 49.3164 221.1753 49.2305 c +221.0884 49.1445 220.9536 49.1328 220.853 49.2012 c +209.5415 56.8828 197.1108 57.707 195.3267 51.1699 c +194.4536 47.9727 196.3042 45.7188 198.7524 45.0508 c +201.2681 44.3652 203.8462 45.6289 205.0327 48.4883 c +205.0796 48.5996 205.2007 48.6641 205.3198 48.6406 c +205.438 48.6133 205.5249 48.5098 205.522 48.3867 c +205.4292 41.3477 200.0034 35.5625 193.1577 37.4316 c +187.1021 39.084 183.8354 45.5488 185.688 52.3359 c +188.4888 62.5977 200.6997 64.5391 210.0063 59.6504 C +204.647 66.7715 201.1919 76.1035 204.2524 87.3184 c +210.4507 110.0313 239.5044 114.4355 256.9087 109.6855 c +272.7075 105.373 281.9517 99.4023 287.9087 90.6152 C +284.1079 100.0098 278.4419 105.0039 269.8345 108.9434 C +263.3052 117.0918 267.5161 132.5195 v +269.2759 138.9707 273.3091 144.3418 279.1079 147.7793 C +279.1079 147.7813 279.106 147.7842 279.1021 147.7871 C +279.1509 147.8105 279.1997 147.8379 279.2466 147.8613 C +279.6333 148.0879 280.0298 148.3057 280.4321 148.5146 C +286.4438 152.1211 293.4966 160.6973 292.2661 170.6113 c +292.2524 170.7236 292.3149 170.832 292.4185 170.877 c +292.5239 170.9219 292.645 170.8896 292.7153 170.8018 c +297.3677 164.9629 297.2114 157.1104 294.8794 151.8857 C +298.7368 151.915 302.9087 151.375 307.3442 150.165 c +323.1685 145.8457 332.0122 134.3135 334.9126 123.5566 C +339.4106 125.5977 345.0063 123.4043 347.9888 118.9199 c +348.0532 118.8184 348.0415 118.6855 347.9575 118.5996 c +347.8735 118.5156 347.7407 118.5 347.6392 118.5645 c +342.7583 121.6914 336.9556 117.9648 335.4048 111.3496 c +335.3774 111.2305 335.2681 111.1484 335.145 111.1543 c +335.022 111.1602 334.9204 111.2539 334.9067 111.377 c +333.5591 122.251 326.8228 131.0566 316.1841 133.96 c +305.0767 136.9922 294.2446 132.7852 291.3149 122.0469 c +288.9224 113.2832 294.5571 102.3301 304.5513 99.6016 c +312.3286 97.4785 318.0747 100.5527 319.5903 106.1074 c +320.9048 110.9199 318.6157 115.6563 314.6665 116.7344 c +309.0181 118.2754 305.2388 112.4844 308.7837 107.877 c +308.8521 107.7852 308.854 107.6602 308.7837 107.5684 c +308.7153 107.4766 308.5923 107.4434 308.4868 107.4863 c +304.3892 109.1465 301.2739 113.3418 302.5923 118.1729 c +303.8052 122.6152 308.7544 126.1729 316.6548 124.0166 c +326.0356 121.457 333.0806 109.8555 329.0376 95.043 c +323.5142 74.7988 297.6802 70.0449 282.1079 84.9043 C +286.5278 78.2617 291.4517 72.0098 302.438 69.0117 c +323.188 63.3496 342.813 80.0332 341.1724 106.4902 c +341.1646 106.6152 341.2505 106.7285 341.3735 106.7539 c +341.4946 106.7813 341.6196 106.7129 341.6646 106.5977 c +344.7466 98.4922 350.0786 89.4316 362.2739 86.1035 c +374.9888 82.6328 386.2876 88.5664 389.8599 101.6504 c +392.6216 111.7734 388.2017 119.875 380.9204 121.8623 c +375.3657 123.3789 369.9419 121.0039 368.2603 114.8398 c +365.7563 105.6641 374.8833 99.8203 380.6411 103.3516 c +380.7388 103.4121 380.8677 103.3965 380.9497 103.3164 c +381.0337 103.2363 381.0513 103.1094 380.9927 103.0078 c +378.5454 98.7324 372.6802 95.5977 365.6548 97.5156 c +353.5571 100.8164 348.6001 114.2383 351.9673 126.5811 c +353.5454 132.3652 356.7681 137.502 361.1685 141.1426 C +365.0298 139.5186 369.8384 139.6777 373.3735 140.8867 C +366.2349 140.8154 355.8794 145.8262 358.647 155.9707 c +360.1978 161.6533 365.5923 164.2188 370.7563 162.8086 c +376.8579 161.1436 378.2974 155.21 376.5688 151.1729 c +376.522 151.0654 376.4106 151.0039 376.2974 151.0225 c +376.1821 151.04 376.0942 151.1318 376.0825 151.2471 c +375.9146 152.9375 374.6685 154.6836 372.7446 155.208 c +370.3325 155.8662 368.3989 154.415 367.8735 152.4854 c +367.0044 149.3066 370.063 146.5752 374.2739 146.6211 C +374.27 146.6094 L +377.2896 146.8984 380.5044 146.6445 383.8716 145.7266 c +400.0415 141.3125 410.6646 119.5674 404.6235 97.4375 c +398.2485 74.0781 378.2056 66.2363 361.0474 70.9199 c +351.8481 73.4297 345.8228 78.7871 342.5903 84.4453 C +339.3892 64.668 327.8618 54.7793 314.229 51.4707 C +311.7056 56.8008 306.7114 59.8867 Y +312.0864 52.8496 315.5845 42.3477 312.1821 29.8809 c +307.0278 10.9961 284.4712 1.23438 264.6001 6.6582 c +251.9888 10.0996 240.9927 18.0801 235.397 29.7266 C +228.9556 25.2266 221.186 24.6406 216.1919 28.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +363.1294 102.9688 m +363.0044 102.9688 362.8989 102.877 362.8794 102.7539 c +360.5005 86.7402 351.2271 73.3652 338.4888 65.3594 c +338.3853 65.2949 338.3403 65.1641 338.3872 65.0508 c +338.4321 64.9375 338.5532 64.8711 338.6724 64.8965 c +349.145 67 358.4653 72.7598 365.1216 80.9277 C +369.7466 67.5508 380.3579 58.9219 393.4224 55.2734 C +388.6138 49.6816 391.1294 41.7402 398.5415 40.4375 c +398.6548 40.416 398.7661 40.4746 398.8149 40.5781 c +398.8638 40.6816 398.8364 40.8066 398.7485 40.8809 c +394.7759 44.2266 396.229 52.3008 408.0864 52.3008 c +415.8794 52.3008 420.9067 49.1211 420.9067 44.8145 c +420.9067 41.4297 417.8442 39.584 415.2642 39.584 c +410.8501 39.584 408.3267 43.5449 410.2231 47.127 c +410.2778 47.2305 410.2563 47.3574 410.1685 47.4355 c +410.0806 47.5137 409.9517 47.5215 409.854 47.4551 c +407.606 45.8906 406.0356 43.834 406.0356 40.6641 c +406.0356 35.2773 411.061 29.5352 419.3677 29.5332 c +428.2896 29.5332 436.3911 36.4043 436.3911 44.8145 c +436.3911 56.6309 426.3423 62.248 415.7778 63.248 C +420.1431 64.9219 423.4106 69.7734 v +423.4771 69.8691 423.4673 69.998 423.3892 70.084 c +423.311 70.1719 423.1841 70.1934 423.0825 70.1387 c +417.2524 67.0566 410.5942 65.3945 403.5806 65.3945 c +383.9575 65.3945 367.0337 81.7988 363.3813 102.7607 c +363.3599 102.8818 363.2524 102.9727 363.1294 102.9688 c +f +286.4517 50.5625 m +281.8442 42.8867 280.1997 29.7129 284.4946 19.8809 c +284.5435 19.7695 284.5083 19.6406 284.4087 19.5703 c +284.3091 19.502 284.1763 19.5117 284.0884 19.5957 c +279.2817 24.1484 275.1489 34.7715 277.3833 47.0527 C +274.2876 49.4473 272.3384 51.8223 270.8696 55.0059 c +270.8228 55.1074 270.8501 55.2305 270.936 55.3047 c +271.022 55.377 271.147 55.3848 271.2427 55.3203 c +276.2388 51.959 280.7056 50.8125 286.4517 50.5625 C +f +297.0591 170.3691 m +296.9907 170.4727 297.0083 170.6133 297.1001 170.6973 c +297.1938 170.7813 297.3345 170.7852 297.4321 170.7061 c +304.2466 165.1797 313.3071 161.6504 324.4673 161.6504 c +352.0376 161.6504 369.4399 178.1689 372.1743 195.5771 c +372.1919 195.6885 372.2817 195.7734 372.3931 195.7891 c +372.5044 195.8047 372.6138 195.7422 372.6587 195.6396 c +375.3833 189.3818 377.0259 180.3057 368.6099 168.1309 c +363.5747 160.8457 357.479 155.8311 357.479 149.3145 c +357.479 145.0566 359.7407 142.1602 363.1685 142.1602 c +366.7739 142.1602 369.106 145.248 369.104 148.7148 c +369.104 150.4629 368.6001 152.1934 367.6958 153.7607 c +367.6372 153.8633 367.6548 153.9902 367.7407 154.0723 c +367.8247 154.1523 367.9556 154.165 368.0532 154.1016 c +371.0259 152.1641 373.6802 148.7021 373.6802 143.8281 c +373.6802 136.6563 367.5474 130.6602 359.2095 130.6602 c +350.2368 130.6602 342.8872 137.709 342.8872 147.8477 c +342.8872 151.3262 343.8755 155.5156 346.3501 158.9805 C +342.9653 156.1523 341.1587 154.1523 339.6724 149.8271 C +329.272 148.0186 318.1665 149.6797 309.3403 155.4727 C +309.0864 149.3711 307.0903 144.2793 302.9985 140.1533 c +302.9146 140.0684 302.7837 140.0547 302.6841 140.1182 c +302.5825 140.1816 302.5415 140.3066 302.5806 140.4189 c +305.4575 148.4199 303.5239 160.6152 297.0591 170.3691 c +f +209.6938 163.7344 m +211.938 168.5352 217.1528 171.2188 223.1548 171.3271 c +223.2798 171.3311 223.3872 171.2432 223.4087 171.1211 c +223.4321 170.998 223.3638 170.8779 223.2485 170.8359 c +221.2017 170.082 219.5864 168.7637 218.7271 166.9258 c +216.5142 162.1973 220.0942 155.8301 226.7407 152.5566 c +226.8188 152.5186 226.8716 152.4434 226.8813 152.3594 c +226.8911 152.2725 226.856 152.1885 226.7915 152.1318 c +222.5005 148.6143 217.3794 142.0781 217.3794 128.7148 c +217.3774 110.0322 229.5337 92.25 245.6548 92.25 c +254.8677 92.25 262.2876 98.6465 266.1255 108.2422 C +261.9028 102.4844 256.145 98.1348 248.2114 98.1348 c +236.5708 98.1348 227.3579 110.5439 227.356 128.459 c +227.356 145.3457 239.2583 165.0518 255.1216 165.0508 c +263.8247 165.0488 270.3481 158.0117 270.3481 148.9277 c +270.3481 140.8672 265.1021 136.2637 259.2173 136.2637 c +254.7798 136.2637 251.7231 139.3936 250.772 142.7871 c +250.7388 142.9023 250.7915 143.0254 250.897 143.0811 c +251.0044 143.1357 251.1333 143.1104 251.2114 143.0186 c +251.9634 142.124 253.1079 141.3809 254.8657 141.3809 c +257.8091 141.3789 259.3442 143.9082 259.3442 145.7285 c +259.3442 149.1836 256.7856 151.6152 252.9458 151.6152 c +247.7036 151.6152 243.606 145.8564 243.606 138.4385 c +243.606 129.2236 252.436 120.7813 261.2642 120.7813 c +270.2856 120.7813 279.9438 128.8408 279.9438 143.8125 c +279.9419 158.5234 269.9653 175.4141 254.0981 175.4141 c +244.8481 175.4141 236.9849 171.2441 230.9556 164.3398 c +230.8755 164.248 230.7427 164.2246 230.6392 164.2852 c +230.5317 164.3477 230.4849 164.4727 230.5239 164.5879 c +234.9575 177.5234 232.4771 189.7344 225.7036 189.7324 c +222.3892 189.7324 220.7017 187.3535 220.7017 184.8154 c +220.7017 182.21 222.6001 180.0566 225.6704 179.6611 c +225.7915 179.6475 225.8833 179.5479 225.8931 179.4268 c +225.8989 179.3047 225.8188 179.1943 225.7017 179.1641 c +218.8872 177.4004 211.8774 181.1133 211.8774 188.2061 c +211.8774 194.4854 217.2544 199.3398 224.2896 199.3398 c +234.9263 199.3379 240.0142 188.0684 237.7485 177.8047 C +243.2075 184.8486 251.3013 190.6396 262.9263 190.6396 c +286.4692 190.6396 298.3677 163.7715 298.3677 145.7285 c +298.3677 129.3525 295.0415 118.8604 288.1313 110.8018 C +296.1938 116.9404 299.52 123.7227 301.0552 133.0645 C +307.1958 141.5078 323.188 141.5078 v +329.8755 141.5078 336.1177 139.0322 340.9614 134.3438 C +340.9634 134.3447 340.9653 134.3477 340.9673 134.3486 C +341.0024 134.3105 341.0396 134.2695 341.0767 134.2314 C +341.397 133.915 341.7114 133.5918 342.02 133.2578 C +347.0806 128.4102 357.2114 123.8633 366.4517 127.6602 c +366.5571 127.7031 366.6782 127.6699 366.7485 127.582 c +366.8188 127.4932 366.8188 127.3672 366.7524 127.2754 c +362.3462 121.252 354.729 119.335 349.0747 120.21 C +350.1177 116.4941 350.6958 112.3281 350.6958 107.7305 c +350.6978 91.3262 341.8989 79.7598 332.2856 74.1289 C +335.438 70.3281 334.7954 64.3535 331.2544 60.2949 c +331.1743 60.2051 331.0435 60.1816 330.938 60.2402 c +330.8345 60.2988 330.7837 60.4238 330.8188 60.5391 c +332.5513 66.0703 327.4282 70.6875 320.6392 70.4395 c +320.5161 70.4355 320.4067 70.5195 320.3813 70.6406 c +320.356 70.7617 320.4185 70.8828 320.5337 70.9277 c +330.6685 75.0918 337.3911 83.9102 337.3892 94.9355 c +337.3911 106.4492 330.481 115.79 319.3501 115.79 c +310.2661 115.79 301.1821 107.4727 301.1821 97.1133 c +301.1821 89.0508 305.6587 84.3184 311.4165 84.3164 c +316.4067 84.3184 320.3735 87.7715 320.3735 91.8672 c +320.3735 97.7188 313.7896 99.8408 310.2778 95.209 c +310.2095 95.1172 310.0864 95.084 309.981 95.127 c +309.8755 95.1689 309.811 95.2773 309.8228 95.3926 c +310.3462 99.7813 313.5767 103.8926 318.5825 103.8926 c +323.188 103.8926 327.9224 100.0518 327.9224 91.8652 c +327.9224 82.1406 318.5845 72.291 303.231 72.2891 c +282.2466 72.2891 270.8599 95.959 281.0942 114.8945 C +275.8501 108.8809 271.1157 102.4844 271.1157 91.0977 c +271.1138 69.5898 292.3794 55.0488 317.4692 63.5977 c +317.5884 63.6367 317.7192 63.584 317.7759 63.4746 c +317.8345 63.3633 317.8013 63.2266 317.6997 63.1523 c +310.6938 58.043 303.356 50.5137 303.356 37.873 c +303.356 24.6934 312.0552 15.3535 325.6196 15.3535 c +336.1099 15.3535 342.7642 21.752 342.7642 29.2988 c +342.7642 35.0566 339.0454 39.6641 332.6567 39.6641 c +323.1431 39.6641 319.9087 29.3203 324.8325 24.6953 c +324.9165 24.6152 324.936 24.4902 324.8813 24.3887 c +324.8247 24.2871 324.7056 24.2344 324.5942 24.2637 c +319.8247 25.5 315.2563 30.332 315.2563 37.6152 c +315.2544 50.1563 326.897 58.4727 339.6919 58.4727 c +345.688 58.4727 351.4907 56.7188 356.1646 53.4297 C +355.6118 49.2773 357.0317 44.6816 359.1313 41.5879 C +357.1821 48.457 359.2915 59.7656 369.8032 59.7676 c +375.6958 59.7656 379.5903 55.2383 379.5903 49.8867 c +379.5903 43.5605 374.2446 40.6094 369.895 41.2148 c +369.7798 41.2305 369.6899 41.3223 369.6763 41.4375 c +369.6646 41.5527 369.731 41.6602 369.8384 41.7031 c +371.4243 42.3105 372.7817 43.9727 372.7817 45.9668 c +372.7817 48.4668 370.8696 49.9492 368.8696 49.9492 c +365.5767 49.9492 363.7466 46.2793 364.8989 42.2305 C +364.8872 42.2285 L +365.9595 39.3926 366.561 36.2246 366.561 32.7363 c +366.561 15.9746 348.3813 0.001953 325.4399 0 c +301.229 0 288.3872 17.2734 288.3892 35.0566 c +288.3892 44.5938 291.9692 51.8184 296.5767 56.4258 C +276.6548 54.3066 264.0786 62.8223 257.2974 75.1035 C +261.7759 78.9414 263.438 84.5723 Y +258.0649 77.5352 248.854 71.3945 235.9321 71.3945 c +216.356 71.3945 201.0005 90.5859 201.0005 111.1836 c +201.0005 124.2568 205.8032 136.9648 215.5649 145.4307 C +209.5278 150.459 206.9185 157.8018 209.6938 163.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +73.2617 96.3711 m +73.3867 96.3711 73.4922 96.4629 73.5098 96.585 c +75.8906 112.5996 85.1641 125.9746 97.9023 133.9814 c +98.0059 134.0449 98.0488 134.1758 98.0039 134.29 c +97.957 134.4023 97.8379 134.4688 97.7168 134.4443 c +87.2461 132.3398 77.9238 126.5811 71.2695 118.4141 C +66.6436 131.7891 56.0332 140.418 42.9688 144.0654 C +47.7773 149.6582 45.2617 157.5986 37.8496 158.9023 c +37.7363 158.9229 37.624 158.8643 37.5752 158.7607 c +37.5273 158.6563 37.5537 158.5322 37.6416 158.46 c +41.6152 155.1143 40.1611 147.04 28.3047 147.04 c +20.5098 147.04 15.4844 150.2188 15.4844 154.5254 c +15.4844 157.9102 18.5459 159.7559 21.125 159.7559 c +25.541 159.7559 28.0645 155.7949 26.167 152.2129 c +26.1123 152.1104 26.1348 151.9814 26.2227 151.9033 c +26.3105 151.8271 26.4395 151.8184 26.5361 151.8857 c +28.7852 153.4492 30.3555 155.5059 30.3555 158.6768 c +30.3555 164.0635 25.3301 169.8066 17.0234 169.8066 c +8.10156 169.8066 0 162.9355 0 154.5254 c +0 142.71 10.0488 137.0918 20.6133 136.0918 C +16.248 134.4189 12.9795 129.5664 v +12.9141 129.4697 12.9238 129.3418 13.001 129.2559 c +13.0791 129.1689 13.2051 129.1475 13.3086 129.2012 c +19.1387 132.2822 25.7949 133.9453 32.8105 133.9453 c +52.4316 133.9453 69.3574 117.541 73.0098 96.5801 c +73.0313 96.4561 73.1377 96.3691 73.2617 96.3711 c +f +149.9395 148.7773 m +154.5488 156.4551 156.1914 169.627 151.8965 179.46 c +151.8477 179.5703 151.8828 179.6992 151.9824 179.7686 c +152.0801 179.8379 152.2148 179.8281 152.3027 179.7461 c +157.1094 175.1914 161.2422 164.5684 159.0078 152.2871 C +162.1055 149.8936 164.0527 147.5176 165.5215 144.335 c +165.5684 144.2314 165.541 144.1104 165.4551 144.0352 c +165.3691 143.9629 165.2441 143.9551 165.1484 144.0186 c +160.1523 147.3809 155.6855 148.5283 149.9395 148.7773 C +f +139.3301 28.9707 m +139.4004 28.8672 139.3828 28.7266 139.291 28.6426 c +139.1973 28.5586 139.0566 28.5547 138.959 28.6348 c +132.1445 34.1621 123.084 37.6895 111.9238 37.6895 c +84.3516 37.6895 66.9512 21.1719 64.2158 3.76367 c +64.1982 3.65234 64.1094 3.56641 63.998 3.55078 c +63.8857 3.53711 63.7773 3.59766 63.7324 3.70117 c +61.0068 9.95898 59.3652 19.0352 67.7813 31.209 c +72.8154 38.4941 78.9102 43.5098 78.9102 50.0273 c +78.9102 54.2852 76.6504 57.1797 73.2227 57.1797 c +69.6172 57.1797 67.2861 54.0918 67.2861 50.625 c +67.2861 48.877 67.791 47.1465 68.6953 45.5801 c +68.7539 45.4766 68.7354 45.3496 68.6504 45.2676 c +68.5645 45.1875 68.4355 45.1758 68.3379 45.2402 c +65.3652 47.1777 62.7109 50.6367 62.7109 55.5117 c +62.7109 62.6836 68.8438 68.6816 77.1797 68.6816 c +86.1543 68.6816 93.5039 61.6328 93.5039 51.4922 c +93.5039 48.0156 92.5137 43.8242 90.041 40.3613 C +93.4258 43.1875 95.2324 45.1875 96.7188 49.5117 C +107.1191 51.3223 118.2246 49.6602 127.0488 43.8691 C +127.3047 49.9707 129.3008 55.0605 133.3926 59.1875 c +133.4766 59.2715 133.6074 59.2852 133.707 59.2227 c +133.8086 59.1582 133.8516 59.0332 133.8105 58.9219 c +130.9336 50.9199 132.8652 38.7246 139.3301 28.9707 c +f +226.6973 35.6055 m +224.4512 30.8066 219.2383 28.1211 213.2363 28.0117 c +213.1113 28.0098 213.0039 28.0977 212.9824 28.2188 c +212.959 28.3418 213.0273 28.4609 213.1426 28.5039 c +215.1895 29.2578 216.8047 30.5762 217.6641 32.4141 c +219.877 37.1426 216.2969 43.5098 209.6504 46.7832 c +209.5723 46.8223 209.5195 46.8965 209.5098 46.9824 c +209.5 47.0684 209.5332 47.1523 209.5996 47.207 c +213.8906 50.7266 219.0117 57.2617 219.0117 70.627 c +219.0117 89.3086 206.8574 107.0898 190.7363 107.0898 c +181.5234 107.0898 174.1035 100.6934 170.2656 91.0977 C +174.4863 96.8564 180.2441 101.2051 188.1777 101.2051 c +199.8203 101.2051 209.0332 88.7969 209.0332 70.8828 c +209.0332 53.9941 197.1328 34.2891 181.2676 34.2891 c +172.5664 34.2891 166.043 41.3281 166.043 50.4121 c +166.043 58.4746 171.2891 63.0781 177.1758 63.0781 c +181.6094 63.0781 184.668 59.9473 185.6191 56.5527 c +185.6504 56.4375 185.5996 56.3164 185.4922 56.2598 c +185.3867 56.2051 185.2578 56.2305 185.1797 56.3223 c +184.4277 57.2168 183.2832 57.9609 181.5254 57.9609 c +178.582 57.9609 177.0469 55.4316 177.0469 53.6113 c +177.0469 50.1563 179.6055 47.7246 183.4453 47.7246 c +188.6895 47.7246 192.7852 53.4824 192.7852 60.9023 c +192.7852 70.1152 183.9551 78.5586 175.127 78.5586 c +166.1055 78.5586 156.4473 70.5 156.4473 55.5293 c +156.4473 40.8164 166.4277 23.9258 182.293 23.9258 c +191.543 23.9258 199.4043 28.0957 205.4355 35.002 c +205.5156 35.0918 205.6484 35.1152 205.7539 35.0547 c +205.8594 34.9941 205.9063 34.8672 205.8672 34.752 c +201.4336 21.8164 203.9121 9.60742 210.6875 9.60742 c +214.002 9.60742 215.6895 11.9863 215.6895 14.5234 c +215.6895 17.1309 213.791 19.2852 210.7207 19.6777 c +210.5996 19.6934 210.5059 19.793 210.498 19.9141 c +210.4922 20.0352 210.5703 20.1465 210.6895 20.1758 c +217.5039 21.9395 224.5137 18.2285 224.5137 11.1328 c +224.5137 4.85547 219.1367 0.001953 212.1016 0.001953 c +201.4648 0.001953 196.377 11.2715 198.6426 21.5371 C +193.1836 14.4922 185.0898 8.70117 173.4648 8.70117 c +149.9219 8.70117 138.0234 35.5703 138.0234 53.6113 c +138.0234 69.9883 141.3496 80.4785 148.2598 88.5391 C +140.1973 82.3984 136.8711 75.6172 135.3379 66.2773 C +129.1953 57.832 113.2031 57.832 v +106.5156 57.832 100.2734 60.3086 95.4297 64.998 C +95.4277 64.9961 95.4258 64.9941 95.4238 64.9902 C +95.3887 65.0313 95.3496 65.0703 95.3145 65.1094 C +94.9941 65.4238 94.6797 65.748 94.3711 66.082 C +89.3086 70.9316 79.1797 75.4785 69.9395 71.6797 c +69.834 71.6367 69.7129 71.6699 69.6426 71.7578 c +69.5723 71.8477 69.5703 71.9727 69.6377 72.0645 c +74.0449 78.0898 81.6621 80.0059 87.3164 79.1309 C +86.2715 82.8457 85.6934 87.0117 85.6934 91.6094 c +85.6934 108.0137 94.4922 119.5801 104.1055 125.2109 C +100.9512 129.0137 101.5957 134.9883 105.1367 139.0449 c +105.2168 139.1357 105.3477 139.1582 105.4531 139.0996 c +105.5566 139.041 105.6055 138.918 105.5703 138.8018 c +103.8398 133.2695 108.9629 128.6523 115.752 128.9004 c +115.875 128.9033 115.9824 128.8193 116.0098 128.6992 c +116.0352 128.5801 115.9707 128.457 115.8574 128.4111 c +105.7207 124.248 99 115.4316 99 104.4033 c +99 92.8906 105.9082 83.5488 117.041 83.5488 c +126.125 83.5488 135.209 91.8672 135.209 102.2285 c +135.209 110.2891 130.7305 115.0225 124.9727 115.0225 c +119.9844 115.0225 116.0176 111.5684 116.0176 107.4736 c +116.0176 101.6211 122.5996 99.499 126.1113 104.1309 c +126.1816 104.2227 126.3027 104.2559 126.4082 104.2129 c +126.5156 104.1699 126.5801 104.0625 126.5664 103.9482 c +126.043 99.5586 122.8145 95.4482 117.8086 95.4482 c +113.2031 95.4482 108.4688 99.2861 108.4688 107.4746 c +108.4688 117.1982 117.8066 127.0508 133.1602 127.0508 c +154.1426 127.0508 165.5313 103.3809 155.2969 84.4453 C +160.541 90.459 165.2754 96.8555 165.2754 108.2432 c +165.2754 129.75 144.0117 144.291 118.9219 135.7441 c +118.8027 135.7021 118.6719 135.7559 118.6152 135.8672 c +118.5566 135.9785 118.5879 136.1143 118.6895 136.1895 c +125.6953 141.2979 133.0332 148.8262 133.0332 161.4668 c +133.0332 174.6475 124.334 183.9854 110.7715 183.9854 c +100.2793 183.9854 93.627 177.5879 93.627 170.04 c +93.627 164.2822 97.3457 159.6768 103.7344 159.6768 c +113.2461 159.6768 116.4805 170.0195 111.5586 174.6445 c +111.4746 174.7236 111.4551 174.8516 111.5098 174.9521 c +111.5664 175.0547 111.6836 175.1055 111.7969 175.0762 c +116.5664 173.8398 121.1348 169.0068 121.1348 161.7236 c +121.1348 149.1855 109.4922 140.8682 96.6973 140.8682 c +90.7012 140.8682 84.8984 142.623 80.2266 145.9102 C +80.7773 150.0635 79.3574 154.6602 77.2598 157.752 C +79.209 150.8848 77.1016 139.5732 66.5859 139.5732 c +60.6953 139.5732 56.8008 144.1025 56.8008 149.4551 c +56.8008 155.7793 62.1465 158.7314 66.4961 158.125 c +66.6113 158.1104 66.7002 158.0186 66.7129 157.9023 c +66.7266 157.7891 66.6602 157.6797 66.5527 157.6367 c +64.9668 157.0293 63.6104 155.3691 63.6104 153.373 c +63.6104 150.873 65.5195 149.3906 67.5195 149.3906 c +70.8145 149.3906 72.6445 153.0605 71.4922 157.1104 C +71.5039 157.1104 L +70.4307 159.9473 69.8281 163.1152 69.8281 166.6055 c +69.8281 183.3672 88.0098 199.3398 110.9492 199.3398 c +135.1621 199.3398 148.0039 182.0664 148.0039 164.2822 c +148.0039 154.7461 144.4219 147.5225 139.8145 142.915 C +159.7363 145.0332 172.3125 136.5176 179.0938 124.2354 C +174.6152 120.3975 172.9531 114.7676 Y +178.3262 121.8057 187.5371 127.9453 200.459 127.9453 c +220.0352 127.9453 235.3906 108.7539 235.3906 88.1563 c +235.3906 75.084 230.5879 62.375 220.8262 53.9102 C +226.8633 48.8809 229.4727 41.5391 226.6973 35.6055 c +f +*U +*u +148.2109 160.9053 m +148.1777 160.7852 148.2383 160.6582 148.3516 160.6094 c +163.1758 154.0957 173.6367 141.6289 178.0059 127.2324 c +178.041 127.1152 178.1543 127.0391 178.2773 127.0527 c +178.3984 127.0664 178.4941 127.166 178.502 127.2871 c +179.2285 137.9434 176.127 148.4531 170 157.0234 C +184.1211 157.9648 195.2402 165.9297 202.1992 177.5723 C +206.3281 171.46 214.6504 171.7969 217.8594 178.6035 c +217.9102 178.708 217.8828 178.832 217.7949 178.9063 c +217.707 178.9805 217.5801 178.9873 217.4863 178.9219 c +213.2129 175.9688 205.8066 179.498 208.9277 190.9355 c +210.9805 198.4561 215.3711 202.4668 219.5254 201.333 c +222.791 200.4414 223.7656 197.002 223.0859 194.5146 c +221.9238 190.2539 217.4375 188.8623 214.4805 191.6357 c +214.3965 191.7158 214.2676 191.7285 214.1699 191.6641 c +214.0723 191.5986 214.0293 191.4775 214.0684 191.3662 c +214.9863 188.7852 216.5566 186.7285 219.6152 185.8936 c +224.8105 184.4756 231.6738 187.8115 233.8613 195.8252 c +236.2109 204.4316 231.7148 214.0566 223.6035 216.2715 c +212.2031 219.3818 204.1387 211.166 200.3926 201.2383 C +199.9258 205.8896 196.1074 210.3203 v +196.0313 210.4092 195.9043 210.4336 195.8008 210.3818 c +195.6973 210.3291 195.6426 210.2129 195.666 210.0996 c +197.1055 203.6641 196.957 196.8047 195.1094 190.0361 c +189.9434 171.1074 169.6621 159.0977 148.4785 161.0938 c +148.3535 161.1055 148.2402 161.0254 148.2109 160.9053 c +f +178.5801 73.1348 m +184.7734 66.666 197.0488 61.6133 207.6641 63.168 c +207.7852 63.1855 207.9004 63.1172 207.9395 63.0039 c +207.9805 62.8906 207.9355 62.7637 207.834 62.7012 c +202.1738 59.2617 190.8379 58.0723 179.5781 63.4609 C +176.4531 61.1035 173.6484 59.8496 170.1914 59.2715 c +170.0801 59.2539 169.9688 59.3125 169.9199 59.4141 c +169.873 59.5156 169.8984 59.6387 169.9844 59.7148 c +174.5449 63.6484 176.8281 67.6563 178.5801 73.1348 C +f +65.793 114.9121 m +65.6748 114.8711 65.5439 114.9258 65.4873 115.0371 c +65.4307 115.1484 65.4639 115.2852 65.5674 115.3594 c +72.6934 120.4785 78.4824 128.291 81.4199 139.0566 c +88.6797 165.6563 77.3262 186.792 61.2529 194.0146 c +61.1494 194.0605 61.0898 194.1689 61.1045 194.2803 c +61.1211 194.3926 61.208 194.4814 61.3193 194.4971 c +68.0742 195.4785 77.2617 194.6729 86.791 183.3486 c +92.4922 176.5732 95.7266 169.373 102.0137 167.6563 c +106.1211 166.5352 109.5098 167.9551 110.4121 171.2617 c +111.3613 174.7393 108.9961 177.8018 105.6523 178.7148 c +103.9648 179.1738 102.1621 179.1436 100.4141 178.6836 c +100.2988 178.6533 100.1816 178.7051 100.125 178.8086 c +100.0703 178.9121 100.0918 179.04 100.1797 179.1172 c +102.832 181.4746 106.8672 183.125 111.5703 181.8408 c +118.4902 179.9531 122.6602 172.457 120.4668 164.415 c +118.1035 155.7578 109.3691 150.5234 99.5859 153.1934 c +96.2324 154.1084 92.4492 156.168 89.7598 159.4648 C +91.5938 155.4551 93.0488 153.1855 96.8281 150.6133 C +95.8359 140.1035 91.3086 129.8271 83.4004 122.8389 C +89.2188 120.9863 93.6035 117.7207 96.5078 112.6855 c +96.5664 112.582 96.5449 112.4531 96.459 112.373 c +96.3691 112.293 96.2383 112.2832 96.1406 112.3535 c +89.1797 117.2344 76.9043 118.582 65.793 114.9121 c +f +49.1914 28.8809 m +45.1533 32.3105 43.9355 38.0469 45.4102 43.8672 c +45.4414 43.9883 45.5537 44.0684 45.6768 44.0566 c +45.8018 44.0469 45.8984 43.9492 45.9092 43.8281 c +46.0977 41.6543 46.9443 39.748 48.4912 38.4355 c +52.4707 35.0566 59.5557 36.834 64.4629 42.3828 c +64.5215 42.4492 64.6074 42.4805 64.6924 42.4668 c +64.7783 42.4531 64.8506 42.3984 64.8857 42.3203 c +67.1514 37.2539 72.1074 30.5938 85 27.0742 c +103.0234 22.1563 123.3789 29.1992 127.623 44.752 c +130.0488 53.6406 125.8301 62.4824 117.584 68.7109 C +122.0293 63.123 124.707 56.4238 122.6172 48.7695 c +119.5527 37.5391 105.1563 31.918 87.875 36.6348 c +71.582 41.0801 55.7061 57.748 59.8828 73.0547 c +62.1738 81.4492 70.6816 85.8887 79.4453 83.4961 c +87.2227 81.375 90.2832 75.1016 88.7324 69.4219 c +87.5664 65.1445 83.7402 63.0195 80.2148 62.9941 c +80.0957 62.9941 79.9922 63.0762 79.9648 63.1934 c +79.9414 63.3105 79.998 63.4277 80.1074 63.4785 c +81.1699 63.9688 82.1875 64.877 82.6504 66.5742 c +83.4258 69.4121 81.3906 71.5605 79.6348 72.0391 c +76.3018 72.9492 73.2822 71.1211 72.2705 67.416 c +70.8906 62.3574 75.3662 56.8906 82.5234 54.9355 c +91.4121 52.5117 101.8828 58.8066 104.207 67.3223 c +106.582 76.0254 101.3496 87.4648 86.9082 91.4063 c +72.7148 95.2813 53.792 90.0996 49.6152 74.793 c +47.1797 65.8691 49.1328 57.1875 54.207 49.5508 c +54.2734 49.4512 54.2607 49.3164 54.1748 49.2305 c +54.0879 49.1445 53.9531 49.1328 53.8525 49.2012 c +42.541 56.8828 30.1104 57.707 28.3262 51.1699 c +27.4531 47.9727 29.3037 45.7188 31.752 45.0508 c +34.2676 44.3652 36.8457 45.6289 38.0322 48.4883 c +38.0791 48.5996 38.2002 48.6641 38.3193 48.6406 c +38.4375 48.6133 38.5244 48.5098 38.5215 48.3867 c +38.4287 41.3477 33.0029 35.5625 26.1572 37.4316 c +20.1016 39.084 16.835 45.5488 18.6875 52.3359 c +21.4883 62.5977 33.6992 64.5391 43.0059 59.6504 C +37.6465 66.7715 34.1914 76.1035 37.252 87.3184 c +43.4502 110.0313 72.5039 114.4355 89.9082 109.6855 c +105.707 105.373 114.9512 99.4023 120.9082 90.6152 C +117.1074 100.0098 111.4414 105.0039 102.834 108.9434 C +96.3047 117.0918 100.5156 132.5195 v +102.2754 138.9707 106.3086 144.3418 112.1074 147.7793 C +112.1074 147.7813 112.1055 147.7842 112.1016 147.7871 C +112.1504 147.8105 112.1992 147.8379 112.2461 147.8613 C +112.6328 148.0879 113.0293 148.3057 113.4316 148.5146 C +119.4434 152.1211 126.4961 160.6973 125.2656 170.6113 c +125.252 170.7236 125.3145 170.832 125.418 170.877 c +125.5234 170.9219 125.6445 170.8896 125.7148 170.8018 c +130.3672 164.9629 130.2109 157.1104 127.8789 151.8857 C +131.7363 151.915 135.9082 151.375 140.3438 150.165 c +156.168 145.8457 165.0117 134.3135 167.9121 123.5566 C +172.4102 125.5977 178.0059 123.4043 180.9883 118.9199 c +181.0527 118.8184 181.041 118.6855 180.957 118.5996 c +180.873 118.5156 180.7402 118.5 180.6387 118.5645 c +175.7578 121.6914 169.9551 117.9648 168.4043 111.3496 c +168.377 111.2305 168.2676 111.1484 168.1445 111.1543 c +168.0215 111.1602 167.9199 111.2539 167.9063 111.377 c +166.5586 122.251 159.8223 131.0566 149.1836 133.96 c +138.0762 136.9922 127.2441 132.7852 124.3145 122.0469 c +121.9219 113.2832 127.5566 102.3301 137.5508 99.6016 c +145.3281 97.4785 151.0742 100.5527 152.5898 106.1074 c +153.9043 110.9199 151.6152 115.6563 147.666 116.7344 c +142.0176 118.2754 138.2383 112.4844 141.7832 107.877 c +141.8516 107.7852 141.8535 107.6602 141.7832 107.5684 c +141.7148 107.4766 141.5918 107.4434 141.4863 107.4863 c +137.3887 109.1465 134.2734 113.3418 135.5918 118.1729 c +136.8047 122.6152 141.7539 126.1729 149.6543 124.0166 c +159.0352 121.457 166.0801 109.8555 162.0371 95.043 c +156.5137 74.7988 130.6797 70.0449 115.1074 84.9043 C +119.5273 78.2617 124.4512 72.0098 135.4375 69.0117 c +156.1875 63.3496 175.8125 80.0332 174.1719 106.4902 c +174.1641 106.6152 174.25 106.7285 174.373 106.7539 c +174.4941 106.7813 174.6191 106.7129 174.6641 106.5977 c +177.7461 98.4922 183.0781 89.4316 195.2734 86.1035 c +207.9883 82.6328 219.2871 88.5664 222.8594 101.6504 c +225.6211 111.7734 221.2012 119.875 213.9199 121.8623 c +208.3652 123.3789 202.9414 121.0039 201.2598 114.8398 c +198.7559 105.6641 207.8828 99.8203 213.6406 103.3516 c +213.7383 103.4121 213.8672 103.3965 213.9492 103.3164 c +214.0332 103.2363 214.0508 103.1094 213.9922 103.0078 c +211.5449 98.7324 205.6797 95.5977 198.6543 97.5156 c +186.5566 100.8164 181.5996 114.2383 184.9668 126.5811 c +186.5449 132.3652 189.7676 137.502 194.168 141.1426 C +198.0293 139.5186 202.8379 139.6777 206.373 140.8867 C +199.2344 140.8154 188.8789 145.8262 191.6465 155.9707 c +193.1973 161.6533 198.5918 164.2188 203.7559 162.8086 c +209.8574 161.1436 211.2969 155.21 209.5684 151.1729 c +209.5215 151.0654 209.4102 151.0039 209.2969 151.0225 c +209.1816 151.04 209.0938 151.1318 209.082 151.2471 c +208.9141 152.9375 207.668 154.6836 205.7441 155.208 c +203.332 155.8662 201.3984 154.415 200.873 152.4854 c +200.0039 149.3066 203.0625 146.5752 207.2734 146.6211 C +207.2695 146.6094 L +210.2891 146.8984 213.5039 146.6445 216.8711 145.7266 c +233.041 141.3125 243.6641 119.5674 237.623 97.4375 c +231.248 74.0781 211.2051 66.2363 194.0469 70.9199 c +184.8477 73.4297 178.8223 78.7871 175.5898 84.4453 C +172.3887 64.668 160.8613 54.7793 147.2285 51.4707 C +144.7051 56.8008 139.7109 59.8867 Y +145.0859 52.8496 148.584 42.3477 145.1816 29.8809 c +140.0273 10.9961 117.4707 1.23438 97.5996 6.6582 c +84.9883 10.0996 73.9922 18.0801 68.3965 29.7266 C +61.9551 25.2266 54.1855 24.6406 49.1914 28.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +196.1289 102.9688 m +196.0039 102.9688 195.8984 102.877 195.8789 102.7539 c +193.5 86.7402 184.2266 73.3652 171.4883 65.3594 c +171.3848 65.2949 171.3398 65.1641 171.3867 65.0508 c +171.4316 64.9375 171.5527 64.8711 171.6719 64.8965 c +182.1445 67 191.4648 72.7598 198.1211 80.9277 C +202.7461 67.5508 213.3574 58.9219 226.4219 55.2734 C +221.6133 49.6816 224.1289 41.7402 231.541 40.4375 c +231.6543 40.416 231.7656 40.4746 231.8145 40.5781 c +231.8633 40.6816 231.8359 40.8066 231.748 40.8809 c +227.7754 44.2266 229.2285 52.3008 241.0859 52.3008 c +248.8794 52.3008 253.9067 49.1211 253.9067 44.8145 c +253.9067 41.4297 250.8442 39.584 248.2642 39.584 c +243.8501 39.584 241.3262 43.5449 243.2227 47.127 c +243.2773 47.2305 243.2559 47.3574 243.168 47.4355 c +243.0801 47.5137 242.9512 47.5215 242.8535 47.4551 c +240.6055 45.8906 239.0352 43.834 239.0352 40.6641 c +239.0352 35.2773 244.061 29.5352 252.3677 29.5332 c +261.2896 29.5332 269.3911 36.4043 269.3911 44.8145 c +269.3911 56.6309 259.3423 62.248 248.7778 63.248 C +253.1431 64.9219 256.4106 69.7734 v +256.4771 69.8691 256.4673 69.998 256.3892 70.084 c +256.311 70.1719 256.1841 70.1934 256.0825 70.1387 c +250.2524 67.0566 243.5938 65.3945 236.5801 65.3945 c +216.957 65.3945 200.0332 81.7988 196.3809 102.7607 c +196.3594 102.8818 196.252 102.9727 196.1289 102.9688 c +f +119.4512 50.5625 m +114.8438 42.8867 113.1992 29.7129 117.4941 19.8809 c +117.543 19.7695 117.5078 19.6406 117.4082 19.5703 c +117.3086 19.502 117.1758 19.5117 117.0879 19.5957 c +112.2813 24.1484 108.1484 34.7715 110.3828 47.0527 C +107.2871 49.4473 105.3379 51.8223 103.8691 55.0059 c +103.8223 55.1074 103.8496 55.2305 103.9355 55.3047 c +104.0215 55.377 104.1465 55.3848 104.2422 55.3203 c +109.2383 51.959 113.7051 50.8125 119.4512 50.5625 C +f +130.0586 170.3691 m +129.9902 170.4727 130.0078 170.6133 130.0996 170.6973 c +130.1934 170.7813 130.334 170.7852 130.4316 170.7061 c +137.2461 165.1797 146.3066 161.6504 157.4668 161.6504 c +185.0371 161.6504 202.4395 178.1689 205.1738 195.5771 c +205.1914 195.6885 205.2813 195.7734 205.3926 195.7891 c +205.5039 195.8047 205.6133 195.7422 205.6582 195.6396 c +208.3828 189.3818 210.0254 180.3057 201.6094 168.1309 c +196.5742 160.8457 190.4785 155.8311 190.4785 149.3145 c +190.4785 145.0566 192.7402 142.1602 196.168 142.1602 c +199.7734 142.1602 202.1055 145.248 202.1035 148.7148 c +202.1035 150.4629 201.5996 152.1934 200.6953 153.7607 c +200.6367 153.8633 200.6543 153.9902 200.7402 154.0723 c +200.8242 154.1523 200.9551 154.165 201.0527 154.1016 c +204.0254 152.1641 206.6797 148.7021 206.6797 143.8281 c +206.6797 136.6563 200.5469 130.6602 192.209 130.6602 c +183.2363 130.6602 175.8867 137.709 175.8867 147.8477 c +175.8867 151.3262 176.875 155.5156 179.3496 158.9805 C +175.9648 156.1523 174.1582 154.1523 172.6719 149.8271 C +162.2715 148.0186 151.166 149.6797 142.3398 155.4727 C +142.0859 149.3711 140.0898 144.2793 135.998 140.1533 c +135.9141 140.0684 135.7832 140.0547 135.6836 140.1182 c +135.582 140.1816 135.541 140.3066 135.5801 140.4189 c +138.457 148.4199 136.5234 160.6152 130.0586 170.3691 c +f +42.6934 163.7344 m +44.9375 168.5352 50.1523 171.2188 56.1543 171.3271 c +56.2793 171.3311 56.3867 171.2432 56.4082 171.1211 c +56.4316 170.998 56.3633 170.8779 56.248 170.8359 c +54.2012 170.082 52.5859 168.7637 51.7266 166.9258 c +49.5137 162.1973 53.0938 155.8301 59.7402 152.5566 c +59.8184 152.5186 59.8711 152.4434 59.8809 152.3594 c +59.8906 152.2725 59.8555 152.1885 59.791 152.1318 c +55.5 148.6143 50.3789 142.0781 50.3789 128.7148 c +50.377 110.0322 62.5332 92.25 78.6543 92.25 c +87.8672 92.25 95.2871 98.6465 99.125 108.2422 C +94.9023 102.4844 89.1445 98.1348 81.2109 98.1348 c +69.5703 98.1348 60.3574 110.5439 60.3555 128.459 c +60.3555 145.3457 72.2578 165.0518 88.1211 165.0508 c +96.8242 165.0488 103.3477 158.0117 103.3477 148.9277 c +103.3477 140.8672 98.1016 136.2637 92.2168 136.2637 c +87.7793 136.2637 84.7227 139.3936 83.7715 142.7871 c +83.7383 142.9023 83.791 143.0254 83.8965 143.0811 c +84.0039 143.1357 84.1328 143.1104 84.2109 143.0186 c +84.9629 142.124 86.1074 141.3809 87.8652 141.3809 c +90.8086 141.3789 92.3438 143.9082 92.3438 145.7285 c +92.3438 149.1836 89.7852 151.6152 85.9453 151.6152 c +80.7031 151.6152 76.6055 145.8564 76.6055 138.4385 c +76.6055 129.2236 85.4355 120.7813 94.2637 120.7813 c +103.2852 120.7813 112.9434 128.8408 112.9434 143.8125 c +112.9414 158.5234 102.9648 175.4141 87.0977 175.4141 c +77.8477 175.4141 69.9844 171.2441 63.9551 164.3398 c +63.875 164.248 63.7422 164.2246 63.6387 164.2852 c +63.5313 164.3477 63.4844 164.4727 63.5234 164.5879 c +67.957 177.5234 65.4766 189.7344 58.7031 189.7324 c +55.3887 189.7324 53.7012 187.3535 53.7012 184.8154 c +53.7012 182.21 55.5996 180.0566 58.6699 179.6611 c +58.791 179.6475 58.8828 179.5479 58.8926 179.4268 c +58.8984 179.3047 58.8184 179.1943 58.7012 179.1641 c +51.8867 177.4004 44.877 181.1133 44.877 188.2061 c +44.877 194.4854 50.2539 199.3398 57.2891 199.3398 c +67.9258 199.3379 73.0137 188.0684 70.748 177.8047 C +76.207 184.8486 84.3008 190.6396 95.9258 190.6396 c +119.4688 190.6396 131.3672 163.7715 131.3672 145.7285 c +131.3672 129.3525 128.041 118.8604 121.1309 110.8018 C +129.1934 116.9404 132.5195 123.7227 134.0547 133.0645 C +140.1953 141.5078 156.1875 141.5078 v +162.875 141.5078 169.1172 139.0322 173.9609 134.3438 C +173.9629 134.3447 173.9648 134.3477 173.9668 134.3486 C +174.002 134.3105 174.0391 134.2695 174.0762 134.2314 C +174.3965 133.915 174.7109 133.5918 175.0195 133.2578 C +180.0801 128.4102 190.2109 123.8633 199.4512 127.6602 c +199.5566 127.7031 199.6777 127.6699 199.748 127.582 c +199.8184 127.4932 199.8184 127.3672 199.752 127.2754 c +195.3457 121.252 187.7285 119.335 182.0742 120.21 C +183.1172 116.4941 183.6953 112.3281 183.6953 107.7305 c +183.6973 91.3262 174.8984 79.7598 165.2852 74.1289 C +168.4375 70.3281 167.7949 64.3535 164.2539 60.2949 c +164.1738 60.2051 164.043 60.1816 163.9375 60.2402 c +163.834 60.2988 163.7832 60.4238 163.8184 60.5391 c +165.5508 66.0703 160.4277 70.6875 153.6387 70.4395 c +153.5156 70.4355 153.4063 70.5195 153.3809 70.6406 c +153.3555 70.7617 153.418 70.8828 153.5332 70.9277 c +163.668 75.0918 170.3906 83.9102 170.3887 94.9355 c +170.3906 106.4492 163.4805 115.79 152.3496 115.79 c +143.2656 115.79 134.1816 107.4727 134.1816 97.1133 c +134.1816 89.0508 138.6582 84.3184 144.416 84.3164 c +149.4063 84.3184 153.373 87.7715 153.373 91.8672 c +153.373 97.7188 146.7891 99.8408 143.2773 95.209 c +143.209 95.1172 143.0859 95.084 142.9805 95.127 c +142.875 95.1689 142.8105 95.2773 142.8223 95.3926 c +143.3457 99.7813 146.5762 103.8926 151.582 103.8926 c +156.1875 103.8926 160.9219 100.0518 160.9219 91.8652 c +160.9219 82.1406 151.584 72.291 136.2305 72.2891 c +115.2461 72.2891 103.8594 95.959 114.0938 114.8945 C +108.8496 108.8809 104.1152 102.4844 104.1152 91.0977 c +104.1133 69.5898 125.3789 55.0488 150.4688 63.5977 c +150.5879 63.6367 150.7188 63.584 150.7754 63.4746 c +150.834 63.3633 150.8008 63.2266 150.6992 63.1523 c +143.6934 58.043 136.3555 50.5137 136.3555 37.873 c +136.3555 24.6934 145.0547 15.3535 158.6191 15.3535 c +169.1094 15.3535 175.7637 21.752 175.7637 29.2988 c +175.7637 35.0566 172.0449 39.6641 165.6563 39.6641 c +156.1426 39.6641 152.9082 29.3203 157.832 24.6953 c +157.916 24.6152 157.9355 24.4902 157.8809 24.3887 c +157.8242 24.2871 157.7051 24.2344 157.5938 24.2637 c +152.8242 25.5 148.2559 30.332 148.2559 37.6152 c +148.2539 50.1563 159.8965 58.4727 172.6914 58.4727 c +178.6875 58.4727 184.4902 56.7188 189.1641 53.4297 C +188.6113 49.2773 190.0313 44.6816 192.1309 41.5879 C +190.1816 48.457 192.291 59.7656 202.8027 59.7676 c +208.6953 59.7656 212.5898 55.2383 212.5898 49.8867 c +212.5898 43.5605 207.2441 40.6094 202.8945 41.2148 c +202.7793 41.2305 202.6895 41.3223 202.6758 41.4375 c +202.6641 41.5527 202.7305 41.6602 202.8379 41.7031 c +204.4238 42.3105 205.7813 43.9727 205.7813 45.9668 c +205.7813 48.4668 203.8691 49.9492 201.8691 49.9492 c +198.5762 49.9492 196.7461 46.2793 197.8984 42.2305 C +197.8867 42.2285 L +198.959 39.3926 199.5605 36.2246 199.5605 32.7363 c +199.5605 15.9746 181.3809 0.001953 158.4395 0 c +134.2285 0 121.3867 17.2734 121.3887 35.0566 c +121.3887 44.5938 124.9688 51.8184 129.5762 56.4258 C +109.6543 54.3066 97.0781 62.8223 90.2969 75.1035 C +94.7754 78.9414 96.4375 84.5723 Y +91.0645 77.5352 81.8535 71.3945 68.9316 71.3945 c +49.3555 71.3945 34 90.5859 34 111.1836 c +34 124.2568 38.8027 136.9648 48.5645 145.4307 C +42.5273 150.459 39.918 157.8018 42.6934 163.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +407.2622 263.3711 m +407.3872 263.3711 407.4927 263.4629 407.5103 263.585 c +409.8911 279.5996 419.1646 292.9746 431.9028 300.9814 c +432.0063 301.0449 432.0493 301.1758 432.0044 301.29 c +431.9575 301.4023 431.8384 301.4688 431.7173 301.4443 c +421.2466 299.3398 411.9243 293.5811 405.27 285.4141 C +400.645 298.7891 390.0337 307.418 376.9692 311.0654 C +381.7778 316.6582 379.2622 324.5986 371.8501 325.9023 c +371.7368 325.9229 371.6255 325.8643 371.5767 325.7607 c +371.5278 325.6563 371.5552 325.5322 371.6431 325.46 c +375.6157 322.1143 374.1626 314.04 362.3052 314.04 c +354.5103 314.04 349.4849 317.2188 349.4849 321.5254 c +349.4849 324.9102 352.5474 326.7559 355.1255 326.7559 c +359.5415 326.7559 362.0649 322.7949 360.1685 319.2129 c +360.1138 319.1104 360.1353 318.9814 360.2231 318.9033 c +360.311 318.8271 360.4399 318.8184 360.5376 318.8857 c +362.7856 320.4492 364.356 322.5059 364.356 325.6768 c +364.356 331.0635 359.3306 336.8066 351.0239 336.8066 c +342.1021 336.8066 334.0005 329.9355 334.0005 321.5254 c +334.0005 309.71 344.0493 304.0918 354.6138 303.0918 C +350.2485 301.4189 346.981 296.5664 v +346.9146 296.4697 346.9243 296.3418 347.0024 296.2559 c +347.0806 296.1689 347.2056 296.1475 347.3091 296.2012 c +353.1392 299.2822 359.7954 300.9453 366.811 300.9453 c +386.4321 300.9453 403.3579 284.541 407.0103 263.5801 c +407.0317 263.4561 407.1392 263.3691 407.2622 263.3711 c +f +483.9399 315.7773 m +488.5493 323.4551 490.1919 336.627 485.897 346.46 c +485.8481 346.5703 485.8833 346.6992 485.9829 346.7686 c +486.0806 346.8379 486.2153 346.8281 486.3032 346.7461 c +491.1099 342.1914 495.2427 331.5684 493.0083 319.2871 C +496.106 316.8936 498.0532 314.5176 499.522 311.335 c +499.5688 311.2314 499.5415 311.1104 499.4556 311.0352 c +499.3696 310.9629 499.2446 310.9551 499.1489 311.0186 c +494.1528 314.3809 489.686 315.5283 483.9399 315.7773 C +f +473.3306 195.9707 m +473.4009 195.8672 473.3833 195.7266 473.2915 195.6426 c +473.1978 195.5586 473.0571 195.5547 472.9595 195.6348 c +466.145 201.1621 457.0845 204.6895 445.9243 204.6895 c +418.3521 204.6895 400.9517 188.1719 398.2173 170.7637 c +398.1997 170.6523 398.1099 170.5664 397.9985 170.5508 c +397.8872 170.5371 397.7778 170.5977 397.7329 170.7012 c +395.0083 176.959 393.3657 186.0352 401.7817 198.209 c +406.8169 205.4941 412.9106 210.5098 412.9106 217.0273 c +412.9106 221.2852 410.6509 224.1797 407.2231 224.1797 c +403.6177 224.1797 401.2876 221.0918 401.2876 217.625 c +401.2876 215.877 401.7915 214.1465 402.6958 212.5801 c +402.7544 212.4766 402.7368 212.3496 402.6509 212.2676 c +402.5649 212.1875 402.436 212.1758 402.3384 212.2402 c +399.3657 214.1777 396.7114 217.6367 396.7114 222.5117 c +396.7114 229.6836 402.8442 235.6816 411.1802 235.6816 c +420.1548 235.6816 427.5044 228.6328 427.5044 218.4922 c +427.5044 215.0156 426.5142 210.8242 424.0415 207.3613 C +427.4263 210.1875 429.2329 212.1875 430.7192 216.5117 C +441.1196 218.3223 452.2251 216.6602 461.0493 210.8691 C +461.3052 216.9707 463.3013 222.0605 467.3931 226.1875 c +467.4771 226.2715 467.6079 226.2852 467.7075 226.2227 c +467.8091 226.1582 467.8521 226.0332 467.811 225.9219 c +464.9341 217.9199 466.8657 205.7246 473.3306 195.9707 c +f +560.6978 202.6055 m +558.4517 197.8066 553.2388 195.1211 547.2368 195.0117 c +547.1118 195.0098 547.0044 195.0977 546.9829 195.2188 c +546.9595 195.3418 547.0278 195.4609 547.1431 195.5039 c +549.1899 196.2578 550.8052 197.5762 551.6646 199.4141 c +553.8774 204.1426 550.2974 210.5098 543.6509 213.7832 c +543.5728 213.8223 543.52 213.8965 543.5103 213.9824 c +543.5005 214.0684 543.5337 214.1523 543.6001 214.207 c +547.8911 217.7266 553.0122 224.2617 553.0122 237.627 c +553.0122 256.3086 540.8579 274.0898 524.7368 274.0898 c +515.5239 274.0898 508.104 267.6934 504.2661 258.0977 C +508.4868 263.8564 514.2446 268.2051 522.1782 268.2051 c +533.8208 268.2051 543.0337 255.7969 543.0337 237.8828 c +543.0337 220.9941 531.1333 201.2891 515.2681 201.2891 c +506.5669 201.2891 500.0435 208.3281 500.0435 217.4121 c +500.0435 225.4746 505.2896 230.0781 511.1763 230.0781 c +515.6099 230.0781 518.6685 226.9473 519.6196 223.5527 c +519.6509 223.4375 519.6001 223.3164 519.4927 223.2598 c +519.3872 223.2051 519.2583 223.2305 519.1802 223.3223 c +518.4282 224.2168 517.2837 224.9609 515.5259 224.9609 c +512.5825 224.9609 511.0474 222.4316 511.0474 220.6113 c +511.0474 217.1563 513.606 214.7246 517.4458 214.7246 c +522.6899 214.7246 526.7856 220.4824 526.7856 227.9023 c +526.7856 237.1152 517.9556 245.5586 509.1274 245.5586 c +500.106 245.5586 490.4478 237.5 490.4478 222.5293 c +490.4478 207.8164 500.4282 190.9258 516.2935 190.9258 c +525.5435 190.9258 533.4048 195.0957 539.436 202.002 c +539.5161 202.0918 539.6489 202.1152 539.7544 202.0547 c +539.8599 201.9941 539.9067 201.8672 539.8677 201.752 c +535.4341 188.8164 537.9126 176.6074 544.688 176.6074 c +548.0024 176.6074 549.6899 178.9863 549.6899 181.5234 c +549.6899 184.1309 547.7915 186.2852 544.7212 186.6777 c +544.6001 186.6934 544.5063 186.793 544.4985 186.9141 c +544.4927 187.0352 544.5708 187.1465 544.6899 187.1758 c +551.5044 188.9395 558.5142 185.2285 558.5142 178.1328 c +558.5142 171.8555 553.1372 167.002 546.1021 167.002 c +535.4653 167.002 530.3774 178.2715 532.6431 188.5371 C +527.1841 181.4922 519.0903 175.7012 507.4653 175.7012 c +483.9224 175.7012 472.0239 202.5703 472.0239 220.6113 c +472.0239 236.9883 475.3501 247.4785 482.2603 255.5391 C +474.1978 249.3984 470.8716 242.6172 469.3384 233.2773 C +463.1958 224.832 447.2036 224.832 v +440.5161 224.832 434.2739 227.3086 429.4302 231.998 C +429.4282 231.9961 429.4263 231.9941 429.4243 231.9902 C +429.3892 232.0313 429.3501 232.0703 429.3149 232.1094 C +428.9946 232.4238 428.6802 232.748 428.3716 233.082 C +423.3091 237.9316 413.1802 242.4785 403.9399 238.6797 c +403.8345 238.6367 403.7134 238.6699 403.6431 238.7578 c +403.5728 238.8477 403.5708 238.9727 403.6392 239.0645 c +408.0454 245.0898 415.6626 247.0059 421.3169 246.1309 C +420.272 249.8457 419.6938 254.0117 419.6938 258.6094 c +419.6938 275.0137 428.4927 286.5801 438.106 292.2109 C +434.9517 296.0137 435.5962 301.9883 439.1372 306.0449 c +439.2173 306.1357 439.3481 306.1582 439.4536 306.0996 c +439.5571 306.041 439.606 305.918 439.5708 305.8018 c +437.8403 300.2695 442.9634 295.6523 449.7524 295.9004 c +449.8755 295.9033 449.9829 295.8193 450.0103 295.6992 c +450.0356 295.5801 449.9712 295.457 449.8579 295.4111 c +439.7212 291.248 433.0005 282.4316 433.0005 271.4033 c +433.0005 259.8906 439.9087 250.5488 451.0415 250.5488 c +460.1255 250.5488 469.2095 258.8672 469.2095 269.2285 c +469.2095 277.2891 464.731 282.0225 458.9731 282.0225 c +453.9849 282.0225 450.0181 278.5684 450.0181 274.4736 c +450.0181 268.6211 456.6001 266.499 460.1118 271.1309 c +460.1821 271.2227 460.3032 271.2559 460.4087 271.2129 c +460.5161 271.1699 460.5806 271.0625 460.5669 270.9482 c +460.0435 266.5586 456.8149 262.4482 451.8091 262.4482 c +447.2036 262.4482 442.4692 266.2861 442.4692 274.4746 c +442.4692 284.1982 451.8071 294.0508 467.1606 294.0508 c +488.1431 294.0508 499.5317 270.3809 489.2974 251.4453 C +494.5415 257.459 499.2759 263.8555 499.2759 275.2432 c +499.2759 296.75 478.0122 311.291 452.9224 302.7441 c +452.8032 302.7021 452.6724 302.7559 452.6157 302.8672 c +452.5571 302.9785 452.5884 303.1143 452.6899 303.1895 c +459.6958 308.2979 467.0337 315.8262 467.0337 328.4668 c +467.0337 341.6475 458.3345 350.9854 444.772 350.9854 c +434.2798 350.9854 427.6274 344.5879 427.6274 337.04 c +427.6274 331.2822 431.3462 326.6768 437.7349 326.6768 c +447.2466 326.6768 450.481 337.0195 445.5591 341.6445 c +445.4751 341.7236 445.4556 341.8516 445.5103 341.9521 c +445.5669 342.0547 445.6841 342.1055 445.7974 342.0762 c +450.5669 340.8398 455.1353 336.0068 455.1353 328.7236 c +455.1353 316.1855 443.4927 307.8682 430.6978 307.8682 c +424.7017 307.8682 418.8989 309.623 414.2271 312.9102 C +414.7778 317.0635 413.3579 321.6602 411.2603 324.752 C +413.2095 317.8848 411.1021 306.5732 400.5864 306.5732 c +394.6958 306.5732 390.8013 311.1025 390.8013 316.4551 c +390.8013 322.7793 396.147 325.7314 400.4966 325.125 c +400.6118 325.1104 400.7017 325.0186 400.7134 324.9023 c +400.7271 324.7891 400.6606 324.6797 400.5532 324.6367 c +398.9673 324.0293 397.6118 322.3691 397.6118 320.373 c +397.6118 317.873 399.52 316.3906 401.52 316.3906 c +404.8149 316.3906 406.645 320.0605 405.4927 324.1104 C +405.5044 324.1104 L +404.4321 326.9473 403.8286 330.1152 403.8286 333.6055 c +403.8286 350.3672 422.0103 366.3398 444.9497 366.3398 c +469.1626 366.3398 482.0044 349.0664 482.0044 331.2822 c +482.0044 321.7461 478.4224 314.5225 473.8149 309.915 C +493.7368 312.0332 506.313 303.5176 513.0942 291.2354 C +508.6157 287.3975 506.9536 281.7676 Y +512.3267 288.8057 521.5376 294.9453 534.4595 294.9453 c +554.0356 294.9453 569.3911 275.7539 569.3911 255.1563 c +569.3911 242.084 564.5884 229.375 554.8267 220.9102 C +560.8638 215.8809 563.4731 208.5391 560.6978 202.6055 c +f +*U +*u +482.2114 327.9053 m +482.1782 327.7852 482.2388 327.6582 482.3521 327.6094 c +497.1763 321.0957 507.6372 308.6289 512.0063 294.2324 c +512.0415 294.1152 512.1548 294.0391 512.2778 294.0527 c +512.3989 294.0664 512.4946 294.166 512.5024 294.2871 c +513.229 304.9434 510.1274 315.4531 504.0005 324.0234 C +518.1216 324.9648 529.2407 332.9297 536.1997 344.5723 C +540.3286 338.46 548.6509 338.7969 551.8599 345.6035 c +551.9106 345.708 551.8833 345.832 551.7954 345.9063 c +551.7075 345.9805 551.5806 345.9873 551.4868 345.9219 c +547.2134 342.9688 539.8071 346.498 542.9282 357.9355 c +544.981 365.4561 549.3716 369.4668 553.5259 368.333 c +556.7915 367.4414 557.7661 364.002 557.0864 361.5146 c +555.9243 357.2539 551.438 355.8623 548.481 358.6357 c +548.397 358.7158 548.2681 358.7285 548.1704 358.6641 c +548.0728 358.5986 548.0298 358.4775 548.0688 358.3662 c +548.9868 355.7852 550.5571 353.7285 553.6157 352.8936 c +558.811 351.4756 565.6743 354.8115 567.8618 362.8252 c +570.2114 371.4316 565.7153 381.0566 557.604 383.2715 c +546.2036 386.3818 538.1392 378.166 534.3931 368.2383 C +533.9263 372.8896 530.1079 377.3203 v +530.0317 377.4092 529.9048 377.4336 529.8013 377.3818 c +529.6978 377.3291 529.6431 377.2129 529.6665 377.0996 c +531.106 370.6641 530.9575 363.8047 529.1099 357.0361 c +523.9438 338.1074 503.6626 326.0977 482.479 328.0938 c +482.354 328.1055 482.2407 328.0254 482.2114 327.9053 c +f +512.5806 240.1348 m +518.7739 233.666 531.0493 228.6133 541.6646 230.168 c +541.7856 230.1855 541.9009 230.1172 541.9399 230.0039 c +541.981 229.8906 541.936 229.7637 541.8345 229.7012 c +536.1743 226.2617 524.8384 225.0723 513.5786 230.4609 C +510.4536 228.1035 507.6489 226.8496 504.1919 226.2715 c +504.0806 226.2539 503.9692 226.3125 503.9204 226.4141 c +503.8735 226.5156 503.8989 226.6387 503.9849 226.7148 c +508.5454 230.6484 510.8286 234.6563 512.5806 240.1348 C +f +399.7935 281.9121 m +399.6763 281.8711 399.5454 281.9258 399.4888 282.0371 c +399.4321 282.1484 399.4653 282.2852 399.5688 282.3594 c +406.6938 287.4785 412.4829 295.291 415.4204 306.0566 c +422.6802 332.6563 411.3267 353.792 395.2544 361.0146 c +395.1509 361.0605 395.0903 361.1689 395.106 361.2803 c +395.1216 361.3926 395.2095 361.4814 395.3208 361.4971 c +402.0747 362.4785 411.2622 361.6729 420.7915 350.3486 c +426.4927 343.5732 429.7271 336.373 436.0142 334.6563 c +440.1216 333.5352 443.5103 334.9551 444.4126 338.2617 c +445.3618 341.7393 442.9966 344.8018 439.6528 345.7148 c +437.9653 346.1738 436.1626 346.1436 434.4146 345.6836 c +434.2993 345.6533 434.1821 345.7051 434.1255 345.8086 c +434.0708 345.9121 434.0923 346.04 434.1802 346.1172 c +436.8325 348.4746 440.8677 350.125 445.5708 348.8408 c +452.4907 346.9531 456.6606 339.457 454.4673 331.415 c +452.104 322.7578 443.3696 317.5234 433.5864 320.1934 c +430.2329 321.1084 426.4497 323.168 423.7603 326.4648 C +425.5942 322.4551 427.0493 320.1855 430.8286 317.6133 C +429.8364 307.1035 425.3091 296.8271 417.4009 289.8389 C +423.2192 287.9863 427.604 284.7207 430.5083 279.6855 c +430.5669 279.582 430.5454 279.4531 430.4595 279.373 c +430.3696 279.293 430.2388 279.2832 430.1411 279.3535 c +423.1802 284.2344 410.9048 285.582 399.7935 281.9121 c +f +383.1919 195.8809 m +379.1548 199.3105 377.936 205.0469 379.4106 210.8672 c +379.4419 210.9883 379.5552 211.0684 379.6782 211.0566 c +379.8032 211.0469 379.8989 210.9492 379.9106 210.8281 c +380.0981 208.6543 380.9458 206.748 382.4927 205.4355 c +386.4712 202.0566 393.5571 203.834 398.4634 209.3828 c +398.522 209.4492 398.6079 209.4805 398.6938 209.4668 c +398.7798 209.4531 398.8521 209.3984 398.8872 209.3203 c +401.1528 204.2539 406.1079 197.5938 419.0005 194.0742 c +437.0239 189.1563 457.3794 196.1992 461.6235 211.752 c +464.0493 220.6406 459.8306 229.4824 451.5845 235.7109 C +456.0298 230.123 458.7075 223.4238 456.6177 215.7695 c +453.5532 204.5391 439.1567 198.918 421.8755 203.6348 c +405.5825 208.0801 389.7075 224.748 393.8833 240.0547 c +396.1743 248.4492 404.6821 252.8887 413.4458 250.4961 c +421.2231 248.375 424.2837 242.1016 422.7329 236.4219 c +421.5669 232.1445 417.7407 230.0195 414.2153 229.9941 c +414.0962 229.9941 413.9927 230.0762 413.9653 230.1934 c +413.9419 230.3105 413.9985 230.4277 414.1079 230.4785 c +415.1704 230.9688 416.188 231.877 416.6509 233.5742 c +417.4263 236.4121 415.3911 238.5605 413.6353 239.0391 c +410.3032 239.9492 407.2837 238.1211 406.272 234.416 c +404.8911 229.3574 409.3677 223.8906 416.5239 221.9355 c +425.4126 219.5117 435.8833 225.8066 438.2075 234.3223 c +440.5825 243.0254 435.3501 254.4648 420.9087 258.4063 c +406.7153 262.2813 387.7935 257.0996 383.6157 241.793 c +381.1802 232.8691 383.1333 224.1875 388.2075 216.5508 c +388.2739 216.4512 388.2622 216.3164 388.1763 216.2305 c +388.0884 216.1445 387.9536 216.1328 387.854 216.2012 c +376.5415 223.8828 364.1118 224.707 362.3267 218.1699 c +361.4536 214.9727 363.3052 212.7188 365.7524 212.0508 c +368.2681 211.3652 370.8462 212.6289 372.0337 215.4883 c +372.0806 215.5996 372.2017 215.6641 372.3208 215.6406 c +372.438 215.6133 372.5259 215.5098 372.522 215.3867 c +372.4302 208.3477 367.0044 202.5625 360.1587 204.4316 c +354.1021 206.084 350.8364 212.5488 352.688 219.3359 c +355.4888 229.5977 367.6997 231.5391 377.0063 226.6504 C +371.647 233.7715 368.1919 243.1035 371.2524 254.3184 c +377.4517 277.0313 406.5044 281.4355 423.9087 276.6855 c +439.7075 272.373 448.9517 266.4023 454.9087 257.6152 C +451.1079 267.0098 445.4419 272.0039 436.8345 275.9434 C +430.3052 284.0918 434.5161 299.5195 v +436.2759 305.9707 440.3091 311.3418 446.1079 314.7793 C +446.1079 314.7813 446.106 314.7842 446.1021 314.7871 C +446.1509 314.8105 446.1997 314.8379 446.2466 314.8613 C +446.6333 315.0879 447.0298 315.3057 447.4321 315.5146 C +453.4438 319.1211 460.4966 327.6973 459.2661 337.6113 c +459.2524 337.7236 459.3149 337.832 459.4185 337.877 c +459.5239 337.9219 459.645 337.8896 459.7153 337.8018 c +464.3677 331.9629 464.2114 324.1104 461.8794 318.8857 C +465.7368 318.915 469.9087 318.375 474.3442 317.165 c +490.1685 312.8457 499.0122 301.3135 501.9126 290.5566 C +506.4106 292.5977 512.0063 290.4043 514.9888 285.9199 c +515.0532 285.8184 515.0415 285.6855 514.9575 285.5996 c +514.8735 285.5156 514.7407 285.5 514.6392 285.5645 c +509.7583 288.6914 503.9556 284.9648 502.4048 278.3496 c +502.3774 278.2305 502.2681 278.1484 502.145 278.1543 c +502.022 278.1602 501.9204 278.2539 501.9067 278.377 c +500.5591 289.251 493.8228 298.0566 483.1841 300.96 c +472.0767 303.9922 461.2446 299.7852 458.3149 289.0469 c +455.9224 280.2832 461.5571 269.3301 471.5513 266.6016 c +479.3286 264.4785 485.0747 267.5527 486.5903 273.1074 c +487.9048 277.9199 485.6157 282.6563 481.6665 283.7344 c +476.0181 285.2754 472.2388 279.4844 475.7837 274.877 c +475.8521 274.7852 475.854 274.6602 475.7837 274.5684 c +475.7153 274.4766 475.5923 274.4434 475.4868 274.4863 c +471.3892 276.1465 468.2739 280.3418 469.5923 285.1729 c +470.8052 289.6152 475.7544 293.1729 483.6548 291.0166 c +493.0356 288.457 500.0806 276.8555 496.0376 262.043 c +490.5142 241.7988 464.6802 237.0449 449.1079 251.9043 C +453.5278 245.2617 458.4517 239.0098 469.438 236.0117 c +490.188 230.3496 509.813 247.0332 508.1724 273.4902 c +508.1646 273.6152 508.2505 273.7285 508.3735 273.7539 c +508.4946 273.7813 508.6196 273.7129 508.6646 273.5977 c +511.7466 265.4922 517.0786 256.4316 529.2739 253.1035 c +541.9888 249.6328 553.2876 255.5664 556.8599 268.6504 c +559.6216 278.7734 555.2017 286.875 547.9204 288.8623 c +542.3657 290.3789 536.9419 288.0039 535.2603 281.8398 c +532.7563 272.6641 541.8833 266.8203 547.6411 270.3516 c +547.7388 270.4121 547.8677 270.3965 547.9497 270.3164 c +548.0337 270.2363 548.0513 270.1094 547.9927 270.0078 c +545.5454 265.7324 539.6802 262.5977 532.6548 264.5156 c +520.5571 267.8164 515.6001 281.2383 518.9673 293.5811 c +520.5454 299.3652 523.7681 304.502 528.1685 308.1426 C +532.0298 306.5186 536.8384 306.6777 540.3735 307.8867 C +533.2349 307.8154 522.8794 312.8262 525.647 322.9707 c +527.1978 328.6533 532.5923 331.2188 537.7563 329.8086 c +543.8579 328.1436 545.2974 322.21 543.5688 318.1729 c +543.522 318.0654 543.4106 318.0039 543.2974 318.0225 c +543.1821 318.04 543.0942 318.1318 543.0825 318.2471 c +542.9146 319.9375 541.6685 321.6836 539.7446 322.208 c +537.3325 322.8662 535.3989 321.415 534.8735 319.4854 c +534.0044 316.3066 537.063 313.5752 541.2739 313.6211 C +541.27 313.6094 L +544.2896 313.8984 547.5044 313.6445 550.8716 312.7266 c +567.0415 308.3125 577.6646 286.5674 571.6235 264.4375 c +565.2485 241.0781 545.2056 233.2363 528.0474 237.9199 c +518.8481 240.4297 512.8228 245.7871 509.5903 251.4453 C +506.3892 231.668 494.8618 221.7793 481.229 218.4707 C +478.7056 223.8008 473.7114 226.8867 Y +479.0864 219.8496 482.5845 209.3477 479.1821 196.8809 c +474.0278 177.9961 451.4712 168.2344 431.6001 173.6582 c +418.9888 177.0996 407.9927 185.0801 402.397 196.7266 C +395.9556 192.2266 388.186 191.6406 383.1919 195.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +530.1294 269.9688 m +530.0044 269.9688 529.8989 269.877 529.8794 269.7539 c +527.5005 253.7402 518.2271 240.3652 505.4888 232.3594 c +505.3853 232.2949 505.3403 232.1641 505.3872 232.0508 c +505.4321 231.9375 505.5532 231.8711 505.6724 231.8965 c +516.145 234 525.4653 239.7598 532.1216 247.9277 C +536.7466 234.5508 547.3579 225.9219 560.4224 222.2734 C +555.6138 216.6816 558.1294 208.7402 565.5415 207.4375 c +565.6548 207.416 565.7661 207.4746 565.8149 207.5781 c +565.8638 207.6816 565.8364 207.8066 565.7485 207.8809 c +561.7759 211.2266 563.229 219.3008 575.0864 219.3008 c +582.8804 219.3008 587.9077 216.1211 587.9077 211.8145 c +587.9077 208.4297 584.8452 206.584 582.2651 206.584 c +577.8511 206.584 575.3267 210.5449 577.2231 214.127 c +577.2778 214.2305 577.2563 214.3574 577.1685 214.4355 c +577.0806 214.5137 576.9517 214.5215 576.854 214.4551 c +574.606 212.8906 573.0356 210.834 573.0356 207.6641 c +573.0356 202.2773 578.062 196.5352 586.3687 196.5332 c +595.2905 196.5332 603.3921 203.4043 603.3921 211.8145 c +603.3921 223.6309 593.3433 229.248 582.7788 230.248 C +587.144 231.9219 590.4116 236.7734 v +590.478 236.8691 590.4683 236.998 590.3901 237.084 c +590.312 237.1719 590.1851 237.1934 590.0835 237.1387 c +584.2534 234.0566 577.5942 232.3945 570.5806 232.3945 c +550.9575 232.3945 534.0337 248.7988 530.3813 269.7607 c +530.3599 269.8818 530.2524 269.9727 530.1294 269.9688 c +f +453.4517 217.5625 m +448.8442 209.8867 447.1997 196.7129 451.4946 186.8809 c +451.5435 186.7695 451.5083 186.6406 451.4087 186.5703 c +451.3091 186.502 451.1763 186.5117 451.0884 186.5957 c +446.2817 191.1484 442.1489 201.7715 444.3833 214.0527 C +441.2876 216.4473 439.3384 218.8223 437.8696 222.0059 c +437.8228 222.1074 437.8501 222.2305 437.936 222.3047 c +438.022 222.377 438.147 222.3848 438.2427 222.3203 c +443.2388 218.959 447.7056 217.8125 453.4517 217.5625 C +f +464.0591 337.3691 m +463.9907 337.4727 464.0083 337.6133 464.1001 337.6973 c +464.1938 337.7813 464.3345 337.7852 464.4321 337.7061 c +471.2466 332.1797 480.3071 328.6504 491.4673 328.6504 c +519.0376 328.6504 536.4399 345.1689 539.1743 362.5771 c +539.1919 362.6885 539.2817 362.7734 539.3931 362.7891 c +539.5044 362.8047 539.6138 362.7422 539.6587 362.6396 c +542.3833 356.3818 544.0259 347.3057 535.6099 335.1309 c +530.5747 327.8457 524.479 322.8311 524.479 316.3145 c +524.479 312.0566 526.7407 309.1602 530.1685 309.1602 c +533.7739 309.1602 536.106 312.248 536.104 315.7148 c +536.104 317.4629 535.6001 319.1934 534.6958 320.7607 c +534.6372 320.8633 534.6548 320.9902 534.7407 321.0723 c +534.8247 321.1523 534.9556 321.165 535.0532 321.1016 c +538.0259 319.1641 540.6802 315.7021 540.6802 310.8281 c +540.6802 303.6563 534.5474 297.6602 526.2095 297.6602 c +517.2368 297.6602 509.8872 304.709 509.8872 314.8477 c +509.8872 318.3262 510.8755 322.5156 513.3501 325.9805 C +509.9653 323.1523 508.1587 321.1523 506.6724 316.8271 C +496.272 315.0186 485.1665 316.6797 476.3403 322.4727 C +476.0864 316.3711 474.0903 311.2793 469.9985 307.1533 c +469.9146 307.0684 469.7837 307.0547 469.6841 307.1182 c +469.5825 307.1816 469.5415 307.3066 469.5806 307.4189 c +472.4575 315.4199 470.5239 327.6152 464.0591 337.3691 c +f +376.6938 330.7344 m +378.938 335.5352 384.1528 338.2188 390.1548 338.3271 c +390.2798 338.3311 390.3872 338.2432 390.4087 338.1211 c +390.4321 337.998 390.3638 337.8779 390.2485 337.8359 c +388.2017 337.082 386.5864 335.7637 385.7271 333.9258 c +383.5142 329.1973 387.0942 322.8301 393.7407 319.5566 c +393.8188 319.5186 393.8716 319.4434 393.8813 319.3594 c +393.8911 319.2725 393.856 319.1885 393.7915 319.1318 c +389.5005 315.6143 384.3794 309.0781 384.3794 295.7148 c +384.3774 277.0322 396.5337 259.25 412.6548 259.25 c +421.8677 259.25 429.2876 265.6465 433.1255 275.2422 C +428.9028 269.4844 423.145 265.1348 415.2114 265.1348 c +403.5708 265.1348 394.3579 277.5439 394.356 295.459 c +394.356 312.3457 406.2583 332.0518 422.1216 332.0508 c +430.8247 332.0488 437.3481 325.0117 437.3481 315.9277 c +437.3481 307.8672 432.1021 303.2637 426.2173 303.2637 c +421.7798 303.2637 418.7231 306.3936 417.772 309.7871 c +417.7388 309.9023 417.7915 310.0254 417.897 310.0811 c +418.0044 310.1357 418.1333 310.1104 418.2114 310.0186 c +418.9634 309.124 420.1079 308.3809 421.8657 308.3809 c +424.8091 308.3789 426.3442 310.9082 426.3442 312.7285 c +426.3442 316.1836 423.7856 318.6152 419.9458 318.6152 c +414.7036 318.6152 410.606 312.8564 410.606 305.4385 c +410.606 296.2236 419.436 287.7813 428.2642 287.7813 c +437.2856 287.7813 446.9438 295.8408 446.9438 310.8125 c +446.9419 325.5234 436.9653 342.4141 421.0981 342.4141 c +411.8481 342.4141 403.9849 338.2441 397.9556 331.3398 c +397.8755 331.248 397.7427 331.2246 397.6392 331.2852 c +397.5317 331.3477 397.4849 331.4727 397.5239 331.5879 c +401.9575 344.5234 399.4771 356.7344 392.7036 356.7324 c +389.3892 356.7324 387.7017 354.3535 387.7017 351.8154 c +387.7017 349.21 389.6001 347.0566 392.6704 346.6611 c +392.7915 346.6475 392.8833 346.5479 392.8931 346.4268 c +392.8989 346.3047 392.8188 346.1943 392.7017 346.1641 c +385.8872 344.4004 378.8774 348.1133 378.8774 355.2061 c +378.8774 361.4854 384.2544 366.3398 391.2896 366.3398 c +401.9263 366.3379 407.0142 355.0684 404.7485 344.8047 C +410.2075 351.8486 418.3013 357.6396 429.9263 357.6396 c +453.4692 357.6396 465.3677 330.7715 465.3677 312.7285 c +465.3677 296.3525 462.0415 285.8604 455.1313 277.8018 C +463.1938 283.9404 466.52 290.7227 468.0552 300.0645 C +474.1958 308.5078 490.188 308.5078 v +496.8755 308.5078 503.1177 306.0322 507.9614 301.3438 C +507.9634 301.3447 507.9653 301.3477 507.9673 301.3486 C +508.0024 301.3105 508.0396 301.2695 508.0767 301.2314 C +508.397 300.915 508.7114 300.5918 509.02 300.2578 C +514.0806 295.4102 524.2114 290.8633 533.4517 294.6602 c +533.5571 294.7031 533.6782 294.6699 533.7485 294.582 c +533.8188 294.4932 533.8188 294.3672 533.7524 294.2754 c +529.3462 288.252 521.729 286.335 516.0747 287.21 C +517.1177 283.4941 517.6958 279.3281 517.6958 274.7305 c +517.6978 258.3262 508.8989 246.7598 499.2856 241.1289 C +502.438 237.3281 501.7954 231.3535 498.2544 227.2949 c +498.1743 227.2051 498.0435 227.1816 497.938 227.2402 c +497.8345 227.2988 497.7837 227.4238 497.8188 227.5391 c +499.5513 233.0703 494.4282 237.6875 487.6392 237.4395 c +487.5161 237.4355 487.4067 237.5195 487.3813 237.6406 c +487.356 237.7617 487.4185 237.8828 487.5337 237.9277 c +497.6685 242.0918 504.3911 250.9102 504.3892 261.9355 c +504.3911 273.4492 497.481 282.79 486.3501 282.79 c +477.2661 282.79 468.1821 274.4727 468.1821 264.1133 c +468.1821 256.0508 472.6587 251.3184 478.4165 251.3164 c +483.4067 251.3184 487.3735 254.7715 487.3735 258.8672 c +487.3735 264.7188 480.7896 266.8408 477.2778 262.209 c +477.2095 262.1172 477.0864 262.084 476.981 262.127 c +476.8755 262.1689 476.811 262.2773 476.8228 262.3926 c +477.3462 266.7813 480.5767 270.8926 485.5825 270.8926 c +490.188 270.8926 494.9224 267.0518 494.9224 258.8652 c +494.9224 249.1406 485.5845 239.291 470.231 239.2891 c +449.2466 239.2891 437.8599 262.959 448.0942 281.8945 C +442.8501 275.8809 438.1157 269.4844 438.1157 258.0977 c +438.1138 236.5898 459.3794 222.0488 484.4692 230.5977 c +484.5884 230.6367 484.7192 230.584 484.7759 230.4746 c +484.8345 230.3633 484.8013 230.2266 484.6997 230.1523 c +477.6938 225.043 470.356 217.5137 470.356 204.873 c +470.356 191.6934 479.0552 182.3535 492.6196 182.3535 c +503.1099 182.3535 509.7642 188.752 509.7642 196.2988 c +509.7642 202.0566 506.0454 206.6641 499.6567 206.6641 c +490.1431 206.6641 486.9087 196.3203 491.8325 191.6953 c +491.9165 191.6152 491.936 191.4902 491.8813 191.3887 c +491.8247 191.2871 491.7056 191.2344 491.5942 191.2637 c +486.8247 192.5 482.2563 197.332 482.2563 204.6152 c +482.2544 217.1563 493.897 225.4727 506.6919 225.4727 c +512.688 225.4727 518.4907 223.7188 523.1646 220.4297 C +522.6118 216.2773 524.0317 211.6816 526.1313 208.5879 C +524.1821 215.457 526.2915 226.7656 536.8032 226.7676 c +542.6958 226.7656 546.5903 222.2383 546.5903 216.8867 c +546.5903 210.5605 541.2446 207.6094 536.895 208.2148 c +536.7798 208.2305 536.6899 208.3223 536.6763 208.4375 c +536.6646 208.5527 536.731 208.6602 536.8384 208.7031 c +538.4243 209.3105 539.7817 210.9727 539.7817 212.9668 c +539.7817 215.4668 537.8696 216.9492 535.8696 216.9492 c +532.5767 216.9492 530.7466 213.2793 531.8989 209.2305 C +531.8872 209.2285 L +532.9595 206.3926 533.561 203.2246 533.561 199.7363 c +533.561 182.9746 515.3813 167.002 492.4399 167 c +468.229 167 455.3872 184.2734 455.3892 202.0566 c +455.3892 211.5938 458.9692 218.8184 463.5767 223.4258 C +443.6548 221.3066 431.0786 229.8223 424.2974 242.1035 C +428.7759 245.9414 430.438 251.5723 Y +425.0649 244.5352 415.854 238.3945 402.9321 238.3945 c +383.356 238.3945 368.0005 257.5859 368.0005 278.1836 c +368.0005 291.2568 372.8032 303.9648 382.5649 312.4307 C +376.5278 317.459 373.9185 324.8018 376.6938 330.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +240.2622 263.3711 m +240.3872 263.3711 240.4927 263.4629 240.5103 263.585 c +242.8911 279.5996 252.1646 292.9746 264.9028 300.9814 c +265.0063 301.0449 265.0493 301.1758 265.0044 301.29 c +264.9575 301.4023 264.8384 301.4688 264.7173 301.4443 c +254.2466 299.3398 244.9243 293.5811 238.27 285.4141 C +233.644 298.7891 223.0337 307.418 209.9692 311.0654 C +214.7778 316.6582 212.2622 324.5986 204.8501 325.9023 c +204.7368 325.9229 204.6245 325.8643 204.5757 325.7607 c +204.5278 325.6563 204.5542 325.5322 204.6421 325.46 c +208.6157 322.1143 207.1616 314.04 195.3052 314.04 c +187.5103 314.04 182.4849 317.2188 182.4849 321.5254 c +182.4849 324.9102 185.5464 326.7559 188.1255 326.7559 c +192.5415 326.7559 195.0649 322.7949 193.1675 319.2129 c +193.1128 319.1104 193.1353 318.9814 193.2231 318.9033 c +193.311 318.8271 193.4399 318.8184 193.5366 318.8857 c +195.7856 320.4492 197.356 322.5059 197.356 325.6768 c +197.356 331.0635 192.3306 336.8066 184.0239 336.8066 c +175.1021 336.8066 167.0005 329.9355 167.0005 321.5254 c +167.0005 309.71 177.0493 304.0918 187.6138 303.0918 C +183.2485 301.4189 179.98 296.5664 v +179.9146 296.4697 179.9243 296.3418 180.0015 296.2559 c +180.0796 296.1689 180.2056 296.1475 180.3091 296.2012 c +186.1392 299.2822 192.7954 300.9453 199.811 300.9453 c +219.4321 300.9453 236.3579 284.541 240.0103 263.5801 c +240.0317 263.4561 240.1382 263.3691 240.2622 263.3711 c +f +316.9399 315.7773 m +321.5493 323.4551 323.1919 336.627 318.897 346.46 c +318.8481 346.5703 318.8833 346.6992 318.9829 346.7686 c +319.0806 346.8379 319.2153 346.8281 319.3032 346.7461 c +324.1099 342.1914 328.2427 331.5684 326.0083 319.2871 C +329.106 316.8936 331.0532 314.5176 332.522 311.335 c +332.5688 311.2314 332.5415 311.1104 332.4556 311.0352 c +332.3696 310.9629 332.2446 310.9551 332.1489 311.0186 c +327.1528 314.3809 322.686 315.5283 316.9399 315.7773 C +f +306.3306 195.9707 m +306.4009 195.8672 306.3833 195.7266 306.2915 195.6426 c +306.1978 195.5586 306.0571 195.5547 305.9595 195.6348 c +299.145 201.1621 290.0845 204.6895 278.9243 204.6895 c +251.3521 204.6895 233.9517 188.1719 231.2163 170.7637 c +231.1987 170.6523 231.1099 170.5664 230.9985 170.5508 c +230.8862 170.5371 230.7778 170.5977 230.7329 170.7012 c +228.0073 176.959 226.3657 186.0352 234.7817 198.209 c +239.8159 205.4941 245.9106 210.5098 245.9106 217.0273 c +245.9106 221.2852 243.6509 224.1797 240.2231 224.1797 c +236.6177 224.1797 234.2866 221.0918 234.2866 217.625 c +234.2866 215.877 234.7915 214.1465 235.6958 212.5801 c +235.7544 212.4766 235.7358 212.3496 235.6509 212.2676 c +235.5649 212.1875 235.436 212.1758 235.3384 212.2402 c +232.3657 214.1777 229.7114 217.6367 229.7114 222.5117 c +229.7114 229.6836 235.8442 235.6816 244.1802 235.6816 c +253.1548 235.6816 260.5044 228.6328 260.5044 218.4922 c +260.5044 215.0156 259.5142 210.8242 257.0415 207.3613 C +260.4263 210.1875 262.2329 212.1875 263.7192 216.5117 C +274.1196 218.3223 285.2251 216.6602 294.0493 210.8691 C +294.3052 216.9707 296.3013 222.0605 300.3931 226.1875 c +300.4771 226.2715 300.6079 226.2852 300.7075 226.2227 c +300.8091 226.1582 300.8521 226.0332 300.811 225.9219 c +297.9341 217.9199 299.8657 205.7246 306.3306 195.9707 c +f +393.6978 202.6055 m +391.4517 197.8066 386.2388 195.1211 380.2368 195.0117 c +380.1118 195.0098 380.0044 195.0977 379.9829 195.2188 c +379.9595 195.3418 380.0278 195.4609 380.1431 195.5039 c +382.1899 196.2578 383.8052 197.5762 384.6646 199.4141 c +386.8774 204.1426 383.2974 210.5098 376.6509 213.7832 c +376.5728 213.8223 376.52 213.8965 376.5103 213.9824 c +376.5005 214.0684 376.5337 214.1523 376.6001 214.207 c +380.8911 217.7266 386.0122 224.2617 386.0122 237.627 c +386.0122 256.3086 373.8579 274.0898 357.7368 274.0898 c +348.5239 274.0898 341.104 267.6934 337.2661 258.0977 C +341.4868 263.8564 347.2446 268.2051 355.1782 268.2051 c +366.8208 268.2051 376.0337 255.7969 376.0337 237.8828 c +376.0337 220.9941 364.1333 201.2891 348.2681 201.2891 c +339.5669 201.2891 333.0435 208.3281 333.0435 217.4121 c +333.0435 225.4746 338.2896 230.0781 344.1763 230.0781 c +348.6099 230.0781 351.6685 226.9473 352.6196 223.5527 c +352.6509 223.4375 352.6001 223.3164 352.4927 223.2598 c +352.3872 223.2051 352.2583 223.2305 352.1802 223.3223 c +351.4282 224.2168 350.2837 224.9609 348.5259 224.9609 c +345.5825 224.9609 344.0474 222.4316 344.0474 220.6113 c +344.0474 217.1563 346.606 214.7246 350.4458 214.7246 c +355.6899 214.7246 359.7856 220.4824 359.7856 227.9023 c +359.7856 237.1152 350.9556 245.5586 342.1274 245.5586 c +333.106 245.5586 323.4478 237.5 323.4478 222.5293 c +323.4478 207.8164 333.4282 190.9258 349.2935 190.9258 c +358.5435 190.9258 366.4048 195.0957 372.436 202.002 c +372.5161 202.0918 372.6489 202.1152 372.7544 202.0547 c +372.8599 201.9941 372.9067 201.8672 372.8677 201.752 c +368.4341 188.8164 370.9126 176.6074 377.688 176.6074 c +381.0024 176.6074 382.6899 178.9863 382.6899 181.5234 c +382.6899 184.1309 380.7915 186.2852 377.7212 186.6777 c +377.6001 186.6934 377.5063 186.793 377.4985 186.9141 c +377.4927 187.0352 377.5708 187.1465 377.6899 187.1758 c +384.5044 188.9395 391.5142 185.2285 391.5142 178.1328 c +391.5142 171.8555 386.1372 167.002 379.1021 167.002 c +368.4653 167.002 363.3774 178.2715 365.6431 188.5371 C +360.1841 181.4922 352.0903 175.7012 340.4653 175.7012 c +316.9224 175.7012 305.0239 202.5703 305.0239 220.6113 c +305.0239 236.9883 308.3501 247.4785 315.2603 255.5391 C +307.1978 249.3984 303.8716 242.6172 302.3384 233.2773 C +296.1958 224.832 280.2036 224.832 v +273.5161 224.832 267.2739 227.3086 262.4302 231.998 C +262.4282 231.9961 262.4263 231.9941 262.4243 231.9902 C +262.3892 232.0313 262.3501 232.0703 262.3149 232.1094 C +261.9946 232.4238 261.6802 232.748 261.3716 233.082 C +256.3091 237.9316 246.1802 242.4785 236.9399 238.6797 c +236.8345 238.6367 236.7134 238.6699 236.6431 238.7578 c +236.5728 238.8477 236.5708 238.9727 236.6382 239.0645 c +241.0454 245.0898 248.6626 247.0059 254.3169 246.1309 C +253.272 249.8457 252.6938 254.0117 252.6938 258.6094 c +252.6938 275.0137 261.4927 286.5801 271.106 292.2109 C +267.9517 296.0137 268.5962 301.9883 272.1372 306.0449 c +272.2173 306.1357 272.3481 306.1582 272.4536 306.0996 c +272.5571 306.041 272.606 305.918 272.5708 305.8018 c +270.8403 300.2695 275.9634 295.6523 282.7524 295.9004 c +282.8755 295.9033 282.9829 295.8193 283.0103 295.6992 c +283.0356 295.5801 282.9712 295.457 282.8579 295.4111 c +272.7212 291.248 266.0005 282.4316 266.0005 271.4033 c +266.0005 259.8906 272.9087 250.5488 284.0415 250.5488 c +293.1255 250.5488 302.2095 258.8672 302.2095 269.2285 c +302.2095 277.2891 297.731 282.0225 291.9731 282.0225 c +286.9849 282.0225 283.0181 278.5684 283.0181 274.4736 c +283.0181 268.6211 289.6001 266.499 293.1118 271.1309 c +293.1821 271.2227 293.3032 271.2559 293.4087 271.2129 c +293.5161 271.1699 293.5806 271.0625 293.5669 270.9482 c +293.0435 266.5586 289.8149 262.4482 284.8091 262.4482 c +280.2036 262.4482 275.4692 266.2861 275.4692 274.4746 c +275.4692 284.1982 284.8071 294.0508 300.1606 294.0508 c +321.1431 294.0508 332.5317 270.3809 322.2974 251.4453 C +327.5415 257.459 332.2759 263.8555 332.2759 275.2432 c +332.2759 296.75 311.0122 311.291 285.9224 302.7441 c +285.8032 302.7021 285.6724 302.7559 285.6157 302.8672 c +285.5571 302.9785 285.5884 303.1143 285.6899 303.1895 c +292.6958 308.2979 300.0337 315.8262 300.0337 328.4668 c +300.0337 341.6475 291.3345 350.9854 277.772 350.9854 c +267.2798 350.9854 260.6274 344.5879 260.6274 337.04 c +260.6274 331.2822 264.3462 326.6768 270.7349 326.6768 c +280.2466 326.6768 283.481 337.0195 278.5591 341.6445 c +278.4751 341.7236 278.4556 341.8516 278.5103 341.9521 c +278.5669 342.0547 278.6841 342.1055 278.7974 342.0762 c +283.5669 340.8398 288.1353 336.0068 288.1353 328.7236 c +288.1353 316.1855 276.4927 307.8682 263.6978 307.8682 c +257.7017 307.8682 251.8989 309.623 247.2271 312.9102 C +247.7778 317.0635 246.3579 321.6602 244.2603 324.752 C +246.2095 317.8848 244.1021 306.5732 233.5864 306.5732 c +227.6958 306.5732 223.8013 311.1025 223.8013 316.4551 c +223.8013 322.7793 229.147 325.7314 233.4966 325.125 c +233.6118 325.1104 233.7007 325.0186 233.7134 324.9023 c +233.7271 324.7891 233.6606 324.6797 233.5532 324.6367 c +231.9673 324.0293 230.6108 322.3691 230.6108 320.373 c +230.6108 317.873 232.52 316.3906 234.52 316.3906 c +237.8149 316.3906 239.645 320.0605 238.4927 324.1104 C +238.5044 324.1104 L +237.4312 326.9473 236.8286 330.1152 236.8286 333.6055 c +236.8286 350.3672 255.0103 366.3398 277.9497 366.3398 c +302.1626 366.3398 315.0044 349.0664 315.0044 331.2822 c +315.0044 321.7461 311.4224 314.5225 306.8149 309.915 C +326.7368 312.0332 339.313 303.5176 346.0942 291.2354 C +341.6157 287.3975 339.9536 281.7676 Y +345.3267 288.8057 354.5376 294.9453 367.4595 294.9453 c +387.0356 294.9453 402.3911 275.7539 402.3911 255.1563 c +402.3911 242.084 397.5884 229.375 387.8267 220.9102 C +393.8638 215.8809 396.4731 208.5391 393.6978 202.6055 c +f +*U +*u +315.2114 327.9053 m +315.1782 327.7852 315.2388 327.6582 315.3521 327.6094 c +330.1763 321.0957 340.6372 308.6289 345.0063 294.2324 c +345.0415 294.1152 345.1548 294.0391 345.2778 294.0527 c +345.3989 294.0664 345.4946 294.166 345.5024 294.2871 c +346.229 304.9434 343.1274 315.4531 337.0005 324.0234 C +351.1216 324.9648 362.2407 332.9297 369.1997 344.5723 C +373.3286 338.46 381.6509 338.7969 384.8599 345.6035 c +384.9106 345.708 384.8833 345.832 384.7954 345.9063 c +384.7075 345.9805 384.5806 345.9873 384.4868 345.9219 c +380.2134 342.9688 372.8071 346.498 375.9282 357.9355 c +377.981 365.4561 382.3716 369.4668 386.5259 368.333 c +389.7915 367.4414 390.7661 364.002 390.0864 361.5146 c +388.9243 357.2539 384.438 355.8623 381.481 358.6357 c +381.397 358.7158 381.2681 358.7285 381.1704 358.6641 c +381.0728 358.5986 381.0298 358.4775 381.0688 358.3662 c +381.9868 355.7852 383.5571 353.7285 386.6157 352.8936 c +391.811 351.4756 398.6743 354.8115 400.8618 362.8252 c +403.2114 371.4316 398.7153 381.0566 390.604 383.2715 c +379.2036 386.3818 371.1392 378.166 367.3931 368.2383 C +366.9263 372.8896 363.1079 377.3203 v +363.0317 377.4092 362.9048 377.4336 362.8013 377.3818 c +362.6978 377.3291 362.6431 377.2129 362.6665 377.0996 c +364.106 370.6641 363.9575 363.8047 362.1099 357.0361 c +356.9438 338.1074 336.6626 326.0977 315.479 328.0938 c +315.354 328.1055 315.2407 328.0254 315.2114 327.9053 c +f +345.5806 240.1348 m +351.7739 233.666 364.0493 228.6133 374.6646 230.168 c +374.7856 230.1855 374.9009 230.1172 374.9399 230.0039 c +374.981 229.8906 374.936 229.7637 374.8345 229.7012 c +369.1743 226.2617 357.8384 225.0723 346.5786 230.4609 C +343.4536 228.1035 340.6489 226.8496 337.1919 226.2715 c +337.0806 226.2539 336.9692 226.3125 336.9204 226.4141 c +336.8735 226.5156 336.8989 226.6387 336.9849 226.7148 c +341.5454 230.6484 343.8286 234.6563 345.5806 240.1348 C +f +232.7935 281.9121 m +232.6753 281.8711 232.5444 281.9258 232.4878 282.0371 c +232.4312 282.1484 232.4644 282.2852 232.5679 282.3594 c +239.6938 287.4785 245.4829 295.291 248.4204 306.0566 c +255.6802 332.6563 244.3267 353.792 228.2534 361.0146 c +228.1499 361.0605 228.0903 361.1689 228.105 361.2803 c +228.1216 361.3926 228.2085 361.4814 228.3198 361.4971 c +235.0747 362.4785 244.2622 361.6729 253.7915 350.3486 c +259.4927 343.5732 262.7271 336.373 269.0142 334.6563 c +273.1216 333.5352 276.5103 334.9551 277.4126 338.2617 c +278.3618 341.7393 275.9966 344.8018 272.6528 345.7148 c +270.9653 346.1738 269.1626 346.1436 267.4146 345.6836 c +267.2993 345.6533 267.1821 345.7051 267.1255 345.8086 c +267.0708 345.9121 267.0923 346.04 267.1802 346.1172 c +269.8325 348.4746 273.8677 350.125 278.5708 348.8408 c +285.4907 346.9531 289.6606 339.457 287.4673 331.415 c +285.104 322.7578 276.3696 317.5234 266.5864 320.1934 c +263.2329 321.1084 259.4497 323.168 256.7603 326.4648 C +258.5942 322.4551 260.0493 320.1855 263.8286 317.6133 C +262.8364 307.1035 258.3091 296.8271 250.4009 289.8389 C +256.2192 287.9863 260.604 284.7207 263.5083 279.6855 c +263.5669 279.582 263.5454 279.4531 263.4595 279.373 c +263.3696 279.293 263.2388 279.2832 263.1411 279.3535 c +256.1802 284.2344 243.9048 285.582 232.7935 281.9121 c +f +216.1919 195.8809 m +212.1538 199.3105 210.936 205.0469 212.4106 210.8672 c +212.4419 210.9883 212.5542 211.0684 212.6772 211.0566 c +212.8022 211.0469 212.8989 210.9492 212.9097 210.8281 c +213.0981 208.6543 213.9448 206.748 215.4917 205.4355 c +219.4712 202.0566 226.5562 203.834 231.4634 209.3828 c +231.522 209.4492 231.6079 209.4805 231.6929 209.4668 c +231.7788 209.4531 231.8511 209.3984 231.8862 209.3203 c +234.1519 204.2539 239.1079 197.5938 252.0005 194.0742 c +270.0239 189.1563 290.3794 196.1992 294.6235 211.752 c +297.0493 220.6406 292.8306 229.4824 284.5845 235.7109 C +289.0298 230.123 291.7075 223.4238 289.6177 215.7695 c +286.5532 204.5391 272.1567 198.918 254.8755 203.6348 c +238.5825 208.0801 222.7065 224.748 226.8833 240.0547 c +229.1743 248.4492 237.6821 252.8887 246.4458 250.4961 c +254.2231 248.375 257.2837 242.1016 255.7329 236.4219 c +254.5669 232.1445 250.7407 230.0195 247.2153 229.9941 c +247.0962 229.9941 246.9927 230.0762 246.9653 230.1934 c +246.9419 230.3105 246.9985 230.4277 247.1079 230.4785 c +248.1704 230.9688 249.188 231.877 249.6509 233.5742 c +250.4263 236.4121 248.3911 238.5605 246.6353 239.0391 c +243.3022 239.9492 240.2827 238.1211 239.271 234.416 c +237.8911 229.3574 242.3667 223.8906 249.5239 221.9355 c +258.4126 219.5117 268.8833 225.8066 271.2075 234.3223 c +273.5825 243.0254 268.3501 254.4648 253.9087 258.4063 c +239.7153 262.2813 220.7925 257.0996 216.6157 241.793 c +214.1802 232.8691 216.1333 224.1875 221.2075 216.5508 c +221.2739 216.4512 221.2612 216.3164 221.1753 216.2305 c +221.0884 216.1445 220.9536 216.1328 220.853 216.2012 c +209.5415 223.8828 197.1108 224.707 195.3267 218.1699 c +194.4536 214.9727 196.3042 212.7188 198.7524 212.0508 c +201.2681 211.3652 203.8462 212.6289 205.0327 215.4883 c +205.0796 215.5996 205.2007 215.6641 205.3198 215.6406 c +205.438 215.6133 205.5249 215.5098 205.522 215.3867 c +205.4292 208.3477 200.0034 202.5625 193.1577 204.4316 c +187.1021 206.084 183.8354 212.5488 185.688 219.3359 c +188.4888 229.5977 200.6997 231.5391 210.0063 226.6504 C +204.647 233.7715 201.1919 243.1035 204.2524 254.3184 c +210.4507 277.0313 239.5044 281.4355 256.9087 276.6855 c +272.7075 272.373 281.9517 266.4023 287.9087 257.6152 C +284.1079 267.0098 278.4419 272.0039 269.8345 275.9434 C +263.3052 284.0918 267.5161 299.5195 v +269.2759 305.9707 273.3091 311.3418 279.1079 314.7793 C +279.1079 314.7813 279.106 314.7842 279.1021 314.7871 C +279.1509 314.8105 279.1997 314.8379 279.2466 314.8613 C +279.6333 315.0879 280.0298 315.3057 280.4321 315.5146 C +286.4438 319.1211 293.4966 327.6973 292.2661 337.6113 c +292.2524 337.7236 292.3149 337.832 292.4185 337.877 c +292.5239 337.9219 292.645 337.8896 292.7153 337.8018 c +297.3677 331.9629 297.2114 324.1104 294.8794 318.8857 C +298.7368 318.915 302.9087 318.375 307.3442 317.165 c +323.1685 312.8457 332.0122 301.3135 334.9126 290.5566 C +339.4106 292.5977 345.0063 290.4043 347.9888 285.9199 c +348.0532 285.8184 348.0415 285.6855 347.9575 285.5996 c +347.8735 285.5156 347.7407 285.5 347.6392 285.5645 c +342.7583 288.6914 336.9556 284.9648 335.4048 278.3496 c +335.3774 278.2305 335.2681 278.1484 335.145 278.1543 c +335.022 278.1602 334.9204 278.2539 334.9067 278.377 c +333.5591 289.251 326.8228 298.0566 316.1841 300.96 c +305.0767 303.9922 294.2446 299.7852 291.3149 289.0469 c +288.9224 280.2832 294.5571 269.3301 304.5513 266.6016 c +312.3286 264.4785 318.0747 267.5527 319.5903 273.1074 c +320.9048 277.9199 318.6157 282.6563 314.6665 283.7344 c +309.0181 285.2754 305.2388 279.4844 308.7837 274.877 c +308.8521 274.7852 308.854 274.6602 308.7837 274.5684 c +308.7153 274.4766 308.5923 274.4434 308.4868 274.4863 c +304.3892 276.1465 301.2739 280.3418 302.5923 285.1729 c +303.8052 289.6152 308.7544 293.1729 316.6548 291.0166 c +326.0356 288.457 333.0806 276.8555 329.0376 262.043 c +323.5142 241.7988 297.6802 237.0449 282.1079 251.9043 C +286.5278 245.2617 291.4517 239.0098 302.438 236.0117 c +323.188 230.3496 342.813 247.0332 341.1724 273.4902 c +341.1646 273.6152 341.2505 273.7285 341.3735 273.7539 c +341.4946 273.7813 341.6196 273.7129 341.6646 273.5977 c +344.7466 265.4922 350.0786 256.4316 362.2739 253.1035 c +374.9888 249.6328 386.2876 255.5664 389.8599 268.6504 c +392.6216 278.7734 388.2017 286.875 380.9204 288.8623 c +375.3657 290.3789 369.9419 288.0039 368.2603 281.8398 c +365.7563 272.6641 374.8833 266.8203 380.6411 270.3516 c +380.7388 270.4121 380.8677 270.3965 380.9497 270.3164 c +381.0337 270.2363 381.0513 270.1094 380.9927 270.0078 c +378.5454 265.7324 372.6802 262.5977 365.6548 264.5156 c +353.5571 267.8164 348.6001 281.2383 351.9673 293.5811 c +353.5454 299.3652 356.7681 304.502 361.1685 308.1426 C +365.0298 306.5186 369.8384 306.6777 373.3735 307.8867 C +366.2349 307.8154 355.8794 312.8262 358.647 322.9707 c +360.1978 328.6533 365.5923 331.2188 370.7563 329.8086 c +376.8579 328.1436 378.2974 322.21 376.5688 318.1729 c +376.522 318.0654 376.4106 318.0039 376.2974 318.0225 c +376.1821 318.04 376.0942 318.1318 376.0825 318.2471 c +375.9146 319.9375 374.6685 321.6836 372.7446 322.208 c +370.3325 322.8662 368.3989 321.415 367.8735 319.4854 c +367.0044 316.3066 370.063 313.5752 374.2739 313.6211 C +374.27 313.6094 L +377.2896 313.8984 380.5044 313.6445 383.8716 312.7266 c +400.0415 308.3125 410.6646 286.5674 404.6235 264.4375 c +398.2485 241.0781 378.2056 233.2363 361.0474 237.9199 c +351.8481 240.4297 345.8228 245.7871 342.5903 251.4453 C +339.3892 231.668 327.8618 221.7793 314.229 218.4707 C +311.7056 223.8008 306.7114 226.8867 Y +312.0864 219.8496 315.5845 209.3477 312.1821 196.8809 c +307.0278 177.9961 284.4712 168.2344 264.6001 173.6582 c +251.9888 177.0996 240.9927 185.0801 235.397 196.7266 C +228.9556 192.2266 221.186 191.6406 216.1919 195.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +363.1294 269.9688 m +363.0044 269.9688 362.8989 269.877 362.8794 269.7539 c +360.5005 253.7402 351.2271 240.3652 338.4888 232.3594 c +338.3853 232.2949 338.3403 232.1641 338.3872 232.0508 c +338.4321 231.9375 338.5532 231.8711 338.6724 231.8965 c +349.145 234 358.4653 239.7598 365.1216 247.9277 C +369.7466 234.5508 380.3579 225.9219 393.4224 222.2734 C +388.6138 216.6816 391.1294 208.7402 398.5415 207.4375 c +398.6548 207.416 398.7661 207.4746 398.8149 207.5781 c +398.8638 207.6816 398.8364 207.8066 398.7485 207.8809 c +394.7759 211.2266 396.229 219.3008 408.0864 219.3008 c +415.8794 219.3008 420.9067 216.1211 420.9067 211.8145 c +420.9067 208.4297 417.8442 206.584 415.2642 206.584 c +410.8501 206.584 408.3267 210.5449 410.2231 214.127 c +410.2778 214.2305 410.2563 214.3574 410.1685 214.4355 c +410.0806 214.5137 409.9517 214.5215 409.854 214.4551 c +407.606 212.8906 406.0356 210.834 406.0356 207.6641 c +406.0356 202.2773 411.061 196.5352 419.3677 196.5332 c +428.2896 196.5332 436.3911 203.4043 436.3911 211.8145 c +436.3911 223.6309 426.3423 229.248 415.7778 230.248 C +420.1431 231.9219 423.4106 236.7734 v +423.4771 236.8691 423.4673 236.998 423.3892 237.084 c +423.311 237.1719 423.1841 237.1934 423.0825 237.1387 c +417.2524 234.0566 410.5942 232.3945 403.5806 232.3945 c +383.9575 232.3945 367.0337 248.7988 363.3813 269.7607 c +363.3599 269.8818 363.2524 269.9727 363.1294 269.9688 c +f +286.4517 217.5625 m +281.8442 209.8867 280.1997 196.7129 284.4946 186.8809 c +284.5435 186.7695 284.5083 186.6406 284.4087 186.5703 c +284.3091 186.502 284.1763 186.5117 284.0884 186.5957 c +279.2817 191.1484 275.1489 201.7715 277.3833 214.0527 C +274.2876 216.4473 272.3384 218.8223 270.8696 222.0059 c +270.8228 222.1074 270.8501 222.2305 270.936 222.3047 c +271.022 222.377 271.147 222.3848 271.2427 222.3203 c +276.2388 218.959 280.7056 217.8125 286.4517 217.5625 C +f +297.0591 337.3691 m +296.9907 337.4727 297.0083 337.6133 297.1001 337.6973 c +297.1938 337.7813 297.3345 337.7852 297.4321 337.7061 c +304.2466 332.1797 313.3071 328.6504 324.4673 328.6504 c +352.0376 328.6504 369.4399 345.1689 372.1743 362.5771 c +372.1919 362.6885 372.2817 362.7734 372.3931 362.7891 c +372.5044 362.8047 372.6138 362.7422 372.6587 362.6396 c +375.3833 356.3818 377.0259 347.3057 368.6099 335.1309 c +363.5747 327.8457 357.479 322.8311 357.479 316.3145 c +357.479 312.0566 359.7407 309.1602 363.1685 309.1602 c +366.7739 309.1602 369.106 312.248 369.104 315.7148 c +369.104 317.4629 368.6001 319.1934 367.6958 320.7607 c +367.6372 320.8633 367.6548 320.9902 367.7407 321.0723 c +367.8247 321.1523 367.9556 321.165 368.0532 321.1016 c +371.0259 319.1641 373.6802 315.7021 373.6802 310.8281 c +373.6802 303.6563 367.5474 297.6602 359.2095 297.6602 c +350.2368 297.6602 342.8872 304.709 342.8872 314.8477 c +342.8872 318.3262 343.8755 322.5156 346.3501 325.9805 C +342.9653 323.1523 341.1587 321.1523 339.6724 316.8271 C +329.272 315.0186 318.1665 316.6797 309.3403 322.4727 C +309.0864 316.3711 307.0903 311.2793 302.9985 307.1533 c +302.9146 307.0684 302.7837 307.0547 302.6841 307.1182 c +302.5825 307.1816 302.5415 307.3066 302.5806 307.4189 c +305.4575 315.4199 303.5239 327.6152 297.0591 337.3691 c +f +209.6938 330.7344 m +211.938 335.5352 217.1528 338.2188 223.1548 338.3271 c +223.2798 338.3311 223.3872 338.2432 223.4087 338.1211 c +223.4321 337.998 223.3638 337.8779 223.2485 337.8359 c +221.2017 337.082 219.5864 335.7637 218.7271 333.9258 c +216.5142 329.1973 220.0942 322.8301 226.7407 319.5566 c +226.8188 319.5186 226.8716 319.4434 226.8813 319.3594 c +226.8911 319.2725 226.856 319.1885 226.7915 319.1318 c +222.5005 315.6143 217.3794 309.0781 217.3794 295.7148 c +217.3774 277.0322 229.5337 259.25 245.6548 259.25 c +254.8677 259.25 262.2876 265.6465 266.1255 275.2422 C +261.9028 269.4844 256.145 265.1348 248.2114 265.1348 c +236.5708 265.1348 227.3579 277.5439 227.356 295.459 c +227.356 312.3457 239.2583 332.0518 255.1216 332.0508 c +263.8247 332.0488 270.3481 325.0117 270.3481 315.9277 c +270.3481 307.8672 265.1021 303.2637 259.2173 303.2637 c +254.7798 303.2637 251.7231 306.3936 250.772 309.7871 c +250.7388 309.9023 250.7915 310.0254 250.897 310.0811 c +251.0044 310.1357 251.1333 310.1104 251.2114 310.0186 c +251.9634 309.124 253.1079 308.3809 254.8657 308.3809 c +257.8091 308.3789 259.3442 310.9082 259.3442 312.7285 c +259.3442 316.1836 256.7856 318.6152 252.9458 318.6152 c +247.7036 318.6152 243.606 312.8564 243.606 305.4385 c +243.606 296.2236 252.436 287.7813 261.2642 287.7813 c +270.2856 287.7813 279.9438 295.8408 279.9438 310.8125 c +279.9419 325.5234 269.9653 342.4141 254.0981 342.4141 c +244.8481 342.4141 236.9849 338.2441 230.9556 331.3398 c +230.8755 331.248 230.7427 331.2246 230.6392 331.2852 c +230.5317 331.3477 230.4849 331.4727 230.5239 331.5879 c +234.9575 344.5234 232.4771 356.7344 225.7036 356.7324 c +222.3892 356.7324 220.7017 354.3535 220.7017 351.8154 c +220.7017 349.21 222.6001 347.0566 225.6704 346.6611 c +225.7915 346.6475 225.8833 346.5479 225.8931 346.4268 c +225.8989 346.3047 225.8188 346.1943 225.7017 346.1641 c +218.8872 344.4004 211.8774 348.1133 211.8774 355.2061 c +211.8774 361.4854 217.2544 366.3398 224.2896 366.3398 c +234.9263 366.3379 240.0142 355.0684 237.7485 344.8047 C +243.2075 351.8486 251.3013 357.6396 262.9263 357.6396 c +286.4692 357.6396 298.3677 330.7715 298.3677 312.7285 c +298.3677 296.3525 295.0415 285.8604 288.1313 277.8018 C +296.1938 283.9404 299.52 290.7227 301.0552 300.0645 C +307.1958 308.5078 323.188 308.5078 v +329.8755 308.5078 336.1177 306.0322 340.9614 301.3438 C +340.9634 301.3447 340.9653 301.3477 340.9673 301.3486 C +341.0024 301.3105 341.0396 301.2695 341.0767 301.2314 C +341.397 300.915 341.7114 300.5918 342.02 300.2578 C +347.0806 295.4102 357.2114 290.8633 366.4517 294.6602 c +366.5571 294.7031 366.6782 294.6699 366.7485 294.582 c +366.8188 294.4932 366.8188 294.3672 366.7524 294.2754 c +362.3462 288.252 354.729 286.335 349.0747 287.21 C +350.1177 283.4941 350.6958 279.3281 350.6958 274.7305 c +350.6978 258.3262 341.8989 246.7598 332.2856 241.1289 C +335.438 237.3281 334.7954 231.3535 331.2544 227.2949 c +331.1743 227.2051 331.0435 227.1816 330.938 227.2402 c +330.8345 227.2988 330.7837 227.4238 330.8188 227.5391 c +332.5513 233.0703 327.4282 237.6875 320.6392 237.4395 c +320.5161 237.4355 320.4067 237.5195 320.3813 237.6406 c +320.356 237.7617 320.4185 237.8828 320.5337 237.9277 c +330.6685 242.0918 337.3911 250.9102 337.3892 261.9355 c +337.3911 273.4492 330.481 282.79 319.3501 282.79 c +310.2661 282.79 301.1821 274.4727 301.1821 264.1133 c +301.1821 256.0508 305.6587 251.3184 311.4165 251.3164 c +316.4067 251.3184 320.3735 254.7715 320.3735 258.8672 c +320.3735 264.7188 313.7896 266.8408 310.2778 262.209 c +310.2095 262.1172 310.0864 262.084 309.981 262.127 c +309.8755 262.1689 309.811 262.2773 309.8228 262.3926 c +310.3462 266.7813 313.5767 270.8926 318.5825 270.8926 c +323.188 270.8926 327.9224 267.0518 327.9224 258.8652 c +327.9224 249.1406 318.5845 239.291 303.231 239.2891 c +282.2466 239.2891 270.8599 262.959 281.0942 281.8945 C +275.8501 275.8809 271.1157 269.4844 271.1157 258.0977 c +271.1138 236.5898 292.3794 222.0488 317.4692 230.5977 c +317.5884 230.6367 317.7192 230.584 317.7759 230.4746 c +317.8345 230.3633 317.8013 230.2266 317.6997 230.1523 c +310.6938 225.043 303.356 217.5137 303.356 204.873 c +303.356 191.6934 312.0552 182.3535 325.6196 182.3535 c +336.1099 182.3535 342.7642 188.752 342.7642 196.2988 c +342.7642 202.0566 339.0454 206.6641 332.6567 206.6641 c +323.1431 206.6641 319.9087 196.3203 324.8325 191.6953 c +324.9165 191.6152 324.936 191.4902 324.8813 191.3887 c +324.8247 191.2871 324.7056 191.2344 324.5942 191.2637 c +319.8247 192.5 315.2563 197.332 315.2563 204.6152 c +315.2544 217.1563 326.897 225.4727 339.6919 225.4727 c +345.688 225.4727 351.4907 223.7188 356.1646 220.4297 C +355.6118 216.2773 357.0317 211.6816 359.1313 208.5879 C +357.1821 215.457 359.2915 226.7656 369.8032 226.7676 c +375.6958 226.7656 379.5903 222.2383 379.5903 216.8867 c +379.5903 210.5605 374.2446 207.6094 369.895 208.2148 c +369.7798 208.2305 369.6899 208.3223 369.6763 208.4375 c +369.6646 208.5527 369.731 208.6602 369.8384 208.7031 c +371.4243 209.3105 372.7817 210.9727 372.7817 212.9668 c +372.7817 215.4668 370.8696 216.9492 368.8696 216.9492 c +365.5767 216.9492 363.7466 213.2793 364.8989 209.2305 C +364.8872 209.2285 L +365.9595 206.3926 366.561 203.2246 366.561 199.7363 c +366.561 182.9746 348.3813 167.002 325.4399 167 c +301.229 167 288.3872 184.2734 288.3892 202.0566 c +288.3892 211.5938 291.9692 218.8184 296.5767 223.4258 C +276.6548 221.3066 264.0786 229.8223 257.2974 242.1035 C +261.7759 245.9414 263.438 251.5723 Y +258.0649 244.5352 248.854 238.3945 235.9321 238.3945 c +216.356 238.3945 201.0005 257.5859 201.0005 278.1836 c +201.0005 291.2568 205.8032 303.9648 215.5649 312.4307 C +209.5278 317.459 206.9185 324.8018 209.6938 330.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +73.2617 263.3711 m +73.3867 263.3711 73.4922 263.4629 73.5098 263.585 c +75.8906 279.5996 85.1641 292.9746 97.9023 300.9814 c +98.0059 301.0449 98.0488 301.1758 98.0039 301.29 c +97.957 301.4023 97.8379 301.4688 97.7168 301.4443 c +87.2461 299.3398 77.9238 293.5811 71.2695 285.4141 C +66.6436 298.7891 56.0332 307.418 42.9688 311.0654 C +47.7773 316.6582 45.2617 324.5986 37.8496 325.9023 c +37.7363 325.9229 37.624 325.8643 37.5752 325.7607 c +37.5273 325.6563 37.5537 325.5322 37.6416 325.46 c +41.6152 322.1143 40.1611 314.04 28.3047 314.04 c +20.5098 314.04 15.4844 317.2188 15.4844 321.5254 c +15.4844 324.9102 18.5459 326.7559 21.125 326.7559 c +25.541 326.7559 28.0645 322.7949 26.167 319.2129 c +26.1123 319.1104 26.1348 318.9814 26.2227 318.9033 c +26.3105 318.8271 26.4395 318.8184 26.5361 318.8857 c +28.7852 320.4492 30.3555 322.5059 30.3555 325.6768 c +30.3555 331.0635 25.3301 336.8066 17.0234 336.8066 c +8.10156 336.8066 0 329.9355 0 321.5254 c +0 309.71 10.0488 304.0918 20.6133 303.0918 C +16.248 301.4189 12.9795 296.5664 v +12.9141 296.4697 12.9238 296.3418 13.001 296.2559 c +13.0791 296.1689 13.2051 296.1475 13.3086 296.2012 c +19.1387 299.2822 25.7949 300.9453 32.8105 300.9453 c +52.4316 300.9453 69.3574 284.541 73.0098 263.5801 c +73.0313 263.4561 73.1377 263.3691 73.2617 263.3711 c +f +149.9395 315.7773 m +154.5488 323.4551 156.1914 336.627 151.8965 346.46 c +151.8477 346.5703 151.8828 346.6992 151.9824 346.7686 c +152.0801 346.8379 152.2148 346.8281 152.3027 346.7461 c +157.1094 342.1914 161.2422 331.5684 159.0078 319.2871 C +162.1055 316.8936 164.0527 314.5176 165.5215 311.335 c +165.5684 311.2314 165.541 311.1104 165.4551 311.0352 c +165.3691 310.9629 165.2441 310.9551 165.1484 311.0186 c +160.1523 314.3809 155.6855 315.5283 149.9395 315.7773 C +f +139.3301 195.9707 m +139.4004 195.8672 139.3828 195.7266 139.291 195.6426 c +139.1973 195.5586 139.0566 195.5547 138.959 195.6348 c +132.1445 201.1621 123.084 204.6895 111.9238 204.6895 c +84.3516 204.6895 66.9512 188.1719 64.2158 170.7637 c +64.1982 170.6523 64.1094 170.5664 63.998 170.5508 c +63.8857 170.5371 63.7773 170.5977 63.7324 170.7012 c +61.0068 176.959 59.3652 186.0352 67.7813 198.209 c +72.8154 205.4941 78.9102 210.5098 78.9102 217.0273 c +78.9102 221.2852 76.6504 224.1797 73.2227 224.1797 c +69.6172 224.1797 67.2861 221.0918 67.2861 217.625 c +67.2861 215.877 67.791 214.1465 68.6953 212.5801 c +68.7539 212.4766 68.7354 212.3496 68.6504 212.2676 c +68.5645 212.1875 68.4355 212.1758 68.3379 212.2402 c +65.3652 214.1777 62.7109 217.6367 62.7109 222.5117 c +62.7109 229.6836 68.8438 235.6816 77.1797 235.6816 c +86.1543 235.6816 93.5039 228.6328 93.5039 218.4922 c +93.5039 215.0156 92.5137 210.8242 90.041 207.3613 C +93.4258 210.1875 95.2324 212.1875 96.7188 216.5117 C +107.1191 218.3223 118.2246 216.6602 127.0488 210.8691 C +127.3047 216.9707 129.3008 222.0605 133.3926 226.1875 c +133.4766 226.2715 133.6074 226.2852 133.707 226.2227 c +133.8086 226.1582 133.8516 226.0332 133.8105 225.9219 c +130.9336 217.9199 132.8652 205.7246 139.3301 195.9707 c +f +226.6973 202.6055 m +224.4512 197.8066 219.2383 195.1211 213.2363 195.0117 c +213.1113 195.0098 213.0039 195.0977 212.9824 195.2188 c +212.959 195.3418 213.0273 195.4609 213.1426 195.5039 c +215.1895 196.2578 216.8047 197.5762 217.6641 199.4141 c +219.877 204.1426 216.2969 210.5098 209.6504 213.7832 c +209.5723 213.8223 209.5195 213.8965 209.5098 213.9824 c +209.5 214.0684 209.5332 214.1523 209.5996 214.207 c +213.8906 217.7266 219.0117 224.2617 219.0117 237.627 c +219.0117 256.3086 206.8574 274.0898 190.7363 274.0898 c +181.5234 274.0898 174.1035 267.6934 170.2656 258.0977 C +174.4863 263.8564 180.2441 268.2051 188.1777 268.2051 c +199.8203 268.2051 209.0332 255.7969 209.0332 237.8828 c +209.0332 220.9941 197.1328 201.2891 181.2676 201.2891 c +172.5664 201.2891 166.043 208.3281 166.043 217.4121 c +166.043 225.4746 171.2891 230.0781 177.1758 230.0781 c +181.6094 230.0781 184.668 226.9473 185.6191 223.5527 c +185.6504 223.4375 185.5996 223.3164 185.4922 223.2598 c +185.3867 223.2051 185.2578 223.2305 185.1797 223.3223 c +184.4277 224.2168 183.2832 224.9609 181.5254 224.9609 c +178.582 224.9609 177.0469 222.4316 177.0469 220.6113 c +177.0469 217.1563 179.6055 214.7246 183.4453 214.7246 c +188.6895 214.7246 192.7852 220.4824 192.7852 227.9023 c +192.7852 237.1152 183.9551 245.5586 175.127 245.5586 c +166.1055 245.5586 156.4473 237.5 156.4473 222.5293 c +156.4473 207.8164 166.4277 190.9258 182.293 190.9258 c +191.543 190.9258 199.4043 195.0957 205.4355 202.002 c +205.5156 202.0918 205.6484 202.1152 205.7539 202.0547 c +205.8594 201.9941 205.9063 201.8672 205.8672 201.752 c +201.4336 188.8164 203.9121 176.6074 210.6875 176.6074 c +214.002 176.6074 215.6895 178.9863 215.6895 181.5234 c +215.6895 184.1309 213.791 186.2852 210.7207 186.6777 c +210.5996 186.6934 210.5059 186.793 210.498 186.9141 c +210.4922 187.0352 210.5703 187.1465 210.6895 187.1758 c +217.5039 188.9395 224.5137 185.2285 224.5137 178.1328 c +224.5137 171.8555 219.1367 167.002 212.1016 167.002 c +201.4648 167.002 196.377 178.2715 198.6426 188.5371 C +193.1836 181.4922 185.0898 175.7012 173.4648 175.7012 c +149.9219 175.7012 138.0234 202.5703 138.0234 220.6113 c +138.0234 236.9883 141.3496 247.4785 148.2598 255.5391 C +140.1973 249.3984 136.8711 242.6172 135.3379 233.2773 C +129.1953 224.832 113.2031 224.832 v +106.5156 224.832 100.2734 227.3086 95.4297 231.998 C +95.4277 231.9961 95.4258 231.9941 95.4238 231.9902 C +95.3887 232.0313 95.3496 232.0703 95.3145 232.1094 C +94.9941 232.4238 94.6797 232.748 94.3711 233.082 C +89.3086 237.9316 79.1797 242.4785 69.9395 238.6797 c +69.834 238.6367 69.7129 238.6699 69.6426 238.7578 c +69.5723 238.8477 69.5703 238.9727 69.6377 239.0645 c +74.0449 245.0898 81.6621 247.0059 87.3164 246.1309 C +86.2715 249.8457 85.6934 254.0117 85.6934 258.6094 c +85.6934 275.0137 94.4922 286.5801 104.1055 292.2109 C +100.9512 296.0137 101.5957 301.9883 105.1367 306.0449 c +105.2168 306.1357 105.3477 306.1582 105.4531 306.0996 c +105.5566 306.041 105.6055 305.918 105.5703 305.8018 c +103.8398 300.2695 108.9629 295.6523 115.752 295.9004 c +115.875 295.9033 115.9824 295.8193 116.0098 295.6992 c +116.0352 295.5801 115.9707 295.457 115.8574 295.4111 c +105.7207 291.248 99 282.4316 99 271.4033 c +99 259.8906 105.9082 250.5488 117.041 250.5488 c +126.125 250.5488 135.209 258.8672 135.209 269.2285 c +135.209 277.2891 130.7305 282.0225 124.9727 282.0225 c +119.9844 282.0225 116.0176 278.5684 116.0176 274.4736 c +116.0176 268.6211 122.5996 266.499 126.1113 271.1309 c +126.1816 271.2227 126.3027 271.2559 126.4082 271.2129 c +126.5156 271.1699 126.5801 271.0625 126.5664 270.9482 c +126.043 266.5586 122.8145 262.4482 117.8086 262.4482 c +113.2031 262.4482 108.4688 266.2861 108.4688 274.4746 c +108.4688 284.1982 117.8066 294.0508 133.1602 294.0508 c +154.1426 294.0508 165.5313 270.3809 155.2969 251.4453 C +160.541 257.459 165.2754 263.8555 165.2754 275.2432 c +165.2754 296.75 144.0117 311.291 118.9219 302.7441 c +118.8027 302.7021 118.6719 302.7559 118.6152 302.8672 c +118.5566 302.9785 118.5879 303.1143 118.6895 303.1895 c +125.6953 308.2979 133.0332 315.8262 133.0332 328.4668 c +133.0332 341.6475 124.334 350.9854 110.7715 350.9854 c +100.2793 350.9854 93.627 344.5879 93.627 337.04 c +93.627 331.2822 97.3457 326.6768 103.7344 326.6768 c +113.2461 326.6768 116.4805 337.0195 111.5586 341.6445 c +111.4746 341.7236 111.4551 341.8516 111.5098 341.9521 c +111.5664 342.0547 111.6836 342.1055 111.7969 342.0762 c +116.5664 340.8398 121.1348 336.0068 121.1348 328.7236 c +121.1348 316.1855 109.4922 307.8682 96.6973 307.8682 c +90.7012 307.8682 84.8984 309.623 80.2266 312.9102 C +80.7773 317.0635 79.3574 321.6602 77.2598 324.752 C +79.209 317.8848 77.1016 306.5732 66.5859 306.5732 c +60.6953 306.5732 56.8008 311.1025 56.8008 316.4551 c +56.8008 322.7793 62.1465 325.7314 66.4961 325.125 c +66.6113 325.1104 66.7002 325.0186 66.7129 324.9023 c +66.7266 324.7891 66.6602 324.6797 66.5527 324.6367 c +64.9668 324.0293 63.6104 322.3691 63.6104 320.373 c +63.6104 317.873 65.5195 316.3906 67.5195 316.3906 c +70.8145 316.3906 72.6445 320.0605 71.4922 324.1104 C +71.5039 324.1104 L +70.4307 326.9473 69.8281 330.1152 69.8281 333.6055 c +69.8281 350.3672 88.0098 366.3398 110.9492 366.3398 c +135.1621 366.3398 148.0039 349.0664 148.0039 331.2822 c +148.0039 321.7461 144.4219 314.5225 139.8145 309.915 C +159.7363 312.0332 172.3125 303.5176 179.0938 291.2354 C +174.6152 287.3975 172.9531 281.7676 Y +178.3262 288.8057 187.5371 294.9453 200.459 294.9453 c +220.0352 294.9453 235.3906 275.7539 235.3906 255.1563 c +235.3906 242.084 230.5879 229.375 220.8262 220.9102 C +226.8633 215.8809 229.4727 208.5391 226.6973 202.6055 c +f +*U +*u +148.2109 327.9053 m +148.1777 327.7852 148.2383 327.6582 148.3516 327.6094 c +163.1758 321.0957 173.6367 308.6289 178.0059 294.2324 c +178.041 294.1152 178.1543 294.0391 178.2773 294.0527 c +178.3984 294.0664 178.4941 294.166 178.502 294.2871 c +179.2285 304.9434 176.127 315.4531 170 324.0234 C +184.1211 324.9648 195.2402 332.9297 202.1992 344.5723 C +206.3281 338.46 214.6504 338.7969 217.8594 345.6035 c +217.9102 345.708 217.8828 345.832 217.7949 345.9063 c +217.707 345.9805 217.5801 345.9873 217.4863 345.9219 c +213.2129 342.9688 205.8066 346.498 208.9277 357.9355 c +210.9805 365.4561 215.3711 369.4668 219.5254 368.333 c +222.791 367.4414 223.7656 364.002 223.0859 361.5146 c +221.9238 357.2539 217.4375 355.8623 214.4805 358.6357 c +214.3965 358.7158 214.2676 358.7285 214.1699 358.6641 c +214.0723 358.5986 214.0293 358.4775 214.0684 358.3662 c +214.9863 355.7852 216.5566 353.7285 219.6152 352.8936 c +224.8105 351.4756 231.6738 354.8115 233.8613 362.8252 c +236.2109 371.4316 231.7148 381.0566 223.6035 383.2715 c +212.2031 386.3818 204.1387 378.166 200.3926 368.2383 C +199.9258 372.8896 196.1074 377.3203 v +196.0313 377.4092 195.9043 377.4336 195.8008 377.3818 c +195.6973 377.3291 195.6426 377.2129 195.666 377.0996 c +197.1055 370.6641 196.957 363.8047 195.1094 357.0361 c +189.9434 338.1074 169.6621 326.0977 148.4785 328.0938 c +148.3535 328.1055 148.2402 328.0254 148.2109 327.9053 c +f +178.5801 240.1348 m +184.7734 233.666 197.0488 228.6133 207.6641 230.168 c +207.7852 230.1855 207.9004 230.1172 207.9395 230.0039 c +207.9805 229.8906 207.9355 229.7637 207.834 229.7012 c +202.1738 226.2617 190.8379 225.0723 179.5781 230.4609 C +176.4531 228.1035 173.6484 226.8496 170.1914 226.2715 c +170.0801 226.2539 169.9688 226.3125 169.9199 226.4141 c +169.873 226.5156 169.8984 226.6387 169.9844 226.7148 c +174.5449 230.6484 176.8281 234.6563 178.5801 240.1348 C +f +65.793 281.9121 m +65.6748 281.8711 65.5439 281.9258 65.4873 282.0371 c +65.4307 282.1484 65.4639 282.2852 65.5674 282.3594 c +72.6934 287.4785 78.4824 295.291 81.4199 306.0566 c +88.6797 332.6563 77.3262 353.792 61.2529 361.0146 c +61.1494 361.0605 61.0898 361.1689 61.1045 361.2803 c +61.1211 361.3926 61.208 361.4814 61.3193 361.4971 c +68.0742 362.4785 77.2617 361.6729 86.791 350.3486 c +92.4922 343.5732 95.7266 336.373 102.0137 334.6563 c +106.1211 333.5352 109.5098 334.9551 110.4121 338.2617 c +111.3613 341.7393 108.9961 344.8018 105.6523 345.7148 c +103.9648 346.1738 102.1621 346.1436 100.4141 345.6836 c +100.2988 345.6533 100.1816 345.7051 100.125 345.8086 c +100.0703 345.9121 100.0918 346.04 100.1797 346.1172 c +102.832 348.4746 106.8672 350.125 111.5703 348.8408 c +118.4902 346.9531 122.6602 339.457 120.4668 331.415 c +118.1035 322.7578 109.3691 317.5234 99.5859 320.1934 c +96.2324 321.1084 92.4492 323.168 89.7598 326.4648 C +91.5938 322.4551 93.0488 320.1855 96.8281 317.6133 C +95.8359 307.1035 91.3086 296.8271 83.4004 289.8389 C +89.2188 287.9863 93.6035 284.7207 96.5078 279.6855 c +96.5664 279.582 96.5449 279.4531 96.459 279.373 c +96.3691 279.293 96.2383 279.2832 96.1406 279.3535 c +89.1797 284.2344 76.9043 285.582 65.793 281.9121 c +f +49.1914 195.8809 m +45.1533 199.3105 43.9355 205.0469 45.4102 210.8672 c +45.4414 210.9883 45.5537 211.0684 45.6768 211.0566 c +45.8018 211.0469 45.8984 210.9492 45.9092 210.8281 c +46.0977 208.6543 46.9443 206.748 48.4912 205.4355 c +52.4707 202.0566 59.5557 203.834 64.4629 209.3828 c +64.5215 209.4492 64.6074 209.4805 64.6924 209.4668 c +64.7783 209.4531 64.8506 209.3984 64.8857 209.3203 c +67.1514 204.2539 72.1074 197.5938 85 194.0742 c +103.0234 189.1563 123.3789 196.1992 127.623 211.752 c +130.0488 220.6406 125.8301 229.4824 117.584 235.7109 C +122.0293 230.123 124.707 223.4238 122.6172 215.7695 c +119.5527 204.5391 105.1563 198.918 87.875 203.6348 c +71.582 208.0801 55.7061 224.748 59.8828 240.0547 c +62.1738 248.4492 70.6816 252.8887 79.4453 250.4961 c +87.2227 248.375 90.2832 242.1016 88.7324 236.4219 c +87.5664 232.1445 83.7402 230.0195 80.2148 229.9941 c +80.0957 229.9941 79.9922 230.0762 79.9648 230.1934 c +79.9414 230.3105 79.998 230.4277 80.1074 230.4785 c +81.1699 230.9688 82.1875 231.877 82.6504 233.5742 c +83.4258 236.4121 81.3906 238.5605 79.6348 239.0391 c +76.3018 239.9492 73.2822 238.1211 72.2705 234.416 c +70.8906 229.3574 75.3662 223.8906 82.5234 221.9355 c +91.4121 219.5117 101.8828 225.8066 104.207 234.3223 c +106.582 243.0254 101.3496 254.4648 86.9082 258.4063 c +72.7148 262.2813 53.792 257.0996 49.6152 241.793 c +47.1797 232.8691 49.1328 224.1875 54.207 216.5508 c +54.2734 216.4512 54.2607 216.3164 54.1748 216.2305 c +54.0879 216.1445 53.9531 216.1328 53.8525 216.2012 c +42.541 223.8828 30.1104 224.707 28.3262 218.1699 c +27.4531 214.9727 29.3037 212.7188 31.752 212.0508 c +34.2676 211.3652 36.8457 212.6289 38.0322 215.4883 c +38.0791 215.5996 38.2002 215.6641 38.3193 215.6406 c +38.4375 215.6133 38.5244 215.5098 38.5215 215.3867 c +38.4287 208.3477 33.0029 202.5625 26.1572 204.4316 c +20.1016 206.084 16.835 212.5488 18.6875 219.3359 c +21.4883 229.5977 33.6992 231.5391 43.0059 226.6504 C +37.6465 233.7715 34.1914 243.1035 37.252 254.3184 c +43.4502 277.0313 72.5039 281.4355 89.9082 276.6855 c +105.707 272.373 114.9512 266.4023 120.9082 257.6152 C +117.1074 267.0098 111.4414 272.0039 102.834 275.9434 C +96.3047 284.0918 100.5156 299.5195 v +102.2754 305.9707 106.3086 311.3418 112.1074 314.7793 C +112.1074 314.7813 112.1055 314.7842 112.1016 314.7871 C +112.1504 314.8105 112.1992 314.8379 112.2461 314.8613 C +112.6328 315.0879 113.0293 315.3057 113.4316 315.5146 C +119.4434 319.1211 126.4961 327.6973 125.2656 337.6113 c +125.252 337.7236 125.3145 337.832 125.418 337.877 c +125.5234 337.9219 125.6445 337.8896 125.7148 337.8018 c +130.3672 331.9629 130.2109 324.1104 127.8789 318.8857 C +131.7363 318.915 135.9082 318.375 140.3438 317.165 c +156.168 312.8457 165.0117 301.3135 167.9121 290.5566 C +172.4102 292.5977 178.0059 290.4043 180.9883 285.9199 c +181.0527 285.8184 181.041 285.6855 180.957 285.5996 c +180.873 285.5156 180.7402 285.5 180.6387 285.5645 c +175.7578 288.6914 169.9551 284.9648 168.4043 278.3496 c +168.377 278.2305 168.2676 278.1484 168.1445 278.1543 c +168.0215 278.1602 167.9199 278.2539 167.9063 278.377 c +166.5586 289.251 159.8223 298.0566 149.1836 300.96 c +138.0762 303.9922 127.2441 299.7852 124.3145 289.0469 c +121.9219 280.2832 127.5566 269.3301 137.5508 266.6016 c +145.3281 264.4785 151.0742 267.5527 152.5898 273.1074 c +153.9043 277.9199 151.6152 282.6563 147.666 283.7344 c +142.0176 285.2754 138.2383 279.4844 141.7832 274.877 c +141.8516 274.7852 141.8535 274.6602 141.7832 274.5684 c +141.7148 274.4766 141.5918 274.4434 141.4863 274.4863 c +137.3887 276.1465 134.2734 280.3418 135.5918 285.1729 c +136.8047 289.6152 141.7539 293.1729 149.6543 291.0166 c +159.0352 288.457 166.0801 276.8555 162.0371 262.043 c +156.5137 241.7988 130.6797 237.0449 115.1074 251.9043 C +119.5273 245.2617 124.4512 239.0098 135.4375 236.0117 c +156.1875 230.3496 175.8125 247.0332 174.1719 273.4902 c +174.1641 273.6152 174.25 273.7285 174.373 273.7539 c +174.4941 273.7813 174.6191 273.7129 174.6641 273.5977 c +177.7461 265.4922 183.0781 256.4316 195.2734 253.1035 c +207.9883 249.6328 219.2871 255.5664 222.8594 268.6504 c +225.6211 278.7734 221.2012 286.875 213.9199 288.8623 c +208.3652 290.3789 202.9414 288.0039 201.2598 281.8398 c +198.7559 272.6641 207.8828 266.8203 213.6406 270.3516 c +213.7383 270.4121 213.8672 270.3965 213.9492 270.3164 c +214.0332 270.2363 214.0508 270.1094 213.9922 270.0078 c +211.5449 265.7324 205.6797 262.5977 198.6543 264.5156 c +186.5566 267.8164 181.5996 281.2383 184.9668 293.5811 c +186.5449 299.3652 189.7676 304.502 194.168 308.1426 C +198.0293 306.5186 202.8379 306.6777 206.373 307.8867 C +199.2344 307.8154 188.8789 312.8262 191.6465 322.9707 c +193.1973 328.6533 198.5918 331.2188 203.7559 329.8086 c +209.8574 328.1436 211.2969 322.21 209.5684 318.1729 c +209.5215 318.0654 209.4102 318.0039 209.2969 318.0225 c +209.1816 318.04 209.0938 318.1318 209.082 318.2471 c +208.9141 319.9375 207.668 321.6836 205.7441 322.208 c +203.332 322.8662 201.3984 321.415 200.873 319.4854 c +200.0039 316.3066 203.0625 313.5752 207.2734 313.6211 C +207.2695 313.6094 L +210.2891 313.8984 213.5039 313.6445 216.8711 312.7266 c +233.041 308.3125 243.6641 286.5674 237.623 264.4375 c +231.248 241.0781 211.2051 233.2363 194.0469 237.9199 c +184.8477 240.4297 178.8223 245.7871 175.5898 251.4453 C +172.3887 231.668 160.8613 221.7793 147.2285 218.4707 C +144.7051 223.8008 139.7109 226.8867 Y +145.0859 219.8496 148.584 209.3477 145.1816 196.8809 c +140.0273 177.9961 117.4707 168.2344 97.5996 173.6582 c +84.9883 177.0996 73.9922 185.0801 68.3965 196.7266 C +61.9551 192.2266 54.1855 191.6406 49.1914 195.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +196.1289 269.9688 m +196.0039 269.9688 195.8984 269.877 195.8789 269.7539 c +193.5 253.7402 184.2266 240.3652 171.4883 232.3594 c +171.3848 232.2949 171.3398 232.1641 171.3867 232.0508 c +171.4316 231.9375 171.5527 231.8711 171.6719 231.8965 c +182.1445 234 191.4648 239.7598 198.1211 247.9277 C +202.7461 234.5508 213.3574 225.9219 226.4219 222.2734 C +221.6133 216.6816 224.1289 208.7402 231.541 207.4375 c +231.6543 207.416 231.7656 207.4746 231.8145 207.5781 c +231.8633 207.6816 231.8359 207.8066 231.748 207.8809 c +227.7754 211.2266 229.2285 219.3008 241.0859 219.3008 c +248.8794 219.3008 253.9067 216.1211 253.9067 211.8145 c +253.9067 208.4297 250.8442 206.584 248.2642 206.584 c +243.8501 206.584 241.3262 210.5449 243.2227 214.127 c +243.2773 214.2305 243.2559 214.3574 243.168 214.4355 c +243.0801 214.5137 242.9512 214.5215 242.8535 214.4551 c +240.6055 212.8906 239.0352 210.834 239.0352 207.6641 c +239.0352 202.2773 244.061 196.5352 252.3677 196.5332 c +261.2896 196.5332 269.3911 203.4043 269.3911 211.8145 c +269.3911 223.6309 259.3423 229.248 248.7778 230.248 C +253.1431 231.9219 256.4106 236.7734 v +256.4771 236.8691 256.4673 236.998 256.3892 237.084 c +256.311 237.1719 256.1841 237.1934 256.0825 237.1387 c +250.2524 234.0566 243.5938 232.3945 236.5801 232.3945 c +216.957 232.3945 200.0332 248.7988 196.3809 269.7607 c +196.3594 269.8818 196.252 269.9727 196.1289 269.9688 c +f +119.4512 217.5625 m +114.8438 209.8867 113.1992 196.7129 117.4941 186.8809 c +117.543 186.7695 117.5078 186.6406 117.4082 186.5703 c +117.3086 186.502 117.1758 186.5117 117.0879 186.5957 c +112.2813 191.1484 108.1484 201.7715 110.3828 214.0527 C +107.2871 216.4473 105.3379 218.8223 103.8691 222.0059 c +103.8223 222.1074 103.8496 222.2305 103.9355 222.3047 c +104.0215 222.377 104.1465 222.3848 104.2422 222.3203 c +109.2383 218.959 113.7051 217.8125 119.4512 217.5625 C +f +130.0586 337.3691 m +129.9902 337.4727 130.0078 337.6133 130.0996 337.6973 c +130.1934 337.7813 130.334 337.7852 130.4316 337.7061 c +137.2461 332.1797 146.3066 328.6504 157.4668 328.6504 c +185.0371 328.6504 202.4395 345.1689 205.1738 362.5771 c +205.1914 362.6885 205.2813 362.7734 205.3926 362.7891 c +205.5039 362.8047 205.6133 362.7422 205.6582 362.6396 c +208.3828 356.3818 210.0254 347.3057 201.6094 335.1309 c +196.5742 327.8457 190.4785 322.8311 190.4785 316.3145 c +190.4785 312.0566 192.7402 309.1602 196.168 309.1602 c +199.7734 309.1602 202.1055 312.248 202.1035 315.7148 c +202.1035 317.4629 201.5996 319.1934 200.6953 320.7607 c +200.6367 320.8633 200.6543 320.9902 200.7402 321.0723 c +200.8242 321.1523 200.9551 321.165 201.0527 321.1016 c +204.0254 319.1641 206.6797 315.7021 206.6797 310.8281 c +206.6797 303.6563 200.5469 297.6602 192.209 297.6602 c +183.2363 297.6602 175.8867 304.709 175.8867 314.8477 c +175.8867 318.3262 176.875 322.5156 179.3496 325.9805 C +175.9648 323.1523 174.1582 321.1523 172.6719 316.8271 C +162.2715 315.0186 151.166 316.6797 142.3398 322.4727 C +142.0859 316.3711 140.0898 311.2793 135.998 307.1533 c +135.9141 307.0684 135.7832 307.0547 135.6836 307.1182 c +135.582 307.1816 135.541 307.3066 135.5801 307.4189 c +138.457 315.4199 136.5234 327.6152 130.0586 337.3691 c +f +42.6934 330.7344 m +44.9375 335.5352 50.1523 338.2188 56.1543 338.3271 c +56.2793 338.3311 56.3867 338.2432 56.4082 338.1211 c +56.4316 337.998 56.3633 337.8779 56.248 337.8359 c +54.2012 337.082 52.5859 335.7637 51.7266 333.9258 c +49.5137 329.1973 53.0938 322.8301 59.7402 319.5566 c +59.8184 319.5186 59.8711 319.4434 59.8809 319.3594 c +59.8906 319.2725 59.8555 319.1885 59.791 319.1318 c +55.5 315.6143 50.3789 309.0781 50.3789 295.7148 c +50.377 277.0322 62.5332 259.25 78.6543 259.25 c +87.8672 259.25 95.2871 265.6465 99.125 275.2422 C +94.9023 269.4844 89.1445 265.1348 81.2109 265.1348 c +69.5703 265.1348 60.3574 277.5439 60.3555 295.459 c +60.3555 312.3457 72.2578 332.0518 88.1211 332.0508 c +96.8242 332.0488 103.3477 325.0117 103.3477 315.9277 c +103.3477 307.8672 98.1016 303.2637 92.2168 303.2637 c +87.7793 303.2637 84.7227 306.3936 83.7715 309.7871 c +83.7383 309.9023 83.791 310.0254 83.8965 310.0811 c +84.0039 310.1357 84.1328 310.1104 84.2109 310.0186 c +84.9629 309.124 86.1074 308.3809 87.8652 308.3809 c +90.8086 308.3789 92.3438 310.9082 92.3438 312.7285 c +92.3438 316.1836 89.7852 318.6152 85.9453 318.6152 c +80.7031 318.6152 76.6055 312.8564 76.6055 305.4385 c +76.6055 296.2236 85.4355 287.7813 94.2637 287.7813 c +103.2852 287.7813 112.9434 295.8408 112.9434 310.8125 c +112.9414 325.5234 102.9648 342.4141 87.0977 342.4141 c +77.8477 342.4141 69.9844 338.2441 63.9551 331.3398 c +63.875 331.248 63.7422 331.2246 63.6387 331.2852 c +63.5313 331.3477 63.4844 331.4727 63.5234 331.5879 c +67.957 344.5234 65.4766 356.7344 58.7031 356.7324 c +55.3887 356.7324 53.7012 354.3535 53.7012 351.8154 c +53.7012 349.21 55.5996 347.0566 58.6699 346.6611 c +58.791 346.6475 58.8828 346.5479 58.8926 346.4268 c +58.8984 346.3047 58.8184 346.1943 58.7012 346.1641 c +51.8867 344.4004 44.877 348.1133 44.877 355.2061 c +44.877 361.4854 50.2539 366.3398 57.2891 366.3398 c +67.9258 366.3379 73.0137 355.0684 70.748 344.8047 C +76.207 351.8486 84.3008 357.6396 95.9258 357.6396 c +119.4688 357.6396 131.3672 330.7715 131.3672 312.7285 c +131.3672 296.3525 128.041 285.8604 121.1309 277.8018 C +129.1934 283.9404 132.5195 290.7227 134.0547 300.0645 C +140.1953 308.5078 156.1875 308.5078 v +162.875 308.5078 169.1172 306.0322 173.9609 301.3438 C +173.9629 301.3447 173.9648 301.3477 173.9668 301.3486 C +174.002 301.3105 174.0391 301.2695 174.0762 301.2314 C +174.3965 300.915 174.7109 300.5918 175.0195 300.2578 C +180.0801 295.4102 190.2109 290.8633 199.4512 294.6602 c +199.5566 294.7031 199.6777 294.6699 199.748 294.582 c +199.8184 294.4932 199.8184 294.3672 199.752 294.2754 c +195.3457 288.252 187.7285 286.335 182.0742 287.21 C +183.1172 283.4941 183.6953 279.3281 183.6953 274.7305 c +183.6973 258.3262 174.8984 246.7598 165.2852 241.1289 C +168.4375 237.3281 167.7949 231.3535 164.2539 227.2949 c +164.1738 227.2051 164.043 227.1816 163.9375 227.2402 c +163.834 227.2988 163.7832 227.4238 163.8184 227.5391 c +165.5508 233.0703 160.4277 237.6875 153.6387 237.4395 c +153.5156 237.4355 153.4063 237.5195 153.3809 237.6406 c +153.3555 237.7617 153.418 237.8828 153.5332 237.9277 c +163.668 242.0918 170.3906 250.9102 170.3887 261.9355 c +170.3906 273.4492 163.4805 282.79 152.3496 282.79 c +143.2656 282.79 134.1816 274.4727 134.1816 264.1133 c +134.1816 256.0508 138.6582 251.3184 144.416 251.3164 c +149.4063 251.3184 153.373 254.7715 153.373 258.8672 c +153.373 264.7188 146.7891 266.8408 143.2773 262.209 c +143.209 262.1172 143.0859 262.084 142.9805 262.127 c +142.875 262.1689 142.8105 262.2773 142.8223 262.3926 c +143.3457 266.7813 146.5762 270.8926 151.582 270.8926 c +156.1875 270.8926 160.9219 267.0518 160.9219 258.8652 c +160.9219 249.1406 151.584 239.291 136.2305 239.2891 c +115.2461 239.2891 103.8594 262.959 114.0938 281.8945 C +108.8496 275.8809 104.1152 269.4844 104.1152 258.0977 c +104.1133 236.5898 125.3789 222.0488 150.4688 230.5977 c +150.5879 230.6367 150.7188 230.584 150.7754 230.4746 c +150.834 230.3633 150.8008 230.2266 150.6992 230.1523 c +143.6934 225.043 136.3555 217.5137 136.3555 204.873 c +136.3555 191.6934 145.0547 182.3535 158.6191 182.3535 c +169.1094 182.3535 175.7637 188.752 175.7637 196.2988 c +175.7637 202.0566 172.0449 206.6641 165.6563 206.6641 c +156.1426 206.6641 152.9082 196.3203 157.832 191.6953 c +157.916 191.6152 157.9355 191.4902 157.8809 191.3887 c +157.8242 191.2871 157.7051 191.2344 157.5938 191.2637 c +152.8242 192.5 148.2559 197.332 148.2559 204.6152 c +148.2539 217.1563 159.8965 225.4727 172.6914 225.4727 c +178.6875 225.4727 184.4902 223.7188 189.1641 220.4297 C +188.6113 216.2773 190.0313 211.6816 192.1309 208.5879 C +190.1816 215.457 192.291 226.7656 202.8027 226.7676 c +208.6953 226.7656 212.5898 222.2383 212.5898 216.8867 c +212.5898 210.5605 207.2441 207.6094 202.8945 208.2148 c +202.7793 208.2305 202.6895 208.3223 202.6758 208.4375 c +202.6641 208.5527 202.7305 208.6602 202.8379 208.7031 c +204.4238 209.3105 205.7813 210.9727 205.7813 212.9668 c +205.7813 215.4668 203.8691 216.9492 201.8691 216.9492 c +198.5762 216.9492 196.7461 213.2793 197.8984 209.2305 C +197.8867 209.2285 L +198.959 206.3926 199.5605 203.2246 199.5605 199.7363 c +199.5605 182.9746 181.3809 167.002 158.4395 167 c +134.2285 167 121.3867 184.2734 121.3887 202.0566 c +121.3887 211.5938 124.9688 218.8184 129.5762 223.4258 C +109.6543 221.3066 97.0781 229.8223 90.2969 242.1035 C +94.7754 245.9414 96.4375 251.5723 Y +91.0645 244.5352 81.8535 238.3945 68.9316 238.3945 c +49.3555 238.3945 34 257.5859 34 278.1836 c +34 291.2568 38.8027 303.9648 48.5645 312.4307 C +42.5273 317.459 39.918 324.8018 42.6934 330.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +407.2622 430.3711 m +407.3872 430.3711 407.4927 430.4629 407.5103 430.585 c +409.8911 446.5996 419.1646 459.9746 431.9028 467.9814 c +432.0063 468.0449 432.0493 468.1758 432.0044 468.29 c +431.9575 468.4023 431.8384 468.4688 431.7173 468.4443 c +421.2466 466.3398 411.9243 460.5811 405.27 452.4141 C +400.645 465.7891 390.0337 474.418 376.9692 478.0654 C +381.7778 483.6582 379.2622 491.5986 371.8501 492.9023 c +371.7368 492.9229 371.6255 492.8643 371.5767 492.7607 c +371.5278 492.6563 371.5552 492.5322 371.6431 492.46 c +375.6157 489.1143 374.1626 481.04 362.3052 481.04 c +354.5103 481.04 349.4849 484.2188 349.4849 488.5254 c +349.4849 491.9102 352.5474 493.7559 355.1255 493.7559 c +359.5415 493.7559 362.0649 489.7949 360.1685 486.2129 c +360.1138 486.1104 360.1353 485.9814 360.2231 485.9033 c +360.311 485.8271 360.4399 485.8184 360.5376 485.8857 c +362.7856 487.4492 364.356 489.5059 364.356 492.6768 c +364.356 498.0635 359.3306 503.8066 351.0239 503.8066 c +342.1021 503.8066 334.0005 496.9355 334.0005 488.5254 c +334.0005 476.71 344.0493 471.0918 354.6138 470.0918 C +350.2485 468.4189 346.981 463.5664 v +346.9146 463.4697 346.9243 463.3418 347.0024 463.2559 c +347.0806 463.1689 347.2056 463.1475 347.3091 463.2012 c +353.1392 466.2822 359.7954 467.9453 366.811 467.9453 c +386.4321 467.9453 403.3579 451.541 407.0103 430.5801 c +407.0317 430.4561 407.1392 430.3691 407.2622 430.3711 c +f +483.9399 482.7773 m +488.5493 490.4551 490.1919 503.627 485.897 513.46 c +485.8481 513.5703 485.8833 513.6992 485.9829 513.7686 c +486.0806 513.8379 486.2153 513.8281 486.3032 513.7461 c +491.1099 509.1914 495.2427 498.5684 493.0083 486.2871 C +496.106 483.8936 498.0532 481.5176 499.522 478.335 c +499.5688 478.2314 499.5415 478.1104 499.4556 478.0352 c +499.3696 477.9629 499.2446 477.9551 499.1489 478.0186 c +494.1528 481.3809 489.686 482.5283 483.9399 482.7773 C +f +473.3306 362.9707 m +473.4009 362.8672 473.3833 362.7266 473.2915 362.6426 c +473.1978 362.5586 473.0571 362.5547 472.9595 362.6348 c +466.145 368.1621 457.0845 371.6895 445.9243 371.6895 c +418.3521 371.6895 400.9517 355.1719 398.2173 337.7637 c +398.1997 337.6523 398.1099 337.5664 397.9985 337.5508 c +397.8872 337.5371 397.7778 337.5977 397.7329 337.7012 c +395.0083 343.959 393.3657 353.0352 401.7817 365.209 c +406.8169 372.4941 412.9106 377.5098 412.9106 384.0273 c +412.9106 388.2852 410.6509 391.1797 407.2231 391.1797 c +403.6177 391.1797 401.2876 388.0918 401.2876 384.625 c +401.2876 382.877 401.7915 381.1465 402.6958 379.5801 c +402.7544 379.4766 402.7368 379.3496 402.6509 379.2676 c +402.5649 379.1875 402.436 379.1758 402.3384 379.2402 c +399.3657 381.1777 396.7114 384.6367 396.7114 389.5117 c +396.7114 396.6836 402.8442 402.6816 411.1802 402.6816 c +420.1548 402.6816 427.5044 395.6328 427.5044 385.4922 c +427.5044 382.0156 426.5142 377.8242 424.0415 374.3613 C +427.4263 377.1875 429.2329 379.1875 430.7192 383.5117 C +441.1196 385.3223 452.2251 383.6602 461.0493 377.8691 C +461.3052 383.9707 463.3013 389.0605 467.3931 393.1875 c +467.4771 393.2715 467.6079 393.2852 467.7075 393.2227 c +467.8091 393.1582 467.8521 393.0332 467.811 392.9219 c +464.9341 384.9199 466.8657 372.7246 473.3306 362.9707 c +f +560.6978 369.6055 m +558.4517 364.8066 553.2388 362.1211 547.2368 362.0117 c +547.1118 362.0098 547.0044 362.0977 546.9829 362.2188 c +546.9595 362.3418 547.0278 362.4609 547.1431 362.5039 c +549.1899 363.2578 550.8052 364.5762 551.6646 366.4141 c +553.8774 371.1426 550.2974 377.5098 543.6509 380.7832 c +543.5728 380.8223 543.52 380.8965 543.5103 380.9824 c +543.5005 381.0684 543.5337 381.1523 543.6001 381.207 c +547.8911 384.7266 553.0122 391.2617 553.0122 404.627 c +553.0122 423.3086 540.8579 441.0898 524.7368 441.0898 c +515.5239 441.0898 508.104 434.6934 504.2661 425.0977 C +508.4868 430.8564 514.2446 435.2051 522.1782 435.2051 c +533.8208 435.2051 543.0337 422.7969 543.0337 404.8828 c +543.0337 387.9941 531.1333 368.2891 515.2681 368.2891 c +506.5669 368.2891 500.0435 375.3281 500.0435 384.4121 c +500.0435 392.4746 505.2896 397.0781 511.1763 397.0781 c +515.6099 397.0781 518.6685 393.9473 519.6196 390.5527 c +519.6509 390.4375 519.6001 390.3164 519.4927 390.2598 c +519.3872 390.2051 519.2583 390.2305 519.1802 390.3223 c +518.4282 391.2168 517.2837 391.9609 515.5259 391.9609 c +512.5825 391.9609 511.0474 389.4316 511.0474 387.6113 c +511.0474 384.1563 513.606 381.7246 517.4458 381.7246 c +522.6899 381.7246 526.7856 387.4824 526.7856 394.9023 c +526.7856 404.1152 517.9556 412.5586 509.1274 412.5586 c +500.106 412.5586 490.4478 404.5 490.4478 389.5293 c +490.4478 374.8164 500.4282 357.9258 516.2935 357.9258 c +525.5435 357.9258 533.4048 362.0957 539.436 369.002 c +539.5161 369.0918 539.6489 369.1152 539.7544 369.0547 c +539.8599 368.9941 539.9067 368.8672 539.8677 368.752 c +535.4341 355.8164 537.9126 343.6074 544.688 343.6074 c +548.0024 343.6074 549.6899 345.9863 549.6899 348.5234 c +549.6899 351.1309 547.7915 353.2852 544.7212 353.6777 c +544.6001 353.6934 544.5063 353.793 544.4985 353.9141 c +544.4927 354.0352 544.5708 354.1465 544.6899 354.1758 c +551.5044 355.9395 558.5142 352.2285 558.5142 345.1328 c +558.5142 338.8555 553.1372 334.002 546.1021 334.002 c +535.4653 334.002 530.3774 345.2715 532.6431 355.5371 C +527.1841 348.4922 519.0903 342.7012 507.4653 342.7012 c +483.9224 342.7012 472.0239 369.5703 472.0239 387.6113 c +472.0239 403.9883 475.3501 414.4785 482.2603 422.5391 C +474.1978 416.3984 470.8716 409.6172 469.3384 400.2773 C +463.1958 391.832 447.2036 391.832 v +440.5161 391.832 434.2739 394.3086 429.4302 398.998 C +429.4282 398.9961 429.4263 398.9941 429.4243 398.9902 C +429.3892 399.0313 429.3501 399.0703 429.3149 399.1094 C +428.9946 399.4238 428.6802 399.748 428.3716 400.082 C +423.3091 404.9316 413.1802 409.4785 403.9399 405.6797 c +403.8345 405.6367 403.7134 405.6699 403.6431 405.7578 c +403.5728 405.8477 403.5708 405.9727 403.6392 406.0645 c +408.0454 412.0898 415.6626 414.0059 421.3169 413.1309 C +420.272 416.8457 419.6938 421.0117 419.6938 425.6094 c +419.6938 442.0137 428.4927 453.5801 438.106 459.2109 C +434.9517 463.0137 435.5962 468.9883 439.1372 473.0449 c +439.2173 473.1357 439.3481 473.1582 439.4536 473.0996 c +439.5571 473.041 439.606 472.918 439.5708 472.8018 c +437.8403 467.2695 442.9634 462.6523 449.7524 462.9004 c +449.8755 462.9033 449.9829 462.8193 450.0103 462.6992 c +450.0356 462.5801 449.9712 462.457 449.8579 462.4111 c +439.7212 458.248 433.0005 449.4316 433.0005 438.4033 c +433.0005 426.8906 439.9087 417.5488 451.0415 417.5488 c +460.1255 417.5488 469.2095 425.8672 469.2095 436.2285 c +469.2095 444.2891 464.731 449.0225 458.9731 449.0225 c +453.9849 449.0225 450.0181 445.5684 450.0181 441.4736 c +450.0181 435.6211 456.6001 433.499 460.1118 438.1309 c +460.1821 438.2227 460.3032 438.2559 460.4087 438.2129 c +460.5161 438.1699 460.5806 438.0625 460.5669 437.9482 c +460.0435 433.5586 456.8149 429.4482 451.8091 429.4482 c +447.2036 429.4482 442.4692 433.2861 442.4692 441.4746 c +442.4692 451.1982 451.8071 461.0508 467.1606 461.0508 c +488.1431 461.0508 499.5317 437.3809 489.2974 418.4453 C +494.5415 424.459 499.2759 430.8555 499.2759 442.2432 c +499.2759 463.75 478.0122 478.291 452.9224 469.7441 c +452.8032 469.7021 452.6724 469.7559 452.6157 469.8672 c +452.5571 469.9785 452.5884 470.1143 452.6899 470.1895 c +459.6958 475.2979 467.0337 482.8262 467.0337 495.4668 c +467.0337 508.6475 458.3345 517.9854 444.772 517.9854 c +434.2798 517.9854 427.6274 511.5879 427.6274 504.04 c +427.6274 498.2822 431.3462 493.6768 437.7349 493.6768 c +447.2466 493.6768 450.481 504.0195 445.5591 508.6445 c +445.4751 508.7236 445.4556 508.8516 445.5103 508.9521 c +445.5669 509.0547 445.6841 509.1055 445.7974 509.0762 c +450.5669 507.8398 455.1353 503.0068 455.1353 495.7236 c +455.1353 483.1855 443.4927 474.8682 430.6978 474.8682 c +424.7017 474.8682 418.8989 476.623 414.2271 479.9102 C +414.7778 484.0635 413.3579 488.6602 411.2603 491.752 C +413.2095 484.8848 411.1021 473.5732 400.5864 473.5732 c +394.6958 473.5732 390.8013 478.1025 390.8013 483.4551 c +390.8013 489.7793 396.147 492.7314 400.4966 492.125 c +400.6118 492.1104 400.7017 492.0186 400.7134 491.9023 c +400.7271 491.7891 400.6606 491.6797 400.5532 491.6367 c +398.9673 491.0293 397.6118 489.3691 397.6118 487.373 c +397.6118 484.873 399.52 483.3906 401.52 483.3906 c +404.8149 483.3906 406.645 487.0605 405.4927 491.1104 C +405.5044 491.1104 L +404.4321 493.9473 403.8286 497.1152 403.8286 500.6055 c +403.8286 517.3672 422.0103 533.3398 444.9497 533.3398 c +469.1626 533.3398 482.0044 516.0664 482.0044 498.2822 c +482.0044 488.7461 478.4224 481.5225 473.8149 476.915 C +493.7368 479.0332 506.313 470.5176 513.0942 458.2354 C +508.6157 454.3975 506.9536 448.7676 Y +512.3267 455.8057 521.5376 461.9453 534.4595 461.9453 c +554.0356 461.9453 569.3911 442.7539 569.3911 422.1563 c +569.3911 409.084 564.5884 396.375 554.8267 387.9102 C +560.8638 382.8809 563.4731 375.5391 560.6978 369.6055 c +f +*U +*u +482.2114 494.9053 m +482.1782 494.7852 482.2388 494.6582 482.3521 494.6094 c +497.1763 488.0957 507.6372 475.6289 512.0063 461.2324 c +512.0415 461.1152 512.1548 461.0391 512.2778 461.0527 c +512.3989 461.0664 512.4946 461.166 512.5024 461.2871 c +513.229 471.9434 510.1274 482.4531 504.0005 491.0234 C +518.1216 491.9648 529.2407 499.9297 536.1997 511.5723 C +540.3286 505.46 548.6509 505.7969 551.8599 512.6035 c +551.9106 512.708 551.8833 512.832 551.7954 512.9063 c +551.7075 512.9805 551.5806 512.9873 551.4868 512.9219 c +547.2134 509.9688 539.8071 513.498 542.9282 524.9355 c +544.981 532.4561 549.3716 536.4668 553.5259 535.333 c +556.7915 534.4414 557.7661 531.002 557.0864 528.5146 c +555.9243 524.2539 551.438 522.8623 548.481 525.6357 c +548.397 525.7158 548.2681 525.7285 548.1704 525.6641 c +548.0728 525.5986 548.0298 525.4775 548.0688 525.3662 c +548.9868 522.7852 550.5571 520.7285 553.6157 519.8936 c +558.811 518.4756 565.6743 521.8115 567.8618 529.8252 c +570.2114 538.4316 565.7153 548.0566 557.604 550.2715 c +546.2036 553.3818 538.1392 545.166 534.3931 535.2383 C +533.9263 539.8896 530.1079 544.3203 v +530.0317 544.4092 529.9048 544.4336 529.8013 544.3818 c +529.6978 544.3291 529.6431 544.2129 529.6665 544.0996 c +531.106 537.6641 530.9575 530.8047 529.1099 524.0361 c +523.9438 505.1074 503.6626 493.0977 482.479 495.0938 c +482.354 495.1055 482.2407 495.0254 482.2114 494.9053 c +f +512.5806 407.1348 m +518.7739 400.666 531.0493 395.6133 541.6646 397.168 c +541.7856 397.1855 541.9009 397.1172 541.9399 397.0039 c +541.981 396.8906 541.936 396.7637 541.8345 396.7012 c +536.1743 393.2617 524.8384 392.0723 513.5786 397.4609 C +510.4536 395.1035 507.6489 393.8496 504.1919 393.2715 c +504.0806 393.2539 503.9692 393.3125 503.9204 393.4141 c +503.8735 393.5156 503.8989 393.6387 503.9849 393.7148 c +508.5454 397.6484 510.8286 401.6563 512.5806 407.1348 C +f +399.7935 448.9121 m +399.6763 448.8711 399.5454 448.9258 399.4888 449.0371 c +399.4321 449.1484 399.4653 449.2852 399.5688 449.3594 c +406.6938 454.4785 412.4829 462.291 415.4204 473.0566 c +422.6802 499.6563 411.3267 520.7921 395.2544 528.0146 c +395.1509 528.0605 395.0903 528.1689 395.106 528.2803 c +395.1216 528.3926 395.2095 528.4814 395.3208 528.4971 c +402.0747 529.4785 411.2622 528.6729 420.7915 517.3486 c +426.4927 510.5732 429.7271 503.373 436.0142 501.6563 c +440.1216 500.5352 443.5103 501.9551 444.4126 505.2617 c +445.3618 508.7393 442.9966 511.8018 439.6528 512.7148 c +437.9653 513.1738 436.1626 513.1436 434.4146 512.6836 c +434.2993 512.6533 434.1821 512.7051 434.1255 512.8086 c +434.0708 512.9121 434.0923 513.04 434.1802 513.1172 c +436.8325 515.4746 440.8677 517.125 445.5708 515.8408 c +452.4907 513.9531 456.6606 506.457 454.4673 498.415 c +452.104 489.7578 443.3696 484.5234 433.5864 487.1934 c +430.2329 488.1084 426.4497 490.168 423.7603 493.4648 C +425.5942 489.4551 427.0493 487.1855 430.8286 484.6133 C +429.8364 474.1035 425.3091 463.8271 417.4009 456.8389 C +423.2192 454.9863 427.604 451.7207 430.5083 446.6855 c +430.5669 446.582 430.5454 446.4531 430.4595 446.373 c +430.3696 446.293 430.2388 446.2832 430.1411 446.3535 c +423.1802 451.2344 410.9048 452.582 399.7935 448.9121 c +f +383.1919 362.8809 m +379.1548 366.3105 377.936 372.0469 379.4106 377.8672 c +379.4419 377.9883 379.5552 378.0684 379.6782 378.0566 c +379.8032 378.0469 379.8989 377.9492 379.9106 377.8281 c +380.0981 375.6543 380.9458 373.748 382.4927 372.4355 c +386.4712 369.0566 393.5571 370.834 398.4634 376.3828 c +398.522 376.4492 398.6079 376.4805 398.6938 376.4668 c +398.7798 376.4531 398.8521 376.3984 398.8872 376.3203 c +401.1528 371.2539 406.1079 364.5938 419.0005 361.0742 c +437.0239 356.1563 457.3794 363.1992 461.6235 378.752 c +464.0493 387.6406 459.8306 396.4824 451.5845 402.7109 C +456.0298 397.123 458.7075 390.4238 456.6177 382.7695 c +453.5532 371.5391 439.1567 365.918 421.8755 370.6348 c +405.5825 375.0801 389.7075 391.748 393.8833 407.0547 c +396.1743 415.4492 404.6821 419.8887 413.4458 417.4961 c +421.2231 415.375 424.2837 409.1016 422.7329 403.4219 c +421.5669 399.1445 417.7407 397.0195 414.2153 396.9941 c +414.0962 396.9941 413.9927 397.0762 413.9653 397.1934 c +413.9419 397.3105 413.9985 397.4277 414.1079 397.4785 c +415.1704 397.9688 416.188 398.877 416.6509 400.5742 c +417.4263 403.4121 415.3911 405.5605 413.6353 406.0391 c +410.3032 406.9492 407.2837 405.1211 406.272 401.416 c +404.8911 396.3574 409.3677 390.8906 416.5239 388.9355 c +425.4126 386.5117 435.8833 392.8066 438.2075 401.3223 c +440.5825 410.0254 435.3501 421.4648 420.9087 425.4063 c +406.7153 429.2813 387.7935 424.0996 383.6157 408.793 c +381.1802 399.8691 383.1333 391.1875 388.2075 383.5508 c +388.2739 383.4512 388.2622 383.3164 388.1763 383.2305 c +388.0884 383.1445 387.9536 383.1328 387.854 383.2012 c +376.5415 390.8828 364.1118 391.707 362.3267 385.1699 c +361.4536 381.9727 363.3052 379.7188 365.7524 379.0508 c +368.2681 378.3652 370.8462 379.6289 372.0337 382.4883 c +372.0806 382.5996 372.2017 382.6641 372.3208 382.6406 c +372.438 382.6133 372.5259 382.5098 372.522 382.3867 c +372.4302 375.3477 367.0044 369.5625 360.1587 371.4316 c +354.1021 373.084 350.8364 379.5488 352.688 386.3359 c +355.4888 396.5977 367.6997 398.5391 377.0063 393.6504 C +371.647 400.7715 368.1919 410.1035 371.2524 421.3184 c +377.4517 444.0313 406.5044 448.4355 423.9087 443.6855 c +439.7075 439.373 448.9517 433.4023 454.9087 424.6152 C +451.1079 434.0098 445.4419 439.0039 436.8345 442.9434 C +430.3052 451.0918 434.5161 466.5195 v +436.2759 472.9707 440.3091 478.3418 446.1079 481.7793 C +446.1079 481.7813 446.106 481.7842 446.1021 481.7871 C +446.1509 481.8105 446.1997 481.8379 446.2466 481.8613 C +446.6333 482.0879 447.0298 482.3057 447.4321 482.5146 C +453.4438 486.1211 460.4966 494.6973 459.2661 504.6113 c +459.2524 504.7236 459.3149 504.832 459.4185 504.877 c +459.5239 504.9219 459.645 504.8896 459.7153 504.8018 c +464.3677 498.9629 464.2114 491.1104 461.8794 485.8857 C +465.7368 485.915 469.9087 485.375 474.3442 484.165 c +490.1685 479.8457 499.0122 468.3135 501.9126 457.5566 C +506.4106 459.5977 512.0063 457.4043 514.9888 452.9199 c +515.0532 452.8184 515.0415 452.6855 514.9575 452.5996 c +514.8735 452.5156 514.7407 452.5 514.6392 452.5645 c +509.7583 455.6914 503.9556 451.9648 502.4048 445.3496 c +502.3774 445.2305 502.2681 445.1484 502.145 445.1543 c +502.022 445.1602 501.9204 445.2539 501.9067 445.377 c +500.5591 456.251 493.8228 465.0566 483.1841 467.96 c +472.0767 470.9922 461.2446 466.7852 458.3149 456.0469 c +455.9224 447.2832 461.5571 436.3301 471.5513 433.6016 c +479.3286 431.4785 485.0747 434.5527 486.5903 440.1074 c +487.9048 444.9199 485.6157 449.6563 481.6665 450.7344 c +476.0181 452.2754 472.2388 446.4844 475.7837 441.877 c +475.8521 441.7852 475.854 441.6602 475.7837 441.5684 c +475.7153 441.4766 475.5923 441.4434 475.4868 441.4863 c +471.3892 443.1465 468.2739 447.3418 469.5923 452.1729 c +470.8052 456.6152 475.7544 460.1729 483.6548 458.0166 c +493.0356 455.457 500.0806 443.8555 496.0376 429.043 c +490.5142 408.7988 464.6802 404.0449 449.1079 418.9043 C +453.5278 412.2617 458.4517 406.0098 469.438 403.0117 c +490.188 397.3496 509.813 414.0332 508.1724 440.4902 c +508.1646 440.6152 508.2505 440.7285 508.3735 440.7539 c +508.4946 440.7813 508.6196 440.7129 508.6646 440.5977 c +511.7466 432.4922 517.0786 423.4316 529.2739 420.1035 c +541.9888 416.6328 553.2876 422.5664 556.8599 435.6504 c +559.6216 445.7734 555.2017 453.875 547.9204 455.8623 c +542.3657 457.3789 536.9419 455.0039 535.2603 448.8398 c +532.7563 439.6641 541.8833 433.8203 547.6411 437.3516 c +547.7388 437.4121 547.8677 437.3965 547.9497 437.3164 c +548.0337 437.2363 548.0513 437.1094 547.9927 437.0078 c +545.5454 432.7324 539.6802 429.5977 532.6548 431.5156 c +520.5571 434.8164 515.6001 448.2383 518.9673 460.5811 c +520.5454 466.3652 523.7681 471.502 528.1685 475.1426 C +532.0298 473.5186 536.8384 473.6777 540.3735 474.8867 C +533.2349 474.8154 522.8794 479.8262 525.647 489.9707 c +527.1978 495.6533 532.5923 498.2188 537.7563 496.8086 c +543.8579 495.1436 545.2974 489.21 543.5688 485.1729 c +543.522 485.0654 543.4106 485.0039 543.2974 485.0225 c +543.1821 485.04 543.0942 485.1318 543.0825 485.2471 c +542.9146 486.9375 541.6685 488.6836 539.7446 489.208 c +537.3325 489.8662 535.3989 488.415 534.8735 486.4854 c +534.0044 483.3066 537.063 480.5752 541.2739 480.6211 C +541.27 480.6094 L +544.2896 480.8984 547.5044 480.6445 550.8716 479.7266 c +567.0415 475.3125 577.6646 453.5674 571.6235 431.4375 c +565.2485 408.0781 545.2056 400.2363 528.0474 404.9199 c +518.8481 407.4297 512.8228 412.7871 509.5903 418.4453 C +506.3892 398.668 494.8618 388.7793 481.229 385.4707 C +478.7056 390.8008 473.7114 393.8867 Y +479.0864 386.8496 482.5845 376.3477 479.1821 363.8809 c +474.0278 344.9961 451.4712 335.2344 431.6001 340.6582 c +418.9888 344.0996 407.9927 352.0801 402.397 363.7266 C +395.9556 359.2266 388.186 358.6406 383.1919 362.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +530.1294 436.9688 m +530.0044 436.9688 529.8989 436.877 529.8794 436.7539 c +527.5005 420.7402 518.2271 407.3652 505.4888 399.3594 c +505.3853 399.2949 505.3403 399.1641 505.3872 399.0508 c +505.4321 398.9375 505.5532 398.8711 505.6724 398.8965 c +516.145 401 525.4653 406.7598 532.1216 414.9277 C +536.7466 401.5508 547.3579 392.9219 560.4224 389.2734 C +555.6138 383.6816 558.1294 375.7402 565.5415 374.4375 c +565.6548 374.416 565.7661 374.4746 565.8149 374.5781 c +565.8638 374.6816 565.8364 374.8066 565.7485 374.8809 c +561.7759 378.2266 563.229 386.3008 575.0864 386.3008 c +582.8804 386.3008 587.9077 383.1211 587.9077 378.8145 c +587.9077 375.4297 584.8452 373.584 582.2651 373.584 c +577.8511 373.584 575.3267 377.5449 577.2231 381.127 c +577.2778 381.2305 577.2563 381.3574 577.1685 381.4355 c +577.0806 381.5137 576.9517 381.5215 576.854 381.4551 c +574.606 379.8906 573.0356 377.834 573.0356 374.6641 c +573.0356 369.2773 578.062 363.5352 586.3687 363.5332 c +595.2905 363.5332 603.3921 370.4043 603.3921 378.8145 c +603.3921 390.6309 593.3433 396.248 582.7788 397.248 C +587.144 398.9219 590.4116 403.7734 v +590.478 403.8691 590.4683 403.998 590.3901 404.084 c +590.312 404.1719 590.1851 404.1934 590.0835 404.1387 c +584.2534 401.0566 577.5942 399.3945 570.5806 399.3945 c +550.9575 399.3945 534.0337 415.7988 530.3813 436.7607 c +530.3599 436.8818 530.2524 436.9727 530.1294 436.9688 c +f +453.4517 384.5625 m +448.8442 376.8867 447.1997 363.7129 451.4946 353.8809 c +451.5435 353.7695 451.5083 353.6406 451.4087 353.5703 c +451.3091 353.502 451.1763 353.5117 451.0884 353.5957 c +446.2817 358.1484 442.1489 368.7715 444.3833 381.0527 C +441.2876 383.4473 439.3384 385.8223 437.8696 389.0059 c +437.8228 389.1074 437.8501 389.2305 437.936 389.3047 c +438.022 389.377 438.147 389.3848 438.2427 389.3203 c +443.2388 385.959 447.7056 384.8125 453.4517 384.5625 C +f +464.0591 504.3691 m +463.9907 504.4727 464.0083 504.6133 464.1001 504.6973 c +464.1938 504.7813 464.3345 504.7852 464.4321 504.7061 c +471.2466 499.1797 480.3071 495.6504 491.4673 495.6504 c +519.0376 495.6504 536.4399 512.1689 539.1743 529.5771 c +539.1919 529.6885 539.2817 529.7734 539.3931 529.7891 c +539.5044 529.8047 539.6138 529.7422 539.6587 529.6396 c +542.3833 523.3818 544.0259 514.3057 535.6099 502.1309 c +530.5747 494.8457 524.479 489.8311 524.479 483.3145 c +524.479 479.0566 526.7407 476.1602 530.1685 476.1602 c +533.7739 476.1602 536.106 479.248 536.104 482.7148 c +536.104 484.4629 535.6001 486.1934 534.6958 487.7607 c +534.6372 487.8633 534.6548 487.9902 534.7407 488.0723 c +534.8247 488.1523 534.9556 488.165 535.0532 488.1016 c +538.0259 486.1641 540.6802 482.7021 540.6802 477.8281 c +540.6802 470.6563 534.5474 464.6602 526.2095 464.6602 c +517.2368 464.6602 509.8872 471.709 509.8872 481.8477 c +509.8872 485.3262 510.8755 489.5156 513.3501 492.9805 C +509.9653 490.1523 508.1587 488.1523 506.6724 483.8271 C +496.272 482.0186 485.1665 483.6797 476.3403 489.4727 C +476.0864 483.3711 474.0903 478.2793 469.9985 474.1533 c +469.9146 474.0684 469.7837 474.0547 469.6841 474.1182 c +469.5825 474.1816 469.5415 474.3066 469.5806 474.4189 c +472.4575 482.4199 470.5239 494.6152 464.0591 504.3691 c +f +376.6938 497.7344 m +378.938 502.5352 384.1528 505.2188 390.1548 505.3271 c +390.2798 505.3311 390.3872 505.2432 390.4087 505.1211 c +390.4321 504.998 390.3638 504.8779 390.2485 504.8359 c +388.2017 504.082 386.5864 502.7637 385.7271 500.9258 c +383.5142 496.1973 387.0942 489.8301 393.7407 486.5566 c +393.8188 486.5186 393.8716 486.4434 393.8813 486.3594 c +393.8911 486.2725 393.856 486.1885 393.7915 486.1318 c +389.5005 482.6143 384.3794 476.0781 384.3794 462.7148 c +384.3774 444.0322 396.5337 426.25 412.6548 426.25 c +421.8677 426.25 429.2876 432.6465 433.1255 442.2422 C +428.9028 436.4844 423.145 432.1348 415.2114 432.1348 c +403.5708 432.1348 394.3579 444.5439 394.356 462.459 c +394.356 479.3457 406.2583 499.0518 422.1216 499.0508 c +430.8247 499.0488 437.3481 492.0117 437.3481 482.9277 c +437.3481 474.8672 432.1021 470.2637 426.2173 470.2637 c +421.7798 470.2637 418.7231 473.3936 417.772 476.7871 c +417.7388 476.9023 417.7915 477.0254 417.897 477.0811 c +418.0044 477.1357 418.1333 477.1104 418.2114 477.0186 c +418.9634 476.124 420.1079 475.3809 421.8657 475.3809 c +424.8091 475.3789 426.3442 477.9082 426.3442 479.7285 c +426.3442 483.1836 423.7856 485.6152 419.9458 485.6152 c +414.7036 485.6152 410.606 479.8564 410.606 472.4385 c +410.606 463.2236 419.436 454.7813 428.2642 454.7813 c +437.2856 454.7813 446.9438 462.8408 446.9438 477.8125 c +446.9419 492.5234 436.9653 509.4141 421.0981 509.4141 c +411.8481 509.4141 403.9849 505.2441 397.9556 498.3398 c +397.8755 498.248 397.7427 498.2246 397.6392 498.2852 c +397.5317 498.3477 397.4849 498.4727 397.5239 498.5879 c +401.9575 511.5234 399.4771 523.7344 392.7036 523.7324 c +389.3892 523.7324 387.7017 521.3535 387.7017 518.8154 c +387.7017 516.21 389.6001 514.0566 392.6704 513.6611 c +392.7915 513.6475 392.8833 513.5479 392.8931 513.4268 c +392.8989 513.3047 392.8188 513.1943 392.7017 513.1641 c +385.8872 511.4004 378.8774 515.1133 378.8774 522.2061 c +378.8774 528.4854 384.2544 533.3398 391.2896 533.3398 c +401.9263 533.3379 407.0142 522.0684 404.7485 511.8047 C +410.2075 518.8486 418.3013 524.6396 429.9263 524.6396 c +453.4692 524.6396 465.3677 497.7715 465.3677 479.7285 c +465.3677 463.3525 462.0415 452.8604 455.1313 444.8018 C +463.1938 450.9404 466.52 457.7227 468.0552 467.0645 C +474.1958 475.5078 490.188 475.5078 v +496.8755 475.5078 503.1177 473.0322 507.9614 468.3438 C +507.9634 468.3447 507.9653 468.3477 507.9673 468.3486 C +508.0024 468.3105 508.0396 468.2695 508.0767 468.2314 C +508.397 467.915 508.7114 467.5918 509.02 467.2578 C +514.0806 462.4102 524.2114 457.8633 533.4517 461.6602 c +533.5571 461.7031 533.6782 461.6699 533.7485 461.582 c +533.8188 461.4932 533.8188 461.3672 533.7524 461.2754 c +529.3462 455.252 521.729 453.335 516.0747 454.21 C +517.1177 450.4941 517.6958 446.3281 517.6958 441.7305 c +517.6978 425.3262 508.8989 413.7598 499.2856 408.1289 C +502.438 404.3281 501.7954 398.3535 498.2544 394.2949 c +498.1743 394.2051 498.0435 394.1816 497.938 394.2402 c +497.8345 394.2988 497.7837 394.4238 497.8188 394.5391 c +499.5513 400.0703 494.4282 404.6875 487.6392 404.4395 c +487.5161 404.4355 487.4067 404.5195 487.3813 404.6406 c +487.356 404.7617 487.4185 404.8828 487.5337 404.9277 c +497.6685 409.0918 504.3911 417.9102 504.3892 428.9355 c +504.3911 440.4492 497.481 449.79 486.3501 449.79 c +477.2661 449.79 468.1821 441.4727 468.1821 431.1133 c +468.1821 423.0508 472.6587 418.3184 478.4165 418.3164 c +483.4067 418.3184 487.3735 421.7715 487.3735 425.8672 c +487.3735 431.7188 480.7896 433.8408 477.2778 429.209 c +477.2095 429.1172 477.0864 429.084 476.981 429.127 c +476.8755 429.1689 476.811 429.2773 476.8228 429.3926 c +477.3462 433.7813 480.5767 437.8926 485.5825 437.8926 c +490.188 437.8926 494.9224 434.0518 494.9224 425.8652 c +494.9224 416.1406 485.5845 406.291 470.231 406.2891 c +449.2466 406.2891 437.8599 429.959 448.0942 448.8945 C +442.8501 442.8809 438.1157 436.4844 438.1157 425.0977 c +438.1138 403.5898 459.3794 389.0488 484.4692 397.5977 c +484.5884 397.6367 484.7192 397.584 484.7759 397.4746 c +484.8345 397.3633 484.8013 397.2266 484.6997 397.1523 c +477.6938 392.043 470.356 384.5137 470.356 371.873 c +470.356 358.6934 479.0552 349.3535 492.6196 349.3535 c +503.1099 349.3535 509.7642 355.752 509.7642 363.2988 c +509.7642 369.0566 506.0454 373.6641 499.6567 373.6641 c +490.1431 373.6641 486.9087 363.3203 491.8325 358.6953 c +491.9165 358.6152 491.936 358.4902 491.8813 358.3887 c +491.8247 358.2871 491.7056 358.2344 491.5942 358.2637 c +486.8247 359.5 482.2563 364.332 482.2563 371.6152 c +482.2544 384.1563 493.897 392.4727 506.6919 392.4727 c +512.688 392.4727 518.4907 390.7188 523.1646 387.4297 C +522.6118 383.2773 524.0317 378.6816 526.1313 375.5879 C +524.1821 382.457 526.2915 393.7656 536.8032 393.7676 c +542.6958 393.7656 546.5903 389.2383 546.5903 383.8867 c +546.5903 377.5605 541.2446 374.6094 536.895 375.2148 c +536.7798 375.2305 536.6899 375.3223 536.6763 375.4375 c +536.6646 375.5527 536.731 375.6602 536.8384 375.7031 c +538.4243 376.3105 539.7817 377.9727 539.7817 379.9668 c +539.7817 382.4668 537.8696 383.9492 535.8696 383.9492 c +532.5767 383.9492 530.7466 380.2793 531.8989 376.2305 C +531.8872 376.2285 L +532.9595 373.3926 533.561 370.2246 533.561 366.7363 c +533.561 349.9746 515.3813 334.002 492.4399 334 c +468.229 334 455.3872 351.2734 455.3892 369.0566 c +455.3892 378.5938 458.9692 385.8184 463.5767 390.4258 C +443.6548 388.3066 431.0786 396.8223 424.2974 409.1035 C +428.7759 412.9414 430.438 418.5723 Y +425.0649 411.5352 415.854 405.3945 402.9321 405.3945 c +383.356 405.3945 368.0005 424.5859 368.0005 445.1836 c +368.0005 458.2568 372.8032 470.9648 382.5649 479.4307 C +376.5278 484.459 373.9185 491.8018 376.6938 497.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +240.2622 430.3711 m +240.3872 430.3711 240.4927 430.4629 240.5103 430.585 c +242.8911 446.5996 252.1646 459.9746 264.9028 467.9814 c +265.0063 468.0449 265.0493 468.1758 265.0044 468.29 c +264.9575 468.4023 264.8384 468.4688 264.7173 468.4443 c +254.2466 466.3398 244.9243 460.5811 238.27 452.4141 C +233.644 465.7891 223.0337 474.418 209.9692 478.0654 C +214.7778 483.6582 212.2622 491.5986 204.8501 492.9023 c +204.7368 492.9229 204.6245 492.8643 204.5757 492.7607 c +204.5278 492.6563 204.5542 492.5322 204.6421 492.46 c +208.6157 489.1143 207.1616 481.04 195.3052 481.04 c +187.5103 481.04 182.4849 484.2188 182.4849 488.5254 c +182.4849 491.9102 185.5464 493.7559 188.1255 493.7559 c +192.5415 493.7559 195.0649 489.7949 193.1675 486.2129 c +193.1128 486.1104 193.1353 485.9814 193.2231 485.9033 c +193.311 485.8271 193.4399 485.8184 193.5366 485.8857 c +195.7856 487.4492 197.356 489.5059 197.356 492.6768 c +197.356 498.0635 192.3306 503.8066 184.0239 503.8066 c +175.1021 503.8066 167.0005 496.9355 167.0005 488.5254 c +167.0005 476.71 177.0493 471.0918 187.6138 470.0918 C +183.2485 468.4189 179.98 463.5664 v +179.9146 463.4697 179.9243 463.3418 180.0015 463.2559 c +180.0796 463.1689 180.2056 463.1475 180.3091 463.2012 c +186.1392 466.2822 192.7954 467.9453 199.811 467.9453 c +219.4321 467.9453 236.3579 451.541 240.0103 430.5801 c +240.0317 430.4561 240.1382 430.3691 240.2622 430.3711 c +f +316.9399 482.7773 m +321.5493 490.4551 323.1919 503.627 318.897 513.46 c +318.8481 513.5703 318.8833 513.6992 318.9829 513.7686 c +319.0806 513.8379 319.2153 513.8281 319.3032 513.7461 c +324.1099 509.1914 328.2427 498.5684 326.0083 486.2871 C +329.106 483.8936 331.0532 481.5176 332.522 478.335 c +332.5688 478.2314 332.5415 478.1104 332.4556 478.0352 c +332.3696 477.9629 332.2446 477.9551 332.1489 478.0186 c +327.1528 481.3809 322.686 482.5283 316.9399 482.7773 C +f +306.3306 362.9707 m +306.4009 362.8672 306.3833 362.7266 306.2915 362.6426 c +306.1978 362.5586 306.0571 362.5547 305.9595 362.6348 c +299.145 368.1621 290.0845 371.6895 278.9243 371.6895 c +251.3521 371.6895 233.9517 355.1719 231.2163 337.7637 c +231.1987 337.6523 231.1099 337.5664 230.9985 337.5508 c +230.8862 337.5371 230.7778 337.5977 230.7329 337.7012 c +228.0073 343.959 226.3657 353.0352 234.7817 365.209 c +239.8159 372.4941 245.9106 377.5098 245.9106 384.0273 c +245.9106 388.2852 243.6509 391.1797 240.2231 391.1797 c +236.6177 391.1797 234.2866 388.0918 234.2866 384.625 c +234.2866 382.877 234.7915 381.1465 235.6958 379.5801 c +235.7544 379.4766 235.7358 379.3496 235.6509 379.2676 c +235.5649 379.1875 235.436 379.1758 235.3384 379.2402 c +232.3657 381.1777 229.7114 384.6367 229.7114 389.5117 c +229.7114 396.6836 235.8442 402.6816 244.1802 402.6816 c +253.1548 402.6816 260.5044 395.6328 260.5044 385.4922 c +260.5044 382.0156 259.5142 377.8242 257.0415 374.3613 C +260.4263 377.1875 262.2329 379.1875 263.7192 383.5117 C +274.1196 385.3223 285.2251 383.6602 294.0493 377.8691 C +294.3052 383.9707 296.3013 389.0605 300.3931 393.1875 c +300.4771 393.2715 300.6079 393.2852 300.7075 393.2227 c +300.8091 393.1582 300.8521 393.0332 300.811 392.9219 c +297.9341 384.9199 299.8657 372.7246 306.3306 362.9707 c +f +393.6978 369.6055 m +391.4517 364.8066 386.2388 362.1211 380.2368 362.0117 c +380.1118 362.0098 380.0044 362.0977 379.9829 362.2188 c +379.9595 362.3418 380.0278 362.4609 380.1431 362.5039 c +382.1899 363.2578 383.8052 364.5762 384.6646 366.4141 c +386.8774 371.1426 383.2974 377.5098 376.6509 380.7832 c +376.5728 380.8223 376.52 380.8965 376.5103 380.9824 c +376.5005 381.0684 376.5337 381.1523 376.6001 381.207 c +380.8911 384.7266 386.0122 391.2617 386.0122 404.627 c +386.0122 423.3086 373.8579 441.0898 357.7368 441.0898 c +348.5239 441.0898 341.104 434.6934 337.2661 425.0977 C +341.4868 430.8564 347.2446 435.2051 355.1782 435.2051 c +366.8208 435.2051 376.0337 422.7969 376.0337 404.8828 c +376.0337 387.9941 364.1333 368.2891 348.2681 368.2891 c +339.5669 368.2891 333.0435 375.3281 333.0435 384.4121 c +333.0435 392.4746 338.2896 397.0781 344.1763 397.0781 c +348.6099 397.0781 351.6685 393.9473 352.6196 390.5527 c +352.6509 390.4375 352.6001 390.3164 352.4927 390.2598 c +352.3872 390.2051 352.2583 390.2305 352.1802 390.3223 c +351.4282 391.2168 350.2837 391.9609 348.5259 391.9609 c +345.5825 391.9609 344.0474 389.4316 344.0474 387.6113 c +344.0474 384.1563 346.606 381.7246 350.4458 381.7246 c +355.6899 381.7246 359.7856 387.4824 359.7856 394.9023 c +359.7856 404.1152 350.9556 412.5586 342.1274 412.5586 c +333.106 412.5586 323.4478 404.5 323.4478 389.5293 c +323.4478 374.8164 333.4282 357.9258 349.2935 357.9258 c +358.5435 357.9258 366.4048 362.0957 372.436 369.002 c +372.5161 369.0918 372.6489 369.1152 372.7544 369.0547 c +372.8599 368.9941 372.9067 368.8672 372.8677 368.752 c +368.4341 355.8164 370.9126 343.6074 377.688 343.6074 c +381.0024 343.6074 382.6899 345.9863 382.6899 348.5234 c +382.6899 351.1309 380.7915 353.2852 377.7212 353.6777 c +377.6001 353.6934 377.5063 353.793 377.4985 353.9141 c +377.4927 354.0352 377.5708 354.1465 377.6899 354.1758 c +384.5044 355.9395 391.5142 352.2285 391.5142 345.1328 c +391.5142 338.8555 386.1372 334.002 379.1021 334.002 c +368.4653 334.002 363.3774 345.2715 365.6431 355.5371 C +360.1841 348.4922 352.0903 342.7012 340.4653 342.7012 c +316.9224 342.7012 305.0239 369.5703 305.0239 387.6113 c +305.0239 403.9883 308.3501 414.4785 315.2603 422.5391 C +307.1978 416.3984 303.8716 409.6172 302.3384 400.2773 C +296.1958 391.832 280.2036 391.832 v +273.5161 391.832 267.2739 394.3086 262.4302 398.998 C +262.4282 398.9961 262.4263 398.9941 262.4243 398.9902 C +262.3892 399.0313 262.3501 399.0703 262.3149 399.1094 C +261.9946 399.4238 261.6802 399.748 261.3716 400.082 C +256.3091 404.9316 246.1802 409.4785 236.9399 405.6797 c +236.8345 405.6367 236.7134 405.6699 236.6431 405.7578 c +236.5728 405.8477 236.5708 405.9727 236.6382 406.0645 c +241.0454 412.0898 248.6626 414.0059 254.3169 413.1309 C +253.272 416.8457 252.6938 421.0117 252.6938 425.6094 c +252.6938 442.0137 261.4927 453.5801 271.106 459.2109 C +267.9517 463.0137 268.5962 468.9883 272.1372 473.0449 c +272.2173 473.1357 272.3481 473.1582 272.4536 473.0996 c +272.5571 473.041 272.606 472.918 272.5708 472.8018 c +270.8403 467.2695 275.9634 462.6523 282.7524 462.9004 c +282.8755 462.9033 282.9829 462.8193 283.0103 462.6992 c +283.0356 462.5801 282.9712 462.457 282.8579 462.4111 c +272.7212 458.248 266.0005 449.4316 266.0005 438.4033 c +266.0005 426.8906 272.9087 417.5488 284.0415 417.5488 c +293.1255 417.5488 302.2095 425.8672 302.2095 436.2285 c +302.2095 444.2891 297.731 449.0225 291.9731 449.0225 c +286.9849 449.0225 283.0181 445.5684 283.0181 441.4736 c +283.0181 435.6211 289.6001 433.499 293.1118 438.1309 c +293.1821 438.2227 293.3032 438.2559 293.4087 438.2129 c +293.5161 438.1699 293.5806 438.0625 293.5669 437.9482 c +293.0435 433.5586 289.8149 429.4482 284.8091 429.4482 c +280.2036 429.4482 275.4692 433.2861 275.4692 441.4746 c +275.4692 451.1982 284.8071 461.0508 300.1606 461.0508 c +321.1431 461.0508 332.5317 437.3809 322.2974 418.4453 C +327.5415 424.459 332.2759 430.8555 332.2759 442.2432 c +332.2759 463.75 311.0122 478.291 285.9224 469.7441 c +285.8032 469.7021 285.6724 469.7559 285.6157 469.8672 c +285.5571 469.9785 285.5884 470.1143 285.6899 470.1895 c +292.6958 475.2979 300.0337 482.8262 300.0337 495.4668 c +300.0337 508.6475 291.3345 517.9854 277.772 517.9854 c +267.2798 517.9854 260.6274 511.5879 260.6274 504.04 c +260.6274 498.2822 264.3462 493.6768 270.7349 493.6768 c +280.2466 493.6768 283.481 504.0195 278.5591 508.6445 c +278.4751 508.7236 278.4556 508.8516 278.5103 508.9521 c +278.5669 509.0547 278.6841 509.1055 278.7974 509.0762 c +283.5669 507.8398 288.1353 503.0068 288.1353 495.7236 c +288.1353 483.1855 276.4927 474.8682 263.6978 474.8682 c +257.7017 474.8682 251.8989 476.623 247.2271 479.9102 C +247.7778 484.0635 246.3579 488.6602 244.2603 491.752 C +246.2095 484.8848 244.1021 473.5732 233.5864 473.5732 c +227.6958 473.5732 223.8013 478.1025 223.8013 483.4551 c +223.8013 489.7793 229.147 492.7314 233.4966 492.125 c +233.6118 492.1104 233.7007 492.0186 233.7134 491.9023 c +233.7271 491.7891 233.6606 491.6797 233.5532 491.6367 c +231.9673 491.0293 230.6108 489.3691 230.6108 487.373 c +230.6108 484.873 232.52 483.3906 234.52 483.3906 c +237.8149 483.3906 239.645 487.0605 238.4927 491.1104 C +238.5044 491.1104 L +237.4312 493.9473 236.8286 497.1152 236.8286 500.6055 c +236.8286 517.3672 255.0103 533.3398 277.9497 533.3398 c +302.1626 533.3398 315.0044 516.0664 315.0044 498.2822 c +315.0044 488.7461 311.4224 481.5225 306.8149 476.915 C +326.7368 479.0332 339.313 470.5176 346.0942 458.2354 C +341.6157 454.3975 339.9536 448.7676 Y +345.3267 455.8057 354.5376 461.9453 367.4595 461.9453 c +387.0356 461.9453 402.3911 442.7539 402.3911 422.1563 c +402.3911 409.084 397.5884 396.375 387.8267 387.9102 C +393.8638 382.8809 396.4731 375.5391 393.6978 369.6055 c +f +*U +*u +315.2114 494.9053 m +315.1782 494.7852 315.2388 494.6582 315.3521 494.6094 c +330.1763 488.0957 340.6372 475.6289 345.0063 461.2324 c +345.0415 461.1152 345.1548 461.0391 345.2778 461.0527 c +345.3989 461.0664 345.4946 461.166 345.5024 461.2871 c +346.229 471.9434 343.1274 482.4531 337.0005 491.0234 C +351.1216 491.9648 362.2407 499.9297 369.1997 511.5723 C +373.3286 505.46 381.6509 505.7969 384.8599 512.6035 c +384.9106 512.708 384.8833 512.832 384.7954 512.9063 c +384.7075 512.9805 384.5806 512.9873 384.4868 512.9219 c +380.2134 509.9688 372.8071 513.498 375.9282 524.9355 c +377.981 532.4561 382.3716 536.4668 386.5259 535.333 c +389.7915 534.4414 390.7661 531.002 390.0864 528.5146 c +388.9243 524.2539 384.438 522.8623 381.481 525.6357 c +381.397 525.7158 381.2681 525.7285 381.1704 525.6641 c +381.0728 525.5986 381.0298 525.4775 381.0688 525.3662 c +381.9868 522.7852 383.5571 520.7285 386.6157 519.8936 c +391.811 518.4756 398.6743 521.8115 400.8618 529.8252 c +403.2114 538.4316 398.7153 548.0566 390.604 550.2715 c +379.2036 553.3818 371.1392 545.166 367.3931 535.2383 C +366.9263 539.8896 363.1079 544.3203 v +363.0317 544.4092 362.9048 544.4336 362.8013 544.3818 c +362.6978 544.3291 362.6431 544.2129 362.6665 544.0996 c +364.106 537.6641 363.9575 530.8047 362.1099 524.0361 c +356.9438 505.1074 336.6626 493.0977 315.479 495.0938 c +315.354 495.1055 315.2407 495.0254 315.2114 494.9053 c +f +345.5806 407.1348 m +351.7739 400.666 364.0493 395.6133 374.6646 397.168 c +374.7856 397.1855 374.9009 397.1172 374.9399 397.0039 c +374.981 396.8906 374.936 396.7637 374.8345 396.7012 c +369.1743 393.2617 357.8384 392.0723 346.5786 397.4609 C +343.4536 395.1035 340.6489 393.8496 337.1919 393.2715 c +337.0806 393.2539 336.9692 393.3125 336.9204 393.4141 c +336.8735 393.5156 336.8989 393.6387 336.9849 393.7148 c +341.5454 397.6484 343.8286 401.6563 345.5806 407.1348 C +f +232.7935 448.9121 m +232.6753 448.8711 232.5444 448.9258 232.4878 449.0371 c +232.4312 449.1484 232.4644 449.2852 232.5679 449.3594 c +239.6938 454.4785 245.4829 462.291 248.4204 473.0566 c +255.6802 499.6563 244.3267 520.7921 228.2534 528.0146 c +228.1499 528.0605 228.0903 528.1689 228.105 528.2803 c +228.1216 528.3926 228.2085 528.4814 228.3198 528.4971 c +235.0747 529.4785 244.2622 528.6729 253.7915 517.3486 c +259.4927 510.5732 262.7271 503.373 269.0142 501.6563 c +273.1216 500.5352 276.5103 501.9551 277.4126 505.2617 c +278.3618 508.7393 275.9966 511.8018 272.6528 512.7148 c +270.9653 513.1738 269.1626 513.1436 267.4146 512.6836 c +267.2993 512.6533 267.1821 512.7051 267.1255 512.8086 c +267.0708 512.9121 267.0923 513.04 267.1802 513.1172 c +269.8325 515.4746 273.8677 517.125 278.5708 515.8408 c +285.4907 513.9531 289.6606 506.457 287.4673 498.415 c +285.104 489.7578 276.3696 484.5234 266.5864 487.1934 c +263.2329 488.1084 259.4497 490.168 256.7603 493.4648 C +258.5942 489.4551 260.0493 487.1855 263.8286 484.6133 C +262.8364 474.1035 258.3091 463.8271 250.4009 456.8389 C +256.2192 454.9863 260.604 451.7207 263.5083 446.6855 c +263.5669 446.582 263.5454 446.4531 263.4595 446.373 c +263.3696 446.293 263.2388 446.2832 263.1411 446.3535 c +256.1802 451.2344 243.9048 452.582 232.7935 448.9121 c +f +216.1919 362.8809 m +212.1538 366.3105 210.936 372.0469 212.4106 377.8672 c +212.4419 377.9883 212.5542 378.0684 212.6772 378.0566 c +212.8022 378.0469 212.8989 377.9492 212.9097 377.8281 c +213.0981 375.6543 213.9448 373.748 215.4917 372.4355 c +219.4712 369.0566 226.5562 370.834 231.4634 376.3828 c +231.522 376.4492 231.6079 376.4805 231.6929 376.4668 c +231.7788 376.4531 231.8511 376.3984 231.8862 376.3203 c +234.1519 371.2539 239.1079 364.5938 252.0005 361.0742 c +270.0239 356.1563 290.3794 363.1992 294.6235 378.752 c +297.0493 387.6406 292.8306 396.4824 284.5845 402.7109 C +289.0298 397.123 291.7075 390.4238 289.6177 382.7695 c +286.5532 371.5391 272.1567 365.918 254.8755 370.6348 c +238.5825 375.0801 222.7065 391.748 226.8833 407.0547 c +229.1743 415.4492 237.6821 419.8887 246.4458 417.4961 c +254.2231 415.375 257.2837 409.1016 255.7329 403.4219 c +254.5669 399.1445 250.7407 397.0195 247.2153 396.9941 c +247.0962 396.9941 246.9927 397.0762 246.9653 397.1934 c +246.9419 397.3105 246.9985 397.4277 247.1079 397.4785 c +248.1704 397.9688 249.188 398.877 249.6509 400.5742 c +250.4263 403.4121 248.3911 405.5605 246.6353 406.0391 c +243.3022 406.9492 240.2827 405.1211 239.271 401.416 c +237.8911 396.3574 242.3667 390.8906 249.5239 388.9355 c +258.4126 386.5117 268.8833 392.8066 271.2075 401.3223 c +273.5825 410.0254 268.3501 421.4648 253.9087 425.4063 c +239.7153 429.2813 220.7925 424.0996 216.6157 408.793 c +214.1802 399.8691 216.1333 391.1875 221.2075 383.5508 c +221.2739 383.4512 221.2612 383.3164 221.1753 383.2305 c +221.0884 383.1445 220.9536 383.1328 220.853 383.2012 c +209.5415 390.8828 197.1108 391.707 195.3267 385.1699 c +194.4536 381.9727 196.3042 379.7188 198.7524 379.0508 c +201.2681 378.3652 203.8462 379.6289 205.0327 382.4883 c +205.0796 382.5996 205.2007 382.6641 205.3198 382.6406 c +205.438 382.6133 205.5249 382.5098 205.522 382.3867 c +205.4292 375.3477 200.0034 369.5625 193.1577 371.4316 c +187.1021 373.084 183.8354 379.5488 185.688 386.3359 c +188.4888 396.5977 200.6997 398.5391 210.0063 393.6504 C +204.647 400.7715 201.1919 410.1035 204.2524 421.3184 c +210.4507 444.0313 239.5044 448.4355 256.9087 443.6855 c +272.7075 439.373 281.9517 433.4023 287.9087 424.6152 C +284.1079 434.0098 278.4419 439.0039 269.8345 442.9434 C +263.3052 451.0918 267.5161 466.5195 v +269.2759 472.9707 273.3091 478.3418 279.1079 481.7793 C +279.1079 481.7813 279.106 481.7842 279.1021 481.7871 C +279.1509 481.8105 279.1997 481.8379 279.2466 481.8613 C +279.6333 482.0879 280.0298 482.3057 280.4321 482.5146 C +286.4438 486.1211 293.4966 494.6973 292.2661 504.6113 c +292.2524 504.7236 292.3149 504.832 292.4185 504.877 c +292.5239 504.9219 292.645 504.8896 292.7153 504.8018 c +297.3677 498.9629 297.2114 491.1104 294.8794 485.8857 C +298.7368 485.915 302.9087 485.375 307.3442 484.165 c +323.1685 479.8457 332.0122 468.3135 334.9126 457.5566 C +339.4106 459.5977 345.0063 457.4043 347.9888 452.9199 c +348.0532 452.8184 348.0415 452.6855 347.9575 452.5996 c +347.8735 452.5156 347.7407 452.5 347.6392 452.5645 c +342.7583 455.6914 336.9556 451.9648 335.4048 445.3496 c +335.3774 445.2305 335.2681 445.1484 335.145 445.1543 c +335.022 445.1602 334.9204 445.2539 334.9067 445.377 c +333.5591 456.251 326.8228 465.0566 316.1841 467.96 c +305.0767 470.9922 294.2446 466.7852 291.3149 456.0469 c +288.9224 447.2832 294.5571 436.3301 304.5513 433.6016 c +312.3286 431.4785 318.0747 434.5527 319.5903 440.1074 c +320.9048 444.9199 318.6157 449.6563 314.6665 450.7344 c +309.0181 452.2754 305.2388 446.4844 308.7837 441.877 c +308.8521 441.7852 308.854 441.6602 308.7837 441.5684 c +308.7153 441.4766 308.5923 441.4434 308.4868 441.4863 c +304.3892 443.1465 301.2739 447.3418 302.5923 452.1729 c +303.8052 456.6152 308.7544 460.1729 316.6548 458.0166 c +326.0356 455.457 333.0806 443.8555 329.0376 429.043 c +323.5142 408.7988 297.6802 404.0449 282.1079 418.9043 C +286.5278 412.2617 291.4517 406.0098 302.438 403.0117 c +323.188 397.3496 342.813 414.0332 341.1724 440.4902 c +341.1646 440.6152 341.2505 440.7285 341.3735 440.7539 c +341.4946 440.7813 341.6196 440.7129 341.6646 440.5977 c +344.7466 432.4922 350.0786 423.4316 362.2739 420.1035 c +374.9888 416.6328 386.2876 422.5664 389.8599 435.6504 c +392.6216 445.7734 388.2017 453.875 380.9204 455.8623 c +375.3657 457.3789 369.9419 455.0039 368.2603 448.8398 c +365.7563 439.6641 374.8833 433.8203 380.6411 437.3516 c +380.7388 437.4121 380.8677 437.3965 380.9497 437.3164 c +381.0337 437.2363 381.0513 437.1094 380.9927 437.0078 c +378.5454 432.7324 372.6802 429.5977 365.6548 431.5156 c +353.5571 434.8164 348.6001 448.2383 351.9673 460.5811 c +353.5454 466.3652 356.7681 471.502 361.1685 475.1426 C +365.0298 473.5186 369.8384 473.6777 373.3735 474.8867 C +366.2349 474.8154 355.8794 479.8262 358.647 489.9707 c +360.1978 495.6533 365.5923 498.2188 370.7563 496.8086 c +376.8579 495.1436 378.2974 489.21 376.5688 485.1729 c +376.522 485.0654 376.4106 485.0039 376.2974 485.0225 c +376.1821 485.04 376.0942 485.1318 376.0825 485.2471 c +375.9146 486.9375 374.6685 488.6836 372.7446 489.208 c +370.3325 489.8662 368.3989 488.415 367.8735 486.4854 c +367.0044 483.3066 370.063 480.5752 374.2739 480.6211 C +374.27 480.6094 L +377.2896 480.8984 380.5044 480.6445 383.8716 479.7266 c +400.0415 475.3125 410.6646 453.5674 404.6235 431.4375 c +398.2485 408.0781 378.2056 400.2363 361.0474 404.9199 c +351.8481 407.4297 345.8228 412.7871 342.5903 418.4453 C +339.3892 398.668 327.8618 388.7793 314.229 385.4707 C +311.7056 390.8008 306.7114 393.8867 Y +312.0864 386.8496 315.5845 376.3477 312.1821 363.8809 c +307.0278 344.9961 284.4712 335.2344 264.6001 340.6582 c +251.9888 344.0996 240.9927 352.0801 235.397 363.7266 C +228.9556 359.2266 221.186 358.6406 216.1919 362.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +363.1294 436.9688 m +363.0044 436.9688 362.8989 436.877 362.8794 436.7539 c +360.5005 420.7402 351.2271 407.3652 338.4888 399.3594 c +338.3853 399.2949 338.3403 399.1641 338.3872 399.0508 c +338.4321 398.9375 338.5532 398.8711 338.6724 398.8965 c +349.145 401 358.4653 406.7598 365.1216 414.9277 C +369.7466 401.5508 380.3579 392.9219 393.4224 389.2734 C +388.6138 383.6816 391.1294 375.7402 398.5415 374.4375 c +398.6548 374.416 398.7661 374.4746 398.8149 374.5781 c +398.8638 374.6816 398.8364 374.8066 398.7485 374.8809 c +394.7759 378.2266 396.229 386.3008 408.0864 386.3008 c +415.8794 386.3008 420.9067 383.1211 420.9067 378.8145 c +420.9067 375.4297 417.8442 373.584 415.2642 373.584 c +410.8501 373.584 408.3267 377.5449 410.2231 381.127 c +410.2778 381.2305 410.2563 381.3574 410.1685 381.4355 c +410.0806 381.5137 409.9517 381.5215 409.854 381.4551 c +407.606 379.8906 406.0356 377.834 406.0356 374.6641 c +406.0356 369.2773 411.061 363.5352 419.3677 363.5332 c +428.2896 363.5332 436.3911 370.4043 436.3911 378.8145 c +436.3911 390.6309 426.3423 396.248 415.7778 397.248 C +420.1431 398.9219 423.4106 403.7734 v +423.4771 403.8691 423.4673 403.998 423.3892 404.084 c +423.311 404.1719 423.1841 404.1934 423.0825 404.1387 c +417.2524 401.0566 410.5942 399.3945 403.5806 399.3945 c +383.9575 399.3945 367.0337 415.7988 363.3813 436.7607 c +363.3599 436.8818 363.2524 436.9727 363.1294 436.9688 c +f +286.4517 384.5625 m +281.8442 376.8867 280.1997 363.7129 284.4946 353.8809 c +284.5435 353.7695 284.5083 353.6406 284.4087 353.5703 c +284.3091 353.502 284.1763 353.5117 284.0884 353.5957 c +279.2817 358.1484 275.1489 368.7715 277.3833 381.0527 C +274.2876 383.4473 272.3384 385.8223 270.8696 389.0059 c +270.8228 389.1074 270.8501 389.2305 270.936 389.3047 c +271.022 389.377 271.147 389.3848 271.2427 389.3203 c +276.2388 385.959 280.7056 384.8125 286.4517 384.5625 C +f +297.0591 504.3691 m +296.9907 504.4727 297.0083 504.6133 297.1001 504.6973 c +297.1938 504.7813 297.3345 504.7852 297.4321 504.7061 c +304.2466 499.1797 313.3071 495.6504 324.4673 495.6504 c +352.0376 495.6504 369.4399 512.1689 372.1743 529.5771 c +372.1919 529.6885 372.2817 529.7734 372.3931 529.7891 c +372.5044 529.8047 372.6138 529.7422 372.6587 529.6396 c +375.3833 523.3818 377.0259 514.3057 368.6099 502.1309 c +363.5747 494.8457 357.479 489.8311 357.479 483.3145 c +357.479 479.0566 359.7407 476.1602 363.1685 476.1602 c +366.7739 476.1602 369.106 479.248 369.104 482.7148 c +369.104 484.4629 368.6001 486.1934 367.6958 487.7607 c +367.6372 487.8633 367.6548 487.9902 367.7407 488.0723 c +367.8247 488.1523 367.9556 488.165 368.0532 488.1016 c +371.0259 486.1641 373.6802 482.7021 373.6802 477.8281 c +373.6802 470.6563 367.5474 464.6602 359.2095 464.6602 c +350.2368 464.6602 342.8872 471.709 342.8872 481.8477 c +342.8872 485.3262 343.8755 489.5156 346.3501 492.9805 C +342.9653 490.1523 341.1587 488.1523 339.6724 483.8271 C +329.272 482.0186 318.1665 483.6797 309.3403 489.4727 C +309.0864 483.3711 307.0903 478.2793 302.9985 474.1533 c +302.9146 474.0684 302.7837 474.0547 302.6841 474.1182 c +302.5825 474.1816 302.5415 474.3066 302.5806 474.4189 c +305.4575 482.4199 303.5239 494.6152 297.0591 504.3691 c +f +209.6938 497.7344 m +211.938 502.5352 217.1528 505.2188 223.1548 505.3271 c +223.2798 505.3311 223.3872 505.2432 223.4087 505.1211 c +223.4321 504.998 223.3638 504.8779 223.2485 504.8359 c +221.2017 504.082 219.5864 502.7637 218.7271 500.9258 c +216.5142 496.1973 220.0942 489.8301 226.7407 486.5566 c +226.8188 486.5186 226.8716 486.4434 226.8813 486.3594 c +226.8911 486.2725 226.856 486.1885 226.7915 486.1318 c +222.5005 482.6143 217.3794 476.0781 217.3794 462.7148 c +217.3774 444.0322 229.5337 426.25 245.6548 426.25 c +254.8677 426.25 262.2876 432.6465 266.1255 442.2422 C +261.9028 436.4844 256.145 432.1348 248.2114 432.1348 c +236.5708 432.1348 227.3579 444.5439 227.356 462.459 c +227.356 479.3457 239.2583 499.0518 255.1216 499.0508 c +263.8247 499.0488 270.3481 492.0117 270.3481 482.9277 c +270.3481 474.8672 265.1021 470.2637 259.2173 470.2637 c +254.7798 470.2637 251.7231 473.3936 250.772 476.7871 c +250.7388 476.9023 250.7915 477.0254 250.897 477.0811 c +251.0044 477.1357 251.1333 477.1104 251.2114 477.0186 c +251.9634 476.124 253.1079 475.3809 254.8657 475.3809 c +257.8091 475.3789 259.3442 477.9082 259.3442 479.7285 c +259.3442 483.1836 256.7856 485.6152 252.9458 485.6152 c +247.7036 485.6152 243.606 479.8564 243.606 472.4385 c +243.606 463.2236 252.436 454.7813 261.2642 454.7813 c +270.2856 454.7813 279.9438 462.8408 279.9438 477.8125 c +279.9419 492.5234 269.9653 509.4141 254.0981 509.4141 c +244.8481 509.4141 236.9849 505.2441 230.9556 498.3398 c +230.8755 498.248 230.7427 498.2246 230.6392 498.2852 c +230.5317 498.3477 230.4849 498.4727 230.5239 498.5879 c +234.9575 511.5234 232.4771 523.7344 225.7036 523.7324 c +222.3892 523.7324 220.7017 521.3535 220.7017 518.8154 c +220.7017 516.21 222.6001 514.0566 225.6704 513.6611 c +225.7915 513.6475 225.8833 513.5479 225.8931 513.4268 c +225.8989 513.3047 225.8188 513.1943 225.7017 513.1641 c +218.8872 511.4004 211.8774 515.1133 211.8774 522.2061 c +211.8774 528.4854 217.2544 533.3398 224.2896 533.3398 c +234.9263 533.3379 240.0142 522.0684 237.7485 511.8047 C +243.2075 518.8486 251.3013 524.6396 262.9263 524.6396 c +286.4692 524.6396 298.3677 497.7715 298.3677 479.7285 c +298.3677 463.3525 295.0415 452.8604 288.1313 444.8018 C +296.1938 450.9404 299.52 457.7227 301.0552 467.0645 C +307.1958 475.5078 323.188 475.5078 v +329.8755 475.5078 336.1177 473.0322 340.9614 468.3438 C +340.9634 468.3447 340.9653 468.3477 340.9673 468.3486 C +341.0024 468.3105 341.0396 468.2695 341.0767 468.2314 C +341.397 467.915 341.7114 467.5918 342.02 467.2578 C +347.0806 462.4102 357.2114 457.8633 366.4517 461.6602 c +366.5571 461.7031 366.6782 461.6699 366.7485 461.582 c +366.8188 461.4932 366.8188 461.3672 366.7524 461.2754 c +362.3462 455.252 354.729 453.335 349.0747 454.21 C +350.1177 450.4941 350.6958 446.3281 350.6958 441.7305 c +350.6978 425.3262 341.8989 413.7598 332.2856 408.1289 C +335.438 404.3281 334.7954 398.3535 331.2544 394.2949 c +331.1743 394.2051 331.0435 394.1816 330.938 394.2402 c +330.8345 394.2988 330.7837 394.4238 330.8188 394.5391 c +332.5513 400.0703 327.4282 404.6875 320.6392 404.4395 c +320.5161 404.4355 320.4067 404.5195 320.3813 404.6406 c +320.356 404.7617 320.4185 404.8828 320.5337 404.9277 c +330.6685 409.0918 337.3911 417.9102 337.3892 428.9355 c +337.3911 440.4492 330.481 449.79 319.3501 449.79 c +310.2661 449.79 301.1821 441.4727 301.1821 431.1133 c +301.1821 423.0508 305.6587 418.3184 311.4165 418.3164 c +316.4067 418.3184 320.3735 421.7715 320.3735 425.8672 c +320.3735 431.7188 313.7896 433.8408 310.2778 429.209 c +310.2095 429.1172 310.0864 429.084 309.981 429.127 c +309.8755 429.1689 309.811 429.2773 309.8228 429.3926 c +310.3462 433.7813 313.5767 437.8926 318.5825 437.8926 c +323.188 437.8926 327.9224 434.0518 327.9224 425.8652 c +327.9224 416.1406 318.5845 406.291 303.231 406.2891 c +282.2466 406.2891 270.8599 429.959 281.0942 448.8945 C +275.8501 442.8809 271.1157 436.4844 271.1157 425.0977 c +271.1138 403.5898 292.3794 389.0488 317.4692 397.5977 c +317.5884 397.6367 317.7192 397.584 317.7759 397.4746 c +317.8345 397.3633 317.8013 397.2266 317.6997 397.1523 c +310.6938 392.043 303.356 384.5137 303.356 371.873 c +303.356 358.6934 312.0552 349.3535 325.6196 349.3535 c +336.1099 349.3535 342.7642 355.752 342.7642 363.2988 c +342.7642 369.0566 339.0454 373.6641 332.6567 373.6641 c +323.1431 373.6641 319.9087 363.3203 324.8325 358.6953 c +324.9165 358.6152 324.936 358.4902 324.8813 358.3887 c +324.8247 358.2871 324.7056 358.2344 324.5942 358.2637 c +319.8247 359.5 315.2563 364.332 315.2563 371.6152 c +315.2544 384.1563 326.897 392.4727 339.6919 392.4727 c +345.688 392.4727 351.4907 390.7188 356.1646 387.4297 C +355.6118 383.2773 357.0317 378.6816 359.1313 375.5879 C +357.1821 382.457 359.2915 393.7656 369.8032 393.7676 c +375.6958 393.7656 379.5903 389.2383 379.5903 383.8867 c +379.5903 377.5605 374.2446 374.6094 369.895 375.2148 c +369.7798 375.2305 369.6899 375.3223 369.6763 375.4375 c +369.6646 375.5527 369.731 375.6602 369.8384 375.7031 c +371.4243 376.3105 372.7817 377.9727 372.7817 379.9668 c +372.7817 382.4668 370.8696 383.9492 368.8696 383.9492 c +365.5767 383.9492 363.7466 380.2793 364.8989 376.2305 C +364.8872 376.2285 L +365.9595 373.3926 366.561 370.2246 366.561 366.7363 c +366.561 349.9746 348.3813 334.002 325.4399 334 c +301.229 334 288.3872 351.2734 288.3892 369.0566 c +288.3892 378.5938 291.9692 385.8184 296.5767 390.4258 C +276.6548 388.3066 264.0786 396.8223 257.2974 409.1035 C +261.7759 412.9414 263.438 418.5723 Y +258.0649 411.5352 248.854 405.3945 235.9321 405.3945 c +216.356 405.3945 201.0005 424.5859 201.0005 445.1836 c +201.0005 458.2568 205.8032 470.9648 215.5649 479.4307 C +209.5278 484.459 206.9185 491.8018 209.6938 497.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +73.2617 430.3711 m +73.3867 430.3711 73.4922 430.4629 73.5098 430.585 c +75.8906 446.5996 85.1641 459.9746 97.9023 467.9814 c +98.0059 468.0449 98.0488 468.1758 98.0039 468.29 c +97.957 468.4023 97.8379 468.4688 97.7168 468.4443 c +87.2461 466.3398 77.9238 460.5811 71.2695 452.4141 C +66.6436 465.7891 56.0332 474.418 42.9688 478.0654 C +47.7773 483.6582 45.2617 491.5986 37.8496 492.9023 c +37.7363 492.9229 37.624 492.8643 37.5752 492.7607 c +37.5273 492.6563 37.5537 492.5322 37.6416 492.46 c +41.6152 489.1143 40.1611 481.04 28.3047 481.04 c +20.5098 481.04 15.4844 484.2188 15.4844 488.5254 c +15.4844 491.9102 18.5459 493.7559 21.125 493.7559 c +25.541 493.7559 28.0645 489.7949 26.167 486.2129 c +26.1123 486.1104 26.1348 485.9814 26.2227 485.9033 c +26.3105 485.8271 26.4395 485.8184 26.5361 485.8857 c +28.7852 487.4492 30.3555 489.5059 30.3555 492.6768 c +30.3555 498.0635 25.3301 503.8066 17.0234 503.8066 c +8.10156 503.8066 0 496.9355 0 488.5254 c +0 476.71 10.0488 471.0918 20.6133 470.0918 C +16.248 468.4189 12.9795 463.5664 v +12.9141 463.4697 12.9238 463.3418 13.001 463.2559 c +13.0791 463.1689 13.2051 463.1475 13.3086 463.2012 c +19.1387 466.2822 25.7949 467.9453 32.8105 467.9453 c +52.4316 467.9453 69.3574 451.541 73.0098 430.5801 c +73.0313 430.4561 73.1377 430.3691 73.2617 430.3711 c +f +149.9395 482.7773 m +154.5488 490.4551 156.1914 503.627 151.8965 513.46 c +151.8477 513.5703 151.8828 513.6992 151.9824 513.7686 c +152.0801 513.8379 152.2148 513.8281 152.3027 513.7461 c +157.1094 509.1914 161.2422 498.5684 159.0078 486.2871 C +162.1055 483.8936 164.0527 481.5176 165.5215 478.335 c +165.5684 478.2314 165.541 478.1104 165.4551 478.0352 c +165.3691 477.9629 165.2441 477.9551 165.1484 478.0186 c +160.1523 481.3809 155.6855 482.5283 149.9395 482.7773 C +f +139.3301 362.9707 m +139.4004 362.8672 139.3828 362.7266 139.291 362.6426 c +139.1973 362.5586 139.0566 362.5547 138.959 362.6348 c +132.1445 368.1621 123.084 371.6895 111.9238 371.6895 c +84.3516 371.6895 66.9512 355.1719 64.2158 337.7637 c +64.1982 337.6523 64.1094 337.5664 63.998 337.5508 c +63.8857 337.5371 63.7773 337.5977 63.7324 337.7012 c +61.0068 343.959 59.3652 353.0352 67.7813 365.209 c +72.8154 372.4941 78.9102 377.5098 78.9102 384.0273 c +78.9102 388.2852 76.6504 391.1797 73.2227 391.1797 c +69.6172 391.1797 67.2861 388.0918 67.2861 384.625 c +67.2861 382.877 67.791 381.1465 68.6953 379.5801 c +68.7539 379.4766 68.7354 379.3496 68.6504 379.2676 c +68.5645 379.1875 68.4355 379.1758 68.3379 379.2402 c +65.3652 381.1777 62.7109 384.6367 62.7109 389.5117 c +62.7109 396.6836 68.8438 402.6816 77.1797 402.6816 c +86.1543 402.6816 93.5039 395.6328 93.5039 385.4922 c +93.5039 382.0156 92.5137 377.8242 90.041 374.3613 C +93.4258 377.1875 95.2324 379.1875 96.7188 383.5117 C +107.1191 385.3223 118.2246 383.6602 127.0488 377.8691 C +127.3047 383.9707 129.3008 389.0605 133.3926 393.1875 c +133.4766 393.2715 133.6074 393.2852 133.707 393.2227 c +133.8086 393.1582 133.8516 393.0332 133.8105 392.9219 c +130.9336 384.9199 132.8652 372.7246 139.3301 362.9707 c +f +226.6973 369.6055 m +224.4512 364.8066 219.2383 362.1211 213.2363 362.0117 c +213.1113 362.0098 213.0039 362.0977 212.9824 362.2188 c +212.959 362.3418 213.0273 362.4609 213.1426 362.5039 c +215.1895 363.2578 216.8047 364.5762 217.6641 366.4141 c +219.877 371.1426 216.2969 377.5098 209.6504 380.7832 c +209.5723 380.8223 209.5195 380.8965 209.5098 380.9824 c +209.5 381.0684 209.5332 381.1523 209.5996 381.207 c +213.8906 384.7266 219.0117 391.2617 219.0117 404.627 c +219.0117 423.3086 206.8574 441.0898 190.7363 441.0898 c +181.5234 441.0898 174.1035 434.6934 170.2656 425.0977 C +174.4863 430.8564 180.2441 435.2051 188.1777 435.2051 c +199.8203 435.2051 209.0332 422.7969 209.0332 404.8828 c +209.0332 387.9941 197.1328 368.2891 181.2676 368.2891 c +172.5664 368.2891 166.043 375.3281 166.043 384.4121 c +166.043 392.4746 171.2891 397.0781 177.1758 397.0781 c +181.6094 397.0781 184.668 393.9473 185.6191 390.5527 c +185.6504 390.4375 185.5996 390.3164 185.4922 390.2598 c +185.3867 390.2051 185.2578 390.2305 185.1797 390.3223 c +184.4277 391.2168 183.2832 391.9609 181.5254 391.9609 c +178.582 391.9609 177.0469 389.4316 177.0469 387.6113 c +177.0469 384.1563 179.6055 381.7246 183.4453 381.7246 c +188.6895 381.7246 192.7852 387.4824 192.7852 394.9023 c +192.7852 404.1152 183.9551 412.5586 175.127 412.5586 c +166.1055 412.5586 156.4473 404.5 156.4473 389.5293 c +156.4473 374.8164 166.4277 357.9258 182.293 357.9258 c +191.543 357.9258 199.4043 362.0957 205.4355 369.002 c +205.5156 369.0918 205.6484 369.1152 205.7539 369.0547 c +205.8594 368.9941 205.9063 368.8672 205.8672 368.752 c +201.4336 355.8164 203.9121 343.6074 210.6875 343.6074 c +214.002 343.6074 215.6895 345.9863 215.6895 348.5234 c +215.6895 351.1309 213.791 353.2852 210.7207 353.6777 c +210.5996 353.6934 210.5059 353.793 210.498 353.9141 c +210.4922 354.0352 210.5703 354.1465 210.6895 354.1758 c +217.5039 355.9395 224.5137 352.2285 224.5137 345.1328 c +224.5137 338.8555 219.1367 334.002 212.1016 334.002 c +201.4648 334.002 196.377 345.2715 198.6426 355.5371 C +193.1836 348.4922 185.0898 342.7012 173.4648 342.7012 c +149.9219 342.7012 138.0234 369.5703 138.0234 387.6113 c +138.0234 403.9883 141.3496 414.4785 148.2598 422.5391 C +140.1973 416.3984 136.8711 409.6172 135.3379 400.2773 C +129.1953 391.832 113.2031 391.832 v +106.5156 391.832 100.2734 394.3086 95.4297 398.998 C +95.4277 398.9961 95.4258 398.9941 95.4238 398.9902 C +95.3887 399.0313 95.3496 399.0703 95.3145 399.1094 C +94.9941 399.4238 94.6797 399.748 94.3711 400.082 C +89.3086 404.9316 79.1797 409.4785 69.9395 405.6797 c +69.834 405.6367 69.7129 405.6699 69.6426 405.7578 c +69.5723 405.8477 69.5703 405.9727 69.6377 406.0645 c +74.0449 412.0898 81.6621 414.0059 87.3164 413.1309 C +86.2715 416.8457 85.6934 421.0117 85.6934 425.6094 c +85.6934 442.0137 94.4922 453.5801 104.1055 459.2109 C +100.9512 463.0137 101.5957 468.9883 105.1367 473.0449 c +105.2168 473.1357 105.3477 473.1582 105.4531 473.0996 c +105.5566 473.041 105.6055 472.918 105.5703 472.8018 c +103.8398 467.2695 108.9629 462.6523 115.752 462.9004 c +115.875 462.9033 115.9824 462.8193 116.0098 462.6992 c +116.0352 462.5801 115.9707 462.457 115.8574 462.4111 c +105.7207 458.248 99 449.4316 99 438.4033 c +99 426.8906 105.9082 417.5488 117.041 417.5488 c +126.125 417.5488 135.209 425.8672 135.209 436.2285 c +135.209 444.2891 130.7305 449.0225 124.9727 449.0225 c +119.9844 449.0225 116.0176 445.5684 116.0176 441.4736 c +116.0176 435.6211 122.5996 433.499 126.1113 438.1309 c +126.1816 438.2227 126.3027 438.2559 126.4082 438.2129 c +126.5156 438.1699 126.5801 438.0625 126.5664 437.9482 c +126.043 433.5586 122.8145 429.4482 117.8086 429.4482 c +113.2031 429.4482 108.4688 433.2861 108.4688 441.4746 c +108.4688 451.1982 117.8066 461.0508 133.1602 461.0508 c +154.1426 461.0508 165.5313 437.3809 155.2969 418.4453 C +160.541 424.459 165.2754 430.8555 165.2754 442.2432 c +165.2754 463.75 144.0117 478.291 118.9219 469.7441 c +118.8027 469.7021 118.6719 469.7559 118.6152 469.8672 c +118.5566 469.9785 118.5879 470.1143 118.6895 470.1895 c +125.6953 475.2979 133.0332 482.8262 133.0332 495.4668 c +133.0332 508.6475 124.334 517.9854 110.7715 517.9854 c +100.2793 517.9854 93.627 511.5879 93.627 504.04 c +93.627 498.2822 97.3457 493.6768 103.7344 493.6768 c +113.2461 493.6768 116.4805 504.0195 111.5586 508.6445 c +111.4746 508.7236 111.4551 508.8516 111.5098 508.9521 c +111.5664 509.0547 111.6836 509.1055 111.7969 509.0762 c +116.5664 507.8398 121.1348 503.0068 121.1348 495.7236 c +121.1348 483.1855 109.4922 474.8682 96.6973 474.8682 c +90.7012 474.8682 84.8984 476.623 80.2266 479.9102 C +80.7773 484.0635 79.3574 488.6602 77.2598 491.752 C +79.209 484.8848 77.1016 473.5732 66.5859 473.5732 c +60.6953 473.5732 56.8008 478.1025 56.8008 483.4551 c +56.8008 489.7793 62.1465 492.7314 66.4961 492.125 c +66.6113 492.1104 66.7002 492.0186 66.7129 491.9023 c +66.7266 491.7891 66.6602 491.6797 66.5527 491.6367 c +64.9668 491.0293 63.6104 489.3691 63.6104 487.373 c +63.6104 484.873 65.5195 483.3906 67.5195 483.3906 c +70.8145 483.3906 72.6445 487.0605 71.4922 491.1104 C +71.5039 491.1104 L +70.4307 493.9473 69.8281 497.1152 69.8281 500.6055 c +69.8281 517.3672 88.0098 533.3398 110.9492 533.3398 c +135.1621 533.3398 148.0039 516.0664 148.0039 498.2822 c +148.0039 488.7461 144.4219 481.5225 139.8145 476.915 C +159.7363 479.0332 172.3125 470.5176 179.0938 458.2354 C +174.6152 454.3975 172.9531 448.7676 Y +178.3262 455.8057 187.5371 461.9453 200.459 461.9453 c +220.0352 461.9453 235.3906 442.7539 235.3906 422.1563 c +235.3906 409.084 230.5879 396.375 220.8262 387.9102 C +226.8633 382.8809 229.4727 375.5391 226.6973 369.6055 c +f +*U +*u +148.2109 494.9053 m +148.1777 494.7852 148.2383 494.6582 148.3516 494.6094 c +163.1758 488.0957 173.6367 475.6289 178.0059 461.2324 c +178.041 461.1152 178.1543 461.0391 178.2773 461.0527 c +178.3984 461.0664 178.4941 461.166 178.502 461.2871 c +179.2285 471.9434 176.127 482.4531 170 491.0234 C +184.1211 491.9648 195.2402 499.9297 202.1992 511.5723 C +206.3281 505.46 214.6504 505.7969 217.8594 512.6035 c +217.9102 512.708 217.8828 512.832 217.7949 512.9063 c +217.707 512.9805 217.5801 512.9873 217.4863 512.9219 c +213.2129 509.9688 205.8066 513.498 208.9277 524.9355 c +210.9805 532.4561 215.3711 536.4668 219.5254 535.333 c +222.791 534.4414 223.7656 531.002 223.0859 528.5146 c +221.9238 524.2539 217.4375 522.8623 214.4805 525.6357 c +214.3965 525.7158 214.2676 525.7285 214.1699 525.6641 c +214.0723 525.5986 214.0293 525.4775 214.0684 525.3662 c +214.9863 522.7852 216.5566 520.7285 219.6152 519.8936 c +224.8105 518.4756 231.6738 521.8115 233.8613 529.8252 c +236.2109 538.4316 231.7148 548.0566 223.6035 550.2715 c +212.2031 553.3818 204.1387 545.166 200.3926 535.2383 C +199.9258 539.8896 196.1074 544.3203 v +196.0313 544.4092 195.9043 544.4336 195.8008 544.3818 c +195.6973 544.3291 195.6426 544.2129 195.666 544.0996 c +197.1055 537.6641 196.957 530.8047 195.1094 524.0361 c +189.9434 505.1074 169.6621 493.0977 148.4785 495.0938 c +148.3535 495.1055 148.2402 495.0254 148.2109 494.9053 c +f +178.5801 407.1348 m +184.7734 400.666 197.0488 395.6133 207.6641 397.168 c +207.7852 397.1855 207.9004 397.1172 207.9395 397.0039 c +207.9805 396.8906 207.9355 396.7637 207.834 396.7012 c +202.1738 393.2617 190.8379 392.0723 179.5781 397.4609 C +176.4531 395.1035 173.6484 393.8496 170.1914 393.2715 c +170.0801 393.2539 169.9688 393.3125 169.9199 393.4141 c +169.873 393.5156 169.8984 393.6387 169.9844 393.7148 c +174.5449 397.6484 176.8281 401.6563 178.5801 407.1348 C +f +65.793 448.9121 m +65.6748 448.8711 65.5439 448.9258 65.4873 449.0371 c +65.4307 449.1484 65.4639 449.2852 65.5674 449.3594 c +72.6934 454.4785 78.4824 462.291 81.4199 473.0566 c +88.6797 499.6563 77.3262 520.7921 61.2529 528.0146 c +61.1494 528.0605 61.0898 528.1689 61.1045 528.2803 c +61.1211 528.3926 61.208 528.4814 61.3193 528.4971 c +68.0742 529.4785 77.2617 528.6729 86.791 517.3486 c +92.4922 510.5732 95.7266 503.373 102.0137 501.6563 c +106.1211 500.5352 109.5098 501.9551 110.4121 505.2617 c +111.3613 508.7393 108.9961 511.8018 105.6523 512.7148 c +103.9648 513.1738 102.1621 513.1436 100.4141 512.6836 c +100.2988 512.6533 100.1816 512.7051 100.125 512.8086 c +100.0703 512.9121 100.0918 513.04 100.1797 513.1172 c +102.832 515.4746 106.8672 517.125 111.5703 515.8408 c +118.4902 513.9531 122.6602 506.457 120.4668 498.415 c +118.1035 489.7578 109.3691 484.5234 99.5859 487.1934 c +96.2324 488.1084 92.4492 490.168 89.7598 493.4648 C +91.5938 489.4551 93.0488 487.1855 96.8281 484.6133 C +95.8359 474.1035 91.3086 463.8271 83.4004 456.8389 C +89.2188 454.9863 93.6035 451.7207 96.5078 446.6855 c +96.5664 446.582 96.5449 446.4531 96.459 446.373 c +96.3691 446.293 96.2383 446.2832 96.1406 446.3535 c +89.1797 451.2344 76.9043 452.582 65.793 448.9121 c +f +49.1914 362.8809 m +45.1533 366.3105 43.9355 372.0469 45.4102 377.8672 c +45.4414 377.9883 45.5537 378.0684 45.6768 378.0566 c +45.8018 378.0469 45.8984 377.9492 45.9092 377.8281 c +46.0977 375.6543 46.9443 373.748 48.4912 372.4355 c +52.4707 369.0566 59.5557 370.834 64.4629 376.3828 c +64.5215 376.4492 64.6074 376.4805 64.6924 376.4668 c +64.7783 376.4531 64.8506 376.3984 64.8857 376.3203 c +67.1514 371.2539 72.1074 364.5938 85 361.0742 c +103.0234 356.1563 123.3789 363.1992 127.623 378.752 c +130.0488 387.6406 125.8301 396.4824 117.584 402.7109 C +122.0293 397.123 124.707 390.4238 122.6172 382.7695 c +119.5527 371.5391 105.1563 365.918 87.875 370.6348 c +71.582 375.0801 55.7061 391.748 59.8828 407.0547 c +62.1738 415.4492 70.6816 419.8887 79.4453 417.4961 c +87.2227 415.375 90.2832 409.1016 88.7324 403.4219 c +87.5664 399.1445 83.7402 397.0195 80.2148 396.9941 c +80.0957 396.9941 79.9922 397.0762 79.9648 397.1934 c +79.9414 397.3105 79.998 397.4277 80.1074 397.4785 c +81.1699 397.9688 82.1875 398.877 82.6504 400.5742 c +83.4258 403.4121 81.3906 405.5605 79.6348 406.0391 c +76.3018 406.9492 73.2822 405.1211 72.2705 401.416 c +70.8906 396.3574 75.3662 390.8906 82.5234 388.9355 c +91.4121 386.5117 101.8828 392.8066 104.207 401.3223 c +106.582 410.0254 101.3496 421.4648 86.9082 425.4063 c +72.7148 429.2813 53.792 424.0996 49.6152 408.793 c +47.1797 399.8691 49.1328 391.1875 54.207 383.5508 c +54.2734 383.4512 54.2607 383.3164 54.1748 383.2305 c +54.0879 383.1445 53.9531 383.1328 53.8525 383.2012 c +42.541 390.8828 30.1104 391.707 28.3262 385.1699 c +27.4531 381.9727 29.3037 379.7188 31.752 379.0508 c +34.2676 378.3652 36.8457 379.6289 38.0322 382.4883 c +38.0791 382.5996 38.2002 382.6641 38.3193 382.6406 c +38.4375 382.6133 38.5244 382.5098 38.5215 382.3867 c +38.4287 375.3477 33.0029 369.5625 26.1572 371.4316 c +20.1016 373.084 16.835 379.5488 18.6875 386.3359 c +21.4883 396.5977 33.6992 398.5391 43.0059 393.6504 C +37.6465 400.7715 34.1914 410.1035 37.252 421.3184 c +43.4502 444.0313 72.5039 448.4355 89.9082 443.6855 c +105.707 439.373 114.9512 433.4023 120.9082 424.6152 C +117.1074 434.0098 111.4414 439.0039 102.834 442.9434 C +96.3047 451.0918 100.5156 466.5195 v +102.2754 472.9707 106.3086 478.3418 112.1074 481.7793 C +112.1074 481.7813 112.1055 481.7842 112.1016 481.7871 C +112.1504 481.8105 112.1992 481.8379 112.2461 481.8613 C +112.6328 482.0879 113.0293 482.3057 113.4316 482.5146 C +119.4434 486.1211 126.4961 494.6973 125.2656 504.6113 c +125.252 504.7236 125.3145 504.832 125.418 504.877 c +125.5234 504.9219 125.6445 504.8896 125.7148 504.8018 c +130.3672 498.9629 130.2109 491.1104 127.8789 485.8857 C +131.7363 485.915 135.9082 485.375 140.3438 484.165 c +156.168 479.8457 165.0117 468.3135 167.9121 457.5566 C +172.4102 459.5977 178.0059 457.4043 180.9883 452.9199 c +181.0527 452.8184 181.041 452.6855 180.957 452.5996 c +180.873 452.5156 180.7402 452.5 180.6387 452.5645 c +175.7578 455.6914 169.9551 451.9648 168.4043 445.3496 c +168.377 445.2305 168.2676 445.1484 168.1445 445.1543 c +168.0215 445.1602 167.9199 445.2539 167.9063 445.377 c +166.5586 456.251 159.8223 465.0566 149.1836 467.96 c +138.0762 470.9922 127.2441 466.7852 124.3145 456.0469 c +121.9219 447.2832 127.5566 436.3301 137.5508 433.6016 c +145.3281 431.4785 151.0742 434.5527 152.5898 440.1074 c +153.9043 444.9199 151.6152 449.6563 147.666 450.7344 c +142.0176 452.2754 138.2383 446.4844 141.7832 441.877 c +141.8516 441.7852 141.8535 441.6602 141.7832 441.5684 c +141.7148 441.4766 141.5918 441.4434 141.4863 441.4863 c +137.3887 443.1465 134.2734 447.3418 135.5918 452.1729 c +136.8047 456.6152 141.7539 460.1729 149.6543 458.0166 c +159.0352 455.457 166.0801 443.8555 162.0371 429.043 c +156.5137 408.7988 130.6797 404.0449 115.1074 418.9043 C +119.5273 412.2617 124.4512 406.0098 135.4375 403.0117 c +156.1875 397.3496 175.8125 414.0332 174.1719 440.4902 c +174.1641 440.6152 174.25 440.7285 174.373 440.7539 c +174.4941 440.7813 174.6191 440.7129 174.6641 440.5977 c +177.7461 432.4922 183.0781 423.4316 195.2734 420.1035 c +207.9883 416.6328 219.2871 422.5664 222.8594 435.6504 c +225.6211 445.7734 221.2012 453.875 213.9199 455.8623 c +208.3652 457.3789 202.9414 455.0039 201.2598 448.8398 c +198.7559 439.6641 207.8828 433.8203 213.6406 437.3516 c +213.7383 437.4121 213.8672 437.3965 213.9492 437.3164 c +214.0332 437.2363 214.0508 437.1094 213.9922 437.0078 c +211.5449 432.7324 205.6797 429.5977 198.6543 431.5156 c +186.5566 434.8164 181.5996 448.2383 184.9668 460.5811 c +186.5449 466.3652 189.7676 471.502 194.168 475.1426 C +198.0293 473.5186 202.8379 473.6777 206.373 474.8867 C +199.2344 474.8154 188.8789 479.8262 191.6465 489.9707 c +193.1973 495.6533 198.5918 498.2188 203.7559 496.8086 c +209.8574 495.1436 211.2969 489.21 209.5684 485.1729 c +209.5215 485.0654 209.4102 485.0039 209.2969 485.0225 c +209.1816 485.04 209.0938 485.1318 209.082 485.2471 c +208.9141 486.9375 207.668 488.6836 205.7441 489.208 c +203.332 489.8662 201.3984 488.415 200.873 486.4854 c +200.0039 483.3066 203.0625 480.5752 207.2734 480.6211 C +207.2695 480.6094 L +210.2891 480.8984 213.5039 480.6445 216.8711 479.7266 c +233.041 475.3125 243.6641 453.5674 237.623 431.4375 c +231.248 408.0781 211.2051 400.2363 194.0469 404.9199 c +184.8477 407.4297 178.8223 412.7871 175.5898 418.4453 C +172.3887 398.668 160.8613 388.7793 147.2285 385.4707 C +144.7051 390.8008 139.7109 393.8867 Y +145.0859 386.8496 148.584 376.3477 145.1816 363.8809 c +140.0273 344.9961 117.4707 335.2344 97.5996 340.6582 c +84.9883 344.0996 73.9922 352.0801 68.3965 363.7266 C +61.9551 359.2266 54.1855 358.6406 49.1914 362.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +196.1289 436.9688 m +196.0039 436.9688 195.8984 436.877 195.8789 436.7539 c +193.5 420.7402 184.2266 407.3652 171.4883 399.3594 c +171.3848 399.2949 171.3398 399.1641 171.3867 399.0508 c +171.4316 398.9375 171.5527 398.8711 171.6719 398.8965 c +182.1445 401 191.4648 406.7598 198.1211 414.9277 C +202.7461 401.5508 213.3574 392.9219 226.4219 389.2734 C +221.6133 383.6816 224.1289 375.7402 231.541 374.4375 c +231.6543 374.416 231.7656 374.4746 231.8145 374.5781 c +231.8633 374.6816 231.8359 374.8066 231.748 374.8809 c +227.7754 378.2266 229.2285 386.3008 241.0859 386.3008 c +248.8794 386.3008 253.9067 383.1211 253.9067 378.8145 c +253.9067 375.4297 250.8442 373.584 248.2642 373.584 c +243.8501 373.584 241.3262 377.5449 243.2227 381.127 c +243.2773 381.2305 243.2559 381.3574 243.168 381.4355 c +243.0801 381.5137 242.9512 381.5215 242.8535 381.4551 c +240.6055 379.8906 239.0352 377.834 239.0352 374.6641 c +239.0352 369.2773 244.061 363.5352 252.3677 363.5332 c +261.2896 363.5332 269.3911 370.4043 269.3911 378.8145 c +269.3911 390.6309 259.3423 396.248 248.7778 397.248 C +253.1431 398.9219 256.4106 403.7734 v +256.4771 403.8691 256.4673 403.998 256.3892 404.084 c +256.311 404.1719 256.1841 404.1934 256.0825 404.1387 c +250.2524 401.0566 243.5938 399.3945 236.5801 399.3945 c +216.957 399.3945 200.0332 415.7988 196.3809 436.7607 c +196.3594 436.8818 196.252 436.9727 196.1289 436.9688 c +f +119.4512 384.5625 m +114.8438 376.8867 113.1992 363.7129 117.4941 353.8809 c +117.543 353.7695 117.5078 353.6406 117.4082 353.5703 c +117.3086 353.502 117.1758 353.5117 117.0879 353.5957 c +112.2813 358.1484 108.1484 368.7715 110.3828 381.0527 C +107.2871 383.4473 105.3379 385.8223 103.8691 389.0059 c +103.8223 389.1074 103.8496 389.2305 103.9355 389.3047 c +104.0215 389.377 104.1465 389.3848 104.2422 389.3203 c +109.2383 385.959 113.7051 384.8125 119.4512 384.5625 C +f +130.0586 504.3691 m +129.9902 504.4727 130.0078 504.6133 130.0996 504.6973 c +130.1934 504.7813 130.334 504.7852 130.4316 504.7061 c +137.2461 499.1797 146.3066 495.6504 157.4668 495.6504 c +185.0371 495.6504 202.4395 512.1689 205.1738 529.5771 c +205.1914 529.6885 205.2813 529.7734 205.3926 529.7891 c +205.5039 529.8047 205.6133 529.7422 205.6582 529.6396 c +208.3828 523.3818 210.0254 514.3057 201.6094 502.1309 c +196.5742 494.8457 190.4785 489.8311 190.4785 483.3145 c +190.4785 479.0566 192.7402 476.1602 196.168 476.1602 c +199.7734 476.1602 202.1055 479.248 202.1035 482.7148 c +202.1035 484.4629 201.5996 486.1934 200.6953 487.7607 c +200.6367 487.8633 200.6543 487.9902 200.7402 488.0723 c +200.8242 488.1523 200.9551 488.165 201.0527 488.1016 c +204.0254 486.1641 206.6797 482.7021 206.6797 477.8281 c +206.6797 470.6563 200.5469 464.6602 192.209 464.6602 c +183.2363 464.6602 175.8867 471.709 175.8867 481.8477 c +175.8867 485.3262 176.875 489.5156 179.3496 492.9805 C +175.9648 490.1523 174.1582 488.1523 172.6719 483.8271 C +162.2715 482.0186 151.166 483.6797 142.3398 489.4727 C +142.0859 483.3711 140.0898 478.2793 135.998 474.1533 c +135.9141 474.0684 135.7832 474.0547 135.6836 474.1182 c +135.582 474.1816 135.541 474.3066 135.5801 474.4189 c +138.457 482.4199 136.5234 494.6152 130.0586 504.3691 c +f +42.6934 497.7344 m +44.9375 502.5352 50.1523 505.2188 56.1543 505.3271 c +56.2793 505.3311 56.3867 505.2432 56.4082 505.1211 c +56.4316 504.998 56.3633 504.8779 56.248 504.8359 c +54.2012 504.082 52.5859 502.7637 51.7266 500.9258 c +49.5137 496.1973 53.0938 489.8301 59.7402 486.5566 c +59.8184 486.5186 59.8711 486.4434 59.8809 486.3594 c +59.8906 486.2725 59.8555 486.1885 59.791 486.1318 c +55.5 482.6143 50.3789 476.0781 50.3789 462.7148 c +50.377 444.0322 62.5332 426.25 78.6543 426.25 c +87.8672 426.25 95.2871 432.6465 99.125 442.2422 C +94.9023 436.4844 89.1445 432.1348 81.2109 432.1348 c +69.5703 432.1348 60.3574 444.5439 60.3555 462.459 c +60.3555 479.3457 72.2578 499.0518 88.1211 499.0508 c +96.8242 499.0488 103.3477 492.0117 103.3477 482.9277 c +103.3477 474.8672 98.1016 470.2637 92.2168 470.2637 c +87.7793 470.2637 84.7227 473.3936 83.7715 476.7871 c +83.7383 476.9023 83.791 477.0254 83.8965 477.0811 c +84.0039 477.1357 84.1328 477.1104 84.2109 477.0186 c +84.9629 476.124 86.1074 475.3809 87.8652 475.3809 c +90.8086 475.3789 92.3438 477.9082 92.3438 479.7285 c +92.3438 483.1836 89.7852 485.6152 85.9453 485.6152 c +80.7031 485.6152 76.6055 479.8564 76.6055 472.4385 c +76.6055 463.2236 85.4355 454.7813 94.2637 454.7813 c +103.2852 454.7813 112.9434 462.8408 112.9434 477.8125 c +112.9414 492.5234 102.9648 509.4141 87.0977 509.4141 c +77.8477 509.4141 69.9844 505.2441 63.9551 498.3398 c +63.875 498.248 63.7422 498.2246 63.6387 498.2852 c +63.5313 498.3477 63.4844 498.4727 63.5234 498.5879 c +67.957 511.5234 65.4766 523.7344 58.7031 523.7324 c +55.3887 523.7324 53.7012 521.3535 53.7012 518.8154 c +53.7012 516.21 55.5996 514.0566 58.6699 513.6611 c +58.791 513.6475 58.8828 513.5479 58.8926 513.4268 c +58.8984 513.3047 58.8184 513.1943 58.7012 513.1641 c +51.8867 511.4004 44.877 515.1133 44.877 522.2061 c +44.877 528.4854 50.2539 533.3398 57.2891 533.3398 c +67.9258 533.3379 73.0137 522.0684 70.748 511.8047 C +76.207 518.8486 84.3008 524.6396 95.9258 524.6396 c +119.4688 524.6396 131.3672 497.7715 131.3672 479.7285 c +131.3672 463.3525 128.041 452.8604 121.1309 444.8018 C +129.1934 450.9404 132.5195 457.7227 134.0547 467.0645 C +140.1953 475.5078 156.1875 475.5078 v +162.875 475.5078 169.1172 473.0322 173.9609 468.3438 C +173.9629 468.3447 173.9648 468.3477 173.9668 468.3486 C +174.002 468.3105 174.0391 468.2695 174.0762 468.2314 C +174.3965 467.915 174.7109 467.5918 175.0195 467.2578 C +180.0801 462.4102 190.2109 457.8633 199.4512 461.6602 c +199.5566 461.7031 199.6777 461.6699 199.748 461.582 c +199.8184 461.4932 199.8184 461.3672 199.752 461.2754 c +195.3457 455.252 187.7285 453.335 182.0742 454.21 C +183.1172 450.4941 183.6953 446.3281 183.6953 441.7305 c +183.6973 425.3262 174.8984 413.7598 165.2852 408.1289 C +168.4375 404.3281 167.7949 398.3535 164.2539 394.2949 c +164.1738 394.2051 164.043 394.1816 163.9375 394.2402 c +163.834 394.2988 163.7832 394.4238 163.8184 394.5391 c +165.5508 400.0703 160.4277 404.6875 153.6387 404.4395 c +153.5156 404.4355 153.4063 404.5195 153.3809 404.6406 c +153.3555 404.7617 153.418 404.8828 153.5332 404.9277 c +163.668 409.0918 170.3906 417.9102 170.3887 428.9355 c +170.3906 440.4492 163.4805 449.79 152.3496 449.79 c +143.2656 449.79 134.1816 441.4727 134.1816 431.1133 c +134.1816 423.0508 138.6582 418.3184 144.416 418.3164 c +149.4063 418.3184 153.373 421.7715 153.373 425.8672 c +153.373 431.7188 146.7891 433.8408 143.2773 429.209 c +143.209 429.1172 143.0859 429.084 142.9805 429.127 c +142.875 429.1689 142.8105 429.2773 142.8223 429.3926 c +143.3457 433.7813 146.5762 437.8926 151.582 437.8926 c +156.1875 437.8926 160.9219 434.0518 160.9219 425.8652 c +160.9219 416.1406 151.584 406.291 136.2305 406.2891 c +115.2461 406.2891 103.8594 429.959 114.0938 448.8945 C +108.8496 442.8809 104.1152 436.4844 104.1152 425.0977 c +104.1133 403.5898 125.3789 389.0488 150.4688 397.5977 c +150.5879 397.6367 150.7188 397.584 150.7754 397.4746 c +150.834 397.3633 150.8008 397.2266 150.6992 397.1523 c +143.6934 392.043 136.3555 384.5137 136.3555 371.873 c +136.3555 358.6934 145.0547 349.3535 158.6191 349.3535 c +169.1094 349.3535 175.7637 355.752 175.7637 363.2988 c +175.7637 369.0566 172.0449 373.6641 165.6563 373.6641 c +156.1426 373.6641 152.9082 363.3203 157.832 358.6953 c +157.916 358.6152 157.9355 358.4902 157.8809 358.3887 c +157.8242 358.2871 157.7051 358.2344 157.5938 358.2637 c +152.8242 359.5 148.2559 364.332 148.2559 371.6152 c +148.2539 384.1563 159.8965 392.4727 172.6914 392.4727 c +178.6875 392.4727 184.4902 390.7188 189.1641 387.4297 C +188.6113 383.2773 190.0313 378.6816 192.1309 375.5879 C +190.1816 382.457 192.291 393.7656 202.8027 393.7676 c +208.6953 393.7656 212.5898 389.2383 212.5898 383.8867 c +212.5898 377.5605 207.2441 374.6094 202.8945 375.2148 c +202.7793 375.2305 202.6895 375.3223 202.6758 375.4375 c +202.6641 375.5527 202.7305 375.6602 202.8379 375.7031 c +204.4238 376.3105 205.7813 377.9727 205.7813 379.9668 c +205.7813 382.4668 203.8691 383.9492 201.8691 383.9492 c +198.5762 383.9492 196.7461 380.2793 197.8984 376.2305 C +197.8867 376.2285 L +198.959 373.3926 199.5605 370.2246 199.5605 366.7363 c +199.5605 349.9746 181.3809 334.002 158.4395 334 c +134.2285 334 121.3867 351.2734 121.3887 369.0566 c +121.3887 378.5938 124.9688 385.8184 129.5762 390.4258 C +109.6543 388.3066 97.0781 396.8223 90.2969 409.1035 C +94.7754 412.9414 96.4375 418.5723 Y +91.0645 411.5352 81.8535 405.3945 68.9316 405.3945 c +49.3555 405.3945 34 424.5859 34 445.1836 c +34 458.2568 38.8027 470.9648 48.5645 479.4307 C +42.5273 484.459 39.918 491.8018 42.6934 497.7344 c +f +*U +%AI6_EndPatternLayer +) & +] E +%AI3_EndPattern +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI8_BeginBrushPattern +(New Pattern 11) 0 A +u +0 J 0 j 1 w 4 M []0 d 0 XR +-7844.6191 7768.6997 m +-7844.6191 7721.3188 L +-7892 7721.3188 L +-7892 7768.6997 L +-7844.6191 7768.6997 L +n +u +0 O +0 0 0 1 k +-7867.4058 7764.4551 m +-7869.1816 7764.4551 L +-7869.1816 7769 L +-7867.4058 7769 L +-7867.4058 7764.4551 L +f +-7867.4058 7757.6855 m +-7869.1816 7757.6855 L +-7869.1816 7762.23 L +-7867.4058 7762.23 L +-7867.4058 7757.6855 L +f +-7867.4058 7750.9185 m +-7869.1816 7750.9185 L +-7869.1816 7755.4629 L +-7867.4058 7755.4629 L +-7867.4058 7750.9185 L +f +-7867.4058 7744.1494 m +-7869.1816 7744.1494 L +-7869.1816 7748.6934 L +-7867.4058 7748.6934 L +-7867.4058 7744.1494 L +f +U +u +-7860.3809 7745.9238 m +-7860.3809 7744.146 L +-7864.9258 7744.146 L +-7864.9258 7745.9238 L +-7860.3809 7745.9238 L +f +-7846.8442 7745.9238 m +-7846.8442 7744.146 L +-7851.3882 7744.146 L +-7851.3882 7745.9238 L +-7846.8442 7745.9238 L +f +U +*u +1 D +-7855.4922 7744.146 m +-7853.6118 7744.146 L +-7853.6118 7745.9238 L +-7858.1558 7745.9238 L +-7858.1558 7744.146 L +-7857.3306 7744.146 L +-7858.4585 7741.2109 L +-7861.8838 7740.1733 L +-7862.3145 7740.0127 -7862.3818 7740.2061 -7862.4609 7740.5845 c +-7862.7915 7742.1582 -7864.0337 7742.5825 -7865.0703 7742.1934 c +-7866.1855 7741.7749 -7866.9023 7740.4141 -7866.4785 7739.2788 c +-7866.0825 7738.2236 -7865.0215 7737.9512 -7864.0439 7738.3184 c +-7863.2817 7738.6021 -7862.6255 7739.2949 -7861.8623 7739.5791 c +-7860.9824 7739.9102 -7859.7529 7739.7222 -7858.9312 7739.3164 C +-7858.9658 7738.8135 -7859.1592 7738.3164 -7859.3945 7737.8735 c +-7859.9458 7736.8408 -7860.4375 7736.3672 -7861.3984 7735.7168 c +-7861.7842 7735.439 -7862.2246 7735.1855 -7862.5625 7734.8359 c +-7863.1738 7734.2036 -7863.5186 7733.3398 -7863.1978 7732.478 c +-7862.8374 7731.5215 -7861.8345 7731.1597 -7860.9146 7731.5039 c +-7859.8184 7731.9165 -7859.0513 7733.3184 -7859.4746 7734.4512 c +-7859.7007 7735.0581 -7860.2271 7735.3301 -7860.3008 7735.5254 c +-7860.4395 7735.8984 -7859.4858 7736.5664 -7859.2671 7736.7598 c +-7858.6074 7737.3184 -7858.0845 7738.3628 -7857.6978 7739.1768 C +-7851.4033 7741.1309 L +-7850.0137 7741.6504 -7848.8535 7742.5967 -7848.0103 7743.8047 C +-7856.5176 7741.8037 L +-7855.4922 7744.146 L +f +0 D +-7860.0366 7734.1069 m +-7859.7524 7733.3452 -7860.3882 7732.3047 -7861.1113 7732.0332 c +-7861.8359 7731.7612 -7862.4214 7732.0781 -7862.6934 7732.8008 c +-7862.9863 7733.5845 -7862.1455 7734.6133 -7861.4199 7734.8838 c +-7860.7954 7735.1182 -7860.25 7734.6758 -7860.0366 7734.1069 c +f +-7864.2695 7738.8584 m +-7864.9146 7738.6172 -7865.6689 7738.8452 -7865.9185 7739.5117 c +-7866.2319 7740.3535 -7865.6685 7741.3452 -7864.8657 7741.6455 c +-7864.2002 7741.894 -7863.4302 7741.6255 -7863.1675 7740.9199 c +-7862.8232 7740.0024 -7863.4082 7739.1797 -7864.2695 7738.8584 c +f +*U +U +%AI8_EndBrushPattern +%AI8_BeginBrushPattern +(New Pattern 4) 0 A +u +1 Ap +0 J 0 j 1 w 4 M []0 d 0 XR +-7845.6191 7770 m +-7845.6191 7722.6191 L +-7893 7722.6191 L +-7893 7770 L +-7845.6191 7770 L +n +u +0 O +0 0 0 1 k +-7888.4551 7747.2222 m +-7888.4551 7745.4453 L +-7893 7745.4453 L +-7893 7747.2222 L +-7888.4551 7747.2222 L +f +-7881.6865 7747.2222 m +-7881.6865 7745.4453 L +-7886.2314 7745.4453 L +-7886.2314 7747.2222 L +-7881.6865 7747.2222 L +f +-7874.9185 7747.2222 m +-7874.9185 7745.4453 L +-7879.4634 7745.4453 L +-7879.4634 7747.2222 L +-7874.9185 7747.2222 L +f +-7868.1494 7747.2222 m +-7868.1494 7745.4453 L +-7872.6934 7745.4453 L +-7872.6934 7747.2222 L +-7868.1494 7747.2222 L +f +-7861.3809 7747.2222 m +-7861.3809 7745.4453 L +-7865.9258 7745.4453 L +-7865.9258 7747.2222 L +-7861.3809 7747.2222 L +f +-7854.6113 7747.2222 m +-7854.6113 7745.4453 L +-7859.1558 7745.4453 L +-7859.1558 7747.2222 L +-7854.6113 7747.2222 L +f +-7847.8442 7747.2222 m +-7847.8442 7745.4453 L +-7852.3882 7745.4453 L +-7852.3882 7747.2222 L +-7847.8442 7747.2222 L +f +U +U +%AI8_EndBrushPattern +%AI8_BeginBrushPattern +(Unnamed 6) 0 A +u +u +0 Ap +0 J 0 j 1 w 4 M []0 d 0 XR +-4020.5 3897.5 m +-3919.1816 3897.5 L +-3919.1816 3889.7832 L +-4020.5 3889.7832 L +-4020.5 3897.5 L +n +u +0 O +0 0 0 1 k +-3919.3 3891.2073 m +-3919.1504 3891.2434 -3919.2041 3890.8247 -3919.1816 3890.7495 C +-3919.4319 3890.8423 -3919.2937 3891.3159 -3919.3 3891.2073 C +f +-3921.7693 3892.1582 m +-3921.7256 3891.9871 L +-3922.0896 3892.4063 L +-3921.7693 3892.1582 L +f +-3924.0784 3892.1504 m +-3923.8601 3892.8643 -3923.2417 3892.0352 -3922.8303 3892.2891 C +-3922.7625 3892.4514 L +-3922.5769 3891.8774 L +-3923.0769 3891.9683 -3923.7263 3892.3496 -3924.0784 3892.1504 C +f +-3925.3096 3890.6062 m +-3925.2336 3890.8843 -3925.5759 3890.8455 -3925.0225 3890.6936 C +-3925.0503 3890.6631 -3925.0583 3890.6455 -3925.0745 3890.6233 C +-3925.1243 3890.6272 -3925.1929 3890.6262 -3925.3096 3890.6062 C +f +-3925.0745 3890.6233 m +-3924.8313 3890.6033 -3925.2336 3890.3894 -3925.0745 3890.6233 C +-3925.0745 3890.6233 L +f +-3926.1975 3890.7822 m +-3925.8772 3890.5342 L +-3925.9441 3890.3699 -3926.2292 3890.3333 -3926.1233 3890.2139 C +-3926.4519 3890.3496 -3926.3843 3890.5127 -3926.1975 3890.7822 C +f +-3926.5012 3891.3032 m +-3926.3352 3891.1982 L +-3926.3643 3891.1294 -3926.4082 3891.1055 -3926.5012 3891.3032 C +f +-3925.9832 3890.9768 m +-3926.3352 3891.1982 L +-3926.2888 3891.3135 -3926.2839 3891.5447 -3926.1736 3891.1184 C +-3926.2024 3891.3296 -3926.1328 3891.1262 -3925.9832 3890.9768 C +f +-3925.7839 3891.0854 m +-3925.6042 3891.2407 -3925.3721 3891.3384 -3925.6936 3891.5854 C +-3925.0808 3891.4871 -3925.1711 3890.9856 -3925.7839 3891.0854 C +f +-3924.1963 3892.8887 m +-3923.9561 3893.0974 L +-3923.7483 3892.8584 L +-3923.8521 3892.9771 -3924.2112 3892.6653 -3924.1963 3892.8887 C +f +-3928.1929 3890.4126 m +-3928.2129 3890.5642 -3928.0852 3890.8174 -3928.0613 3891.0115 C +-3927.8247 3890.8374 L +-3927.9463 3890.7334 -3928.1768 3890.6375 -3928.1929 3890.4126 C +f +-3928.0613 3891.0115 m +-3928.4153 3891.2722 L +-3928.0991 3891.3032 -3928.0413 3891.1792 -3928.0613 3891.0115 C +f +-3926.5583 3892.0955 m +-3925.9768 3891.5479 L +-3926.6704 3892.1033 L +-3926.5583 3892.0955 L +f +-3929.5449 3890.3936 m +-3929.3442 3890.0422 L +-3929.7017 3890.573 L +-3929.5449 3890.3936 L +f +-3930.4417 3890.4551 m +-3930.2932 3890.1638 -3930.6453 3889.9624 -3930.4883 3889.7832 C +-3930.7319 3889.8352 -3930.9399 3890.0854 -3931.1272 3890.3098 C +-3930.9282 3890.1848 -3930.7161 3890.2168 -3930.4417 3890.4551 C +f +-3931.4417 3890.6375 m +-3931.3423 3890.5679 -3931.2393 3890.4426 -3931.1272 3890.3098 C +-3931.2329 3890.3774 -3931.3369 3890.4739 -3931.4417 3890.6375 C +f +-3929.0183 3891.197 m +-3929.0457 3891.1055 -3929.0984 3890.865 -3929.2969 3890.7634 C +-3929.1577 3891.1907 L +-3929.1152 3891.1936 -3929.0671 3891.1951 -3929.0183 3891.197 C +f +-3929.1528 3891.2046 m +-3929.1577 3891.1907 L +-3929.3088 3891.1814 -3929.4136 3891.1719 -3929.4585 3891.1672 c +-3929.4199 3891.1707 -3929.3279 3891.1814 -3929.1528 3891.2046 C +f +-3928.9832 3891.1992 m +-3928.9961 3891.1982 -3929.0056 3891.197 -3929.0183 3891.197 C +-3929.0049 3891.239 -3928.9968 3891.2534 -3928.9832 3891.1992 C +f +-3927.4863 3891.7092 m +-3927.6943 3891.948 -3928.1279 3892.2039 -3927.7083 3892.5684 C +-3927.5591 3892.2759 -3927.7993 3892.0684 -3927.4863 3891.7092 c +f +-3928.8103 3891.7334 m +-3928.4343 3891.8311 L +-3928.4417 3891.7183 -3928.5095 3891.5535 -3928.4065 3891.4351 C +-3928.8103 3891.7334 L +f +-3928.9944 3891.8691 m +-3928.8103 3891.7334 L +-3928.9497 3891.697 L +-3928.9944 3891.8691 L +f +-3930.7976 3891.0376 m +-3930.96 3891.2234 -3931.1377 3891.239 -3931.3384 3891.2693 C +-3931.1233 3891.3533 -3930.9009 3891.3982 -3930.6897 3891.3975 C +-3930.6599 3891.2632 -3930.5671 3891.0222 -3930.7976 3891.0376 C +f +-3929.9983 3891.1563 m +-3930.0095 3891.1663 -3930.0239 3891.1707 -3930.0344 3891.1807 C +-3930.0122 3891.2168 -3929.9944 3891.2283 -3929.9983 3891.1563 C +f +-3933.3142 3891.2659 m +-3933.3032 3891.2896 -3933.2937 3891.3186 -3933.2825 3891.344 C +-3933.28 3891.3186 -3933.2783 3891.2947 -3933.2751 3891.27 C +-3933.3142 3891.2659 L +f +-3930.6536 3891.4771 m +-3930.4919 3891.5596 -3930.3953 3891.4551 -3930.3032 3891.323 C +-3930.4241 3891.3662 -3930.5522 3891.3943 -3930.6897 3891.3975 C +-3930.7031 3891.4583 -3930.7056 3891.4983 -3930.6536 3891.4771 C +f +-3931.9929 3890.8374 m +-3931.9087 3890.9268 -3931.8132 3891.0022 -3931.7129 3891.0723 C +-3931.7952 3890.9373 -3931.9631 3890.7258 -3931.9929 3890.8374 C +f +-3930.0889 3891.0623 m +-3930.0808 3891.0554 -3930.0735 3891.0479 -3930.0647 3891.0435 C +-3930.1177 3890.9514 -3930.1111 3890.9966 -3930.0889 3891.0623 C +f +-3930.0889 3891.0623 m +-3930.1721 3891.1243 -3930.2375 3891.2295 -3930.3032 3891.323 C +-3930.2048 3891.2896 -3930.1135 3891.2434 -3930.0344 3891.1807 C +-3930.0544 3891.1504 -3930.0745 3891.1042 -3930.0889 3891.0623 C +f +-3933.9128 3894.009 m +-3933.8843 3893.613 -3933.4592 3893.2471 -3933.0923 3893.6719 C +-3932.7312 3893.3752 -3932.9673 3892.0723 -3933.2825 3891.344 C +-3933.2937 3891.5166 -3933.2937 3891.6763 -3933.6653 3891.9104 C +-3933.5352 3892.1262 -3932.8408 3892.4163 -3933.1543 3892.7744 C +-3933.6465 3892.9783 -3933.5576 3892.6343 -3933.7969 3892.4248 C +-3933.5935 3892.9182 -3934.4231 3893.1431 -3934.3159 3893.8687 C +-3933.8843 3893.613 L +-3933.8762 3893.7258 -3934.0327 3893.9063 -3933.9128 3894.009 C +f +-3932.5745 3891.3843 m +-3932.4216 3891.3352 L +-3932.5959 3891.2659 -3932.7207 3891.1079 -3932.9504 3890.7979 C +-3933.2048 3890.9912 -3933.2576 3891.1382 -3933.2751 3891.27 C +-3932.5222 3891.3252 L +-3932.5745 3891.3843 L +f +-3931.7351 3891.3335 m +-3931.8545 3891.7646 -3932.2217 3891.948 -3931.9968 3892.4138 C +-3931.5481 3892.3843 -3931.6824 3892.0542 -3931.4143 3891.8672 C +-3932.1384 3891.9739 -3931.2063 3891.6272 -3931.7295 3891.3828 C +-3931.5872 3891.3096 -3931.4592 3891.2871 -3931.3384 3891.2693 C +-3931.4688 3891.2168 -3931.5945 3891.1519 -3931.7129 3891.0723 C +-3931.7063 3891.0823 -3931.7017 3891.0896 -3931.6963 3891.0991 C +-3931.6929 3891.0974 L +-3931.6929 3891.1006 -3931.6936 3891.1016 -3931.6936 3891.1042 C +-3931.6624 3891.1582 -3931.6521 3891.1907 -3931.6873 3891.1594 C +-3931.6897 3891.1653 -3931.6985 3891.1672 -3931.7024 3891.1682 C +-3931.7073 3891.2283 -3931.7207 3891.2808 -3931.7351 3891.3311 C +-3931.9448 3891.2422 -3931.7681 3891.219 -3931.7024 3891.1682 C +-3931.7 3891.1475 -3931.6943 3891.1272 -3931.6936 3891.1042 C +-3931.6943 3891.1018 -3931.6953 3891.1006 -3931.6963 3891.0991 C +-3932.4216 3891.3352 L +-3932.2681 3891.3953 -3932.0759 3891.3828 -3931.7351 3891.3335 C +f +-3928.0952 3893.4951 m +-3928.1177 3893.4573 -3928.1167 3893.4263 -3928.1184 3893.3953 C +-3928.1653 3893.448 -3928.1831 3893.4839 -3928.0952 3893.4951 C +f +-3928.3936 3893.2346 m +-3928.3408 3893.1748 -3928.2969 3893.0022 -3928.1255 3893.0466 C +-3927.9768 3893.1763 -3928.1262 3893.2534 -3928.1184 3893.3953 C +-3928.0151 3893.2808 -3927.7568 3893.0859 -3928.0808 3892.8762 C +-3928.1321 3892.9351 L +-3928.4241 3892.7871 -3928.7993 3892.2495 -3928.7483 3892.1902 C +-3928.6631 3892.5779 -3928.5879 3892.8542 -3928.3936 3893.2346 C +f +-3930.0852 3892.3943 m +-3930.6892 3892.6055 L +-3930.3816 3892.9783 L +-3930.3972 3892.7544 L +-3930.0537 3892.8423 -3930.1279 3892.5664 -3930.0852 3892.3943 C +f +-3933.3833 3891.052 m +-3933.3032 3890.5967 L +-3933.6521 3891.239 L +-3933.3833 3891.052 L +f +-3934.1682 3891.1062 m +-3934.1392 3890.7102 L +-3934.3464 3890.9492 L +-3934.1682 3891.1062 L +f +-3978.4617 3896.0166 m +-3978.6392 3896.1287 L +-3978.5552 3896.0942 -3978.5012 3896.0566 -3978.4617 3896.0166 C +f +-3977.1768 3896.0435 m +-3977.1453 3895.8486 L +-3977.2048 3895.9558 -3977.2292 3896.0352 -3977.1768 3896.0435 C +f +-3953.4456 3891.1506 m +-3953.7041 3890.781 -3953.9929 3890.2083 -3953.9617 3890.6531 C +-3953.8823 3891.0867 L +-3953.7017 3891.009 -3953.5632 3891.0576 -3953.4456 3891.1506 C +f +-3966.6479 3893.7412 m +-3966.6233 3893.7832 -3966.5977 3893.8286 -3966.5723 3893.8733 C +-3966.5095 3893.7246 -3966.4504 3893.5867 -3966.3977 3893.4583 C +-3966.4729 3893.5466 -3966.5583 3893.6416 -3966.6479 3893.7412 C +f +-3966.8303 3895.5366 m +-3967.1711 3895.2566 L +-3967.0945 3895.3542 -3966.9849 3895.448 -3966.8303 3895.5366 C +f +-3985.4792 3896.4768 m +-3985.6863 3896.9182 L +-3985.3623 3896.9163 -3985.5049 3896.6936 -3985.4792 3896.4768 C +f +-3942.2073 3891.2659 m +-3942.4304 3891.0967 -3942.6079 3891.0254 -3942.7639 3891.0044 C +-3942.4951 3891.2534 -3942.2783 3891.6272 -3942.2073 3891.2659 C +f +-3977.9561 3891.4126 m +-3978.0647 3891.4912 -3978.1111 3891.5796 -3978.1079 3891.6763 C +-3977.9961 3891.6018 -3977.9329 3891.5193 -3977.9561 3891.4126 C +f +-3943.4082 3891.0059 m +-3943.3689 3891.0491 -3943.3303 3891.071 -3943.2903 3891.1079 C +-3943.1272 3891.0352 -3942.9631 3890.9768 -3942.7639 3891.0044 C +-3942.9624 3890.8186 -3943.1897 3890.7046 -3943.4082 3891.0059 C +f +-4010.9297 3896.1172 m +-4010.9482 3896.0974 -4010.9705 3896.0884 -4010.9873 3896.0654 C +-4010.9929 3896.1243 -4010.9673 3896.1272 -4010.9297 3896.1172 C +f +-4018.3442 3891.739 m +-4018.2712 3891.7124 -4018.1521 3891.7119 -4018.0398 3891.7058 C +-4018.0945 3891.6763 -4018.1863 3891.6792 -4018.3442 3891.739 c +f +-3937.3264 3890.9172 m +-3937.1599 3890.8887 -3937.3 3890.8691 -3937.3264 3890.9172 C +-3937.3264 3890.9172 L +f +-3936.5168 3892.6328 m +-3936.5522 3892.6814 -3936.5791 3892.7434 -3936.5833 3892.844 C +-3936.5696 3892.739 -3936.5464 3892.6726 -3936.5168 3892.6328 c +f +-3945.0664 3893.7058 m +-3945.0713 3893.7058 -3945.0752 3893.7046 -3945.0808 3893.7046 C +-3945.0313 3893.7896 -3945.0398 3893.7734 -3945.0664 3893.7058 C +f +-3937.0759 3891.1143 m +-3937.1384 3891.0613 -3937.2104 3891.0166 -3937.2888 3890.9856 C +-3937.2544 3891.0193 -3937.1897 3891.0613 -3937.0759 3891.1143 C +f +-3937.1096 3890.9092 m +-3937.0522 3890.9287 -3937.0071 3890.9395 -3936.9641 3890.9512 C +-3936.9431 3890.8787 -3936.9617 3890.8335 -3937.1096 3890.9092 C +f +-3937.5583 3890.9402 m +-3937.4631 3890.9336 -3937.3743 3890.9539 -3937.2888 3890.9856 C +-3937.3215 3890.9558 -3937.3352 3890.9314 -3937.3264 3890.9172 C +-3937.3752 3890.9238 -3937.4441 3890.9326 -3937.5583 3890.9402 c +f +-3997.2932 3894.9558 m +-3997.3042 3894.9424 -3997.3169 3894.9336 -3997.3289 3894.9153 C +-3997.4968 3895.0952 -3997.4231 3895.0664 -3997.2932 3894.9558 C +f +-3957.7783 3895.6563 m +-3957.7705 3895.6519 -3957.7664 3895.6406 -3957.7593 3895.635 C +-3957.7671 3895.6306 -3957.7769 3895.6252 -3957.7839 3895.6199 C +-3957.7783 3895.6563 L +f +-3958.3762 3895.9795 m +-3958.1216 3895.4395 -3957.9768 3895.5059 -3957.7839 3895.6199 C +-3957.9817 3894.3691 L +-3958.3762 3895.9795 L +f +*u +-3981.5383 3896.1416 m +-3981.1184 3896.531 L +-3981.6252 3897.1726 -3981.9919 3896.9514 -3981.5977 3897.5 C +-3981.5383 3896.1416 -3979.9656 3897.3606 -3979.9072 3896.0039 C +-3979.6304 3896.2896 L +-3979.7097 3896.2764 -3979.7224 3896.3562 -3979.8008 3896.3428 C +-3979.2625 3896.9932 -3979.4009 3895.3606 -3978.7073 3895.5542 C +-3978.4656 3895.6582 -3978.2969 3895.8555 -3978.4617 3896.0166 C +-3977.9231 3895.6807 L +-3977.7664 3895.7073 -3977.8047 3895.9426 -3977.9607 3895.9172 C +-3977.1392 3895.8086 L +-3977.1453 3895.8486 L +-3977.0281 3895.635 -3976.7625 3895.3064 -3976.6328 3895.1663 C +-3976.4241 3895.3606 -3976.7375 3895.3098 -3976.6841 3895.4795 C +-3976.2292 3895.1504 L +-3976.0439 3895.5022 -3976.4209 3895.844 -3976.7351 3895.7935 C +-3976.3103 3897.1494 -3976.3577 3895.4514 -3975.4409 3896.2434 C +-3975.8704 3896.4163 L +-3975.5935 3897.1863 -3975.2583 3896.907 -3974.7727 3897.3875 C +-3974.8879 3897.1367 -3975.7449 3896.177 -3975.2512 3895.8386 C +-3975.1121 3895.9414 -3974.9287 3895.9902 -3974.6624 3895.7168 C +-3974.6599 3896.1995 -3974.3999 3896.0811 -3974.0745 3896.0535 C +-3974.0967 3896.6936 L +-3973.7449 3896.5088 -3973.7727 3896.1831 -3973.5657 3895.8953 C +-3973.1736 3895.9583 -3973.0923 3896.4536 -3973 3896.8711 C +-3972.3721 3896.9727 -3973.4336 3896.0767 -3972.6904 3895.9558 C +-3972.1682 3896.2007 -3971.8015 3895.9395 -3971.1768 3895.5566 C +-3970.8113 3895.7766 -3971.2407 3895.948 -3971.1096 3896.1306 C +-3970.7856 3895.6206 L +-3970.7063 3895.6328 -3970.7319 3895.7896 -3970.7449 3895.8687 C +-3970.4719 3895.6707 -3970.7224 3895.2295 -3970.2932 3895.0554 C +-3970.1775 3894.3511 -3969.4121 3896.0854 -3968.8809 3895.2852 C +-3968.75 3895.4668 -3968.9441 3895.677 -3968.9041 3895.9248 C +-3968.1753 3895.3999 -3968.2793 3895.5435 -3967.6809 3894.8367 C +-3967.1711 3895.2566 L +-3967.5457 3894.7764 -3967.0671 3894.2083 -3966.6479 3893.7412 C +-3966.7808 3893.509 -3966.8943 3893.3064 -3966.9705 3893.2095 C +-3966.3015 3892.8662 L +-3966.2207 3892.9712 -3966.2881 3893.1907 -3966.3977 3893.4583 C +-3966.3521 3893.405 -3966.3088 3893.3533 -3966.2751 3893.3047 C +-3966.0359 3893.5413 -3966.1599 3893.9104 -3966.3313 3894.2676 C +-3966.4128 3894.1416 -3966.4937 3894.0066 -3966.5723 3893.8733 C +-3966.7375 3894.2615 -3966.8921 3894.6919 -3966.8577 3895.0664 C +-3966.8142 3894.9927 -3966.7305 3894.9292 -3966.6384 3894.8936 C +-3966.6816 3894.9993 -3966.7092 3895.093 -3966.6892 3895.157 c +-3966.6665 3895.2246 -3966.5967 3895.0833 -3966.4873 3894.9199 C +-3966.3352 3895.6328 L +-3966.2983 3895.3496 L +-3965.4231 3895.7959 L +-3964.7969 3895.0779 -3964.2522 3894.0215 -3963.2583 3893.7271 C +-3963.5049 3894.25 -3963.3113 3894.5811 -3963.3247 3895.2007 C +-3963.5959 3894.5447 -3964.0945 3895.4795 -3964.6096 3895.3462 c +-3964.3408 3895.4153 -3964.3999 3895.7102 -3964.4683 3895.8135 C +-3963.5496 3895.2168 L +-3963.5703 3895.7234 -3963.3545 3895.5967 -3963.1145 3895.8064 C +-3963.2959 3894.8047 -3962.4297 3895.1392 -3962.0559 3894.8323 C +-3962.0327 3895.1682 -3962.1223 3895.5115 -3962.5784 3895.4307 C +-3962.0752 3896.1848 -3961.9282 3894.2544 -3961.4343 3894.8953 C +-3961.5457 3894.9031 -3961.6057 3894.8516 -3961.6497 3895.0222 C +-3961.3896 3894.7234 -3960.7537 3894.9602 -3960.9033 3895.2534 C +-3961.0144 3895.2603 L +-3960.2751 3895.3787 -3958.7639 3895.2676 -3958.6536 3894.4172 C +-3958.6462 3894.5266 -3958.7505 3895.4424 -3958.7952 3895.6143 C +-3957.4761 3892.7522 L +-3957.5923 3893.4827 -3957.1462 3895.2227 -3957.7593 3895.635 C +-3957.5833 3895.739 -3957.3655 3895.8606 -3956.9944 3895.6033 C +-3957.1145 3895.4993 -3957.2937 3894.5466 -3957.1296 3894.48 C +-3956.6792 3895.2935 -3956.8169 3894.9153 -3956.2617 3895.6084 C +-3956.4417 3895.4514 -3956.2417 3894.3064 -3955.9573 3894.3428 C +-3956.0017 3894.5144 -3955.9336 3895.4734 -3956.0376 3895.5928 C +-3955.3296 3894.4683 L +-3955.5063 3894.6707 -3955.3608 3895.4214 -3955.2024 3895.739 C +-3955.2759 3895.5193 -3954.5903 3895.76 -3954.4016 3895.6482 C +-3954.7017 3895.3875 L +-3953.9023 3895.5576 -3953.9121 3893.8064 -3953.1191 3893.865 C +-3953.2151 3894.0974 -3953.3562 3895.2947 -3952.9529 3895.4363 C +-3952.7681 3894.8604 -3952.1345 3892.6663 -3951.4329 3892.2227 C +-3951.2983 3892.552 L +-3950.76 3892.1768 L +-3951.0952 3893.0435 -3952.0359 3894.8672 -3952.5496 3895.5767 C +-3952.2505 3895.8374 -3952.4663 3895.9646 -3952.0183 3895.9351 C +-3951.8601 3896.2434 -3952.2625 3896.4031 -3952.3943 3896.4214 C +-3951.3513 3896.6206 L +-3951.3977 3895.948 -3950.5537 3895.9463 -3950.5935 3895.3862 C +-3951.7263 3896.0833 L +-3951.7722 3895.4119 -3951.0713 3894.1748 -3950.3323 3894.2935 C +-3950.1443 3894.5613 -3950.4729 3895.4902 -3950.4575 3895.7144 C +-3950.3616 3895.4827 -3949.7561 3895.2722 -3949.6882 3895.4363 C +-3950.0017 3895.7959 L +-3949.5903 3896.0486 -3949.3303 3894.9048 -3948.8359 3895.5464 C +-3948.6653 3895.5896 -3948.3264 3896.4119 -3948.2969 3896.0144 C +-3948.5752 3895.2471 -3948.6296 3892.8743 -3948.4441 3892.2979 C +-3948.3843 3892.3496 -3947.5481 3893.031 -3947.3533 3893.4104 C +-3947.0723 3894.0115 -3947.7751 3894.844 -3947.5359 3895.3604 C +-3947.5256 3895.1768 -3947.3704 3894.9502 -3947.3057 3894.8774 C +-3947.1265 3895.0342 -3947.3799 3895.4463 -3946.9905 3895.363 C +-3946.9255 3894.6814 -3946.1985 3895.4207 -3946.8064 3894.7871 C +-3946.4255 3894.5923 -3946.4016 3894.927 -3945.9543 3894.8975 C +-3946.0967 3894.4573 -3945.5527 3893.3982 -3945.1711 3893.2039 C +-3945.1936 3893.3774 -3945.1079 3893.6033 -3945.0664 3893.7058 C +-3944.2856 3893.7676 -3943.8665 3894.0771 -3943.1384 3894.0833 C +-3943.0713 3894.2483 -3942.72 3894.448 -3942.8696 3894.7412 C +-3942.7649 3894.6206 -3942.6687 3894.3894 -3942.4441 3894.3733 C +-3942.0095 3894.9624 -3942.9448 3894.4646 -3942.6135 3895.1726 C +-3942.5852 3894.7766 -3942.0327 3894.6262 -3941.7129 3894.3787 C +-3941.8113 3893.7671 -3942.4519 3894.2615 -3942.7722 3894.5088 C +-3942.7737 3893.6653 -3942.2161 3892.781 -3941.4551 3892.3911 C +-3940.8503 3892.1814 -3941.1929 3892.9363 -3941.0879 3892.8164 C +-3939.9519 3892.9639 -3940.1201 3891.3428 -3939.1768 3891.9514 C +-3938.8025 3892.489 -3939.1599 3893.0215 -3939.0769 3893.4092 C +-3939.5696 3893.6128 -3939.8333 3893.0679 -3940.1672 3893.0896 C +-3939.7561 3893.344 L +-3939.9128 3893.5222 -3940.2417 3893.6582 -3940.4209 3893.5022 C +-3940.1072 3893.9856 -3938.5017 3893.5952 -3937.6252 3894.0413 C +-3937.4695 3893.8606 -3937.2007 3893.6743 -3937.3279 3893.4583 C +-3937.6052 3893.5332 L +-3937.8601 3893.0996 -3937.0833 3892.9336 -3937.4343 3892.7312 C +-3937.0623 3892.4263 -3936.6453 3891.947 -3936.1216 3892.1924 C +-3936.0232 3892.8054 L +-3936.0344 3892.6262 -3936.3655 3892.4402 -3936.5127 3892.6272 c +-3936.2944 3892.3555 -3935.7097 3893.4573 -3935.4705 3892.6543 C +-3935.8376 3892.2295 L +-3935.4641 3891.9214 -3935.0024 3891.2703 -3934.5383 3891.4639 C +-3934.7495 3890.8584 -3934.6453 3891.5332 -3934.9751 3890.8247 C +-3934.6892 3891.7058 -3936.1624 3890.7876 -3935.7031 3891.7139 C +-3936.0415 3890.8916 -3936.2888 3891.365 -3936.7312 3890.6638 C +-3936.7175 3890.8662 -3936.5745 3891.0508 -3936.9641 3890.9512 C +-3936.9817 3891.0103 -3937.0232 3891.0854 -3937.0496 3891.1294 C +-3937.0615 3891.1243 -3937.0657 3891.1206 -3937.0759 3891.1143 C +-3937.0681 3891.1218 -3937.0623 3891.1306 -3937.0544 3891.1382 C +-3937.0713 3891.1682 -3937.0728 3891.1748 -3937.0464 3891.1462 C +-3936.9536 3891.2346 -3936.8784 3891.3411 -3936.8479 3891.4539 C +-3937.0413 3891.9182 -3937.6609 3891.9038 -3937.8704 3892.1443 C +-3938.1016 3892.0479 -3937.7737 3891.9119 -3937.8999 3891.6963 C +-3938.2129 3892.0554 L +-3938.2439 3891.6062 -3938.8271 3891.3096 -3938.2825 3891.0464 C +-3938.7727 3891.0264 L +-3939.0613 3890.7744 -3939.4583 3890.6743 -3939.7031 3890.863 C +-3939.9343 3890.7659 -3940.2871 3891.3604 -3940.0857 3891.0088 C +-3940.8545 3891.2871 L +-3940.8616 3891.1748 L +-3941.6201 3891.1184 -3942.4231 3891.9182 -3943.2903 3891.1079 C +-3943.5457 3891.2212 -3943.8096 3891.3599 -3944.2368 3891.2324 C +-3944.3201 3890.844 L +-3944.6479 3890.9795 -3945.3047 3890.4551 -3945.4456 3890.8599 C +-3945.7993 3889.8142 -3947.0369 3890.6318 -3947.6135 3890.4463 C +-3947.6353 3890.9536 L +-3948.0322 3890.9248 -3948.4128 3891.0686 -3948.9055 3891.2722 C +-3948.8752 3891.7207 L +-3949.3 3892.0886 -3949.9673 3891.4019 -3950.6392 3891.448 C +-3950.5935 3891.2764 -3950.4231 3891.321 -3950.3025 3891.4248 C +-3951.1052 3890.4119 -3951.9961 3892.1616 -3952.7241 3891.4238 C +-3952.9055 3891.5867 -3953.0369 3891.531 -3953.1641 3891.4182 C +-3953.1472 3891.4175 -3953.1321 3891.4092 -3953.1191 3891.3953 C +-3953.1377 3891.3894 -3953.1653 3891.3887 -3953.1936 3891.3894 C +-3953.2737 3891.3123 -3953.3562 3891.2227 -3953.4456 3891.1506 C +-3953.3696 3891.26 -3953.2969 3891.3496 -3953.2336 3891.3911 C +-3953.3735 3891.4004 -3953.5857 3891.4558 -3953.7937 3891.5684 C +-3953.8823 3891.0867 L +-3953.8992 3891.093 -3953.9128 3891.0923 -3953.9304 3891.1006 C +-3954.1345 3890.9226 -3954.0945 3891.3286 -3953.9856 3891.6907 C +-3954.0903 3891.77 -3954.1863 3891.865 -3954.2607 3891.9814 C +-3954.4265 3891.2039 -3954.8064 3892.2432 -3955.0327 3891.4138 C +-3955.1729 3891.8184 -3956.0784 3891.7183 -3956.1892 3892.5686 C +-3956.1963 3892.4583 -3956.2576 3892.405 -3956.1453 3892.3982 C +-3956.3772 3892.301 -3956.6089 3892.2046 -3956.8169 3892.4443 C +-3956.9153 3891.8323 L +-3957.4216 3892.655 L +-3957.7292 3892.2822 -3957.8567 3892.0654 -3957.5513 3891.5942 C +-3958.2888 3892.3186 -3958.1497 3891.8672 -3958.7769 3892.5854 C +-3958.7463 3892.1895 L +-3958.9705 3892.2046 -3959.3289 3892.7346 -3959.4641 3892.4075 C +-3959.9656 3891.655 -3961.9456 3892.3035 -3963.2329 3891.6042 C +-3962.9832 3892.77 -3963.8313 3891.0823 -3963.8823 3891.9856 C +-3963.9573 3891.71 -3964.1367 3891.5542 -3963.9282 3891.3142 C +-3964.5852 3891.5854 -3964.9153 3890.8774 -3965.3689 3891.6392 C +-3965.4441 3891.3623 -3965.2283 3891.2346 -3965.2952 3891.071 C +-3965.3479 3891.1306 -3965.5039 3891.3113 -3965.5723 3891.1462 c +-3965.6392 3890.9824 -3965.4761 3890.9153 -3965.3721 3890.7947 C +-3966.0432 3890.8411 -3966.1111 3891.6907 -3966.1599 3892.4883 C +-3966.5 3892.1106 -3966.6697 3892.1638 -3966.9153 3892.6873 C +-3967.0337 3892.4263 -3967.2312 3892.1531 -3966.8142 3892.0596 C +-3967.0488 3892.0215 -3968.2473 3891.677 -3968.2712 3892.3164 C +-3968.3447 3892.1543 -3968.5991 3892.2693 -3968.6609 3892.3428 C +-3969.1873 3892.3047 -3969.2336 3892.2471 -3969.7505 3892.3076 C +-3969.6072 3892.4119 L +-3969.8113 3893.1831 -3970.0369 3892.5842 -3970.4536 3892.6768 C +-3970.4417 3892.5974 L +-3971.3972 3892.0415 -3970.8542 3892.8643 -3971.7969 3892.2295 C +-3971.7456 3892.7092 L +-3971.8335 3893.7407 -3972.5808 3892.1006 -3973.1279 3892.4951 C +-3972.9304 3892.7693 L +-3973.2292 3893.1218 -3973.7656 3891.3662 -3974.0657 3891.2371 C +-3974.1311 3891.1475 -3973.9624 3891.093 -3973.8711 3891.0266 C +-3974.6567 3890.4182 -3973.9729 3891.655 -3974.5583 3891.801 C +-3974.6663 3891.4624 -3974.4192 3890.9395 -3974.8132 3890.8762 C +-3975.0095 3890.6018 -3975.9561 3891.9768 -3976.4937 3891.3267 C +-3976.3752 3891.5879 -3976.2576 3891.8486 -3976.5295 3892.0447 C +-3976.9463 3892.1382 -3977.6563 3891.0576 -3978.0327 3891.8806 C +-3978.0857 3891.8096 -3978.1057 3891.7412 -3978.1079 3891.6763 C +-3978.4265 3891.8887 -3979.1433 3892.0291 -3979.3352 3892.4756 C +-3979.6296 3890.8186 -3981.3159 3893.281 -3981.3088 3891.7534 C +-3982.2888 3891.8352 L +-3982.2632 3891.6792 L +-3982.8896 3891.5779 -3983.1111 3891.9443 -3983.3313 3892.3113 C +-3983.4761 3892.2073 -3983.3704 3892.0642 -3983.3584 3891.9844 C +-3984.2737 3891.6763 -3984.3647 3891.7412 -3985.1321 3892.5022 C +-3985.2119 3892.0066 L +-3985.4199 3892.2947 -3986.5352 3891.2295 -3987.4329 3891.8076 C +-3987.4241 3891.7515 -3987.4055 3891.655 -3987.3342 3891.5854 C +-3988.3442 3892.1672 -3989.7522 3890.2102 -3990.1223 3892.0154 C +-3990.7888 3892.4602 L +-3989.9265 3892.6006 -3990.9172 3893.2434 -3990.5625 3893.5435 C +-3990.9016 3893.6494 -3991.4392 3892.9993 -3991.0225 3892.9063 C +-3990.9573 3892.9966 L +-3990.8042 3892.0554 -3992.0288 3892.6631 -3992.0056 3892.0222 C +-3993.7024 3892.0686 -3995.3562 3891.5479 -3996.9456 3891.5078 C +-3996.7625 3892.239 L +-3997.3169 3892.197 L +-3997.4624 3892.0266 -3997.5122 3891.6252 -3997.1167 3891.655 C +-3997.3247 3891.2407 -3997.78 3892.0022 -3997.7913 3892.1616 C +-3998.5657 3891.865 -3997.4888 3891.3086 -3997.7263 3891.2913 C +-3998.0488 3891.3455 L +-3997.9761 3891.4312 L +-3998.2375 3891.73 -3998.2607 3892.0466 -3998.7361 3892.0107 C +-3999.0369 3891.8643 -3998.8904 3891.5596 -3999.0088 3891.531 C +-3999.0081 3891.4795 -3999.0481 3891.4551 -3999.1904 3891.5103 C +-3999.8889 3891.448 L +-3999.6096 3892.0254 L +-3999.9192 3892.3098 -4000.2664 3891.9951 -3999.9441 3892.6494 c +-4000.4172 3891.6406 -4002.5496 3892.2871 -4002.8401 3891.9739 C +-4003.2737 3892.3953 -4003.7017 3892.3875 -4004.2319 3892.3367 C +-4004.1001 3892.4573 -4004.0212 3893.1062 -4004.4785 3893.0266 C +-4004.3113 3891.6873 -4005.3159 3892.4451 -4005.6855 3891.4814 C +-4005.3552 3892.1206 -4006.9856 3891.6392 -4006.4673 3892.5466 C +-4006.8489 3892.4382 -4006.4905 3892.0454 -4006.78 3891.73 C +-4007.6882 3892.2493 -4008.7815 3891.3928 -4009.9041 3891.5679 C +-4009.9216 3891.7434 -4009.7336 3892.0127 -4009.9744 3892.2744 C +-4010.5671 3891.3953 L +-4010.7888 3891.4814 -4010.7712 3892.4104 -4011.1763 3891.7998 C +-4011.1191 3891.948 -4011.0337 3892.1707 -4011.1824 3892.2271 C +-4013.3816 3891.3699 -4015.6763 3892.9292 -4017.9097 3891.3186 C +-4017.6072 3891.6594 -4017.8088 3891.6936 -4018.0398 3891.7058 C +-4017.8896 3891.7876 -4018.0432 3892.1406 -4018.0137 3892.3787 C +-4018.9487 3891.7168 L +-4019.1191 3892.3784 -4019.9512 3891.7615 -4020.0488 3892.3943 C +-4019.7527 3892.2803 L +-4020.1465 3893.0266 -4019.2017 3893.9395 -4019.2593 3894.8975 C +-4018.8184 3894.0486 -4018.0967 3896.1543 -4017.3733 3894.9395 C +-4017.2136 3895.1348 -4017.5095 3895.2483 -4017.4241 3895.4702 C +-4017.2407 3895.0596 -4017.0193 3894.9739 -4016.6089 3895.1582 C +-4016.6553 3895.26 L +-4015.5024 3895.1594 -4015.0081 3895.5642 -4013.7129 3895.8342 C +-4013.8088 3895.3604 L +-4013.5305 3895.4238 -4013.4719 3895.5723 -4013.3416 3895.6907 C +-4013.0222 3894.9727 -4014.1233 3895.6504 -4013.8323 3894.8584 C +-4013.4631 3895.8223 -4011.8696 3894.8733 -4011.6201 3895.9683 C +-4011.1919 3895.9739 -4011.7456 3895.4199 -4011.3176 3895.4263 C +-4011.2041 3895.7227 L +-4011.0959 3895.3408 L +-4010.8152 3895.4038 -4010.6736 3895.7744 -4010.6631 3896.0254 C +-4010.7312 3895.9956 -4010.8567 3896.0955 -4010.9297 3896.1172 C +-4010.5657 3896.4663 -4009.9033 3895.9983 -4009.7783 3896.1118 C +-4010.1897 3895.9292 L +-4009.0212 3895.6519 -4007.5945 3896.0413 -4006.4656 3895.4382 C +-4006.5513 3895.2146 L +-4005.6892 3894.801 -4005.8608 3895.4602 -4004.9143 3895.2693 C +-4004.9487 3895.3223 L +-4004.7593 3895.0996 -4004.5063 3894.9871 -4004.2473 3895.0127 C +-4004.4863 3895.2744 -4003.7976 3895.5215 -4004.1111 3895.8113 C +-4003.1763 3895.3672 -4003.6487 3895.4624 -4003.0313 3894.6318 C +-4002.8889 3895.0022 L +-4002.6785 3894.6672 -4002.6609 3894.4902 -4002.1882 3894.3943 C +-4002.5759 3894.7124 -4001.8865 3894.9592 -4002.3208 3895.3799 C +-4001.3289 3896.1907 -4000.8479 3894.5613 -4000.3928 3895.7471 C +-3999.9373 3894.7207 -4001.2512 3895.177 -4000.9961 3894.9575 C +-4001.2097 3894.6218 -4000.6201 3894.1902 -4000.3088 3894.2935 C +-3999.9919 3894.3164 -3999.77 3895.6062 -3998.9729 3895.5867 C +-3999.0522 3895.5823 -3999.0576 3895.6594 -3999.1367 3895.655 C +-3998.8384 3895.9172 -3998.5522 3895.3008 -3998.1863 3895.7258 C +-3997.9812 3895.1055 -3997.7112 3895.7615 -3997.6521 3894.9702 C +-3998.3833 3895.1531 L +-3997.9688 3894.9463 -3997.5801 3894.02 -3996.8972 3894.469 C +-3996.9504 3894.6287 -3997.1536 3894.8386 -3997.2932 3894.9558 C +-3997.0935 3895.1895 -3996.9087 3894.801 -3996.7017 3895.0413 C +-3996.7607 3895.8335 -3997.5903 3895.2136 -3998.0344 3895.8174 C +-3997.8201 3896.1519 -3997.1943 3895.2434 -3997.4175 3896.1016 c +-3997.0967 3895.0107 -3996.6321 3896.239 -3996.0923 3895.4063 C +-3996.1279 3895.8806 L +-3996.0425 3895.8064 -3995.8655 3895.5823 -3995.7083 3895.5942 C +-3995.9929 3896.2095 L +-3995.5559 3895.6848 -3995.1504 3896.6682 -3994.7312 3896.3828 C +-3995.6089 3896.3975 -3994.9282 3895.8113 -3995.2993 3895.4646 C +-3994.2168 3894.8296 -3994.6768 3896.7058 -3993.4648 3896.4783 C +-3993.6289 3896.5454 -3994.0808 3896.1936 -3993.8242 3895.9734 C +-3993.5935 3896.071 -3993.2888 3896.2534 -3993.1472 3896.5022 C +-3992.3442 3896.4038 -3993.2705 3896.0144 -3992.9287 3895.7227 C +-3992.6553 3896.3008 -3992.5344 3895.4871 -3992.1824 3895.3022 C +-3992.1799 3895.7847 L +-3991.2649 3896.0942 -3991.9373 3894.7791 -3991.1135 3895.1531 C +-3991.4617 3895.8223 L +-3991.0322 3895.6494 L +-3991.1208 3896.1982 L +-3990.6536 3895.7913 -3990.5081 3895.8962 -3990.0503 3896.0503 C +-3990.1567 3895.7102 -3989.9905 3895.1748 -3989.5852 3895.1594 C +-3989.3088 3895.4463 -3989.74 3895.6184 -3989.1655 3895.5491 C +-3989.2952 3895.8511 -3989.4373 3896.23 -3989.6873 3895.7854 C +-3989.7129 3895.9426 -3989.8152 3896.0884 -3989.8416 3896.2434 C +-3989.5439 3896.573 -3989.0935 3896.3186 -3988.8855 3896.3142 C +-3988.9656 3896.2964 -3989.0613 3896.2703 -3989.1104 3896.2014 C +-3988.2776 3895.5332 L +-3988.1465 3895.7144 -3988.2505 3895.8599 -3988.3535 3896.0022 C +-3988.1848 3895.9502 -3988.0681 3895.7283 -3987.8201 3895.6873 C +-3987.8843 3896.0791 -3987.8689 3896.4839 -3988.22 3896.6682 C +-3987.4265 3896.2334 L +-3987.3735 3896.4038 -3987.0193 3896.7014 -3987.1223 3896.8462 C +-3986.6824 3897.0767 -3986.0432 3896.0854 -3985.46 3896.3894 C +-3985.4297 3896.3135 -3985.3689 3896.2407 -3985.2449 3896.1848 C +-3984.6968 3896.2734 -3984.2112 3896.7544 -3983.5615 3896.2168 C +-3983.1929 3896.9199 L +-3982.6841 3896.7603 -3983.6919 3896.0342 -3982.8447 3895.7693 C +-3982.2449 3895.5447 -3982.6208 3896.3687 -3982.4104 3896.5642 C +-3982.1121 3896.21 -3981.5935 3895.4888 -3981.0425 3896.0613 C +-3981.2249 3896.1936 -3981.3679 3896.0896 -3981.5383 3896.1416 C +f +1 D +-3975.2632 3895.8298 m +-3975.3848 3895.9312 -3975.6272 3896.2434 -3975.7161 3895.9592 C +-3975.5776 3895.4063 -3975.4705 3895.6707 -3975.2632 3895.8298 C +f +-3965.7241 3894.6682 m +-3965.8145 3894.8279 -3965.9543 3894.7493 -3966.1121 3894.5664 C +-3965.9976 3894.5266 -3965.8679 3894.5447 -3965.7241 3894.6682 C +f +-3939.1511 3891.3096 m +-3939.1563 3891.3174 -3939.1599 3891.323 -3939.1641 3891.3333 C +-3939.4353 3891.1453 -3939.3391 3891.219 -3939.1511 3891.3096 C +f +0 D +-3938.5879 3891.5193 m +-3938.5313 3891.4514 -3938.5352 3891.3848 -3938.5591 3891.3174 C +-3938.5984 3891.4395 -3938.7249 3891.448 -3938.8689 3891.4136 C +-3938.8289 3891.5398 -3938.7561 3891.6272 -3938.5879 3891.5193 C +f +1 D +-3999.0713 3891.7092 m +-3998.9617 3891.8352 L +-3999.2092 3891.9739 -3999.1399 3891.8486 -3999.0713 3891.7092 C +f +*U +0 D +-3966.8057 3895.3286 m +-3966.8401 3895.2471 -3966.8496 3895.157 -3966.8577 3895.0664 C +-3966.9055 3895.1475 -3966.9065 3895.2412 -3966.8057 3895.3286 C +f +-3985.4409 3896.3953 m +-3985.4473 3896.3911 -3985.4536 3896.3928 -3985.46 3896.3894 C +-3985.4705 3896.4182 -3985.4761 3896.448 -3985.4792 3896.4768 C +-3985.4409 3896.3953 L +f +-3947.3123 3895.6096 m +-3947.4282 3895.5398 -3947.4929 3895.4514 -3947.5359 3895.3604 C +-3947.5422 3895.4783 -3947.4895 3895.5779 -3947.3123 3895.6096 C +f +-3935.6033 3890.6992 m +-3935.9641 3890.8247 L +-3935.7896 3890.8008 -3935.7273 3890.9063 -3935.6392 3890.9827 C +-3935.6472 3890.8699 -3935.7161 3890.7073 -3935.6033 3890.6992 C +f +-3932.4719 3893.6848 m +-3932.4192 3893.6255 -3932.3601 3893.6782 -3932.3081 3893.6184 C +-3932.3225 3893.3943 L +-3932.5471 3893.4087 -3932.7041 3893.5896 -3932.4719 3893.6848 C +f +-3935.2693 3892.3022 m +-3935.2407 3892.7083 -3935.0144 3892.5703 -3934.7617 3892.4951 C +-3934.7769 3892.4966 -3934.7913 3892.5 -3934.8064 3892.4951 C +-3934.7319 3891.927 -3935.0012 3892.115 -3935.2693 3892.3022 C +f +-3934.7031 3892.4814 m +-3934.6252 3892.4624 -3934.5457 3892.4514 -3934.4695 3892.4712 C +-3934.4399 3892.2434 -3934.5642 3892.4238 -3934.7031 3892.4814 C +f +-3937.8735 3891.25 m +-3937.7537 3891.3542 -3937.7983 3890.7312 -3937.7305 3890.8962 C +-3937.5967 3890.3799 -3938.5295 3891.5215 -3937.8735 3891.25 C +f +-3935.0647 3893.6392 m +-3935.1553 3893.1382 L +-3935.2969 3893.5422 L +-3935.0647 3893.6392 L +f +-3937.0601 3893.2715 m +-3936.6563 3893.4104 L +-3936.6624 3893.3264 -3936.6111 3893.2766 -3936.5481 3893.239 C +-3936.7969 3893.2227 -3937.0696 3893.1233 -3937.0601 3893.2715 C +f +-3936.5481 3893.239 m +-3936.4185 3893.2493 -3936.2952 3893.2383 -3936.2231 3893.1563 C +-3936.2932 3893.1616 -3936.4441 3893.1782 -3936.5481 3893.239 C +f +-3935.6167 3893.7896 m +-3935.7361 3893.6851 L +-3936.0212 3893.6482 L +-3935.6167 3893.7896 L +f +-3941.4009 3893.1748 m +-3941.8416 3893.3184 L +-3941.8865 3893.4902 -3941.7664 3893.5952 -3941.6023 3893.5266 C +-3941.4968 3893.407 -3941.3333 3893.3408 -3941.4009 3893.1748 C +f +-3940.0681 3894.5466 m +-3940.1873 3894.4426 -3940.1953 3894.3311 -3940.2625 3894.1663 C +-3940.2759 3894.7871 L +-3940.0681 3894.5466 L +f +-3941.3533 3894.6919 m +-3941.3972 3894.8643 -3941.9929 3895.1863 -3941.4343 3895.1475 C +-3941.3896 3894.9768 -3940.9482 3894.8335 -3941.3533 3894.6919 C +f +-3947.9937 3893.9063 m +-3947.8816 3893.8982 L +-3947.8977 3892.8799 L +-3947.9937 3893.9063 L +f +-3953.8464 3896.3428 m +-3953.3242 3896.5867 -3953.7224 3895.7144 -3953.2505 3896.0193 C +-3953.1279 3895.7783 -3953.6362 3895.7703 -3953.5105 3895.5623 C +-3953.8257 3895.8164 -3953.9912 3895.6726 -3953.8464 3896.3428 C +f +-3953.5105 3895.5623 m +-3953.46 3895.5222 -3953.4065 3895.4734 -3953.3496 3895.4075 C +-3953.4409 3895.4712 -3953.4839 3895.52 -3953.5105 3895.5623 C +f +-4019.5745 3891.1924 m +-4019.9104 3890.98 L +-4019.6936 3891.3223 L +-4019.5745 3891.1924 L +f +-4020.2192 3891.948 m +-4020.2983 3891.2986 L +-4020.5 3891.8862 L +-4020.4241 3891.8574 -4020.2769 3891.801 -4020.2192 3891.948 C +f +-3974.3303 3897.1375 m +-3974.3047 3896.9814 L +-3974.3567 3896.8123 -3974.4353 3896.7998 -3974.5928 3896.7734 C +-3974.3303 3897.1375 L +f +-3978.8848 3896.6519 m +-3978.8064 3896.6653 L +-3978.9529 3896.0779 L +-3978.8848 3896.6519 L +f +-3982.7073 3897.4004 m +-3982.5513 3897.4248 -3982.3679 3897.2939 -3982.2112 3897.3186 C +-3982.5513 3897.4248 -3982.7495 3896.6682 -3982.7073 3897.4004 C +f +U +U +U +%AI8_EndBrushPattern +%AI8_BeginBrushPattern +(Unnamed Brush Pat 1) 0 A +u +0 J 0 j 1 w 10 M []0 d 0 XR +-7892.75 7764.8213 m +-7813.1685 7764.8213 L +-7813.1685 7747.2422 L +-7892.75 7747.2422 L +-7892.75 7764.8213 L +n +0 R +0.1098 0.7333 0.9725 0.0196 K +1 J 1 j 0.25 w 4 M -7828.8325 7750.1836 m +-7877.0845 7750.1836 L +S +u +u +0.3333 0.5765 0.9882 0.2549 K +0.5 w -7813.8823 7752.6284 m +-7892.0356 7752.6284 l +S +u +0 O +0.3333 0.5765 0.9882 0.2549 k +0 J 0 j 1 w 10 M -7813.9199 7751.8774 m +-7813.5049 7751.8774 -7813.1685 7752.2134 -7813.1685 7752.6284 c +-7813.1685 7753.0439 -7813.5049 7753.3804 -7813.9199 7753.3804 c +-7814.3354 7753.3804 -7814.6719 7753.0439 -7814.6719 7752.6284 c +-7814.6719 7752.2134 -7814.3354 7751.8774 -7813.9199 7751.8774 c +f +U +u +-7891.9985 7751.8774 m +-7892.4131 7751.8774 -7892.75 7752.2134 -7892.75 7752.6284 c +-7892.75 7753.0439 -7892.4131 7753.3804 -7891.9985 7753.3804 c +-7891.5835 7753.3804 -7891.2461 7753.0439 -7891.2461 7752.6284 c +-7891.2461 7752.2134 -7891.5835 7751.8774 -7891.9985 7751.8774 c +f +U +U +U +u +u +0 R +0.1098 0.7333 0.9725 0.0196 K +0.5 w 4 M -7821.3242 7749.0078 m +-7821.7363 7749.4492 l +-7828.5879 7756.7886 -7813.9067 7770 -7817.0879 7762.1719 c +-7819.9434 7755.1445 -7828.8325 7755.0757 Y +-7877.0845 7755.0757 L +-7885.9746 7755.1445 -7888.8296 7762.1719 v +-7892.0103 7770 -7877.3281 7756.7886 -7884.1807 7749.4492 C +-7884.5928 7749.0078 l +S +u +0 O +0.1098 0.7333 0.9725 0.0196 k +1 w 10 M -7819.6777 7747.2422 m +-7820.7607 7747.7856 -7822.2485 7748.3237 -7823.4009 7748.4429 c +-7821.5405 7749.2388 l +-7820.6191 7751.04 l +-7820.5801 7749.8804 -7820.1445 7748.3589 -7819.6777 7747.2422 c +f +U +u +-7886.2397 7747.2422 m +-7885.1567 7747.7856 -7883.6694 7748.3237 -7882.5166 7748.4429 c +-7884.3774 7749.2388 l +-7885.2983 7751.0391 l +-7885.3369 7749.8804 -7885.7729 7748.3589 -7886.2397 7747.2422 c +f +U +U +U +U +%AI8_EndBrushPattern +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI8_BeginPluginObject +(Adobe Brush Manager Order) +(Adobe Brush Manager Order) +( Adobe Calligraphic Brush Tool/ Rund - 5 Pt./ Adobe Calligraph) - +(ic Brush Tool/ Rund - 15 Pt./ Adobe Calligraphic Brush Tool/ O) - +(val - 3 Pt./ Adobe Calligraphic Brush Tool/ Oval - 5 Pt./ Adob) - +(e Calligraphic Brush Tool/ Flach - 5 Pt./ Adobe ArtOnPath Brus) - +(h Tool/ Kohle - Feder/ Adobe ArtOnPath Brush Tool/ Trennlinie/) - +( Adobe PatternOnPath Brush Tool/ Hier schneiden/) . +%AI8_EndPluginObject +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI8_BeginPluginObject +(Adobe Calligraphic Brush Tool) +(Flach - 5 Pt.) +(1 5 5 0 0 90 90 0 0 0 0) . +%AI8_EndPluginObject +%AI8_BeginPluginObject +(Adobe Calligraphic Brush Tool) +(Oval - 3 Pt.) +(1 3 3 26 74 15 15 0 1 0 0) . +%AI8_EndPluginObject +%AI8_BeginPluginObject +(Adobe Calligraphic Brush Tool) +(Oval - 5 Pt.) +(1 5 5 10 90 -65 35 0 1 1 0) . +%AI8_EndPluginObject +%AI8_BeginPluginObject +(Adobe Calligraphic Brush Tool) +(Rund - 15 Pt.) +(1 15 15 100 100 0 0 1 0 1 0) . +%AI8_EndPluginObject +%AI8_BeginPluginObject +(Adobe Calligraphic Brush Tool) +(Rund - 5 Pt.) +(1 5 5 100 100 0 0 0 0 0 0) . +%AI8_EndPluginObject +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI8_BeginPluginObject +(Adobe ArtOnPath Brush Tool) +(Kohle - Feder) +(1 / Unnamed 6/ / / / / 0 1 / 1 1 1 0 1 0 0 0) . +%AI8_EndPluginObject +%AI8_BeginPluginObject +(Adobe ArtOnPath Brush Tool) +(Trennlinie) +(1 / Unnamed Brush Pat 1/ / / / / 5 0.85098 0.396078 0.168627 /) - +( 1 1 1 0 1 0 0 0) . +%AI8_EndPluginObject +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI8_BeginPluginObject +(Adobe PatternOnPath Brush Tool) +(Hier schneiden) +(1 / New Pattern 4/ New Pattern 11/ New Pattern 11/ / / 0 0 / ) - +(1 1 1 0 1 0 0 0) . +%AI8_EndPluginObject +%AI5_End_NonPrinting-- +%AI5_BeginPalette +0 0 Pb +1 1 1 1 ([Passermarken]) 0 Xs +([Passermarken]) +Pc +0 0 0 0 k +(Wei\737) +Pc +0 0 0 1 k +(Schwarz) +Pc +0 1 1 0 k +(CMYK Rot) +Pc +0 0 1 0 k +(CMYK Gelb) +Pc +1 0 1 0 k +(CMYK Gr\774n) +Pc +1 0 0 0 k +(CMYK Cyan) +Pc +1 1 0 0 k +(CMYK Blau) +Pc +0 1 0 0 k +(CMYK Magenta) +Pc +0.15 1 0.9 0.1 k +(C=15 M=100 Y=90 K=10) +Pc +0 0.9 0.85 0 k +(C=0 M=90 Y=85 K=0) +Pc +0 0.8 0.95 0 k +(C=0 M=80 Y=95 K=0) +Pc +0 0.5 1 0 k +(C=0 M=50 Y=100 K=0) +Pc +0 0.35 0.85 0 k +(C=0 M=35 Y=85 K=0) +Pc +0.05 0 0.9 0 k +(C=5 M=0 Y=90 K=0) +Pc +0.2 0 1 0 k +(C=20 M=0 Y=100 K=0) +Pc +0.5 0 1 0 k +(C=50 M=0 Y=100 K=0) +Pc +0.75 0 1 0 k +(C=75 M=0 Y=100 K=0) +Pc +0.85 0.1 1 0.1 k +(C=85 M=10 Y=100 K=10) +Pc +0.9 0.3 0.95 0.3 k +(C=90 M=30 Y=95 K=30) +Pc +0.75 0 0.75 0 k +(C=75 M=0 Y=75 K=0) +Pc +0.8 0.1 0.45 0 k +(C=80 M=10 Y=45 K=0) +Pc +0.7 0.15 0 0 k +(C=70 M=15 Y=0 K=0) +Pc +0.85 0.5 0 0 k +(C=85 M=50 Y=0 K=0) +Pc +1 0.95 0.05 0 k +(C=100 M=95 Y=5 K=0) +Pc +1 1 0.25 0.25 k +(C=100 M=100 Y=25 K=25) +Pc +0.75 1 0 0 k +(C=75 M=100 Y=0 K=0) +Pc +0.5 1 0 0 k +(C=50 M=100 Y=0 K=0) +Pc +0.35 1 0.35 0.1 k +(C=35 M=100 Y=35 K=10) +Pc +0.1 1 0.5 0 k +(C=10 M=100 Y=50 K=0) +Pc +0 0.95 0.2 0 k +(C=0 M=95 Y=20 K=0) +Pc +0.25 0.25 0.4 0 k +(C=25 M=25 Y=40 K=0) +Pc +0.4 0.45 0.5 0.05 k +(C=40 M=45 Y=50 K=5) +Pc +0.5 0.5 0.6 0.25 k +(C=50 M=50 Y=60 K=25) +Pc +0.55 0.6 0.65 0.4 k +(C=55 M=60 Y=65 K=40) +Pc +0.25 0.4 0.65 0 k +(C=25 M=40 Y=65 K=0) +Pc +0.3 0.5 0.75 0.1 k +(C=30 M=50 Y=75 K=10) +Pc +0.35 0.6 0.8 0.25 k +(C=35 M=60 Y=80 K=25) +Pc +0.4 0.65 0.9 0.35 k +(C=40 M=65 Y=90 K=35) +Pc +0.4 0.7 1 0.5 k +(C=40 M=70 Y=100 K=50) +Pc +0.5 0.7 0.8 0.7 k +(C=50 M=70 Y=80 K=70) +Pc +Bb +2 (Wei\737, Schwarz) 0 0 0 1 1 0 0 1 0 0 Bg +0 BB +(Wei\737, Schwarz) +Pc +Bb +2 (Orange, Gelb) 0 0 0 1 1 0 0 1 0 0 Bg +0 BB +(Orange, Gelb) +Pc +Bb +2 (Verblassender Himmel) 0 0 0 1 1 0 0 1 0 0 Bg +0 BB +(Verblassender Himmel) +Pc +Bb +0 0 0 0 Bh +2 (Sehr weiche schwarze Vignette) 0 0 0 1 1 0 0 1 0 0 Bg +0 BB +(Sehr weiche schwarze Vignette) +Pc +(Pompadour) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p +(Pompadour) +Pc +0 0 0 1 k +(C=0 M=0 Y=0 K=100) +Pc +0 0 0 0.899994 k +(C=0 M=0 Y=0 K=90) +Pc +0 0 0 0.799988 k +(C=0 M=0 Y=0 K=80) +Pc +0 0 0 0.699997 k +(C=0 M=0 Y=0 K=70) +Pc +0 0 0 0.599991 k +(C=0 M=0 Y=0 K=60) +Pc +0 0 0 0.5 k +(C=0 M=0 Y=0 K=50) +Pc +0 0 0 0.399994 k +(C=0 M=0 Y=0 K=40) +Pc +0 0 0 0.299988 k +(C=0 M=0 Y=0 K=30) +Pc +0 0 0 0.199997 k +(C=0 M=0 Y=0 K=20) +Pc +0 0 0 0.099991 k +(C=0 M=0 Y=0 K=10) +Pc +0 0 0 0.049988 k +(C=0 M=0 Y=0 K=5) +Pc +0 1 1 0 k +(C=0 M=100 Y=100 K=0) +Pc +0 0.75 1 0 k +(C=0 M=75 Y=100 K=0) +Pc +0 0.1 0.95 0 k +(C=0 M=10 Y=95 K=0) +Pc +0.85 0.1 1 0 k +(C=85 M=10 Y=100 K=0) +Pc +1 0.9 0 0 k +(C=100 M=90 Y=0 K=0) +Pc +0.6 0.9 0.000031 0.000031 k +(C=60 M=90 Y=0 K=0) +Pc +PB +%AI5_EndPalette +%%EndSetup +%AI5_BeginLayer +1 1 1 1 0 0 1 0 79 128 255 0 50 Lb +(Ebene 1) Ln +0 A +u +u +*u +0 O +0.912474 0.787625 0.619837 0.97467 k +0 J 0 j 1 w 10 M []0 d 0 XR +360.4355 -411.79 m +361.0537 -411.79 361.7305 -411.6777 362.208 -411.959 c +362.208 -412.0996 362.292 -412.0996 362.292 -412.1836 c +361.9268 -412.0996 362.377 -412.5781 362.292 -412.1836 c +362.377 -412.1836 362.4619 -412.1836 362.5459 -412.1836 c +362.6025 -412.3247 362.6309 -412.1836 362.5459 -412.1836 c +362.5176 -412.043 362.3213 -412.043 362.208 -411.959 c +362.292 -411.6494 362.6865 -411.79 362.8545 -411.79 c +367.0771 -411.6211 371.5508 -411.8745 375.5459 -411.8745 c +375.4619 -413.5347 375.6592 -416.0391 375.4619 -417.8398 c +375.04 -417.6714 375.1523 -417.3618 375.04 -416.9678 c +374.8994 -416.7988 374.3369 -416.0674 374.6455 -416.6304 c +374.3643 -416.7144 374.4219 -416.855 374.4775 -417.0522 c +374.8711 -416.8833 374.6738 -417.1362 374.8145 -417.2773 c +374.9551 -417.6431 375.1523 -417.8965 375.5459 -418.0933 c +375.3779 -419.2754 375.7715 -421.02 375.3779 -422.2871 c +375.6592 -422.8496 375.5459 -423.7207 375.5459 -424.5371 c +375.5459 -425.3818 375.6592 -426.3379 375.3779 -426.9004 c +375.1523 -427.0977 375.4902 -426.957 375.5459 -427.127 c +375.6309 -427.4355 375.3496 -427.3516 375.3779 -427.6045 c +375.6865 -428.4492 375.5459 -430.1377 375.4619 -431.0664 c +373.9707 -431.0381 372.2822 -431.1787 370.9316 -431.0098 c +370.9316 -429.8848 370.9316 -428.6172 370.9316 -427.4639 c +370.9316 -426.2822 370.8193 -425.1289 371.1846 -424.5371 c +370.5938 -424.3398 371.3818 -423.6934 370.8467 -423.75 c +370.96 -423.3555 371.5225 -423.6367 371.748 -423.2422 c +371.3262 -423.1582 371.0156 -423.4395 370.7627 -423.2422 c +370.5654 -423.4395 370.6504 -423.8906 370.1992 -423.834 c +370.0586 -423.6094 370.3125 -423.2422 369.8906 -423.1016 c +369.8623 -423.5527 369.5254 -423.2148 369.4961 -423.5801 c +369.4404 -423.5801 369.3838 -423.5801 369.3281 -423.5801 c +369.2705 -423.4688 369.2148 -423.5801 369.3281 -423.5801 c +369.2705 -423.834 369.4688 -423.6934 369.4961 -423.5801 c +370.0879 -424.002 367.8916 -423.8057 367.6396 -423.75 c +367.6104 -423.6367 367.5547 -423.6934 367.5547 -423.75 c +367.4424 -423.7773 366.8516 -423.918 366.5703 -423.75 c +366.6543 -423.75 366.6543 -423.7207 366.6543 -423.665 c +366.6826 -423.665 366.7109 -423.665 366.7383 -423.665 c +366.7383 -423.75 366.8232 -423.7207 366.9072 -423.75 c +366.9072 -423.665 366.7949 -423.665 366.7383 -423.665 c +366.7109 -423.5801 366.6543 -423.6094 366.6543 -423.665 c +366.5977 -423.6367 366.5703 -423.6934 366.5703 -423.75 c +366.457 -423.7207 366.4297 -423.6094 366.3447 -423.5801 c +366.4297 -423.9746 365.9229 -423.8057 365.7813 -423.834 c +363.8965 -423.9746 361.6738 -423.7773 360.041 -423.75 c +360.1543 -423.6934 360.041 -423.6367 360.041 -423.75 c +359.9287 -423.8613 359.6191 -423.8057 359.3936 -423.834 c +359.3936 -426.2539 359.3936 -428.6738 359.3936 -431.0664 c +357.875 -431.0664 356.3828 -431.0664 354.8633 -431.0664 c +354.8633 -424.6504 354.8633 -418.2339 354.8633 -411.79 c +356.6934 -411.79 358.6904 -411.79 360.4355 -411.79 c +f +356.2422 -419.1343 m +F +356.7207 -417.1929 m +F +1 D +357.6211 -416.1519 m +357.6211 -416.0952 357.6211 -416.0391 357.6211 -415.9829 c +357.5371 -415.9829 357.4521 -415.9829 357.3682 -415.9829 c +357.3682 -416.0391 357.3682 -416.0952 357.3682 -416.1519 c +357.4521 -416.1519 357.5371 -416.1519 357.6211 -416.1519 c +f +0 D +357.4521 -420.0347 m +F +357.7061 -420.1196 m +F +1 D +358.0156 -419.5566 m +358.0723 -419.5288 358.1836 -419.5288 358.1836 -419.4722 c +358.1279 -419.4722 358.0156 -419.4722 358.0156 -419.5566 c +f +358.2686 -416.2358 m +358.3242 -416.208 358.4092 -416.2358 358.4375 -416.1519 c +358.3535 -416.1802 358.2686 -416.1519 358.2686 -416.2358 c +f +360.5205 -421.8076 m +360.2949 -421.5547 360.7725 -421.4702 360.5205 -421.2451 c +360.5205 -421.3296 360.4355 -421.3013 360.3506 -421.3296 c +360.3506 -421.4702 360.4355 -421.7236 360.21 -421.6387 c +360.2666 -421.583 360.3232 -421.4141 360.21 -421.4141 c +359.9854 -421.4419 359.6475 -421.5547 359.2256 -421.3296 c +359.3379 -420.9639 358.8311 -421.4702 358.7461 -421.1606 c +358.8867 -421.1328 358.9434 -421.02 358.916 -420.8232 c +358.6348 -420.7666 358.6055 -420.9639 358.5781 -421.1606 c +358.6621 -421.3296 358.9717 -421.3013 358.916 -421.6387 c +358.5781 -421.7798 358.4092 -421.7798 358.2686 -421.9766 c +358.5498 -422.0605 358.9434 -421.9204 359.1416 -421.6387 c +359.3096 -421.7798 359.2529 -421.6387 359.4785 -421.6387 c +359.6191 -422.0889 359.7598 -421.6108 360.126 -421.8076 c +360.0977 -421.7236 360.126 -421.667 360.21 -421.6387 c +360.2666 -421.9204 360.3789 -421.6387 360.5205 -421.8076 c +f +0 D +358.3535 -421.3296 m +F +1 D +358.4375 -415.251 m +358.4375 -415.5889 358.9717 -415.73 359.0566 -415.5044 c +358.8027 -415.4766 358.7754 -415.1948 358.4375 -415.251 c +f +358.4941 -414.041 m +358.4375 -414.3506 358.8867 -414.3789 358.916 -414.126 c +358.7197 -414.1821 358.7461 -413.9849 358.4941 -414.041 c +f +358.7461 -422.2871 m +358.7197 -422.0332 359.1416 -422.2578 359.0566 -421.9766 c +358.8027 -421.9766 358.6348 -422.0605 358.5781 -422.2871 c +358.6348 -422.2871 358.6904 -422.2871 358.7461 -422.2871 c +358.6621 -422.624 359.001 -422.3145 358.7461 -422.2871 c +f +0 D +358.6621 -423.9746 m +F +359.001 -421.3296 m +359.0566 -421.3296 359.1416 -421.3296 359.2256 -421.3296 c +359.3379 -421.667 358.9717 -421.5547 359.001 -421.3296 c +f +1 D +359.001 -419.5566 m +359.0566 -419.5288 359.1416 -419.5288 359.1416 -419.4722 c +359.084 -419.4722 359.001 -419.4722 359.001 -419.5566 c +f +359.1416 -421.8921 m +359.1973 -422.0605 359.0566 -422.4277 359.2256 -422.4551 c +359.4229 -422.2012 359.3662 -422.0605 359.1416 -421.8921 c +f +359.1416 -415.7578 m +359.2256 -415.73 359.3096 -415.7578 359.3096 -415.6733 c +359.2529 -415.6733 359.1416 -415.6733 359.1416 -415.7578 c +f +359.6475 -419.8662 m +361.6738 -419.5566 363.8682 -419.7817 366.0068 -419.6973 c +366.0908 -419.8101 366.0908 -420.0068 366.2607 -420.0347 c +366.373 -419.8379 366.0352 -419.7256 366.2607 -419.6973 c +366.9072 -419.6694 367.4424 -419.894 368.2021 -419.6973 c +368.2305 -419.8101 368.3428 -419.8379 368.3428 -419.9507 c +368.1465 -419.894 368.0615 -419.979 368.1172 -420.1758 c +368.0332 -420.1758 368.0332 -420.2319 368.0332 -420.2603 c +367.667 -420.4009 367.4697 -420.1758 367.2178 -420.3442 c +367.5264 -420.2881 367.3857 -420.6538 367.6396 -420.6826 c +367.6104 -420.4292 368.0059 -420.6538 368.0332 -420.2603 c +368.0889 -420.2881 368.1172 -420.2319 368.1172 -420.1758 c +368.624 -419.894 369.1025 -419.894 369.5518 -420.0347 c +369.6094 -420.1475 369.666 -420.0068 369.5518 -420.0347 c +369.918 -419.894 370.1436 -419.9507 370.1992 -419.6973 c +370.1992 -420.1758 370.4531 -419.5566 370.5371 -420.0347 c +370.6504 -419.5288 371.0156 -420.2319 371.1846 -419.7817 c +370.8193 -419.6128 371.0156 -419.416 371.2695 -419.0498 c +371.2695 -418.9375 371.0156 -418.8252 370.9316 -418.5718 c +370.791 -417.5864 371.2695 -416.8271 370.8467 -416.3208 c +370.5654 -416.4331 370.2285 -416.3208 369.8906 -416.3208 c +367.7803 -416.2925 364.7402 -416.6021 362.7715 -416.2358 c +362.6309 -416.3486 362.3486 -416.3486 362.124 -416.4048 c +362.1797 -416.1235 361.8418 -416.2925 362.0674 -416.0674 c +361.6455 -416.4614 360.8574 -416.377 360.2949 -416.2358 c +360.2666 -416.1519 359.9854 -415.9546 359.957 -416.1519 c +360.21 -416.3486 359.5635 -416.3486 359.3936 -416.4048 c +359.2822 -417.3618 359.6475 -418.8252 359.1416 -419.3877 c +359.4229 -419.3877 359.2822 -419.6128 359.1416 -419.6973 c +359.1973 -419.8662 359.5908 -419.6973 359.6475 -419.8662 c +359.5068 -419.9224 359.6475 -419.9507 359.6475 -419.8662 c +f +0 D +359.1416 -418.9092 m +F +1 D +359.5635 -420.1758 m +359.5068 -420.1758 359.4502 -420.1758 359.3936 -420.1758 c +359.2529 -420.4009 359.6758 -420.4292 359.6475 -420.2603 c +359.9854 -420.2881 359.6475 -419.9507 359.6475 -420.2603 c +359.5635 -420.2881 359.5635 -420.2319 359.5635 -420.1758 c +f +359.3936 -420.8232 m +359.2822 -420.9639 359.873 -420.7944 359.7041 -420.7666 c +359.5908 -420.7104 359.4502 -420.7666 359.3936 -420.8232 c +f +360.6045 -415.1104 m +360.5479 -414.8574 360.0137 -414.8291 359.873 -414.9414 c +359.8164 -414.7729 359.7314 -414.6602 359.5635 -414.6318 c +359.4785 -414.6885 359.4785 -414.8008 359.4785 -414.9414 c +359.6191 -414.9414 359.7314 -414.9414 359.873 -414.9414 c +360.1543 -415.4766 360.1816 -414.8291 360.6045 -415.1104 c +f +0 D +359.4785 -420.5132 m +F +359.4785 -423.2422 m +F +1 D +359.5635 -422.2871 m +359.5635 -422.4834 359.6475 -422.4277 359.6475 -422.2871 c +359.6758 -422.2871 359.6758 -422.2871 359.7041 -422.2871 c +359.7598 -422.3984 359.8164 -422.2871 359.7041 -422.2871 c +359.7314 -422.2305 359.7881 -422.2012 359.7881 -422.1172 c +360.2383 -422.2012 359.9004 -421.8921 359.7881 -422.1172 c +359.7041 -422.1172 359.7314 -421.9766 359.6475 -421.9766 c +359.6475 -422.0889 359.5635 -422.1172 359.5635 -422.2012 c +359.4502 -422.2305 359.5068 -422.2871 359.5635 -422.2871 c +f +359.5635 -415.8418 m +359.5342 -416.0674 359.957 -416.1519 359.957 -415.8984 c +359.7598 -415.814 359.8164 -415.9268 359.5635 -415.8418 c +f +0 D +359.5635 -422.2012 m +359.5908 -422.2012 359.6475 -422.2305 359.6475 -422.2871 c +359.6191 -422.2871 359.5908 -422.2871 359.5635 -422.2871 c +359.5635 -422.2578 359.5635 -422.2305 359.5635 -422.2012 c +f +359.6475 -423.3281 m +F +359.7041 -423.1875 m +F +359.7881 -413.9849 m +F +359.7881 -420.0347 m +F +359.7881 -420.4292 m +F +1 D +360.041 -422.9336 m +360.1543 -422.9053 360.0693 -422.6797 360.21 -422.6797 c +360.1816 -422.793 360.21 -422.8496 360.2949 -422.8496 c +360.2949 -423.1016 360.6045 -422.7646 360.2949 -422.8496 c +360.2949 -422.7646 360.2666 -422.709 360.21 -422.6797 c +360.21 -422.6523 360.21 -422.624 y +359.8164 -422.5684 360.0693 -422.6797 360.041 -422.9336 c +359.7041 -422.8496 360.0137 -423.1875 360.041 -422.9336 c +f +359.957 -413.1689 m +360.0137 -413.1406 360.126 -413.1689 360.126 -413.0845 c +360.0693 -413.1128 359.957 -413.0845 359.957 -413.1689 c +f +0 D +359.957 -413.9849 m +F +359.957 -420.1196 m +F +359.957 -420.4292 m +F +360.041 -422.5391 m +F +1 D +360.2949 -423.1016 m +360.4072 -423.0459 360.2666 -422.9902 360.2949 -423.1016 c +359.8447 -423.0176 360.1816 -423.3281 360.2949 -423.1016 c +f +360.5205 -412.6904 m +360.5205 -412.4653 360.5205 -412.2686 360.2949 -412.2686 c +360.2666 -412.4092 360.0693 -412.3525 360.126 -412.522 c +360.1816 -412.6338 360.3789 -412.6338 360.5205 -412.6904 c +f +360.4355 -415.8984 m +360.4639 -415.645 360.0693 -415.5889 360.126 -415.8984 c +360.2383 -415.8984 360.3232 -415.8984 360.4355 -415.8984 c +f +360.126 -420.4292 m +360.126 -420.5132 360.2666 -420.5415 360.2949 -420.4292 c +360.1816 -420.4292 360.1543 -420.3164 360.126 -420.4292 c +f +0 D +360.21 -416.2358 m +360.2383 -416.2358 360.2666 -416.2358 360.2949 -416.2358 c +360.2949 -416.2925 360.21 -416.3208 360.21 -416.2358 c +f +1 D +360.21 -419.9507 m +360.21 -420.0347 360.3506 -420.0347 360.3506 -419.9507 c +360.2666 -419.9507 360.2383 -419.8379 360.21 -419.9507 c +f +360.2949 -420.6826 m +360.3506 -420.6538 360.4355 -420.6826 360.4355 -420.5977 c +360.3789 -420.5977 360.2949 -420.5977 360.2949 -420.6826 c +f +0 D +360.2949 -423.3281 m +F +360.3506 -414.7729 m +F +360.3506 -423.4961 m +F +1 D +360.4355 -421.9766 m +360.5479 -421.9204 360.4355 -421.8643 360.4355 -421.9766 c +360.21 -421.9766 360.5205 -422.2871 360.4355 -421.9766 c +f +0 D +360.4355 -415.6733 m +F +1 D +360.4355 -422.6797 m +360.5479 -422.793 360.7451 -422.793 360.7725 -422.624 c +360.6318 -422.624 360.4639 -422.5957 360.4355 -422.6797 c +f +0 D +360.6045 -413.1689 m +F +360.6045 -413.9004 m +F +360.6045 -414.126 m +F +360.6045 -421.8076 m +F +360.6045 -422.5391 m +F +360.6045 -423.3281 m +F +1 D +360.6885 -414.6318 m +360.6318 -414.4912 360.5762 -414.6318 360.6885 -414.6318 c +360.7451 -414.7446 360.7725 -414.604 360.6885 -414.6318 c +f +360.6885 -414.2944 m +360.8018 -414.2666 360.8291 -414.3789 360.9131 -414.3789 c +361.0537 -414.1821 360.6611 -414.1538 360.6885 -414.2944 c +360.5762 -414.3506 360.6885 -414.4072 360.6885 -414.2944 c +f +0 D +360.6885 -415.0264 m +F +360.6885 -421.0762 m +F +1 D +360.7725 -420.2603 m +360.7168 -420.1475 360.6611 -420.2881 360.7725 -420.2603 c +360.8018 -420.4009 360.8574 -420.2603 360.7725 -420.2603 c +f +360.9131 -412.7749 m +360.8018 -412.4653 360.6611 -413.0283 360.9131 -412.7749 c +360.9697 -412.8872 361.0273 -412.7466 360.9131 -412.7749 c +f +0 D +360.7725 -421.8076 m +F +1 D +360.7725 -422.5391 m +360.9697 -422.5957 361.2236 -422.6797 361.335 -422.4551 c +361.168 -422.4834 360.8018 -422.3418 360.7725 -422.5391 c +f +360.8574 -416.1519 m +360.8857 -416.1519 360.9424 -416.1519 360.998 -416.1519 c +361.0273 -416.0952 361.083 -416.0674 361.083 -415.9829 c +361.1104 -415.9829 361.1387 -415.9829 361.168 -415.9829 c +360.9697 -416.377 361.5322 -416.208 361.7305 -416.1519 c +361.5605 -416.1802 361.4766 -416.1235 361.5049 -415.9829 c +361.5322 -415.9829 361.5605 -415.9829 v +361.5049 -415.645 361.0537 -415.8984 361.5049 -415.9829 c +361.3916 -415.9829 361.2793 -415.9829 361.168 -415.9829 c +361.168 -415.7856 361.083 -415.8418 361.083 -415.9829 c +360.9697 -416.0112 360.9424 -415.9268 360.8574 -415.8984 c +360.8018 -415.7856 360.7451 -415.9268 360.8574 -415.8984 c +360.8574 -415.9829 360.8574 -416.0674 360.8574 -416.1519 c +f +361.251 -415.1948 m +361.1387 -415.2231 360.8291 -415.0825 360.8574 -415.251 c +360.9424 -415.3076 360.998 -415.4482 360.998 -415.5889 c +360.8857 -415.645 361.0273 -415.6733 360.998 -415.5889 c +361.1104 -415.5889 361.1387 -415.5605 361.168 -415.5044 c +361.3916 -415.4199 361.0537 -415.2793 361.251 -415.1948 c +361.4492 -415.1948 361.5898 -415.1387 361.6455 -415.0264 c +361.7578 -414.9697 361.6455 -414.9136 361.6455 -415.0264 c +361.4492 -414.998 361.251 -414.998 361.251 -415.1948 c +f +360.9131 -414.9414 m +360.8857 -414.8291 360.8291 -414.9414 360.9131 -414.9414 c +360.8291 -415.3076 361.3086 -414.8574 360.9131 -414.9414 c +f +360.9131 -420.4292 m +360.9424 -420.5415 361.0273 -420.4854 361.083 -420.4292 c +361.083 -420.3442 360.9424 -420.3164 360.9131 -420.4292 c +f +362.0674 -413.2534 m +362.1514 -412.8311 361.7305 -413.0562 361.5605 -413.0845 c +361.4492 -412.9722 361.083 -412.6904 360.998 -413 c +361.3643 -413.0845 361.5605 -413.3096 362.0674 -413.2534 c +362.0957 -413.3657 362.1514 -413.2251 362.0674 -413.2534 c +f +360.998 -414.7729 m +361.1104 -414.8853 361.3916 -414.9136 361.4199 -414.6885 c +361.2793 -414.7446 360.998 -414.604 360.998 -414.7729 c +f +0 D +361.083 -414.041 m +F +361.083 -421.8076 m +F +361.168 -415.5044 m +F +1 D +361.335 -414.5479 m +361.3086 -414.2944 360.998 -414.604 361.335 -414.5479 c +361.3916 -414.6602 361.4199 -414.5195 361.335 -414.5479 c +f +0 D +361.335 -414.21 m +F +1 D +361.8145 -421.7236 m +361.6172 -421.667 361.4766 -421.6387 361.335 -421.8076 c +361.5049 -421.8359 361.7578 -421.9766 361.8145 -421.7236 c +f +0 D +361.4199 -414.4634 m +F +361.5605 -415.251 m +F +361.6455 -415.8418 m +F +1 D +361.7305 -412.8311 m +361.7861 -412.8311 361.8984 -412.8311 361.8984 -412.7749 c +361.8418 -412.7749 361.7305 -412.7749 361.7305 -412.8311 c +f +361.8145 -414.126 m +361.7305 -414.2666 362.124 -414.0972 362.0674 -414.041 c +361.9824 -413.9849 361.8145 -414.126 y +f +0 D +361.8145 -414.6885 m +F +361.8145 -415.9829 m +F +361.8984 -414.4634 m +F +1 D +361.9824 -422.624 m +362.0957 -422.5684 361.9551 -422.5117 361.9824 -422.624 c +361.8711 -422.6523 361.9824 -422.709 361.9824 -422.624 c +f +0 D +361.9824 -415.8984 m +F +1 D +362.208 -420.8232 m +362.0674 -420.8232 362.0107 -420.9072 361.9824 -420.9917 c +362.124 -420.9917 362.1797 -420.9351 362.208 -420.8232 c +f +0 D +362.124 -413.1689 m +F +1 D +362.124 -415.1104 m +362.1514 -415.1948 362.2363 -415.167 362.292 -415.1104 c +362.292 -415.0264 362.1514 -414.998 362.124 -415.1104 c +f +362.208 -413.647 m +362.3486 -413.6753 362.1797 -413.7598 362.208 -413.9004 c +362.6025 -413.8726 362.6865 -413.8726 362.8545 -413.8159 c +362.9121 -413.9287 362.9688 -413.8159 362.8545 -413.8159 c +362.7715 -413.563 363.0244 -413.4502 362.7715 -413.1689 c +362.9121 -413.1128 362.7715 -413.0562 362.7715 -413.1689 c +362.3213 -413.2251 362.4053 -413.4224 362.208 -413.647 c +f +0 D +362.208 -416.2358 m +F +362.292 -414.8574 m +F +362.6309 -414.4634 m +F +1 D +362.7139 -420.4292 m +362.7715 -420.4009 362.8545 -420.4292 362.8545 -420.3442 c +362.7988 -420.3726 362.7139 -420.3442 362.7139 -420.4292 c +f +0 D +362.8545 -420.0347 m +F +363.1094 -421.2451 m +F +363.1934 -420.7666 m +F +1 D +363.502 -414.6885 m +363.4463 -414.9697 363.8125 -415.0264 363.8398 -414.7729 c +363.6719 -414.8008 363.6426 -414.6885 363.502 -414.6885 c +f +0 D +364.7969 -420.5132 m +F +1 D +364.9658 -422.8496 m +364.9658 -422.9609 365.0508 -422.9053 365.1348 -422.8496 c +365.1348 -422.7646 364.9941 -422.7646 364.9658 -422.8496 c +f +0 D +365.1914 -420.2603 m +F +365.6133 -422.2871 m +F +1 D +366.0068 -422.7646 m +366.0352 -423.1016 366.373 -422.7646 366.0068 -422.7646 c +366.0352 -422.6523 365.9229 -422.624 365.9229 -422.5391 c +366.0352 -422.4834 365.9229 -422.4277 365.9229 -422.5391 c +365.7813 -422.5117 365.8096 -422.9053 366.0068 -422.7646 c +f +0 D +365.8389 -421.9766 m +F +366.0068 -412.437 m +F +1 D +366.2607 -421.8076 m +366.2041 -422.0332 366.4297 -421.9482 366.4854 -422.0332 c +366.5137 -421.8643 366.4297 -421.7798 366.2607 -421.8076 c +f +0 D +366.3447 -420.9072 m +F +1 D +366.4854 -423.3281 m +366.4854 -423.4121 366.626 -423.4395 366.6543 -423.3281 c +366.5703 -423.3555 366.542 -423.2148 366.4854 -423.3281 c +f +0 D +366.4854 -423.5801 m +F +1 D +366.6543 -422.4551 m +366.542 -422.6523 366.9355 -422.6797 366.9072 -422.5391 c +366.7949 -422.5391 366.7949 -422.4277 366.6543 -422.4551 c +f +366.9922 -423.4961 m +366.9639 -423.3838 366.9922 -423.2148 366.8232 -423.2422 c +366.8232 -423.3555 366.7666 -423.4395 366.7383 -423.4961 c +366.8232 -423.4961 366.9072 -423.4961 366.9922 -423.4961 c +f +366.9072 -422.6797 m +366.9072 -422.8496 366.9639 -422.9609 367.0479 -423.0176 c +367.0771 -422.8203 367.0479 -422.709 366.9072 -422.6797 c +f +367.1328 -423.4121 m +367.2451 -423.3555 367.1328 -423.3281 367.1328 -423.4121 c +367.0205 -423.4688 367.1611 -423.5244 367.1328 -423.4121 c +f +367.3857 -423.0176 m +367.499 -422.8203 367.1045 -422.7646 367.1328 -422.9336 c +367.1885 -422.9336 367.2451 -422.9336 367.2178 -423.0176 c +367.2734 -423.0176 367.3291 -423.0176 367.3857 -423.0176 c +f +0 D +367.1328 -422.0332 m +F +367.3018 -420.9917 m +F +1 D +367.6396 -423.3281 m +367.6396 -423.3838 367.6396 -423.4395 367.6953 -423.4121 c +367.6953 -423.2988 367.6104 -422.8203 367.4697 -423.1016 c +367.6953 -423.1582 367.3857 -423.3838 367.3857 -423.4961 c +367.5547 -423.5244 367.5547 -423.3838 367.6396 -423.3281 c +f +368.1172 -423.2422 m +368.1172 -423.2148 368.6523 -423.1875 368.3428 -422.9336 c +368.2871 -423.0459 368.2305 -422.9053 368.0332 -423.0176 c +368.0332 -422.9902 368.0332 -422.9609 368.0332 -422.9336 c +368.1465 -422.877 368.0332 -422.8496 368.0332 -422.9336 c +367.7803 -422.9053 367.7246 -422.6523 367.5547 -422.9336 c +367.8652 -422.8496 367.8359 -423.2148 368.0332 -423.0176 c +368.0332 -423.1309 368.0059 -423.2422 368.1172 -423.2422 c +f +0 D +367.6396 -423.75 m +367.6396 -423.7773 367.5547 -423.834 367.5547 -423.75 c +367.583 -423.75 367.6104 -423.75 367.6396 -423.75 c +f +1 D +367.6396 -422.5391 m +367.6953 -422.5117 367.7803 -422.5391 367.7803 -422.4551 c +367.7246 -422.4551 367.6396 -422.4551 367.6396 -422.5391 c +f +367.6953 -421.2451 m +367.751 -421.2734 368.0059 -421.4419 368.0332 -421.2451 c +367.9482 -421.2451 367.9766 -421.1328 367.9482 -421.0762 c +367.8916 -421.0762 367.8359 -421.0762 367.7803 -421.0762 c +367.7803 -421.1328 367.6953 -421.1606 367.6953 -421.2451 c +367.583 -421.3013 367.7246 -421.3296 367.6953 -421.2451 c +f +0 D +367.6953 -422.2871 m +F +1 D +367.7803 -423.2422 m +367.8359 -423.2422 367.9482 -423.2422 367.9482 -423.1875 c +367.8916 -423.1875 367.7803 -423.1875 367.7803 -423.2422 c +f +367.9482 -420.8232 m +367.5547 -420.8794 368.1738 -421.0762 368.2578 -421.1606 c +368.2578 -421.02 368.3428 -421.02 368.3428 -420.9072 c +368.2871 -420.9072 368.2578 -420.8232 368.2021 -420.8232 c +368.3711 -420.5698 368.6807 -420.5698 368.9053 -420.9072 c +368.9336 -420.8511 368.9893 -420.8232 368.9893 -420.7666 c +369.3281 -420.6538 369.3838 -420.7104 369.4961 -420.9917 c +369.3838 -421.02 369.4404 -421.0762 369.4961 -421.0762 c +369.5254 -421.1885 369.5811 -421.0762 369.4961 -421.0762 c +369.4961 -421.0479 369.4961 -421.02 369.4961 -420.9917 c +369.8623 -420.8232 369.7217 -420.626 369.9746 -420.3442 c +369.7773 -420.2881 369.6924 -420.3442 369.4111 -420.2603 c +369.4111 -420.3726 369.3838 -420.4009 369.3281 -420.4292 c +369.2705 -420.3164 369.2148 -420.4292 369.3281 -420.4292 c +369.2432 -420.5132 369.1592 -420.5977 369.0742 -420.6826 c +368.9893 -420.5698 368.9336 -420.4292 368.8486 -420.3442 c +368.8213 -420.2603 368.7646 -420.3164 368.7646 -420.3442 c +368.624 -420.5132 368.5117 -420.3164 368.3428 -420.2603 c +368.3428 -420.5132 368.1172 -420.5132 368.0332 -420.6826 c +367.8359 -420.6826 367.9209 -420.7383 367.9482 -420.8232 c +f +367.8652 -422.5391 m +367.9482 -422.5117 368.0059 -422.6523 368.0332 -422.5391 c +368.0332 -422.4551 367.8916 -422.4277 367.8652 -422.5391 c +f +0 D +368.2021 -420.8232 m +368.2021 -420.9351 367.9766 -420.9351 367.9482 -420.8232 c +368.0332 -420.8232 368.1172 -420.8232 368.2021 -420.8232 c +f +1 D +368.1172 -423.665 m +367.7803 -423.5801 368.0889 -423.8906 368.1172 -423.665 c +368.1738 -423.665 368.1738 -423.6367 368.2021 -423.5801 c +368.3145 -423.5244 368.1738 -423.4688 368.2021 -423.5801 c +368.1172 -423.5527 368.1172 -423.6094 368.1172 -423.665 c +f +0 D +368.0332 -420.6826 m +F +368.0332 -421.4141 m +F +368.1172 -421.3296 m +F +1 D +368.9053 -421.8921 m +368.8486 -421.9766 368.7646 -421.9204 368.5117 -421.9766 c +368.4277 -421.8921 368.4834 -421.667 368.2578 -421.7236 c +368.2305 -421.6108 368.1738 -421.7236 368.2578 -421.7236 c +368.1465 -422.1455 369.1592 -422.2871 368.9053 -421.8921 c +f +368.3428 -422.624 m +368.4277 -422.5957 368.5117 -422.5957 368.5117 -422.5391 c +368.4551 -422.5391 368.3428 -422.5391 368.3428 -422.624 c +f +0 D +368.5117 -420.8232 m +F +368.5957 -422.9336 m +F +368.6807 -420.9917 m +F +368.6807 -423.5801 m +F +368.8486 -420.3442 m +368.8486 -420.4009 368.7646 -420.4292 368.7646 -420.3442 c +368.793 -420.3442 368.8213 -420.3442 368.8486 -420.3442 c +f +1 D +368.7646 -422.6797 m +369.0186 -422.5957 369.1865 -423.0176 369.3281 -422.7646 c +369.1592 -422.793 369.2705 -422.4834 369.2432 -422.3711 c +369.2998 -422.3418 369.4111 -422.3711 369.4111 -422.2871 c +369.0742 -422.2305 369.1592 -422.2305 368.8486 -422.2871 c +368.8486 -422.4834 368.8213 -422.5957 368.7646 -422.6797 c +f +368.7646 -423.2422 m +368.8213 -423.2422 368.9053 -423.2422 368.9053 -423.1875 c +368.8486 -423.1875 368.7646 -423.1875 368.7646 -423.2422 c +f +0 D +368.9053 -421.8076 m +F +368.9893 -413.3374 m +F +368.9893 -420.7666 m +F +368.9893 -421.0762 m +F +1 D +369.0742 -421.4702 m +369.0186 -421.3574 368.9893 -421.498 369.0742 -421.4702 c +369.0459 -421.6387 369.1865 -421.6387 369.3281 -421.6387 c +369.3838 -421.7515 369.4111 -421.6387 369.3281 -421.6387 c +369.4111 -421.5264 369.4111 -421.4419 369.2432 -421.4141 c +369.2432 -421.0479 368.9336 -421.3857 369.2432 -421.4141 c +369.2432 -421.4702 369.1299 -421.4702 369.0742 -421.4702 c +f +0 D +369.0742 -423.5801 m +F +1 D +369.2432 -416.1519 m +369.3555 -416.0952 369.2432 -416.0674 369.2432 -416.1519 c +369.1299 -416.208 369.2432 -416.2642 369.2432 -416.1519 c +f +369.3281 -422.0332 m +369.666 -422.0605 369.3555 -421.7236 369.3281 -422.0332 c +369.2148 -422.0889 369.3281 -422.1455 369.3281 -422.0332 c +f +369.3281 -421.3296 m +369.3838 -421.3013 369.4688 -421.3296 369.4961 -421.2451 c +369.4111 -421.2451 369.3281 -421.2451 369.3281 -421.3296 c +f +0 D +369.6367 -421.7236 m +F +369.6367 -422.1172 m +F +369.7217 -420.5132 m +F +1 D +369.8906 -420.9917 m +369.8066 -421.2451 370.1436 -421.1045 370.1152 -421.3296 c +370.1152 -421.4702 369.918 -421.4141 369.9746 -421.6387 c +369.9473 -421.6387 369.918 -421.6387 369.8906 -421.6387 c +369.8906 -421.583 369.8623 -421.5547 369.8066 -421.5547 c +369.75 -421.4419 369.7217 -421.583 369.8066 -421.5547 c +369.7773 -421.6387 369.834 -421.6387 369.8906 -421.6387 c +369.8906 -421.667 369.8906 -421.6953 369.8906 -421.7236 c +369.8066 -421.6953 369.8066 -421.7515 369.8066 -421.8076 c +369.6924 -421.8643 369.8066 -421.8921 369.8066 -421.8076 c +369.8623 -421.8076 369.8906 -421.7798 369.8906 -421.7236 c +369.9473 -421.7515 369.9746 -421.6953 369.9746 -421.6387 c +370.0313 -421.6387 370.0586 -421.5547 370.1152 -421.5547 c +370.1719 -421.667 370.2285 -421.5547 370.1152 -421.5547 c +370.1719 -421.3857 370.3691 -421.1606 370.1992 -420.9917 c +370.3125 -420.9351 370.1992 -420.9072 370.1992 -420.9917 c +370.0029 -420.9917 370.0586 -421.1328 369.8906 -420.9917 c +f +0 D +369.8066 -412.606 m +F +1 D +370.0586 -415.1104 m +370.0586 -414.9136 369.918 -414.8574 369.8066 -414.7729 c +369.8066 -414.8853 369.8066 -414.998 369.8066 -415.1104 c +369.8906 -415.1104 369.9746 -415.1104 370.0586 -415.1104 c +f +369.8066 -422.4551 m +369.8623 -422.4277 369.9746 -422.4551 369.9746 -422.3711 c +369.8906 -422.3984 369.8066 -422.3711 369.8066 -422.4551 c +f +0 D +369.8906 -422.2012 m +F +1 D +370.1152 -422.5391 m +370.1992 -422.6797 369.8906 -422.793 370.1152 -422.8496 c +370.1436 -422.793 370.3398 -422.5391 370.1152 -422.5391 c +f +0 D +370.0586 -420.1758 m +F +370.0586 -420.8232 m +F +370.0586 -423.0176 m +F +370.1152 -422.2871 m +F +1 D +370.2842 -421.8076 m +370.5098 -421.8076 370.7061 -421.7798 370.7061 -421.5547 c +370.4814 -421.583 370.2842 -421.583 370.2842 -421.8076 c +370.1719 -421.8643 370.2842 -421.8921 370.2842 -421.8076 c +f +370.2842 -423.5801 m +370.3398 -423.5527 370.4531 -423.5801 370.4531 -423.4961 c +370.3965 -423.5244 370.2842 -423.4961 370.2842 -423.5801 c +f +0 D +370.3691 -412.1836 m +F +1 D +370.3691 -420.5977 m +370.4248 -420.5698 370.5371 -420.5977 370.5371 -420.5132 c +370.4814 -420.5415 370.3691 -420.5132 370.3691 -420.5977 c +f +0 D +370.3691 -421.2451 m +F +370.3691 -421.9766 m +F +370.3691 -422.9336 m +F +1 D +370.4531 -421.4141 m +370.4814 -421.4141 370.5098 -421.4141 370.5371 -421.4141 c +370.5371 -421.6387 370.875 -421.3296 370.5371 -421.4141 c +370.5098 -421.3013 370.4531 -421.3574 370.4531 -421.4141 c +370.3398 -421.4419 370.4531 -421.498 370.4531 -421.4141 c +f +0 D +370.4531 -415.8984 m +F +1 D +370.4531 -420.3442 m +370.5938 -420.3442 370.7061 -420.3726 370.7627 -420.4292 c +370.791 -420.2319 370.791 -420.0347 370.6221 -420.0347 c +370.5938 -420.0913 370.5371 -420.1196 370.4531 -420.1196 c +370.4531 -420.1758 370.4531 -420.2603 370.4531 -420.3442 c +f +0 D +370.5371 -423.3281 m +F +370.6221 -415.7578 m +F +1 D +372.5635 -420.5132 m +372.3955 -420.5132 372.3662 -420.4009 372.2256 -420.4292 c +372.1406 -420.5132 372.0566 -420.5977 371.9736 -420.6826 c +371.833 -420.3726 371.4941 -420.7944 371.0156 -420.6826 c +371.0156 -420.8232 371.1289 -420.8511 371.1006 -420.9917 c +370.9316 -420.8511 370.7061 -421.0762 370.6221 -421.2451 c +370.7344 -421.2451 370.875 -421.2451 371.0156 -421.2451 c +370.9873 -421.1045 371.1006 -421.1045 371.1006 -420.9917 c +371.6631 -420.9351 372.4795 -420.3726 372.958 -421.2451 c +372.6201 -421.2168 372.958 -421.583 372.958 -421.7236 c +373.042 -421.7236 373.127 -421.7236 373.1826 -421.7236 c +373.2393 -421.8359 373.2949 -421.7236 373.1826 -421.7236 c +373.4082 -421.4419 373.4639 -421.9766 373.7744 -421.8921 c +373.8857 -422.1738 373.8857 -421.6953 374.083 -421.8076 c +374.252 -421.9204 374.252 -422.2012 374.6455 -422.1172 c +374.5889 -421.8921 374.4219 -421.7515 374.083 -421.8076 c +374.083 -421.7798 374.083 -421.7515 374.083 -421.7236 c +373.8857 -421.7236 373.8301 -421.5547 373.7744 -421.8076 c +373.6045 -421.7515 373.7451 -421.667 373.7744 -421.5547 c +373.3516 -421.4419 373.2676 -420.9917 373.127 -420.5977 c +372.7607 -420.5698 372.6768 -420.7383 372.5635 -420.5977 c +372.5635 -420.5698 372.5635 -420.5415 372.5635 -420.5132 c +372.6768 -420.5415 372.6768 -420.4292 372.7881 -420.4292 c +372.8447 -420.5415 372.9014 -420.4292 372.7881 -420.4292 c +372.7324 -420.3726 372.7324 -420.2036 372.6201 -420.1758 c +372.7881 -420.0347 372.5361 -420.0068 372.4795 -419.8662 c +372.4512 -420.063 372.4795 -420.1758 372.6201 -420.1758 c +372.6475 -420.3442 372.5361 -420.3726 372.5635 -420.5132 c +f +0 D +370.6221 -423.834 m +F +1 D +370.7061 -414.8574 m +370.8193 -414.8008 370.6787 -414.7729 370.7061 -414.8574 c +370.5654 -414.9136 370.7061 -414.9697 370.7061 -414.8574 c +f +370.9316 -422.2871 m +371.0723 -422.0889 370.6504 -422.0605 370.7061 -422.2012 c +370.7344 -422.2012 370.791 -422.2305 370.7627 -422.2871 c +370.8193 -422.2871 370.875 -422.2871 370.9316 -422.2871 c +f +0 D +370.7627 -414.3789 m +F +1 D +370.8467 -421.8921 m +370.96 -421.8921 370.9316 -422.0332 371.0156 -422.0332 c +371.2129 -421.9482 370.9316 -421.667 370.8467 -421.8921 c +f +0 D +370.8467 -423.75 m +F +370.9316 -415.8984 m +F +1 D +370.9316 -420.4292 m +370.9873 -420.4009 371.1006 -420.4292 371.1006 -420.3442 c +371.0439 -420.3726 370.9316 -420.3442 370.9316 -420.4292 c +f +0 D +370.9316 -422.6797 m +F +370.9316 -423.0176 m +F +371.0156 -415.7578 m +F +1 D +371.1846 -416.2358 m +371.2969 -416.1802 371.1563 -416.1235 371.1846 -416.2358 c +370.9033 -416.377 371.4375 -416.4893 371.1846 -416.2358 c +f +0 D +371.1006 -422.2871 m +F +371.1846 -418.3184 m +F +371.1846 -424.3125 m +F +1 D +371.2695 -415.1104 m +371.3262 -415.0825 371.4102 -415.1104 371.4102 -415.0264 c +371.3535 -415.0542 371.2695 -415.0264 371.2695 -415.1104 c +f +0 D +371.2695 -415.5044 m +F +371.2695 -425.3535 m +F +1 D +371.3262 -416.1519 m +371.4102 -416.1235 371.4941 -416.1519 371.4941 -416.0674 c +371.4375 -416.0952 371.3535 -416.0674 371.3262 -416.1519 c +f +0 D +371.3262 -422.2871 m +F +371.4102 -416.8833 m +F +371.4102 -425.4375 m +F +1 D +371.4941 -415.5044 m +371.6074 -415.4482 371.4941 -415.4199 371.4941 -415.5044 c +371.3818 -415.5605 371.5225 -415.6172 371.4941 -415.5044 c +f +371.4941 -419.7817 m +371.5508 -419.7534 371.6631 -419.7817 371.6631 -419.6973 c +371.6074 -419.7256 371.4941 -419.6973 371.4941 -419.7817 c +f +371.748 -417.0522 m +371.748 -416.9956 371.748 -416.9395 371.748 -416.8833 c +371.6914 -416.8833 371.6348 -416.8833 371.5781 -416.8833 c +371.5781 -416.9395 371.5781 -416.9956 371.5781 -417.0522 c +371.6348 -417.0522 371.6914 -417.0522 371.748 -417.0522 c +f +372.5635 -419.4722 m +372.3105 -419.3877 372.3379 -419.585 372.1406 -419.5566 c +372.085 -419.3599 372.085 -419.0786 371.6631 -419.0498 c +371.6914 -419.3877 372.085 -419.3877 371.833 -419.7817 c +372.1406 -419.6411 372.5361 -419.979 372.5635 -419.4722 c +f +0 D +371.6631 -423.5801 m +F +1 D +371.748 -416.3208 m +372.085 -416.208 372.1143 -416.8271 372.3105 -416.4048 c +372.1143 -416.3208 372.1406 -416.208 371.916 -416.0674 c +371.8887 -416.1802 371.7754 -416.208 371.748 -416.3208 c +371.6348 -416.377 371.748 -416.4048 371.748 -416.3208 c +f +0 D +371.748 -414.041 m +F +371.748 -415.4199 m +F +371.748 -415.8984 m +F +371.833 -416.6304 m +F +371.833 -418.5718 m +F +1 D +371.833 -421.8076 m +371.916 -421.8076 371.9443 -421.9204 371.9736 -421.8076 c +371.9736 -421.7236 371.833 -421.6953 371.833 -421.8076 c +f +0 D +371.833 -423.1875 m +F +1 D +372.6201 -415.7578 m +372.5635 -415.814 372.4229 -415.7856 372.3955 -415.8984 c +372.2549 -415.9268 371.9736 -415.6733 371.916 -415.8984 c +372.0566 -415.8984 372.3105 -416.1519 372.3955 -415.8984 c +372.6475 -415.814 372.4512 -416.1802 372.7041 -416.0674 c +372.7041 -415.9829 372.7041 -415.8984 372.7041 -415.8418 c +372.7881 -415.8418 372.7881 -415.8984 372.873 -415.8984 c +372.873 -415.814 372.873 -415.7012 372.873 -415.5889 c +372.9854 -415.5322 372.873 -415.5044 372.873 -415.5889 c +372.7607 -415.7578 372.4512 -415.4482 372.6201 -415.7578 c +f +372.0566 -417.1084 m +372.0566 -417.0522 372.1406 -417.0239 372.1406 -416.9678 c +372.0566 -416.9678 372.0566 -416.8833 371.9736 -416.8833 c +371.9736 -416.9678 371.916 -416.9678 371.916 -417.0522 c +371.9736 -417.0522 372 -417.1084 372.0566 -417.1084 c +f +0 D +371.916 -424.3965 m +F +371.9736 -412.3525 m +F +1 D +372.0566 -413.9004 m +372 -414.0693 372.3955 -414.0693 372.3105 -413.9004 c +372.2822 -413.8159 372.085 -413.7876 372.0566 -413.9004 c +f +0 D +372.0566 -418.7402 m +F +372.0566 -421.7236 m +F +372.1406 -415.6733 m +F +372.1406 -425.5225 m +F +1 D +372.2256 -415.4199 m +372.3379 -415.3638 372.2256 -415.3354 372.2256 -415.4199 c +372.1143 -415.4766 372.2256 -415.5322 372.2256 -415.4199 c +f +372.6201 -423.4961 m +372.7324 -423.2988 372.6201 -423.3555 372.7041 -423.1016 c +372.5635 -423.1016 372.4512 -423.0742 372.3955 -423.0176 c +372.4512 -423.2715 372.1143 -423.1016 372.2256 -423.4121 c +372.4229 -423.3838 372.5361 -423.4395 372.6201 -423.4961 c +f +0 D +372.2256 -414.3789 m +F +372.2256 -427.5488 m +F +1 D +372.5635 -418.1777 m +372.5635 -418.0933 372.5635 -418.0088 372.5635 -417.9248 c +372.5068 -417.9248 372.4512 -417.9248 372.3955 -417.9248 c +372.3379 -417.9248 372.2822 -417.9526 372.3105 -418.0088 c +372.3955 -418.0371 372.3662 -418.0933 372.3105 -418.1777 c +372.3955 -418.1777 372.4795 -418.1777 372.5635 -418.1777 c +f +0 D +372.3105 -414.7729 m +F +1 D +372.3105 -422.5391 m +372.3662 -422.5117 372.4795 -422.5391 372.4795 -422.4551 c +372.3955 -422.4551 372.3105 -422.4551 372.3105 -422.5391 c +f +372.3955 -413.563 m +372.4229 -413.563 372.4512 -413.563 372.4795 -413.563 c +372.4512 -413.8442 372.6475 -413.9287 372.7881 -414.041 c +372.7041 -414.2378 372.5361 -414.3228 372.4795 -414.5479 c +372.7041 -414.4351 372.7324 -414.604 372.958 -414.4634 c +373.0137 -414.5762 373.042 -414.4634 372.958 -414.4634 c +373.0137 -414.3789 373.042 -414.2666 373.042 -414.126 c +373.127 -414.1538 373.1826 -414.126 373.1826 -414.041 c +373.0986 -414.0132 373.0703 -413.9004 372.958 -413.9004 c +372.9297 -413.647 372.6768 -413.647 372.4795 -413.563 c +372.4512 -413.4785 372.3955 -413.5347 372.3955 -413.563 c +372.2822 -413.6191 372.3955 -413.6753 372.3955 -413.563 c +f +372.4795 -412.8311 m +372.4795 -412.9722 372.3955 -412.9722 372.3955 -413.0845 c +372.6475 -413.0562 372.3955 -413.4785 372.873 -413.4224 c +372.958 -413.0283 372.6201 -413.0562 372.7041 -412.6904 c +372.5635 -412.6626 372.5635 -412.7466 372.5635 -412.8311 c +372.5361 -412.8311 372.5068 -412.8311 372.4795 -412.8311 c +f +372.7041 -415.4199 m +372.6201 -415.4199 372.6475 -415.3354 372.7041 -415.251 c +372.5918 -415.251 372.5068 -415.251 372.3955 -415.251 c +372.3955 -415.3354 372.3955 -415.4199 372.3955 -415.5044 c +372.5068 -415.5044 372.6768 -415.5322 372.7041 -415.4199 c +f +372.4795 -416.1519 m +372.3379 -416.3208 372.5361 -416.3208 372.3955 -416.4893 c +372.6201 -416.6021 372.6201 -416.1235 372.4795 -416.1519 c +f +0 D +372.5635 -412.3525 m +F +372.5635 -412.606 m +F +372.5635 -412.9155 m +372.5635 -412.8872 372.5635 -412.8594 372.5635 -412.8311 c +372.5918 -412.8311 372.6475 -412.9155 372.5635 -412.9155 c +f +1 D +372.5635 -415.1104 m +372.7041 -415.1387 372.7607 -415.2793 372.958 -415.251 c +372.958 -415.2231 372.958 -415.167 372.958 -415.1104 c +373.2109 -415.2793 373.0986 -415.0825 373.1826 -415.0264 c +373.3799 -414.998 373.1543 -415.3916 373.4365 -415.251 c +373.4365 -415.0542 373.2949 -415.0264 373.4365 -414.8574 c +372.958 -414.998 373.0986 -414.5479 372.7041 -414.6318 c +372.6475 -414.8574 372.9854 -414.7168 372.873 -415.0264 c +372.7607 -414.9136 372.5635 -414.9136 372.5635 -415.1104 c +f +0 D +372.7041 -415.8418 m +372.6768 -415.814 372.6201 -415.814 372.6201 -415.7578 c +372.6768 -415.7578 372.7324 -415.7578 372.7041 -415.8418 c +f +372.6201 -418.0088 m +F +1 D +373.1826 -416.5454 m +372.958 -416.5454 373.0137 -416.2358 372.7041 -416.3208 c +372.6475 -416.208 372.6201 -416.3208 372.7041 -416.3208 c +372.8447 -416.4048 372.9297 -416.9395 373.1826 -416.5454 c +f +373.2676 -419.4722 m +373.2676 -419.3599 373.2949 -419.3315 373.3516 -419.3032 c +373.3516 -419.3315 373.3516 -419.3599 373.3516 -419.3877 c +373.6045 -419.4722 373.6611 -419.416 373.7744 -419.2192 c +373.5771 -419.1904 373.4639 -419.2471 373.3516 -419.3032 c +373.3516 -419.2754 373.3516 -419.2471 373.3516 -419.2192 c +373.2393 -419.1904 373.1543 -419.1064 373.042 -419.0498 c +373.0137 -418.9375 373.0703 -418.7402 372.958 -418.7402 c +372.958 -418.8813 372.6768 -418.7969 372.7041 -418.9658 c +372.7881 -419.0498 372.9014 -419.0786 373.042 -419.0498 c +372.9854 -419.3032 373.127 -419.3877 373.2676 -419.4722 c +f +373.042 -418.3184 m +373.0137 -418.2061 372.8447 -418.2622 372.7041 -418.2622 c +372.7041 -418.5996 372.9014 -418.3467 373.042 -418.4873 c +373.042 -418.4312 373.042 -418.375 373.042 -418.3184 c +f +372.7881 -412.522 m +372.9014 -412.4653 372.7881 -412.437 372.7881 -412.522 c +372.6768 -412.5781 372.7881 -412.606 372.7881 -412.522 c +f +0 D +372.958 -414.041 m +372.9014 -414.041 372.8447 -414.041 372.7881 -414.041 c +372.7881 -413.9565 372.8174 -413.8726 372.958 -413.9004 c +372.958 -413.9565 372.958 -414.0132 372.958 -414.041 c +f +372.7881 -418.7402 m +F +1 D +373.127 -419.8662 m +372.873 -419.8379 372.9014 -420.063 372.7881 -420.1758 c +373.042 -420.2319 373.1543 -420.1196 373.127 -419.8662 c +f +0 D +372.958 -415.1104 m +372.9014 -415.1104 372.8447 -415.0825 372.873 -415.0264 c +372.9297 -415.0264 372.958 -415.0264 372.958 -415.1104 c +f +372.873 -417.0522 m +F +372.873 -418.0933 m +F +373.042 -414.126 m +372.9854 -414.126 372.9297 -414.126 372.958 -414.041 c +373.0137 -414.0693 373.042 -414.0693 373.042 -414.126 c +f +372.958 -413 m +F +372.958 -417.9248 m +F +372.958 -422.1172 m +F +1 D +373.3516 -413.3374 m +373.2109 -413.3096 373.1826 -413.4224 373.042 -413.4224 c +372.9854 -413.2817 372.9297 -413.4224 373.042 -413.4224 c +372.9854 -413.7598 373.4365 -413.647 373.3516 -413.3374 c +f +0 D +373.127 -414.5479 m +F +373.127 -421.9766 m +F +373.127 -424.3965 m +F +1 D +373.4365 -417.4458 m +373.4365 -417.3052 373.7178 -417.3896 373.7744 -417.2773 c +373.8301 -416.9678 373.5771 -416.9678 373.4365 -416.8833 c +373.4365 -416.7988 373.4639 -416.7988 373.5205 -416.7988 c +373.3799 -416.5737 373.4922 -416.4331 373.2676 -416.4048 c +373.2949 -416.6021 373.2949 -416.771 373.1826 -416.8833 c +373.2676 -416.8833 373.3516 -416.8833 373.4365 -416.8833 c +373.4922 -417.0806 373.1826 -417.3335 373.4365 -417.4458 c +f +0 D +373.1826 -418.4028 m +F +1 D +373.6045 -412.437 m +373.4082 -412.437 373.3516 -412.2964 373.2676 -412.522 c +373.3799 -412.6338 373.5771 -412.6338 373.6045 -412.437 c +f +373.2676 -415.7578 m +373.2676 -415.8418 373.4082 -415.8418 373.4365 -415.7578 c +373.3516 -415.7578 373.3232 -415.645 373.2676 -415.7578 c +f +373.2676 -420.0347 m +373.3516 -420.0068 373.4365 -420.0347 373.4365 -419.9507 c +373.3799 -419.979 373.2676 -419.9507 373.2676 -420.0347 c +f +0 D +373.2676 -424.2285 m +F +1 D +373.3516 -420.5132 m +373.4082 -420.4854 373.5205 -420.5132 373.5205 -420.4292 c +373.4639 -420.457 373.3516 -420.4292 373.3516 -420.5132 c +f +373.6045 -414.6318 m +373.915 -414.604 373.7451 -415.0542 373.999 -415.1104 c +373.9707 -415.2793 374.0264 -415.3638 374.167 -415.3354 c +374.0557 -415.4482 374.0557 -415.645 374.252 -415.6733 c +374.3076 -415.2793 374.5332 -415.5605 374.8994 -415.5044 c +374.8145 -415.0825 375.0957 -415.5044 375.125 -415.1948 c +374.7861 -415.1387 374.8711 -415.167 374.5625 -415.1104 c +374.4219 -414.7446 374.083 -414.7168 374.3369 -414.2944 c +374.0264 -414.4634 374.1396 -414.126 373.915 -414.2944 c +373.9707 -413.7876 373.7178 -413.5908 373.4365 -413.4224 c +373.2393 -413.9565 373.915 -414.1821 373.6045 -414.6318 c +373.4922 -414.6602 373.6045 -414.7168 373.6045 -414.6318 c +f +0 D +373.4365 -417.8398 m +F +373.4365 -420.2603 m +F +373.4365 -422.1172 m +F +1 D +373.4365 -422.3711 m +373.4922 -422.3418 373.6045 -422.3711 373.6045 -422.2871 c +373.5488 -422.3145 373.4365 -422.2871 373.4365 -422.3711 c +f +373.6045 -420.5977 m +373.6611 -420.626 373.7178 -420.6826 373.8301 -420.6826 c +373.8584 -420.7666 373.9707 -420.7944 373.999 -420.9072 c +373.8584 -420.9351 373.9424 -421.1885 373.8301 -421.2451 c +373.9707 -421.2168 373.9707 -421.3013 374.083 -421.3296 c +374.083 -421.3857 374.083 -421.4141 374.083 -421.4702 c +373.9707 -421.5264 374.083 -421.583 374.083 -421.4702 c +374.1963 -421.583 374.4775 -421.6108 374.4775 -421.4141 c +374.5625 -421.3857 374.5625 -421.3296 374.6455 -421.3296 c +374.6738 -421.2168 374.6182 -421.1885 374.5625 -421.1606 c +374.5625 -421.2451 374.4219 -421.2168 374.3926 -421.3296 c +374.252 -421.1885 374.3076 -421.3296 374.083 -421.3296 c +374.0557 -421.0762 374.252 -421.0762 374.252 -420.8232 c +373.999 -420.9072 374.083 -420.626 373.8301 -420.6826 c +373.7744 -420.5132 374.083 -420.4009 373.8301 -420.3442 c +373.8301 -420.457 373.6895 -420.4292 373.6045 -420.4292 c +373.6045 -420.4854 373.6045 -420.5415 373.6045 -420.5977 c +373.2676 -420.5132 373.5771 -420.8232 373.6045 -420.5977 c +f +0 D +373.5205 -417.6152 m +F +1 D +374.083 -418.2622 m +373.8857 -418.29 373.999 -418.0088 373.8301 -418.0088 c +373.8018 -418.1494 373.6045 -417.9248 373.5205 -418.1777 c +373.7178 -418.2061 373.9424 -418.6563 374.083 -418.2622 c +f +0 D +373.5205 -424.959 m +F +1 D +373.915 -415.5889 m +373.8301 -415.5889 373.7744 -415.5889 373.6895 -415.5889 c +373.5771 -415.6733 373.6611 -415.9546 373.7744 -416.0674 c +373.8857 -415.9829 373.9707 -415.8418 373.915 -415.5889 c +f +373.915 -412.9155 m +373.8301 -412.9155 373.8018 -412.8311 373.6895 -412.8311 c +373.6611 -413.0283 373.6895 -413.1406 373.8301 -413.1689 c +373.8301 -413.0562 373.8857 -413 373.915 -412.9155 c +f +373.6895 -420.1196 m +373.7451 -420.0913 373.8301 -420.1196 373.8301 -420.0347 c +373.7744 -420.0347 373.6895 -420.0347 373.6895 -420.1196 c +f +0 D +373.6895 -420.8232 m +F +373.6895 -426.8164 m +F +1 D +373.7744 -419.8662 m +373.8301 -419.9224 373.9707 -419.979 373.999 -419.8662 c +373.8857 -419.8379 373.999 -419.7817 373.999 -419.6973 c +373.8584 -419.6973 373.8018 -419.7534 373.7744 -419.8662 c +373.6338 -419.9224 373.7744 -419.9507 373.7744 -419.8662 c +f +373.8301 -422.624 m +373.8018 -422.6523 373.7451 -422.5957 373.7744 -422.6797 c +373.8018 -423.0459 374.2236 -422.2305 373.8301 -422.624 c +f +374.167 -419.2192 m +374.1396 -419.1064 373.999 -419.1343 373.999 -419.2192 c +373.9424 -419.2192 373.915 -419.2471 373.915 -419.3032 c +373.8857 -419.3032 373.8584 -419.3032 373.8301 -419.3032 c +373.8301 -419.3599 373.7744 -419.3877 373.7744 -419.4722 c +373.8301 -419.5005 373.8857 -419.5566 373.999 -419.5566 c +374.0264 -419.416 373.915 -419.416 373.915 -419.3032 c +373.999 -419.3032 373.999 -419.2754 373.999 -419.2192 c +374.0557 -419.2192 374.1113 -419.2192 374.167 -419.2192 c +374.083 -419.5005 374.6182 -419.3877 374.5625 -419.2192 c +374.8145 -419.1904 374.4775 -418.8813 374.5625 -419.2192 c +374.3076 -419.2754 374.4219 -419.2754 374.167 -419.2192 c +f +0 D +373.7744 -421.8076 m +373.8018 -421.8076 373.8584 -421.8643 373.7744 -421.8921 c +373.7744 -421.8643 373.7744 -421.8359 373.7744 -421.8076 c +f +373.8301 -412.606 m +F +1 D +373.999 -413.4785 m +373.9424 -413.6753 374.3076 -413.6753 374.252 -413.4785 c +374.2236 -413.4224 374.0264 -413.394 373.999 -413.4785 c +f +0 D +374.252 -415.1104 m +374.1396 -415.167 374.252 -415.1948 374.252 -415.1104 c +374.3643 -415.1104 374.4482 -415.1104 374.5625 -415.1104 c +374.5625 -415.3076 374.2813 -415.2231 374.167 -415.3354 c +374.083 -415.2793 374.1113 -415.1387 373.999 -415.1104 c +373.999 -414.998 374.2236 -414.998 374.252 -415.1104 c +f +373.999 -420.5132 m +F +1 D +374.4775 -416.0674 m +374.3076 -416.0391 374.4775 -415.7012 374.252 -415.7578 c +374.2236 -415.8706 374.1113 -415.8984 374.083 -415.9829 c +374.1963 -415.9829 374.4219 -416.2925 374.4775 -416.0674 c +f +374.3369 -418.6563 m +374.1963 -418.6563 374.1113 -418.7124 374.083 -418.8252 c +374.2236 -418.8252 374.2813 -418.7686 374.3369 -418.6563 c +f +0 D +374.167 -418.3184 m +F +374.252 -415.9829 m +F +374.252 -419.9507 m +F +374.252 -420.1196 m +F +1 D +374.3369 -419.0498 m +374.3926 -419.0498 374.4775 -419.0498 374.4775 -418.9658 c +374.4219 -418.9937 374.3369 -418.9937 374.3369 -419.0498 c +f +0 D +374.3369 -420.9917 m +F +374.3926 -420.3442 m +F +374.4775 -421.4141 m +374.4482 -421.3857 374.3926 -421.3857 374.3926 -421.3296 c +374.4482 -421.3296 374.5049 -421.3296 374.4775 -421.4141 c +f +1 D +374.4775 -418.6563 m +374.6182 -418.5996 374.4775 -418.5718 374.4775 -418.6563 c +374.252 -418.6846 374.5625 -418.9937 374.4775 -418.6563 c +f +0 D +374.4775 -415.6733 m +F +374.4775 -419.6128 m +F +374.4775 -425.916 m +F +374.5625 -415.8418 m +F +374.5625 -421.6387 m +F +1 D +374.5625 -427.2109 m +374.6182 -427.1826 374.7305 -427.2109 374.7305 -427.127 c +374.6738 -427.1543 374.5625 -427.127 374.5625 -427.2109 c +f +0 D +374.6455 -424.7061 m +F +374.6455 -424.875 m +F +374.7305 -412.3525 m +F +374.7305 -413.563 m +F +374.8145 -414.21 m +F +374.8145 -424.6221 m +F +1 D +374.8994 -421.0762 m +375.0117 -421.02 374.8711 -420.9917 374.8994 -421.0762 c +374.7861 -421.1328 374.8994 -421.1606 374.8994 -421.0762 c +f +0 D +374.8994 -413.0845 m +F +1 D +374.8994 -426.957 m +374.9551 -426.957 375.04 -426.957 375.04 -426.9004 c +374.9844 -426.9004 374.8994 -426.9004 374.8994 -426.957 c +f +375.209 -427.4639 m +374.9844 -427.4355 375.04 -427.5762 374.8994 -427.4639 c +374.8994 -427.5488 374.8994 -427.6045 374.8994 -427.6895 c +375.0957 -427.7168 375.1523 -427.5762 375.209 -427.4639 c +f +375.209 -418.8252 m +375.0684 -418.8252 375.0117 -418.8813 374.9844 -418.9658 c +375.125 -418.9937 375.1807 -418.9092 375.209 -418.8252 c +f +0 D +374.9844 -419.3032 m +F +375.04 -420.1758 m +F +1 D +375.209 -412.437 m +375.209 -412.522 375.3496 -412.5498 375.3779 -412.437 c +375.293 -412.437 375.2373 -412.3247 375.209 -412.437 c +f +375.209 -427.2109 m +375.2656 -427.1826 375.3779 -427.2109 375.3779 -427.127 c +375.3213 -427.1543 375.209 -427.127 375.209 -427.2109 c +f +0 D +375.209 -427.3799 m +F +375.293 -426.6484 m +F +375.3779 -423.5801 m +F +*U +*u +387.5293 -415.8418 m +387.416 -415.8418 387.3604 -415.814 387.3047 -415.7578 c +386.9658 -415.73 387.332 -416.0112 387.3887 -416.0952 c +386.7422 -416.1519 385.9248 -416.208 385.0244 -416.0952 c +384.8838 -415.9546 384.6865 -415.5889 384.4619 -415.7578 c +384.3779 -415.5322 384.124 -415.4766 384.1533 -415.1104 c +383.7871 -415.4482 383.7871 -415.7578 383.9834 -416.0952 c +383.3926 -416.0674 382.1543 -416.3208 381.2256 -416.0952 c +381.2256 -416.5176 381.2256 -417.0522 381.2256 -417.5308 c +381.2256 -418.0088 381.3662 -418.5996 381.085 -418.8252 c +381.3662 -419.3315 381.2256 -420.0068 381.2256 -420.5977 c +381.2256 -422.5684 381.2256 -424.5654 381.2256 -426.4229 c +383.5059 -426.4229 386.1221 -426.4229 388.0918 -426.4229 c +388.9082 -426.4229 389.6963 -426.3379 390.3711 -426.4229 c +390.625 -426.4512 390.6533 -426.3379 390.7656 -426.6758 c +390.6533 -426.7041 390.7656 -426.7598 390.7656 -426.6758 c +391.1025 -426.2822 392.5947 -426.4512 393.5234 -426.5078 c +393.3828 -426.5635 393.5234 -426.5918 393.5234 -426.5078 c +394.2266 -426.3105 395.2676 -426.4785 396.084 -426.4229 c +396.084 -427.9424 396.084 -429.4902 396.084 -431.0098 c +389.6396 -431.0098 383.167 -431.0098 376.7236 -431.0098 c +376.7793 -430.4746 376.5264 -429.4902 377.0332 -429.6582 c +377.1172 -429.209 376.667 -429.6582 376.7236 -429.3213 c +376.7236 -423.5801 376.7236 -417.5308 376.7236 -411.5649 c +383.167 -411.5649 389.6396 -411.5649 396.084 -411.5649 c +396.084 -413.2534 396.168 -414.5479 396.084 -416.1802 c +393.0439 -416.1519 389.2461 -416.208 387.6133 -416.0952 c +387.6133 -415.9829 387.501 -415.9829 387.5293 -415.8418 c +387.6416 -415.7856 387.5293 -415.7578 387.5293 -415.8418 c +f +1 D +376.9492 -418.0933 m +376.9492 -418.2061 376.8643 -418.1494 376.8076 -418.0933 c +376.8076 -418.1777 376.8076 -418.2622 376.8076 -418.3467 c +376.9766 -418.4312 377.1738 -418.1494 376.9492 -418.0933 c +f +0 D +376.8076 -418.7402 m +F +376.8076 -418.9937 m +F +1 D +376.8926 -417.6152 m +376.9492 -417.6152 376.9766 -417.6152 377.0332 -417.6152 c +377.0605 -417.4746 376.9766 -417.4746 376.8926 -417.4746 c +376.8359 -417.3335 376.7793 -417.4746 376.8926 -417.4746 c +376.8926 -417.5024 376.8926 -417.5586 376.8926 -417.6152 c +f +0 D +377.0332 -418.5996 m +F +377.1172 -418.2622 m +F +1 D +377.2861 -418.4312 m +377.3711 -418.459 377.3418 -418.5996 377.4561 -418.5996 c +377.4561 -418.5156 377.54 -418.5156 377.54 -418.4312 c +377.7637 -418.4028 377.4561 -418.0933 377.54 -418.4312 c +377.4561 -418.375 377.3145 -418.3184 377.2861 -418.4312 c +f +0 D +377.3711 -418.7402 m +F +1 D +377.54 -424.8184 m +377.5117 -424.6777 377.54 -424.5371 377.3711 -424.5654 c +377.3711 -424.6221 377.3711 -424.6777 377.3711 -424.7344 c +377.4561 -424.7344 377.4561 -424.791 377.54 -424.8184 c +f +0 D +377.4561 -417.6992 m +F +1 D +377.6807 -418.8252 m +377.7373 -418.5718 377.4824 -418.5435 377.4561 -418.7402 c +377.5674 -418.7402 377.623 -418.7969 377.6807 -418.8252 c +f +0 D +377.7637 -418.5996 m +F +377.7637 -421.4141 m +F +377.8486 -418.1777 m +F +377.8486 -421.2451 m +F +377.8486 -421.667 m +F +378.0186 -417.2212 m +F +378.1025 -420.3726 m +F +378.2432 -423.5244 m +F +378.4961 -421.8921 m +F +1 D +379.0596 -428.1953 m +379.0596 -428.083 379.0596 -427.9707 379.0596 -427.8867 c +378.8623 -427.8574 378.7217 -427.9141 378.665 -428.0273 c +378.8057 -428.083 378.8057 -428.2803 379.0596 -428.1953 c +f +379.96 -415.8418 m +379.96 -415.7578 380.0156 -415.7578 380.0156 -415.6733 c +379.9307 -415.7012 379.8467 -415.645 379.79 -415.6172 c +379.79 -415.6733 379.79 -415.7578 379.79 -415.8418 c +379.8467 -415.8418 379.9043 -415.8418 379.96 -415.8418 c +f +0 D +381.873 -415.2793 m +F +1 D +382.2109 -415.6172 m +382.2109 -415.5044 382.3232 -415.5044 382.2949 -415.3638 c +382.2109 -415.3638 382.127 -415.3638 382.042 -415.3638 c +382.042 -415.4482 382.042 -415.5322 382.042 -415.6172 c +382.0977 -415.6172 382.1543 -415.6172 382.2109 -415.6172 c +f +0 D +382.5195 -415.8418 m +F +382.6895 -415.4482 m +F +1 D +382.8584 -415.6172 m +383.1396 -415.5605 383.6465 -415.73 383.5898 -415.3638 c +383.5332 -415.3638 383.4766 -415.3638 383.4209 -415.3638 c +383.5059 -414.998 383.0547 -415.4482 383.4209 -415.3638 c +383.5059 -415.6733 382.6045 -415.4199 382.8584 -415.6172 c +f +0 D +383.167 -414.1538 m +F +383.252 -414.4072 m +F +383.252 -414.5479 m +F +1 D +383.4209 -414.7168 m +383.6738 -414.6885 383.3359 -414.3789 383.4209 -414.7168 c +383.3086 -414.7729 383.4209 -414.8008 383.4209 -414.7168 c +f +0 D +383.6738 -414.6318 m +F +384.7158 -416.1802 m +384.4619 -416.1235 384.4619 -415.8418 384.1533 -415.8418 c +384.1533 -415.73 384.3496 -415.7856 384.4619 -415.7578 c +384.5459 -415.9268 384.9121 -415.9546 384.7158 -416.1802 c +f +384.2939 -416.0952 m +384.2646 -416.208 384.2373 -416.0674 384.1533 -416.0952 c +384.1533 -415.9829 384.2939 -416.0112 384.2939 -416.0952 c +f +384.5459 -415.2793 m +F +384.8838 -415.8418 m +F +385.3623 -415.8418 m +F +386.1504 -415.6733 m +F +1 D +386.4043 -415.0264 m +386.4609 -415.0264 386.5723 -415.0264 386.5723 -414.9697 c +386.5166 -414.9697 386.4043 -414.9697 386.4043 -415.0264 c +f +0 D +386.5723 -415.9268 m +F +386.6572 -415.0264 m +F +386.8828 -429.4063 m +F +388.1768 -415.6172 m +F +1 D +390.5957 -426.5918 m +390.5127 -426.5918 390.4551 -426.5918 390.3711 -426.5918 c +390.3711 -426.6758 390.3711 -426.7324 390.3711 -426.8164 c +390.5684 -426.873 390.5127 -426.6484 390.5957 -426.5918 c +f +0 D +390.9346 -426.7324 m +F +1 D +391.8066 -427.7168 m +391.8633 -427.6895 391.9756 -427.7168 391.9756 -427.6328 c +391.9189 -427.6611 391.8066 -427.6328 391.8066 -427.7168 c +f +393.0166 -427.4639 m +393.0166 -427.2676 392.876 -427.1826 392.792 -427.0703 c +392.707 -427.0977 392.4814 -427.3799 392.707 -427.4639 c +392.7354 -427.2676 392.8477 -427.5762 393.0166 -427.4639 c +f +393.2695 -427.1543 m +393.2695 -427.0137 393.2695 -426.873 393.2695 -426.7324 c +393.6074 -426.8164 393.2695 -426.5078 393.2695 -426.7324 c +393.1582 -426.8447 393.0166 -427.127 393.2695 -427.1543 c +f +393.832 -427.4639 m +393.9453 -427.4082 393.832 -427.3799 393.832 -427.4639 c +393.8047 -427.4639 393.7764 -427.4639 393.748 -427.4639 c +393.832 -427.127 393.5234 -427.4639 393.748 -427.4639 c +393.7764 -427.5488 393.832 -427.5205 393.832 -427.4639 c +f +0 D +394.1426 -427.6328 m +F +395.5215 -415.1104 m +F +*U +*u +407.0537 -416.3208 m +407.0537 -416.4048 406.9688 -416.4048 406.9688 -416.4893 c +405.2529 -416.4614 404.042 -416.4614 402.3545 -416.4893 c +402.1846 -417.2212 402.3262 -418.3184 402.2695 -419.2192 c +404.0146 -419.3877 406.125 -419.3315 407.3633 -419.3877 c +407.6162 -419.3877 407.8975 -419.5288 408.0098 -419.3032 c +408.208 -419.4438 407.9268 -419.585 408.0938 -419.7817 c +408.2637 -419.8101 408.123 -419.5005 408.1787 -419.3877 c +411.3867 -419.1904 414.2012 -419.3599 417.3809 -419.3032 c +417.4648 -419.9224 417.4092 -420.2319 417.3809 -420.9917 c +417.2686 -420.9917 417.2686 -420.8794 417.1279 -420.9072 c +417.1553 -420.8511 417.0986 -420.8511 417.043 -420.8232 c +417.043 -420.9072 417.0723 -420.9072 417.1279 -420.9072 c +417.0986 -421.1045 417.2686 -421.1045 417.2129 -421.3296 c +417.0986 -421.3574 417.2129 -421.4141 417.2129 -421.3296 c +417.5498 -421.583 417.2129 -421.7515 417.3809 -422.1172 c +417.3809 -422.5684 417.4365 -423.3838 417.3809 -423.8906 c +416.7334 -423.8057 416.2549 -424.002 415.6924 -423.834 c +415.6357 -423.6934 415.5801 -423.834 415.6924 -423.834 c +411.4717 -424.0313 406.9131 -423.8057 403.3379 -423.8906 c +402.9453 -423.918 403.4785 -423.5244 403.0859 -423.4961 c +402.6641 -423.665 402.6074 -423.75 402.2139 -423.9746 c +402.6357 -424.3965 401.8193 -425.3252 402.2695 -425.2695 c +402.2695 -425.3535 402.2139 -425.3818 402.2139 -425.4375 c +402.0166 -425.2402 401.9326 -425.4941 401.792 -425.6064 c +401.96 -425.6631 402.0439 -425.7754 402.2695 -425.6064 c +402.3262 -426.2266 402.2139 -426.5635 402.2139 -426.8164 c +402.6641 -427.0977 403.3115 -426.957 403.9014 -426.957 c +405.7861 -426.957 407.6719 -426.957 409.4736 -426.957 c +409.4453 -427.0977 409.333 -427.0977 409.3047 -427.2109 c +409.4453 -427.4082 409.5303 -426.9004 409.7832 -426.957 c +411.4434 -427.127 413.7793 -426.7598 415.4385 -426.957 c +415.5518 -426.9863 415.7207 -426.957 415.6924 -427.127 c +416.002 -426.7891 416.9023 -427.041 417.4648 -426.957 c +417.3809 -427.998 417.4648 -429.377 417.4648 -431.0098 c +415.0459 -431.1221 412.5684 -431.1221 410.5156 -430.9258 c +410.9082 -430.9814 410.458 -430.5313 410.5156 -430.9258 c +406.1816 -431.0664 401.9033 -430.9531 397.3447 -431.0098 c +397.4023 -425.8887 397.2617 -420.5698 397.4287 -415.5889 c +397.5703 -415.6172 397.5137 -415.8418 397.7676 -415.7578 c +397.9922 -415.5605 397.626 -415.251 397.8516 -415.0264 c +397.9082 -415.0825 398.1045 -415.3638 398.0762 -415.0264 c +398.415 -414.8574 398.3857 -414.6885 398.5557 -414.4634 c +398.6113 -414.5195 398.6396 -414.604 398.7246 -414.6318 c +398.752 -414.3789 398.7246 -414.3506 398.5557 -414.4634 c +398.3857 -414.2944 398.667 -414.21 398.6396 -413.9849 c +398.7803 -413.9287 398.6396 -413.8726 398.6396 -413.9849 c +398.3857 -413.8442 398.1045 -413.9287 397.9922 -414.3789 c +398.2734 -414.604 398.0488 -414.041 398.415 -414.2944 c +398.5264 -414.604 398.1611 -414.4634 398.0762 -414.5479 c +397.9355 -414.6318 397.8799 -414.8291 397.7676 -414.9414 c +397.626 -415.0825 397.4023 -414.9414 397.4287 -415.1948 c +397.2041 -414.998 397.5137 -414.7168 397.3447 -414.5479 c +397.5703 -414.5479 397.8799 -414.5762 397.6836 -414.3789 c +398.1895 -414.3228 397.373 -414.041 397.6836 -414.3789 c +397.5703 -414.3789 397.458 -414.3789 397.3447 -414.3789 c +397.3447 -414.1538 397.3447 -413.9565 397.3447 -413.7314 c +397.4854 -413.9287 397.4854 -413.7876 397.6836 -413.9004 c +397.7109 -413.7036 397.543 -413.7036 397.5986 -413.4785 c +397.5986 -413.3096 397.373 -413.5063 397.4287 -413.647 c +397.2617 -413.1968 397.4023 -412.3813 397.3447 -411.79 c +404.0703 -411.79 410.7676 -411.79 417.4648 -411.79 c +417.3809 -413.4502 417.5498 -414.8853 417.3809 -416.4893 c +414.3984 -416.4893 411.415 -416.4893 408.4043 -416.4893 c +408.1504 -416.5454 408.291 -416.208 408.0938 -416.2358 c +408.1504 -416.6021 407.2783 -416.4893 407.0537 -416.3208 c +406.9971 -416.208 406.9404 -416.3208 407.0537 -416.3208 c +f +397.5137 -414.041 m +F +397.5986 -415.3354 m +F +397.5986 -415.3354 m +F +397.6836 -413.647 m +F +397.8516 -414.126 m +F +1 D +398.3301 -424.875 m +398.3301 -424.3965 397.7676 -424.791 398.1611 -424.959 c +398.1895 -424.875 398.2451 -424.8467 398.3301 -424.875 c +f +0 D +398.0762 -415.0264 m +F +1 D +398.3301 -425.5225 m +397.9922 -425.4375 398.3018 -425.7471 398.3301 -425.5225 c +398.3857 -425.5225 398.4424 -425.5225 398.499 -425.5225 c +398.499 -425.6348 398.415 -425.6631 398.415 -425.7471 c +398.667 -425.7754 399.1465 -425.5781 398.8926 -425.3535 c +398.8369 -425.4375 398.6396 -425.3535 398.499 -425.5225 c +398.4707 -425.4102 398.3301 -425.4375 398.3301 -425.5225 c +f +0 D +398.2451 -422.8496 m +F +398.3301 -415.8984 m +F +1 D +399.2031 -413.9004 m +399.2031 -413.6753 399.2031 -413.4502 399.2031 -413.2534 c +398.8652 -413.2534 398.7246 -413.1406 398.499 -413.3374 c +398.499 -413.5347 398.8369 -413.8442 399.2031 -413.9004 c +f +398.7246 -421.4141 m +398.752 -421.2168 398.7246 -421.1045 398.5557 -421.0762 c +398.583 -421.1885 398.5264 -421.2451 398.499 -421.3296 c +398.6113 -421.3296 398.667 -421.3574 398.7246 -421.4141 c +f +0 D +398.499 -421.4702 m +F +1 D +398.499 -425.2695 m +398.5557 -425.2695 398.6396 -425.2695 398.6396 -425.1846 c +398.583 -425.2129 398.499 -425.1846 398.499 -425.2695 c +f +398.9775 -424.4814 m +398.6963 -424.4814 398.583 -424.2842 398.5557 -424.6221 c +398.7803 -424.6504 398.8926 -424.5938 398.9775 -424.4814 c +f +0 D +398.6396 -412.3525 m +F +398.8076 -428.0273 m +F +398.8926 -420.8232 m +F +398.8926 -423.4961 m +F +1 D +398.9775 -414.8574 m +399.0332 -414.8574 399.1182 -414.8574 399.1465 -414.7729 c +399.0625 -414.8008 398.9775 -414.7729 398.9775 -414.8574 c +f +398.9775 -425.0439 m +399.1182 -425.0996 398.9775 -425.1846 398.9775 -425.2695 c +399.1182 -425.2969 399.1465 -425.1846 399.2871 -425.1846 c +399.3145 -425.0723 399.2295 -425.0439 399.2031 -424.959 c +399.54 -425.0156 399.5957 -424.6777 399.9336 -424.6221 c +400.3838 -424.9033 400.4971 -424.5371 v +400.5527 -424.791 400.666 -424.4814 400.834 -424.5371 c +400.7227 -424.3125 400.9189 -424.2285 401.0039 -423.9746 c +401.0879 -424.0586 401.1445 -424.1992 401.2285 -424.3125 c +400.8066 -424.2285 401.1445 -424.5371 401.2285 -424.3125 c +401.6221 -424.2842 401.1719 -424.0313 401.1445 -423.8906 c +401.5938 -424.002 401.3125 -423.4395 401.1445 -423.4121 c +401.1152 -423.5527 401.2285 -423.5527 401.2285 -423.665 c +400.7783 -423.665 400.4971 -424.5098 400.1025 -424.0586 c +400.1875 -424.7061 399.0059 -424.3125 399.2031 -424.959 c +399.0889 -424.9316 398.9775 -424.9316 398.9775 -425.0439 c +f +399.1465 -425.832 m +399.1465 -425.8594 399.1465 -425.8887 399.1465 -425.916 c +399.0059 -425.9727 399.1465 -426.0293 399.1465 -425.916 c +399.2031 -425.9443 399.2031 -425.8887 399.2031 -425.832 c +399.2871 -425.9727 399.3994 -426.3672 399.54 -426 c +399.0332 -425.9727 399.9902 -425.2695 399.7656 -425.7471 c +399.9336 -425.7471 400.2432 -425.4941 400.0186 -425.3535 c +399.9619 -425.5508 399.8496 -425.0996 399.625 -425.1846 c +399.625 -425.3252 399.6523 -425.4941 399.54 -425.5225 c +399.5117 -425.1563 399.0625 -425.5225 399.1465 -425.7471 c +399.0332 -425.7754 399.0889 -425.832 399.1465 -425.832 c +f +399.1465 -415.3354 m +399.2588 -415.3076 399.1182 -415.251 399.1465 -415.3354 c +399.0059 -415.3916 399.1465 -415.4482 399.1465 -415.3354 c +f +399.4551 -417.1929 m +399.3438 -417.1646 399.3145 -417.0806 399.1465 -417.1084 c +399.0625 -417.3896 399.2588 -417.3618 399.3711 -417.4458 c +399.3711 -417.3335 399.4277 -417.2773 399.4551 -417.1929 c +f +0 D +399.1465 -425.7471 m +399.1738 -425.7754 399.2295 -425.7754 399.2031 -425.832 c +399.1738 -425.832 399.1738 -425.832 399.1465 -425.832 c +399.1465 -425.8037 399.1465 -425.7754 399.1465 -425.7471 c +f +1 D +399.3711 -424.3125 m +399.3711 -424.2559 399.3711 -424.1992 399.3711 -424.1426 c +399.3145 -424.1426 399.2588 -424.1426 399.2031 -424.1426 c +399.2031 -424.1992 399.2031 -424.2559 399.2031 -424.3125 c +399.2588 -424.3125 399.3145 -424.3125 399.3711 -424.3125 c +f +0 D +399.2031 -430.1094 m +F +1 D +399.54 -414.8574 m +399.3994 -414.8574 399.3438 -414.9136 399.2871 -415.0264 c +399.4277 -415.0264 399.5117 -414.9697 399.54 -414.8574 c +f +399.3711 -426.3105 m +399.3145 -426.1973 399.2871 -426.3379 399.3711 -426.3105 c +399.4277 -426.4512 399.4844 -426.3105 399.3711 -426.3105 c +f +0 D +399.3711 -414.126 m +F +399.3711 -414.6885 m +F +399.3711 -423.5801 m +F +1 D +399.54 -415.3354 m +399.54 -415.251 399.6807 -415.2793 399.709 -415.1948 c +399.5957 -415.167 399.5684 -415.0825 399.4551 -415.1948 c +399.4844 -415.251 399.4551 -415.3354 399.54 -415.3354 c +f +0 D +399.4551 -421.7236 m +F +399.54 -412.7749 m +F +399.54 -416.5454 m +F +399.54 -416.7144 m +F +1 D +399.625 -414.6318 m +399.6807 -414.604 399.7656 -414.604 399.7656 -414.5479 c +399.709 -414.5479 399.625 -414.5479 399.625 -414.6318 c +f +399.7656 -415.0264 m +399.8213 -415.1387 399.877 -415.0264 399.7656 -415.0264 c +399.793 -414.9136 399.793 -414.8008 399.709 -414.7729 c +399.6523 -414.6602 399.5957 -414.8008 399.709 -414.7729 c +399.6807 -414.8853 399.6807 -414.998 399.7656 -415.0264 c +f +0 D +399.709 -413.563 m +F +399.709 -414.21 m +F +1 D +400.1025 -415.4199 m +400.1592 -415.5605 399.9902 -415.8984 400.1875 -415.8984 c +400.1309 -416.0674 399.9336 -416.0674 400.1025 -416.2358 c +399.9063 -416.2358 399.8213 -416.377 399.709 -416.4893 c +399.8496 -416.4893 399.7656 -416.7427 399.9336 -416.7144 c +399.9336 -416.6304 400.0469 -416.6582 400.1025 -416.6304 c +400.1025 -416.4893 400.1025 -416.377 400.1025 -416.2358 c +400.3838 -416.2358 400.4971 -415.6733 400.1875 -415.8984 c +400.2158 -415.73 400.3281 -415.5889 400.1875 -415.4199 c +400.2998 -415.3638 400.1875 -415.3354 400.1875 -415.4199 c +400.1592 -415.4199 400.1309 -415.4199 400.1025 -415.4199 c +f +399.8496 -415.4199 m +399.9902 -415.3638 399.8496 -415.3354 399.8496 -415.4199 c +399.7363 -415.4766 399.877 -415.5322 399.8496 -415.4199 c +f +399.8496 -428.168 m +399.793 -428.4766 400.2432 -428.4766 400.1875 -428.168 c +400.0742 -428.168 399.9619 -428.168 399.8496 -428.168 c +f +0 D +399.8496 -419.0498 m +F +1 D +400.1875 -414.7729 m +400.0186 -414.8008 400.0186 -414.6602 399.9336 -414.6318 c +399.9902 -414.7729 399.8496 -415.0825 400.0186 -415.1104 c +400.1309 -414.9136 399.9902 -414.9136 400.1875 -414.7729 c +f +0 D +399.9336 -415.7578 m +F +400.0186 -425.1846 m +F +400.0186 -425.7471 m +F +400.0186 -428.8984 m +F +1 D +400.1875 -415.1948 m +400.4404 -415.2793 400.666 -415.2793 400.834 -415.1104 c +400.4121 -415.2231 400.75 -414.9414 y +400.6094 -414.8008 400.3564 -414.9414 400.2715 -414.6318 c +400.2158 -414.8853 400.3838 -414.9414 400.4121 -415.1104 c +400.2998 -415.1104 400.1875 -415.0825 400.1875 -415.1948 c +399.8496 -415.1104 400.1592 -415.4199 400.1875 -415.1948 c +f +400.3564 -412.437 m +400.1309 -412.3525 399.9902 -412.7188 400.1875 -412.7749 c +400.1875 -412.606 400.4121 -412.6626 400.3564 -412.437 c +f +0 D +400.1025 -413 m +F +400.1025 -413.9004 m +F +400.1025 -423.5801 m +F +1 D +400.4971 -425.6064 m +400.4971 -425.6348 400.4971 -425.6631 400.4971 -425.6914 c +401.0596 -425.6064 400.3838 -425.0723 400.9189 -425.0439 c +400.7783 -424.9033 400.4404 -425.0439 400.4971 -425.3535 c +400.2998 -425.2695 400.0469 -425.5225 400.2715 -425.6064 c +400.2432 -425.4941 400.4971 -425.3252 400.4971 -425.5225 c +400.4121 -425.5225 400.4688 -425.6064 400.4971 -425.6064 c +f +0 D +400.2715 -414.4634 m +F +400.2715 -425.1846 m +F +400.2715 -425.916 m +F +1 D +400.75 -417.0522 m +400.6934 -417.0522 400.6377 -417.0522 400.5811 -417.0522 c +400.5254 -417.249 399.9902 -417.6152 400.4971 -417.6992 c +400.5254 -417.3618 400.5811 -417.3335 400.75 -417.0522 c +f +0 D +400.3564 -413.9849 m +F +400.3564 -415.5889 m +F +400.3564 -426.957 m +F +400.4121 -424.3965 m +F +1 D +400.4971 -414.6318 m +400.4688 -414.4912 400.4121 -414.6318 400.4971 -414.6318 c +400.4404 -414.9414 400.75 -414.6318 400.4971 -414.6318 c +f +0 D +400.4971 -425.5225 m +400.5254 -425.5225 400.5527 -425.5225 400.5811 -425.5225 c +400.5811 -425.5781 400.5811 -425.6064 400.4971 -425.6064 c +400.4971 -425.5781 400.4971 -425.5508 400.4971 -425.5225 c +f +400.4971 -426.1699 m +F +400.5811 -413.7314 m +F +400.666 -425.5225 m +400.6377 -425.5225 400.6094 -425.5225 400.5811 -425.5225 c +400.5811 -425.4658 400.666 -425.4375 400.666 -425.5225 c +f +400.666 -426.6484 m +F +400.666 -428.6738 m +F +1 D +400.75 -426.957 m +400.8633 -426.9297 400.75 -426.873 400.75 -426.957 c +400.6377 -427.0137 400.75 -427.0703 400.75 -426.957 c +f +400.75 -415.6733 m +400.9473 -415.7856 400.9746 -415.3916 400.834 -415.4199 c +400.834 -415.4766 400.8066 -415.5322 400.75 -415.5044 c +400.75 -415.5605 400.75 -415.6172 400.75 -415.6733 c +f +401.1445 -416.0674 m +401.1719 -415.9268 401.0596 -415.8984 401.0596 -415.7578 c +400.9189 -415.7578 400.8066 -415.814 400.75 -415.8984 c +400.8633 -415.9829 401.0313 -415.9829 401.1445 -416.0674 c +f +0 D +400.75 -416.8833 m +F +400.834 -425.2695 m +F +1 D +400.9189 -414.3789 m +401.0313 -414.3228 400.8906 -414.2666 400.9189 -414.3789 c +400.7783 -414.4351 400.9189 -414.4634 400.9189 -414.3789 c +f +401.1445 -418.6563 m +401.1445 -418.5156 401.0879 -418.459 401.0039 -418.4028 c +401.0039 -418.4873 400.9189 -418.5156 400.9189 -418.5718 c +401.0039 -418.5718 401.0313 -418.6846 401.1445 -418.6563 c +f +0 D +400.9189 -424.791 m +F +1 D +401.0039 -416.1519 m +400.9189 -416.3486 400.8633 -416.5176 401.0596 -416.6304 c +401.1152 -416.4614 401.2559 -416.208 401.0039 -416.1519 c +f +401.0039 -427.2949 m +400.9473 -427.1826 400.8906 -427.2949 401.0039 -427.2949 c +401.0313 -427.4082 401.0879 -427.2949 401.0039 -427.2949 c +f +401.3965 -415.1104 m +401.3965 -414.8574 401.5664 -414.7446 401.3965 -414.5479 c +401.4531 -414.9697 401.0596 -414.604 401.0039 -414.7729 c +401.1445 -414.8574 401.1152 -415.1387 401.3965 -415.1104 c +f +0 D +401.0039 -427.8574 m +F +1 D +401.0596 -426.2539 m +401.2002 -426.1973 401.0596 -426.1406 401.0596 -426.2539 c +400.9473 -426.2822 401.0879 -426.3379 401.0596 -426.2539 c +f +401.2285 -425.6914 m +401.1719 -425.7188 401.0879 -425.7471 401.0596 -425.832 c +401.1719 -425.832 401.3125 -425.832 401.3125 -425.916 c +401.3965 -426.1133 401.0596 -426.3105 401.3125 -426.3945 c +401.3408 -426.3379 401.3965 -426.2539 401.4814 -426.2539 c +401.5107 -426.3672 401.5664 -426.2266 401.4814 -426.2539 c +401.4814 -426.2266 401.4814 -426.1973 401.4814 -426.1699 c +401.5938 -426.1133 401.4531 -426.0566 401.4814 -426.1699 c +401.2852 -426.1406 401.4814 -425.8594 401.5664 -425.832 c +401.5664 -425.8594 401.5664 -425.8887 401.5664 -425.916 c +401.6514 -425.9443 401.6221 -426.0859 401.707 -426.0859 c +401.8193 -425.9727 401.7344 -425.9443 401.707 -425.832 c +401.8477 -425.8037 401.707 -425.7471 401.707 -425.832 c +401.6514 -425.832 401.6221 -425.832 401.5664 -425.832 c +401.6514 -425.7188 401.6514 -425.6348 401.4814 -425.6064 c +401.5938 -425.8037 401.2002 -425.832 401.2285 -425.6914 c +401.4258 -425.6914 401.3701 -425.5781 401.2285 -425.6064 c +401.2285 -425.5781 401.2285 -425.5508 401.2285 -425.5225 c +401.3408 -425.4658 401.2285 -425.4102 401.2285 -425.5225 c +401.0879 -425.2969 400.9473 -425.6348 401.2285 -425.6064 c +401.2285 -425.6348 401.2285 -425.6631 401.2285 -425.6914 c +f +0 D +401.0596 -426.6484 m +F +401.1445 -414.3789 m +F +401.1445 -414.5479 m +F +401.1445 -417.8398 m +F +401.2285 -415.3354 m +F +1 D +401.3965 -415.8984 m +401.3701 -415.8984 401.3408 -415.8984 401.3125 -415.8984 c +401.1445 -416.0391 401.3125 -416.3486 401.4814 -416.1519 c +401.4814 -416.208 401.4814 -416.2642 401.4814 -416.3208 c +401.4814 -416.4048 401.4814 -416.4893 401.4814 -416.5454 c +401.7344 -416.4614 401.6777 -416.686 401.792 -416.7144 c +401.7344 -416.1802 401.8193 -416.1519 401.875 -415.6733 c +401.9883 -415.5605 402.2695 -415.645 402.2695 -415.4199 c +401.9326 -415.251 402.5791 -414.8008 402.6074 -414.4634 c +402.1846 -414.4072 402.1572 -414.7168 402.1289 -415.0264 c +401.6777 -415.0825 401.5938 -415.4766 401.4814 -415.8418 c +401.3965 -415.814 401.3965 -415.8706 401.3965 -415.8984 c +f +401.3965 -425.0996 m +401.5107 -425.0723 401.3965 -425.0156 401.3965 -425.0996 c +401.3701 -425.0996 401.3408 -425.0996 401.3125 -425.0996 c +401.2559 -424.9883 401.2285 -425.1289 401.3125 -425.0996 c +401.3408 -425.2129 401.3965 -425.1563 401.3965 -425.0996 c +f +0 D +401.3125 -416.4048 m +F +1 D +401.707 -424.791 m +401.6514 -424.7344 401.4531 -424.3691 401.3125 -424.6221 c +401.3965 -424.6504 401.3701 -424.7061 401.3125 -424.791 c +401.4531 -424.8184 401.5938 -424.9316 401.707 -424.791 c +f +0 D +401.3125 -426.957 m +F +401.3125 -428.0273 m +F +1 D +401.3965 -428.3359 m +401.6514 -428.3086 401.2002 -428.5615 401.4814 -428.5898 c +401.5938 -428.5898 401.9326 -428.9277 402.0439 -429.0684 c +402.2979 -428.4766 402.1289 -428.3086 401.792 -427.8574 c +401.792 -427.9141 401.7344 -427.9424 401.6221 -427.9424 c +401.7344 -428.252 401.4814 -428.2236 401.3965 -428.3359 c +f +0 D +401.4814 -416.1519 m +401.5107 -416.0112 401.3965 -416.0112 401.3965 -415.8984 c +401.4531 -415.8984 401.4814 -415.8984 401.4814 -415.8418 c +401.7344 -415.814 401.792 -416.208 401.4814 -416.1519 c +f +401.4814 -413.563 m +F +1 D +401.875 -414.21 m +401.8477 -414.21 401.8193 -414.21 401.792 -414.21 c +401.7627 -414.4912 401.5107 -414.0132 401.4814 -414.2944 c +401.5664 -414.3228 401.5371 -414.4351 401.5664 -414.5479 c +401.7344 -414.5195 401.875 -414.5479 401.96 -414.6318 c +401.96 -414.5479 401.96 -414.4634 401.96 -414.3789 c +402.1572 -414.2944 402.1006 -414.0972 402.0439 -413.9004 c +402.1572 -413.8442 402.0439 -413.7876 402.0439 -413.9004 c +401.9883 -413.9004 401.9326 -413.9004 401.875 -413.9004 c +401.6514 -413.6753 401.9883 -413.8159 402.0439 -413.647 c +401.9326 -413.647 401.8193 -413.647 401.707 -413.647 c +401.7344 -413.7876 401.6514 -413.7876 401.6221 -413.9004 c +401.707 -413.9004 401.792 -413.9004 401.875 -413.9004 c +401.875 -414.126 401.7344 -414.0693 401.875 -414.21 c +f +0 D +401.4814 -427.2109 m +F +1 D +401.6221 -426.6484 m +401.7344 -426.4229 401.9033 -426.2539 402.1289 -426.1699 c +401.7627 -426.0859 401.4258 -426.4229 401.6221 -426.6484 c +401.6777 -426.7598 401.7344 -426.6484 401.6221 -426.6484 c +f +401.6221 -424.3965 m +401.6514 -424.2559 401.8193 -424.3398 401.875 -424.3965 c +401.96 -424.1152 401.7627 -424.1152 401.5664 -424.1426 c +401.5664 -424.1992 401.5664 -424.2559 401.5664 -424.3125 c +401.5664 -424.3691 401.5664 -424.3965 401.6221 -424.3965 c +f +0 D +401.6221 -414.8574 m +F +1 D +401.792 -427.3799 m +401.792 -427.4639 401.6514 -427.5488 401.792 -427.6045 c +401.8193 -427.5205 401.9326 -427.4355 401.792 -427.3799 c +f +0 D +401.96 -414.3789 m +401.9033 -414.3506 401.875 -414.3228 401.875 -414.21 c +401.9326 -414.2378 401.96 -414.2944 401.96 -414.3789 c +f +401.875 -426 m +F +401.875 -426.5635 m +F +401.96 -413.563 m +F +1 D +401.96 -418.7402 m +402.0166 -418.7124 402.1289 -418.7402 402.1289 -418.6563 c +402.0439 -418.6846 401.96 -418.6563 401.96 -418.7402 c +f +0 D +402.0439 -426.0859 m +F +402.1289 -413.7314 m +F +402.2139 -425.4375 m +F +1 D +402.7764 -413.4785 m +402.4668 -413.3096 402.3262 -413.5908 402.2695 -413.9004 c +402.5508 -413.8442 402.6074 -413.6191 402.7764 -413.4785 c +f +402.5234 -414.3789 m +402.5234 -414.3228 402.5234 -414.2666 402.5234 -414.21 c +402.4385 -414.21 402.3545 -414.21 402.2695 -414.21 c +402.2695 -414.2666 402.2695 -414.3228 402.2695 -414.3789 c +402.3545 -414.3789 402.4385 -414.3789 402.5234 -414.3789 c +f +0 D +402.3545 -414.041 m +F +1 D +402.4385 -422.8496 m +402.6914 -422.8496 402.3545 -422.5117 402.4385 -422.8496 c +402.3262 -422.9053 402.4385 -422.9609 402.4385 -422.8496 c +f +0 D +402.4385 -415.8984 m +F +1 D +402.5234 -428.4209 m +402.4102 -428.4766 402.5234 -428.5332 402.5234 -428.4209 c +402.6641 -428.4492 402.6641 -428.3359 402.7764 -428.3359 c +402.748 -428.4209 402.8047 -428.4209 402.832 -428.4209 c +402.8604 -428.5332 403.001 -428.5049 403.001 -428.4209 c +403.1143 -428.3643 403.001 -428.3359 403.001 -428.4209 c +402.9453 -428.4209 402.8887 -428.4209 402.832 -428.4209 c +402.8604 -428.3643 402.8047 -428.3359 402.7764 -428.3359 c +402.8604 -427.8301 403.3115 -428.1387 403.4785 -427.7734 c +404.0703 -427.8867 403.5361 -427.4355 403.4785 -427.7734 c +403.0859 -427.7168 402.6074 -427.8301 402.5234 -428.4209 c +f +402.7764 -415.0264 m +402.748 -414.9136 402.748 -414.8291 402.6074 -414.8574 c +402.6074 -414.9697 402.5791 -415.0825 402.6914 -415.1104 c +402.6914 -415.0542 402.6914 -414.998 402.7764 -415.0264 c +f +402.6914 -413.8159 m +402.8047 -413.7598 402.6641 -413.7036 402.6914 -413.8159 c +402.5791 -413.8726 402.6914 -413.9004 402.6914 -413.8159 c +f +402.832 -420.8232 m +402.832 -420.5132 402.4951 -420.8511 402.832 -420.8232 c +402.8887 -420.9639 402.9453 -420.8232 402.832 -420.8232 c +f +0 D +402.7764 -413.4224 m +F +1 D +402.832 -414.5479 m +402.7197 -414.5762 402.8604 -414.6318 402.832 -414.5479 c +402.917 -414.5479 402.917 -414.5195 402.917 -414.4634 c +403.0576 -414.4072 402.917 -414.3506 402.917 -414.4634 c +402.8604 -414.4351 402.8604 -414.4912 402.832 -414.5479 c +f +0 D +402.832 -415.5044 m +F +402.832 -423.8906 m +F +402.917 -413.2534 m +F +1 D +403.3379 -429.377 m +403.1982 -429.4063 402.917 -429.3213 403.001 -429.5469 c +403.1982 -429.5742 403.3115 -429.5469 403.3379 -429.377 c +f +403.3379 -422.2012 m +403.1143 -422.1738 403.0293 -422.0605 403.001 -422.3711 c +403.1709 -422.3711 403.2822 -422.3145 403.3379 -422.2012 c +f +403.0859 -414.041 m +403.2822 -414.1821 403.3379 -413.7876 403.1709 -413.8159 c +403.1709 -413.8726 403.1709 -413.9004 403.0859 -413.9004 c +403.0859 -413.9565 403.0859 -414.0132 403.0859 -414.041 c +f +0 D +403.0859 -427.127 m +F +1 D +403.0859 -429.2363 m +403.1709 -429.209 403.2266 -429.3496 403.2549 -429.2363 c +403.2549 -429.1523 403.1143 -429.125 403.0859 -429.2363 c +f +403.1709 -414.6885 m +403.2266 -414.6885 403.3379 -414.6885 403.3379 -414.6318 c +403.2549 -414.6318 403.1709 -414.6318 403.1709 -414.6885 c +f +0 D +403.3379 -420.3442 m +F +403.4785 -427.2949 m +F +403.4785 -429.5469 m +F +1 D +403.5635 -420.2603 m +403.6768 -420.2319 403.5635 -420.1758 403.5635 -420.2603 c +403.4521 -420.3164 403.5928 -420.3726 403.5635 -420.2603 c +f +0 D +403.5635 -414.2944 m +F +1 D +403.5635 -420.5977 m +403.6484 -420.5698 403.7334 -420.5977 403.7334 -420.5132 c +403.6768 -420.5415 403.5635 -420.5132 403.5635 -420.5977 c +f +0 D +403.6484 -429.9688 m +F +403.8184 -415.3354 m +F +403.8184 -430.0254 m +F +403.9014 -421.8076 m +F +1 D +404.127 -416.2358 m +404.2109 -415.8984 403.9014 -416.208 404.127 -416.2358 c +404.1826 -416.3486 404.2402 -416.2358 404.127 -416.2358 c +f +0 D +404.0703 -415.4199 m +F +404.0703 -415.8984 m +F +1 D +404.5488 -427.4639 m +404.3809 -427.4639 404.3809 -427.3516 404.2959 -427.2949 c +404.2676 -427.4082 404.127 -427.3799 404.0703 -427.4639 c +404.0996 -427.9141 404.4365 -427.7451 404.5488 -427.4639 c +f +404.3809 -421.0762 m +404.2109 -421.2168 404.042 -421.6108 404.2959 -421.7236 c +404.3809 -421.667 404.3516 -421.498 404.4648 -421.4702 c +404.5215 -421.6108 404.5488 -421.4702 404.4648 -421.4702 c +404.4648 -421.3574 404.4648 -421.2168 404.4648 -421.0762 c +404.5771 -421.02 404.4648 -420.9917 404.4648 -421.0762 c +404.4365 -421.0762 404.4082 -421.0762 404.3809 -421.0762 c +f +0 D +404.2109 -420.0347 m +F +404.2959 -420.3442 m +F +404.3809 -420.1196 m +F +1 D +404.5488 -413.8159 m +404.6621 -413.7598 404.5215 -413.7036 404.5488 -413.8159 c +404.4365 -413.8726 404.5488 -413.9004 404.5488 -413.8159 c +f +0 D +404.5488 -419.9507 m +F +404.5488 -422.2871 m +F +1 D +404.6895 -422.624 m +404.6895 -422.4834 404.7178 -422.3418 404.5488 -422.3711 c +404.5488 -422.4277 404.5488 -422.4834 404.5488 -422.5391 c +404.6328 -422.5391 404.6328 -422.5957 404.6895 -422.624 c +f +0 D +404.5488 -427.7734 m +F +1 D +404.5488 -429.9688 m +404.6055 -429.9395 404.6895 -429.9395 404.6895 -429.8848 c +404.6328 -429.8848 404.5488 -429.8848 404.5488 -429.9688 c +f +404.7744 -420.9072 m +404.6621 -420.9639 404.8018 -421.02 404.7744 -420.9072 c +404.8867 -420.9072 404.8301 -420.8232 404.7744 -420.8232 c +404.7744 -420.5977 404.4365 -420.9072 404.7744 -420.8232 c +404.7744 -420.8511 404.7744 -420.8794 404.7744 -420.9072 c +f +0 D +404.6328 -414.21 m +F +404.6328 -416.0674 m +F +1 D +405.3369 -421.5547 m +405.083 -421.4419 404.6621 -421.3013 404.6328 -421.7236 c +404.915 -421.5547 405.1123 -421.667 405.3369 -421.5547 c +f +404.6895 -420.0347 m +404.8584 -420.0068 405.1123 -420.1196 405.0273 -419.8662 c +405.3369 -419.8662 405.083 -419.3315 404.9424 -419.6128 c +405.0273 -419.6411 404.999 -419.7817 405.0273 -419.8662 c +404.8867 -419.8662 404.7461 -419.9224 404.6895 -420.0347 c +f +0 D +404.6895 -422.9336 m +F +404.7744 -416.2358 m +F +1 D +404.8584 -413.9849 m +404.8584 -414.041 404.999 -414.0693 405.0273 -413.9849 c +404.9424 -413.9849 404.8867 -413.8442 404.8584 -413.9849 c +f +404.9424 -423.2422 m +404.9424 -423.3281 405.083 -423.3555 405.1123 -423.2422 c +405.0273 -423.2715 404.9717 -423.1309 404.9424 -423.2422 c +f +0 D +405.0273 -419.4722 m +F +1 D +405.0273 -420.1758 m +405.083 -420.1758 405.1963 -420.1758 405.1963 -420.1196 c +405.1123 -420.1196 405.0273 -420.1196 405.0273 -420.1758 c +f +0 D +405.1123 -413.8159 m +F +405.1123 -420.6826 m +F +405.1963 -419.5566 m +F +405.1963 -420.0347 m +F +405.2803 -416.3208 m +F +1 D +405.2803 -420.5132 m +405.3369 -420.4854 405.4219 -420.5132 405.4219 -420.4292 c +405.3643 -420.457 405.2803 -420.4292 405.2803 -420.5132 c +f +0 D +405.2803 -422.7646 m +F +1 D +405.3369 -419.6973 m +405.3086 -420.0913 405.7305 -419.9224 405.8438 -419.7817 c +405.8711 -419.8379 405.9277 -419.9224 405.9004 -420.0347 c +405.9561 -420.0347 406.0117 -420.0347 406.0684 -420.0347 c +406.0967 -419.9507 406.1523 -419.9507 406.1523 -419.8662 c +406.0967 -419.8101 405.9844 -419.7817 405.8438 -419.7817 c +405.7861 -419.7256 405.7598 -419.6411 405.6748 -419.6128 c +405.6191 -419.5005 405.5625 -419.6411 405.6748 -419.6128 c +405.7031 -419.9507 405.5625 -419.6128 405.3369 -419.6973 c +f +405.4219 -422.0332 m +405.5049 -422.0889 405.6455 -422.1738 405.6748 -422.0332 c +405.6191 -422.0049 405.5342 -421.9482 405.4219 -421.9766 c +405.3936 -421.8359 405.3369 -421.9766 405.4219 -421.9766 c +405.4219 -422.0049 405.4219 -422.0049 405.4219 -422.0332 c +f +0 D +405.4219 -413.647 m +F +1 D +406.4063 -420.2603 m +406.209 -420.1758 405.9277 -420.1475 405.6748 -420.1196 c +405.6191 -420.5698 405.5342 -420.5977 405.4219 -420.9072 c +405.8711 -420.9351 406.1523 -420.7666 406.4063 -420.2603 c +f +405.5898 -421.8076 m +405.5898 -421.8359 405.5898 -421.8643 405.5898 -421.8921 c +405.8154 -421.8643 405.6455 -422.2012 405.9004 -422.1172 c +405.9844 -421.8921 405.7861 -421.8921 405.8438 -421.6387 c +405.6455 -421.6108 405.7305 -421.8076 405.5898 -421.8076 c +405.6191 -421.7236 405.5625 -421.7236 405.5049 -421.7236 c +405.4492 -421.6108 405.4219 -421.7236 405.5049 -421.7236 c +405.5049 -421.7798 405.5342 -421.8076 405.5898 -421.8076 c +f +0 D +405.5049 -413.9849 m +F +405.5049 -416.1519 m +F +405.5049 -420.1196 m +F +1 D +405.5898 -422.3711 m +405.5898 -422.4551 405.7305 -422.4834 405.7598 -422.3711 c +405.6748 -422.3711 405.6191 -422.2578 405.5898 -422.3711 c +f +0 D +405.5898 -427.4639 m +F +405.6748 -412.437 m +F +405.6748 -427.7734 m +F +1 D +405.7598 -423.4961 m +405.7031 -423.3838 405.6455 -423.4961 405.7598 -423.4961 c +405.8154 -423.6094 405.8438 -423.4961 405.7598 -423.4961 c +f +0 D +405.7598 -416.0674 m +F +405.9004 -427.2949 m +F +406.1523 -419.6128 m +F +1 D +406.4063 -421.5547 m +406.4336 -421.667 406.4902 -421.5547 406.4063 -421.5547 c +406.4063 -421.498 406.4063 -421.4419 406.4063 -421.4141 c +406.6035 -421.4419 406.5752 -421.2451 406.7998 -421.3296 c +406.8564 -421.583 406.9688 -421.8076 407.2783 -421.8076 c +407.0811 -421.4702 406.6875 -420.9072 406.1523 -421.1606 c +406.2656 -421.2168 406.3496 -421.2734 406.4063 -421.4141 c +406.125 -421.3296 406.2656 -421.5547 406.4063 -421.5547 c +f +0 D +406.2373 -430.1934 m +F +1 D +406.9688 -420.1196 m +406.6592 -420.063 406.6035 -420.0068 406.4902 -420.2603 c +406.7158 -420.2881 406.8848 -420.2603 406.9688 -420.1196 c +f +0 D +406.7158 -416.0674 m +F +406.7998 -419.9507 m +F +1 D +406.8848 -419.6973 m +406.8281 -419.585 406.7725 -419.7256 406.8848 -419.6973 c +406.9404 -419.8101 406.9688 -419.6973 406.8848 -419.6973 c +f +0 D +406.9688 -419.6128 m +F +407.0537 -422.0332 m +F +1 D +407.1943 -421.9766 m +407.3066 -421.9482 407.335 -422.0889 407.3633 -421.9766 c +407.3633 -421.8921 407.2227 -421.8643 407.1943 -421.9766 c +f +0 D +407.1943 -422.5391 m +F +407.3633 -420.2603 m +F +1 D +407.9268 -419.6973 m +407.9268 -419.6694 407.9268 -419.6411 407.9268 -419.6128 c +407.7285 -419.6411 407.5313 -419.6411 407.4473 -419.5566 c +407.4199 -419.7817 407.7012 -419.6973 407.8418 -419.7817 c +407.8418 -420.063 408.208 -419.6973 407.9268 -419.6973 c +f +0 D +407.4473 -429.8848 m +F +1 D +407.5313 -420.5132 m +407.4756 -420.4009 407.4199 -420.5132 407.5313 -420.5132 c +407.5879 -420.626 407.6162 -420.5132 407.5313 -420.5132 c +f +407.8418 -415.8984 m +407.7568 -415.814 407.5605 -415.814 407.5313 -415.9829 c +407.6445 -416.0952 407.8418 -416.0952 407.8418 -415.8984 c +f +407.7012 -422.0332 m +407.7012 -421.9766 407.7568 -421.9482 407.7568 -421.8921 c +407.7012 -421.8921 407.6719 -421.8076 407.6162 -421.8076 c +407.6162 -421.8921 407.5313 -421.8921 407.5313 -421.9766 c +407.6162 -421.9766 407.6162 -422.0332 407.7012 -422.0332 c +f +407.9268 -422.624 m +408.0674 -422.1738 407.5605 -422.0889 407.5313 -422.4551 c +407.5879 -422.5684 407.7285 -422.624 407.9268 -422.624 c +f +0 D +407.5313 -428.7578 m +F +1 D +407.7012 -429.5469 m +408.0381 -429.6309 407.7012 -429.3213 407.7012 -429.5469 c +407.3633 -429.4619 407.6719 -429.7988 407.7012 -429.5469 c +f +0 D +407.6162 -420.0347 m +F +407.6162 -420.1758 m +F +407.7012 -421.7236 m +F +407.7568 -429.1523 m +F +407.7568 -430.6152 m +F +407.9268 -419.6973 m +407.9531 -419.7817 407.8975 -419.7817 407.8418 -419.7817 c +407.8691 -419.7256 407.8691 -419.6973 407.9268 -419.6973 c +f +407.8418 -420.0347 m +F +1 D +407.8418 -420.1758 m +407.8691 -420.3442 407.8975 -420.457 408.0098 -420.5132 c +407.9824 -420.3726 408.0938 -420.1196 407.8418 -420.1758 c +f +0 D +407.9268 -414.4634 m +F +407.9268 -420.9072 m +F +1 D +408.0098 -429.5469 m +408.0674 -429.5469 408.123 -429.5469 408.1787 -429.5469 c +408.123 -429.8281 408.46 -429.6875 408.2637 -429.5469 c +408.3486 -428.8145 409.0791 -428.7305 408.6572 -428.1113 c +408.6855 -428.1113 408.7139 -428.1113 408.7412 -428.1113 c +408.7705 -427.8301 408.6572 -427.6045 408.4893 -427.7734 c +408.5732 -427.4355 408.2637 -427.7734 408.4893 -427.7734 c +408.5166 -428.7021 408.1504 -428.7871 408.0098 -429.5469 c +f +408.2637 -429.8848 m +408.2637 -430.1094 407.9268 -430.334 408.2637 -430.4473 c +408.3193 -430.3623 408.4316 -429.9121 408.2637 -429.8848 c +f +0 D +408.1787 -415.5889 m +F +408.2637 -429.5469 m +408.2344 -429.5469 408.208 -429.5469 408.1787 -429.5469 c +408.1787 -429.5176 408.2344 -429.4619 408.2637 -429.5469 c +f +408.2637 -419.5566 m +F +408.2637 -421.8076 m +F +1 D +408.3486 -419.6973 m +408.4043 -419.8379 408.5449 -419.8662 408.7412 -419.8662 c +408.7412 -419.7256 408.6299 -419.6973 408.6572 -419.5566 c +408.4316 -419.4722 408.4893 -419.6973 408.3486 -419.6973 c +408.291 -419.585 408.2344 -419.7256 408.3486 -419.6973 c +f +0 D +408.3486 -414.041 m +F +408.4043 -413.3374 m +F +408.4043 -420.9072 m +F +1 D +409.1357 -429.4619 m +408.8818 -429.293 408.8818 -429.3213 408.5732 -429.377 c +408.6006 -429.6309 408.3486 -429.8848 408.6572 -429.9688 c +408.7139 -429.8848 408.7412 -429.7715 408.7412 -429.6309 c +408.9668 -429.5176 409.0518 -429.7148 409.1357 -429.4619 c +f +0 D +408.5732 -430.1094 m +F +408.6572 -428.0273 m +408.6572 -428.0547 408.6572 -428.083 408.6572 -428.1113 c +408.6006 -428.1113 408.5732 -428.0273 408.6572 -428.0273 c +f +408.6572 -429.1523 m +F +408.7412 -429.4619 m +408.7412 -429.5176 408.7412 -429.5742 408.7412 -429.6309 c +408.6572 -429.6309 408.6299 -429.4902 408.7412 -429.4619 c +f +1 D +408.8262 -428.1113 m +408.9111 -428.083 408.9385 -428.2236 408.9668 -428.1113 c +408.9668 -428.0273 408.8262 -427.998 408.8262 -428.1113 c +f +408.9668 -430.1934 m +408.9668 -430.0811 408.9951 -429.9121 408.8262 -429.9688 c +408.8262 -429.9961 408.8262 -430.0527 408.8262 -430.1094 c +408.9111 -430.1094 408.9111 -430.1934 408.9668 -430.1934 c +f +0 D +408.8262 -430.6152 m +F +1 D +408.9111 -419.8662 m +408.8818 -419.9507 408.9111 -420.0068 408.9668 -420.0347 c +408.9951 -419.9507 409.0791 -419.979 409.1357 -419.9507 c +409.1924 -420.063 409.248 -419.9507 409.1357 -419.9507 c +409.1641 -419.894 409.2207 -419.8662 409.2207 -419.7817 c +409.0234 -419.7817 408.7412 -419.4438 408.9111 -419.7817 c +408.7979 -419.8101 408.8545 -419.8662 408.9111 -419.8662 c +f +408.9668 -428.9844 m +408.9111 -428.9844 408.9111 -429.0117 408.9111 -429.0684 c +408.7705 -429.125 408.9111 -429.1523 408.9111 -429.0684 c +408.9668 -429.0957 408.9668 -429.0391 408.9668 -428.9844 c +409.1074 -429.0117 408.9951 -429.2363 409.1357 -429.2363 c +409.1924 -429.0684 409.2764 -429.0684 409.3887 -429.1523 c +409.4736 -428.8428 409.0234 -429.0684 409.0518 -428.8145 c +409.1924 -428.7871 409.0518 -428.7305 409.0518 -428.8145 c +408.9951 -428.8145 408.9951 -428.9277 408.9668 -428.9844 c +f +0 D +408.9111 -419.7817 m +408.9385 -419.7817 408.9951 -419.8379 408.9111 -419.8662 c +408.9111 -419.8379 408.9111 -419.8101 408.9111 -419.7817 c +f +408.9668 -420.9072 m +F +1 D +409.2207 -427.9424 m +409.3047 -427.8301 409.3047 -427.7451 409.1357 -427.6895 c +409.1357 -427.8018 409.1074 -427.8867 409.0518 -427.9424 c +409.1074 -427.9424 409.1641 -427.9424 409.2207 -427.9424 c +f +0 D +409.0518 -430.2783 m +F +1 D +409.3887 -428.1113 m +409.2764 -428.1113 409.1641 -428.083 409.1357 -428.168 c +409.248 -428.1953 409.1924 -428.2803 409.1357 -428.3359 c +409.3047 -428.3643 409.3887 -428.2803 409.3887 -428.1113 c +f +409.5576 -420.4292 m +409.5576 -420.2036 409.5576 -419.979 409.3047 -420.0347 c +409.2764 -420.1475 409.1924 -420.1758 409.2207 -420.3442 c +409.3613 -420.3442 409.4736 -420.3726 409.5576 -420.4292 c +f +409.2207 -428.8145 m +409.2764 -428.8145 409.3887 -428.8145 409.3887 -428.7578 c +409.333 -428.7578 409.2207 -428.7578 409.2207 -428.8145 c +f +0 D +409.4736 -415.4199 m +F +1 D +409.6982 -428.8984 m +409.7275 -429.0117 409.7832 -428.9551 409.7832 -428.8984 c +409.8389 -428.8984 409.8945 -428.8984 409.9521 -428.8984 c +410.0088 -429.0117 410.0352 -428.8984 409.9521 -428.8984 c +410.0645 -428.7021 409.6709 -428.6738 409.6982 -428.8145 c +409.6143 -428.8428 409.6709 -428.8984 409.6982 -428.8984 c +f +0 D +409.6982 -428.8145 m +409.7549 -428.8428 409.8115 -428.8428 409.7832 -428.8984 c +409.7549 -428.8984 409.7275 -428.8984 409.6982 -428.8984 c +409.6982 -428.8711 409.6982 -428.8428 409.6982 -428.8145 c +f +1 D +409.8682 -421.1606 m +410.0088 -421.1885 409.9521 -421.4141 410.2051 -421.3296 c +410.2607 -421.02 410.0088 -420.9072 409.8682 -421.0762 c +409.8115 -420.9639 409.7832 -421.0762 409.8682 -421.0762 c +409.8682 -421.1045 409.8682 -421.1328 409.8682 -421.1606 c +f +0 D +409.8682 -414.4634 m +F +1 D +410.0352 -427.8574 m +409.9795 -427.9141 409.9521 -427.998 409.9521 -428.1113 c +409.8389 -428.1387 409.9521 -428.1953 409.9521 -428.1113 c +410.0352 -428.0547 410.1201 -427.998 410.1201 -427.8574 c +410.1494 -427.8574 410.1768 -427.8574 410.2051 -427.8574 c +410.375 -427.6895 410.3457 -427.5488 410.1201 -427.4639 c +410.0928 -427.6611 409.9521 -427.7168 410.1201 -427.8574 c +410.0928 -427.8574 410.0645 -427.8574 410.0352 -427.8574 c +f +410.1201 -428.4209 m +410.2051 -428.3086 410.2051 -428.2236 410.0352 -428.168 c +410.0352 -428.2803 409.9795 -428.3643 409.9521 -428.4209 c +410.0088 -428.4209 410.0645 -428.4209 410.1201 -428.4209 c +f +410.0352 -419.4722 m +410.0928 -419.4438 410.1768 -419.4722 410.2051 -419.3877 c +410.1201 -419.3877 410.0352 -419.3877 410.0352 -419.4722 c +f +410.2051 -428.7578 m +410.2334 -428.7578 410.29 -428.7578 410.3457 -428.7578 c +410.3457 -428.8428 410.3457 -428.9551 410.3457 -429.0684 c +410.3174 -429.0684 410.29 -429.0684 410.2607 -429.0684 c +410.2607 -428.9844 410.2051 -429.0117 410.2051 -429.0684 c +409.8115 -428.9844 410.29 -429.4336 410.2051 -429.0684 c +410.2334 -429.0684 410.2607 -429.0684 v +410.29 -429.1523 410.3457 -429.125 410.3457 -429.0684 c +410.5156 -429.0684 410.4014 -428.7871 410.4307 -428.6738 c +410.3174 -428.6455 410.2051 -428.6455 410.2051 -428.7578 c +410.0645 -428.7871 410.2051 -428.8428 410.2051 -428.7578 c +f +0 D +410.1201 -429.7988 m +F +1 D +410.7676 -420.1758 m +411.0215 -419.7534 410.4307 -419.979 410.5156 -419.6128 c +410.3174 -419.6128 410.2051 -419.6411 410.2051 -419.7817 c +410.5713 -419.7534 410.4014 -420.2036 410.7676 -420.1758 c +f +410.3457 -415.0264 m +410.4014 -414.998 410.5156 -415.0264 410.5156 -414.9414 c +410.458 -414.9697 410.3457 -414.9414 410.3457 -415.0264 c +f +0 D +410.4307 -429.8848 m +F +410.6826 -429.6309 m +F +1 D +410.8242 -428.8984 m +410.9648 -428.9277 410.9932 -428.8428 410.9932 -428.7578 c +411.1055 -428.7021 410.9932 -428.6455 410.9932 -428.7578 c +410.9375 -428.7578 410.8799 -428.7578 410.8242 -428.7578 c +410.8525 -428.3926 410.5156 -428.7305 410.8242 -428.7578 c +410.8242 -428.7871 410.8242 -428.8428 410.8242 -428.8984 c +f +411.1621 -415.251 m +411.1621 -415.2231 411.1621 -415.167 411.1621 -415.1104 c +411.0781 -415.1104 410.9932 -415.1104 410.9082 -415.1104 c +410.9082 -415.167 410.9082 -415.2231 410.9082 -415.251 c +410.9932 -415.251 411.0781 -415.251 411.1621 -415.251 c +f +0 D +410.9932 -429.4619 m +F +411.3311 -415.1948 m +F +1 D +411.9785 -430.1934 m +412.0059 -429.7988 411.6396 -429.8281 411.3311 -429.7988 c +411.415 -430.0527 411.2461 -430.1094 411.4717 -430.2783 c +411.5557 -430.0811 411.8369 -430.4473 411.9785 -430.1934 c +412.0059 -430.3066 412.0615 -430.1934 411.9785 -430.1934 c +f +0 D +411.415 -415.4199 m +F +411.4717 -419.7817 m +F +1 D +411.6396 -415.251 m +411.584 -415.1387 411.5557 -415.2793 411.6396 -415.251 c +411.6963 -415.3916 411.7529 -415.251 411.6396 -415.251 c +f +0 D +411.6396 -420.0347 m +F +1 D +411.8096 -419.8662 m +411.8369 -419.9507 411.8652 -420.0068 411.9785 -420.0347 c +412.0059 -420.1475 412.0615 -420.0068 411.9785 -420.0347 c +412.0059 -419.894 411.8936 -419.8662 411.8096 -419.8662 c +411.8096 -419.8101 411.8096 -419.7534 411.8096 -419.6973 c +411.9785 -419.7817 412.2871 -419.7534 412.457 -419.8662 c +412.4004 -419.6128 412.1191 -419.5566 411.8096 -419.5566 c +411.8096 -419.585 411.8096 -419.6411 411.8096 -419.6973 c +411.5283 -419.6411 411.6963 -419.8662 411.8096 -419.8662 c +f +0 D +411.7246 -415.8984 m +F +1 D +412.2021 -429.4619 m +412.2021 -429.5176 412.2314 -429.5742 412.2871 -429.5469 c +412.0908 -429.293 411.8652 -429.2656 412.1191 -428.8984 c +411.7246 -428.8711 411.9502 -429.4336 411.8096 -429.6309 c +412.1191 -429.7432 411.9502 -429.4063 412.2021 -429.4619 c +f +411.9785 -421.2451 m +411.8369 -421.3574 411.9209 -421.5547 412.0615 -421.6387 c +412.0059 -421.5264 412.1465 -421.2168 411.9785 -421.2451 c +f +0 D +411.9785 -420.5977 m +F +1 D +412.0615 -428.6738 m +412.1191 -428.6455 412.2021 -428.6738 412.2021 -428.5898 c +412.1465 -428.5898 412.0615 -428.5898 412.0615 -428.6738 c +f +0 D +412.1191 -420.1196 m +F +412.1191 -422.1172 m +F +412.1191 -428.8145 m +F +412.2021 -421.5547 m +F +1 D +412.457 -428.4209 m +412.4834 -428.3086 412.5977 -428.2803 412.625 -428.168 c +412.5127 -428.083 412.2314 -428.0547 412.2021 -428.252 c +412.3721 -428.2236 412.3721 -428.3643 412.457 -428.4209 c +f +0 D +412.2871 -420.1196 m +F +412.2871 -420.4292 m +F +412.2871 -420.6826 m +F +412.3721 -421.5547 m +F +1 D +412.625 -419.6973 m +412.7383 -419.6411 412.5977 -419.6128 412.625 -419.6973 c +412.3721 -419.7256 412.6816 -420.0347 412.625 -419.6973 c +f +0 D +412.541 -420.0347 m +F +1 D +412.541 -420.5132 m +412.5977 -420.4854 412.6816 -420.5132 412.6816 -420.4292 c +412.625 -420.457 412.541 -420.4292 412.541 -420.5132 c +f +0 D +412.7656 -413.1689 m +F +412.8496 -420.4292 m +F +412.8496 -421.6387 m +F +1 D +412.8496 -429.9688 m +412.9063 -429.9395 413.0195 -429.9395 413.0195 -429.8848 c +412.9629 -429.8848 412.8496 -429.8848 412.8496 -429.9688 c +f +0 D +412.9346 -429.7148 m +F +1 D +413.1875 -420.5977 m +413.2725 -420.5977 413.3008 -420.7104 413.3291 -420.5977 c +413.3291 -420.5132 413.1875 -420.4854 413.1875 -420.5977 c +f +413.666 -429.7148 m +414.0039 -429.7988 413.666 -429.4619 413.666 -429.7148 c +413.5537 -429.7715 413.666 -429.7988 413.666 -429.7148 c +f +0 D +413.751 -422.9336 m +F +413.751 -423.1016 m +F +413.835 -413.4224 m +F +413.9766 -421.6387 m +F +414.3984 -421.1606 m +F +414.4824 -421.8921 m +F +414.791 -421.8921 m +F +414.791 -429.3213 m +F +415.0459 -421.4702 m +F +415.0459 -422.5391 m +F +415.1299 -419.8662 m +F +415.1865 -420.6826 m +F +1 D +415.2705 -427.4639 m +415.3545 -427.0137 415.0459 -427.3516 415.2705 -427.4639 c +415.3271 -427.5762 415.3828 -427.4355 415.2705 -427.4639 c +f +0 D +415.3545 -423.4121 m +F +415.4385 -423.1875 m +F +415.5234 -430.1094 m +F +415.6084 -420.1758 m +F +415.6084 -428.168 m +F +1 D +415.6924 -422.8496 m +415.6357 -423.1016 415.749 -423.2148 416.002 -423.1875 c +416.002 -422.9609 415.8896 -422.8496 415.6924 -422.8496 c +f +0 D +416.002 -423.834 m +F +1 D +416.1709 -423.4961 m +416.1426 -423.7207 416.2832 -423.75 416.4805 -423.75 c +416.5088 -423.5244 416.3682 -423.4688 416.1709 -423.4961 c +f +0 D +416.3398 -415.4199 m +F +416.5654 -420.7666 m +F +416.6494 -421.8076 m +F +416.6494 -422.8496 m +F +416.7334 -423.665 m +F +416.9023 -420.7666 m +F +416.958 -429.377 m +F +417.043 -422.1172 m +F +417.1279 -423.3281 m +F +417.2129 -423.5801 m +F +417.3809 -422.1172 m +F +*U +U +u +*u +0.187533 0.952972 0.991791 0.093599 k +436.6563 -423.8242 m +422.2119 -423.8242 L +422.2119 -421.4131 L +434.2451 -421.4131 L +434.2451 -419.022 L +422.2119 -419.022 L +422.2119 -416.6113 L +434.2451 -416.6113 L +434.2451 -414.2007 L +422.2119 -414.2007 L +422.2119 -411.79 L +436.6563 -411.79 l +436.6563 -423.8242 L +f +*U +U +U +LB +%AI5_EndLayer-- +%%PageTrailer +gsave annotatepage grestore showpage +%%Trailer +Adobe_Illustrator_AI5 /terminate get exec +Adobe_shading_AI8 /terminate get exec +Adobe_ColorImage_AI6 /terminate get exec +Adobe_pattern_AI5 /terminate get exec +AGM_Gradient /terminate get exec +Adobe_screens_AI5 /terminate get exec +Adobe_cshow /terminate get exec +Adobe_level2_AI5 /terminate get exec +%%EOF diff --git a/extras/assets/logo/black/ACE3-Logo.jpg b/extras/assets/logo/black/ACE3-Logo.jpg new file mode 100644 index 0000000000..3028852c73 Binary files /dev/null and b/extras/assets/logo/black/ACE3-Logo.jpg differ diff --git a/extras/assets/logo/black/ACE3-Logo.png b/extras/assets/logo/black/ACE3-Logo.png new file mode 100644 index 0000000000..43ee025f97 Binary files /dev/null and b/extras/assets/logo/black/ACE3-Logo.png differ diff --git a/extras/assets/logo/white/ACE3-Logo.eps b/extras/assets/logo/white/ACE3-Logo.eps new file mode 100644 index 0000000000..b4f7202d88 --- /dev/null +++ b/extras/assets/logo/white/ACE3-Logo.eps @@ -0,0 +1,15918 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(R) 8.0 +%%AI8_CreatorVersion: 16.0.2 +%%For: (bux578) () +%%Title: (ACE3-Logo.eps) +%%CreationDate: 3/12/2015 2:49 PM +%%Canvassize: 16383 +%%BoundingBox: 354 -432 437 -411 +%%HiResBoundingBox: 354.8633 -431.0947 436.6563 -411.5649 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0 +%%+ procset Adobe_screens_AI5 1.0 0 +%%+ procset AGM_Gradient 1.0 0 +%%+ procset Adobe_ColorImage_AI6 1.3 0 +%%+ procset Adobe_Illustrator_AI5 1.3 0 +%%+ procset Adobe_pattern_AI5 1.0 0 +%%+ procset Adobe_cshow 2.0 8 +%%+ procset Adobe_shading_AI8 1.0 0 +%AI5_FileFormat 4.0 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%CMYKProcessColor: 1 1 1 1 ([Passermarken]) +%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) +%%+ Options: 1 16 0 1 1 1 0 0 0 0 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 2 3 4 +%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 1 0 () +%AI3_TemplateBox: 396.3633 -422.0654 396.3633 -422.0654 +%AI3_TileBox: -13.2603 -706.8096 804.7793 -135.8496 +%AI3_DocumentPreview: Header +%AI5_ArtSize: 81.793 19.5298 +%AI5_RulerUnits: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 0 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI8_OpenToView: 342 -390 16 1821 1035 18 0 0 50 116 0 0 +%AI5_OpenViewLayers: 7 +%%PageOrigin:-8 -817 +%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 +%AI9_Flatten: 0 +%AI12_CMSettings: 00.MS +%%EndComments +%%BeginProlog +%%BeginResource: procset Adobe_level2_AI5 1.2 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) +%%Version: 1.2 0 +%%CreationDate: (04/10/93) () +%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) +userdict /Adobe_level2_AI5 26 dict dup begin + put + /packedarray where not + { + userdict begin + /packedarray + { + array astore readonly + } bind def + /setpacking /pop load def + /currentpacking false def + end + 0 + } if + pop + userdict /defaultpacking currentpacking put true setpacking + /initialize + { + Adobe_level2_AI5 begin + } bind def + /terminate + { + currentdict Adobe_level2_AI5 eq + { + end + } if + } bind def + mark + /setcustomcolor where not + { + /findcmykcustomcolor + { + (AI8_CMYK_CustomColor) + 6 packedarray + } bind def + /findrgbcustomcolor + { + (AI8_RGB_CustomColor) + 5 packedarray + } bind def + /setcustomcolor + { + exch + aload pop dup + (AI8_CMYK_CustomColor) eq + { + pop pop + 4 + { + 4 index mul + 4 1 roll + } repeat + 5 -1 roll pop + setcmykcolor + } + { + dup (AI8_RGB_CustomColor) eq + { + pop pop + 3 + { + 1 exch sub + 3 index mul + 1 exch sub + 3 1 roll + } repeat + 4 -1 roll pop + setrgbcolor + } + { + pop + 4 + { + 4 index mul 4 1 roll + } repeat + 5 -1 roll pop + setcmykcolor + } ifelse + } ifelse + } + def + } if + /setAIseparationgray + { + false setoverprint + 0 setgray + /setseparationgray where{ + pop setseparationgray + }{ + /setcolorspace where{ + pop + [/Separation (All) /DeviceCMYK {dup dup dup}] setcolorspace + 1 exch sub setcolor + }{ + setgray + }ifelse + }ifelse + } def + + /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def + userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put + userdict /level2? + systemdict /languagelevel known dup + { + pop systemdict /languagelevel get 2 ge + } if + put +/level2ScreenFreq +{ + begin + 60 + HalftoneType 1 eq + { + pop Frequency + } if + HalftoneType 2 eq + { + pop GrayFrequency + } if + HalftoneType 5 eq + { + pop Default level2ScreenFreq + } if + end +} bind def +userdict /currentScreenFreq + level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put +level2? not + { + /setcmykcolor where not + { + /setcmykcolor + { + exch .11 mul add exch .59 mul add exch .3 mul add + 1 exch sub setgray + } def + } if + /currentcmykcolor where not + { + /currentcmykcolor + { + 0 0 0 1 currentgray sub + } def + } if + /setoverprint where not + { + /setoverprint /pop load def + } if + /selectfont where not + { + /selectfont + { + exch findfont exch + dup type /arraytype eq + { + makefont + } + { + scalefont + } ifelse + setfont + } bind def + } if + /cshow where not + { + /cshow + { + [ + 0 0 5 -1 roll aload pop + ] cvx bind forall + } bind def + } if + } if + cleartomark + /anyColor? + { + add add add 0 ne + } bind def + /testColor + { + gsave + setcmykcolor currentcmykcolor + grestore + } bind def + /testCMYKColorThrough + { + testColor anyColor? + } bind def + userdict /composite? + 1 0 0 0 testCMYKColorThrough + 0 1 0 0 testCMYKColorThrough + 0 0 1 0 testCMYKColorThrough + 0 0 0 1 testCMYKColorThrough + and and and + put + composite? not + { + userdict begin + gsave + /cyan? 1 0 0 0 testCMYKColorThrough def + /magenta? 0 1 0 0 testCMYKColorThrough def + /yellow? 0 0 1 0 testCMYKColorThrough def + /black? 0 0 0 1 testCMYKColorThrough def + grestore + /isCMYKSep? cyan? magenta? yellow? black? or or or def + /customColor? isCMYKSep? not def + end + } if + end defaultpacking setpacking +%%EndResource +%%BeginResource: procset Adobe_screens_AI5 1.2 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Custom Halftone Screens ProcSet) +%%Version: 1.2 0 +%%CreationDate: (03/24/93) () +%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) +userdict /defaultpacking currentpacking put true setpacking +systemdict begin +userdict /Adobe_screens_AI5 15 dict dup begin +put +/initialize +{ + Adobe_screens_AI5 begin + /screenid + deviceDPI 600 gt composite? not or + { + -1 + } + { + deviceDPI currentScreenFreq + dup dup 60 ge exch 150 le and deviceDPI 300 le and + { + pop 60 + } if + div 1.41421 div 0.5 add cvi + } ifelse + def + + 2 screenid eq + { + /customsize 16 def + /customdata /customdata2 def + setcustomscreen + } if + + 3 screenid eq + { + /customsize 24 def + /customdata /customdata3 def + setcustomscreen + } if + + 4 screenid eq + { + /customsize 16 def + /customdata /customdata4 def + setcustomscreen + } if + + 5 screenid eq + { + /customsize 20 def + /customdata /customdata5 def + setcustomscreen + } if + + 6 screenid eq + { + /customsize 24 def + /customdata /customdata6 def + setcustomscreen + } if + + 7 screenid eq + { + /customsize 28 def + /customdata /customdata7 def + setcustomscreen + } if + + 8 screenid eq + { + /customsize 16 def + /customdata /customdata8 def + setcustomscreen + } if +} def +/terminate +{ + currentdict Adobe_screens_AI5 eq + { + end + } if +} def +/setcustomscreen +{ + deviceDPI customsize div 0 + { + 1 add 2 div customsize mul cvi exch + 1 add 2 div customsize mul cvi exch + customsize mul add + customdata load exch get 256 div + } setscreen +} def +/customdata2 28 28 mul string def +currentfile customdata2 readhexstring +4180E8694988E2634382EA6B4B8AE061A01939C8A81737C2A21B3BCAAA1636C0 +F8795998F6775796FA7B5B9AF57656952ED8B80727D6B60F2FDABA0626D5B50E +4E8DE6674786EE6F4F8EE5664685ED6EAD1434C6A61F3FCEAE1232C5A51E3ECD +F3745493FE7F5F9EF1725291FD7E5E9D24D3B30C2CDEBE0222D1B10A2ADDBD04 +4483EB6C4C8BE1624281E96A4A89E364A31C3CCBAB1535C1A11A3AC9A91838C3 +FB7C5C9BF4755594F97A5A99F778589730DBBB0525D4B40D2DD9B90828D7B710 +508FE4654584EC6D4D8CE7684887EF70AF1131C4A41D3DCCAC1333C7A72040CF +F0715190FC7D5D9CF2735392FF80609F21D0B00929DCBC0323D2B20B2BDFBF01 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000 +pop pop +/customdata3 28 28 mul string def +currentfile customdata3 readhexstring +011DC7F5E73D0421CBF3E43A021EC8F6E83E0522CCF2E43A2B648BC4A0762F68 +8AC39E732C658CC5A177306989C29D72D5B6521A6192D9B55219608FD6B6531B +6193DAB451185F8FFCEE440C28D2FCED430B27D1FDEF450C29D3FBEC420A26D0 +BEA77D366F83BCA77C356E87BFA87E377082BBA67B346D86145B99E0AE4A1259 +98DFB14E155C9AE1AD4A115897DEB04D0623CDF4E63C0420CAF8EA400723CDF4 +E53B031FC9F7E93F316988C19F752E678EC6A378326A88C09F742D668DC6A278 +DBB350175E91D8B8551C6395DCB24F165D90D7B7541C6294FAEC420925CFFFF1 +470E2BD5F9EB410824CEFEF0460D2AD4BAA57A336C85BEAA80397180B9A47933 +6B84BDA97F387181105797DDAF4C145A9CE3AB480F5696DDAE4B13599BE2AC49 +021EC8F6E83E0522CCF2E43A011DC7F5E73D0421CBF3E43A2C658CC5A1773069 +89C29D722B648BC4A0762F688AC39E73D6B6531B6193DAB451185F8FD5B6521A +6192D9B55219608FFDEF450C29D3FBEC420A26D0FCEE440C28D2FCED430B27D1 +BFA87E377082BBA67B346D86BEA77D366F83BCA77C356E87155C9AE1AD4A1158 +97DEB04D145B99E0AE4A125998DFB14E0723CDF4E53B031FC9F7E93F0623CDF4 +E63C0420CAF8EA40326A88C09F742D668DC6A278316988C19F752E678EC6A378 +DCB24F165D90D7B7541C6294DBB350175E91D8B8551C6395F9EB410824CEFEF0 +460D2AD4FAEC420925CFFFF1470E2BD5B9A479336B84BDA97F387181BAA57A33 +6C85BEAA803971800F5696DDAE4B13599BE2AC49105797DDAF4C145A9CE3AB48 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000 +pop pop +/customdata4 28 28 mul string def +currentfile customdata4 readhexstring +1139B8E0FAD2531B133BBAE2F8D05119417180A6AE9A7B4B437382A5AD987949 +C08867272F6F92CAC28A66262E6E90C8E8DE5F070F37B6F2EADD5E060E36B5F0 +FED6571F173FBEE6FDD5561E163EBDE5AB9E7F4F477786A1A99D7E4E467685A3 +2C6C96CEC68E62222A6A95CDC58D64240C34B3F6EED95A020A32B1F5EDDB5C04 +143CBBE3F9D1521A123AB9E1FBD3541C447483A4AC997A4A427281A7AF9B7C4C +C38B65252D6D91C9C1896828307093CBEBDC5D050D35B4F1E9DF60081038B7F3 +FCD4551D153DBCE4FFD758201840BFE7A89C7D4D457584A2AA9F8050487887A0 +296994CCC48C63232B6B97CFC78F61210931B0F4ECDA5B030B33B2F7EFD85901 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000 +pop pop +/customdata5 28 28 mul string def +currentfile customdata5 readhexstring +010B34C3EBFCF7CE3F16020C35C4EDFBF6CD3E15102552A4D6EADDB5632B1126 +54A5D5EADCB3622A3958768499C19E8C7C5E3A59778498C19D8B7B5DC8A99370 +47334C7587AFC9AA936F46324B7485AEF1E5BC6B1E0A2351A3D8F2E4BC6A1E09 +2351A2D7FFF9D14219050F38C6EFFEF9D04118040E37C6EFE8E0B7662D142856 +A8D3E7DFB7652D132856A7D4BF9C8E7F603D5B7A8195BE9A8E7E603C5B798297 +314A7389B2CCAD906D442F497289B1CBAC926E4508214FA1DBF4E2B9671B0720 +4EA0DAF4E3BA691C030D36C5EDFBF6CD3F16010C34C3ECFDF8CF4017122654A6 +D4E9DDB4622A112553A5D6EBDEB5642C3B59788397C09C8B7C5D3A58778599C2 +9E8C7D5FCAAB926E46314B7486AFC8AA947048334D7587B0F2E4BB691D082250 +A1D8F1E6BD6B1F0A2452A3D9FDF8CF4118030E36C5EEFFFAD1421A050F38C7F0 +E6DFB6642C132755A7D3E8E1B8662E152957A8D2BE9A8D7E5F3B5A798296BF9B +8F80613D5C7B80952F487188B1CAAC916D443049728AB3CCAE906C43061F4D9F +DAF3E2BA681C07214FA0DBF5E1B8671A00000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000 +pop pop +/customdata6 28 28 mul string def +currentfile customdata6 readhexstring +081A44B6E0F2FDECC150250C091B45B6E1F3FCEBC04F240C1D336199C7D8DCD3 +A56C37221E33619AC8D7DBD2A46B36214864798091AEB1958C7E694C49657A81 +90ADB0948B7D684BB99D8475593C405C7888A1BEBA9E8574583B3F5B7888A0BD +E4CBAA712E1215326098CFE8E4CCA9712D1114315F97CEE7F5F1C6552B040719 +43B5DFFAF6F0C6542A03061842B4DEF9FFEDC352270E0B1C47B8E3F4FEECC251 +260D0A1C46B7E2F4DAD5A76E39232035639CCAD5D9D4A66D38231F34629BC9D6 +AF938E806A4E4A677C838FABAE928D7F694D4A667B828FAC3E5A778AA3BFBC9F +8772563A3D597689A2BEBB9F8673573A14305E97D1EAE6CDA76F2B0F132F5D96 +D0E9E5CDA8702C10051742B3DDFCF8EEC4522801041641B2DDFBF7EFC5532902 +091B45B6E1F3FCEBC04F240C081A44B6E0F2FDECC150250C1E33619AC8D7DBD2 +A46B36211D336199C7D8DCD3A56C372249657A8190ADB0948B7D684B48647980 +91AEB1958C7E694CBA9E8574583B3F5B7888A0BDB99D8475593C405C7888A1BE +E4CCA9712D1114315F97CEE7E4CBAA712E1215326098CFE8F6F0C6542A030618 +42B4DEF9F5F1C6552B04071943B5DFFAFEECC251260D0A1C46B7E2F4FFEDC352 +270E0B1C47B8E3F4D9D4A66D38231F34629BC9D6DAD5A76E39232035639CCAD5 +AE928D7F694D4A667B828FACAF938E806A4E4A677C838FAB3D597689A2BEBB9F +8673573A3E5A778AA3BFBC9F8772563A132F5D96D0E9E5CDA8702C1014305E97 +D1EAE6CDA76F2B0F041641B2DDFBF7EFC5532902051742B3DDFCF8EEC4522801 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000 +pop pop +/customdata7 28 28 mul string def +currentfile customdata7 readhexstring +01061B44B7E1F5FEFBE6BD4A210C01071B45B8E1F6FDFBE6BC4A200B09132A54 +A7D1EAF5EED9B05D331609142B55A8D2EAF4EED9AF5C32161D2D3D6993C1CBE0 +CEC59B7140301E2E3D6A93C0CADFCDC49A713F3047576C7B828DA2B6A48F867E +6F5A48576C7C828CA1B6A38F867E6E59BAAA958A78634E4451667A8498ADBAAB +968977624E4350657A8398ADE3D4C99F7539251A273C6892C2D7E4D4C89E7539 +241A273B6891C1D6F8F2DDB460371005122A53A7D0ECF9F2DDB360360F051229 +53A6D0EBFFFDE8BE4C220D03081D46B9E3F7FFFCE7BD4B210D02071C46B8E2F7 +F3F0DBB15E34180B152C56A9D3E8F3EFDAB05D34170A142C55A9D2E9DFCCC69C +7341321F2F3F6B94BFC9DECCC59C7241311F2E3E6A94BFCAB5A38E8780705B49 +596D7D808BA0B4A28D877F6F5B48586D7C818BA043506479859AAFBCAC978876 +614C424F64798499AEBBAB968977624D19263B6791C3D8E5D6C79D7337231825 +3A6690C3D7E5D5C79E74382304112952A5CFEDFAF0DBB25E350E03102851A5CE +ECF9F1DCB25F360E01071B45B8E1F6FDFBE6BC4A200B01061B44B7E1F5FEFBE6 +BD4A210C09142B55A8D2EAF4EED9AF5C321609132A54A7D1EAF5EED9B05D3316 +1E2E3D6A93C0CADFCDC49A713F301D2D3D6993C1CBE0CEC59B71403048576C7C +828CA1B6A38F867E6E5947576C7B828DA2B6A48F867E6F5ABAAB968977624E43 +50657A8398ADBAAA958A78634E4451667A8498ADE4D4C89E7539241A273B6891 +C1D6E3D4C99F7539251A273C6892C2D7F9F2DDB360360F05122953A6D0EBF8F2 +DDB460371005122A53A7D0ECFFFCE7BD4B210D02071C46B8E2F7FFFDE8BE4C22 +0D03081D46B9E3F7F3EFDAB05D34170A142C55A9D2E9F3F0DBB15E34180B152C +56A9D3E8DECCC59C7241311F2E3E6A94BFCADFCCC69C7341321F2F3F6B94BFC9 +B4A28D877F6F5B48586D7C818BA0B5A38E8780705B49596D7D808BA0424F6479 +8499AEBBAB968977624D43506479859AAFBCAC978876614C18253A6690C3D7E5 +D5C79E74382319263B6791C3D8E5D6C79D73372303102851A5CEECF9F1DCB25F +360E04112952A5CFEDFAF0DBB25E350E +pop pop +/customdata8 28 28 mul string def +currentfile customdata8 readhexstring +050F2747B6D6EEF8FEF4DCBC4D2D1507111D375F9EC6E0E9EBE6CCA4653D1F13 +2939556F8EA8C1D1D3C3AE9475573B2B4961717D808999B1B39B8B867F73634B +B8A090827A6A5A42445C6C7C8492A2BAD8C8AA97785232222434546E8DACCADA +F0E2CFA768401A0A0C1C365E9DC5E4F2FAF7DFBF50301802040E2646B5D5EDFC +FFF5DDBD4E2E160806102848B7D7EFF9EAE7CDA5663E2014121E38609FC7E1E8 +D2C2AF9576583C2C2A3A56708FA9C0D0B29A8A878074644C4A62727E818898B0 +435B6B7B8593A3BBB9A19183796959412333536D8CADCBDBD9C9AB9677513121 +0B1B355D9CC4E5F3F1E3CEA6673F1909030D2545B4D4ECFDFBF6DEBE4F2F1701 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000 +pop pop +end +end +defaultpacking setpacking +%%EndResource +%%BeginResource: procset AGM_Gradient_Sep 1.0 0 +%%Title: (AGM Gradient Procset) +%%Version: 1.0 0 +%%CreationDate: (4/26/96) () +%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) +userdict /defaultpacking currentpacking put true setpacking +userdict /AGM_Gradient_Sep 5 dict dup begin put +/AGM_Gradient_Sep_private 100 dict def +/initialize{ + AGM_Gradient_Sep begin + AGM_Gradient_Sep_private begin + _compositeJob{ + initializeSinglePassSeps + }{ + initializeMultiPassSeps + }ifelse + initializeSeps + AGM_Gradient_private begin + /_fillSD newSpotDict def + /_rampSD newSpotDict def + /_nCustomColorSD nd + end + AGM_Gradient_Sep_private + { + dup xcheck 1 index type /arraytype eq and + { + bind + }if + pop pop + }forall + AGM_Gradient_Sep + { + dup xcheck 1 index type /arraytype eq and + { + bind + }if + pop pop + }forall + end + + currentdict readonly pop + end +}def +/terminate{ + currentdict AGM_Gradient_Sep eq{ + end + }if +}def +AGM_Gradient_Sep_private begin +/initializeSeps{ + /currentoverprint { _of } def + _noImage not _level2PS not and{ + /linealFill{ + currentoverprint{ + 0 0 1 1 rectfill + }{ + mySave + 8 setImageParms + _color{ + _nCustomColorSD begin + cyan magenta yellow black + + _spotColor{ + spot1/tintImage spot1/tintValue get 1 exch sub makeByte8 put + spot2/tintImage spot2/tintValue get 1 exch sub makeByte8 put + }if + end + + 4{ + makeByte8 4 1 roll + }repeat + true 4 _nCustomColorSD ncolorimage + }{ + _nCustomColorSD/black get 1 exch sub makeByte8 + _nCustomColorSD bwImage + }ifelse + myRestore + }ifelse + }def + }if + /_whiteBytes 1 makeByte8 pt + /knockOut{ + _noImage _level2PS or currentoverprint or{ + gsave + false setoverprint + 1 setgray + 0 0 1 1 rectfill + grestore + }{ + 8 setImageParms _whiteBytes /_image load 5 execImage + }ifelse + }def + /newSpotDict{ + 11 dict dup begin + /nSpots 2 def + /spot1 7 dict def + /spot2 7 dict def + end + }def + /initSpotData + { + begin + /name nd + /tintImage nd + /tintValue nd + /spot_C nd + /spot_M nd + /spot_Y nd + /spot_K nd + end + }def + /initSpotDict{ + begin + /cyanInk nd + /magentaInk nd + /yellowInk nd + /blackInk nd + /cyan nd + /magenta nd + /yellow nd + /black nd + spot1 initSpotData + spot2 initSpotData + end + }def + /copySpotDict{ + /_dst xp + begin + cyanInk magentaInk yellowInk blackInk + cyan magenta yellow black + spot1 spot2 + end + _dst begin + /spot1 spot1 maxlength dict def + /spot2 spot2 maxlength dict def + spot2 copy pop + spot1 copy pop + /black xd + /yellow xd + /magenta xd + /cyan xd + /blackInk xd + /yellowInk xd + /magentaInk xd + /cyanInk xd + end + }def + /setCustomColor + { + 1 index /Black eq{ + 6 1 roll 5 npop + 1 exch sub + setgray + }{ + 6 1 roll _ccAry1 astore exch + dup null eq{ + pop 0 + }if + setcustomcolor + }ifelse + }def + /setCStop{ + /_colorStyle exch pt + + _colorStyle 0 eq{ + 0 0 0 + 4 -1 roll + 1 exch sub + _spotColor{ + /_colorStyle 3 pt + /Black + 1 index + 1 exch sub + }if + }if + _colorStyle 2 eq{ + 3 npop + }if + _rampSD _fillSD copySpotDict + + _colorStyle 4 eq{ + pop + 9 2 roll 3 npop 6 -2 roll + } if + + _colorStyle 3 eq _colorStyle 4 eq or{ + + _fillSD begin + /_spot1 spot1 pt + /_spot2 spot2 pt + end + + exch dup _spot1/name get eq{ + _spot1 _spot2 + }{ + _spot2 _spot1 + }ifelse + begin + begin + /name xd + 1 exch sub /tintValue xd + 4{ + tintValue mul 4 1 roll + }repeat + _spotColor not{ + /tintValue null def + }if + end + /tintValue 0 def + end + }if + _fillSD nsetcustomcolor + }def + /renderCMYK{ + spot1/name get null eq + spot2/name get null eq and + dup not{ + pop + spot1 spotConverted + }if + dup not{ + pop + spot2 spotConverted + }if + }def + /currentInk{ + true + _inRipSep{ + currentcolorspace 0 get + dup /DeviceGray eq + 1 index /DeviceCMYK eq or{ + pop + currentcmykcolor add add add 0 eq{ + pop false + }if + }{ + /Separation eq{ + currentcolor 0 eq{ + pop false + }if + }if + }ifelse + }{ + currentgray 1 eq{ + pop false + }if + }ifelse + }def + /currentInkN{ + + _nCustomColorSD begin + /_spot1 spot1 pt + /_spot2 spot2 pt + renderCMYK + end + { + currentInk + }{ + gsave + _spot1 begin + name null ne{ + spot_C spot_M spot_Y spot_K name tintValue setCustomColor + currentInk + }{ + false + }ifelse + end + _spot2 begin + name null ne{ + spot_C spot_M spot_Y spot_K name tintValue setCustomColor + currentInk + }{ + false + }ifelse + end + grestore + + or + } ifelse + }def + /fill_ /fill load def + /fillOvp{ + currentoverprint{ + _inRipSep{ + currentcolorspace 0 get + dup /DeviceGray eq + 1 index /DeviceCMYK eq or{ + pop + currentcmykcolor add add add 0 eq{ + newpath + }if + }{ + /Separation eq{ + currentcolor 0 eq{ + newpath + }if + }if + }ifelse + }{ + currentgray 1 eq{ + newpath + }if + }ifelse + }if + fill_ + }def + /fill{ + _nCustomColorSD begin + /_spot1 spot1 pt + /_spot2 spot2 pt + renderCMYK + end + + { + fillOvp + }{ + _spot1 begin + gsave + name null ne{ + spot_C spot_M spot_Y spot_K name tintValue setCustomColor + }{ + 1 setgray + }ifelse + fillOvp + grestore + end + _spot2 begin + name null ne{ + gsave + true setoverprint + spot_C spot_M spot_Y spot_K name tintValue setCustomColor + fillOvp + grestore + }if + end + newpath + }ifelse + }def + /expandSpot{ + _spotColor{ + /_len xp + _rampSD begin + spot1 begin + tintImage null ne{ + tintImage _len expandOne /tintImage xd + }if + end + spot2 begin + tintImage null ne{ + tintImage _len expandOne /tintImage xd + }if + end + end + }{ + pop + }ifelse + }def + /rampImage{ + currentoverprint{ + rectImage + }{ + _enabledSmoothShade{ + fillRamp + }{ + _color{ + _rampSD begin + /cyanInk _cyanData 0 ne def + /magentaInk _magentaData 0 ne def + /yellowInk _yellowData 0 ne def + /blackInk _blackData 0 ne def + end + + _nSamples setImageParms + _nSamples expandSpot + _cyanData _magentaData _yellowData _blackData _nSamples 4 expandColor + true 4 _rampSD ncolorimage + }{ + _rampSD begin + /cyanInk false def + /magentaInk false def + /yellowInk false def + /blackInk true def + end + _nSamples setImageParms + _blackData _rampSD bwImage + }ifelse + }ifelse + }ifelse + }def + /nsetcustomcolor where{ + pop + }{ + /nsetcustomcolor + { + /_nCustomColorSD xp + _nCustomColorSD begin + 4 copy + /black xd + /yellow xd + /magenta xd + /cyan xd + 4 copy + 0 ne /blackInk xd + 0 ne /yellowInk xd + 0 ne /magentaInk xd + 0 ne /cyanInk xd + end + setcmykcolor + }def + }ifelse + /nsetcustomcolorend where{ + pop + }{ + /nsetcustomcolorend + { + /_nCustomColorSD null pt + }def + }ifelse +}def +/initializeSinglePassSeps{ + /_decodeNorm [0 1] pt + /_decodeInvert [1 0] pt + /spotConverted + { + begin + name null eq{ + false + }{ + tintValue null eq tintImage null eq and{ + true + }{ + _inDistiller{ + false + }{ + false + currentpagedevice/SeparationColorNames get{name eq or}forall + not + }ifelse + }ifelse + }ifelse + end + }def + /dictImage + { + 20 dict dup begin + /Dict xd + /Decode xd + /DataSource xd + /ImageMatrix xd + /BitsPerComponent xd + /Height xd + /Width xd + /ImageType 1 def + Dict + end + /_image load 1 execImage + }def + /bwImage{ + begin + gsave + currentoverprint{ + blackInk{ + [/Separation /Black /DeviceGray{}] setcolorspace + _decodeInvert dictImage + }{ + 5 npop + }ifelse + }{ + /DeviceGray setcolorspace + _decodeNorm dictImage + }ifelse + grestore + end + }def + /ncolorimage where{ + pop + }{ + /ncolorimage{ + begin + renderCMYK{ + cyanInk + magentaInk and + yellowInk and + blackInk and + not + currentoverprint + and{ + pop pop + gsave + cyanInk{ + 8 copy + [/Separation /Cyan /DeviceGray{}] setcolorspace + 3 npop + _decodeNorm dictImage + }if + magentaInk{ + 8 copy + [/Separation /Magenta /DeviceGray{}] setcolorspace + 4 -1 roll + 3 npop + _decodeNorm dictImage + }if + yellowInk{ + 8 copy + [/Separation /Yellow /DeviceGray{}] setcolorspace + 4 -2 roll + 3 npop + _decodeNorm dictImage + }if + blackInk{ + 4 -3 roll + [/Separation /Black /DeviceGray{}] setcolorspace + 3 npop + _decodeNorm dictImage + }{ + 8 npop + }ifelse + grestore + }{ + /_colorimage load 10 execImage + }ifelse + }{ + 6 npop + gsave + spot1 begin + name null ne tintImage null ne and{ + [/Separation name /DeviceGray{}] setcolorspace + 4 copy + tintImage + name /Black eq{ + _decodeNorm + }{ + _decodeInvert + }ifelse + dictImage + }{ + 1 setgray fill + }ifelse + end + spot2 begin + true setoverprint + name null ne tintImage null ne and{ + [/Separation name /DeviceGray{}] setcolorspace + tintImage + name /Black eq{ + _decodeNorm + }{ + _decodeInvert + }ifelse + dictImage + }{ + 4 npop + 1 setgray fill + }ifelse + end + grestore + }ifelse + end + }def + }ifelse + /getRampColorSpace{ + + /_renderCMYK _rampSD begin renderCMYK end pt + + _renderCMYK not{ + _rampSD begin + [/DeviceN + [ + spot1 begin + name null ne tintImage null ne and{ + name + }if + end + spot2 begin + name null ne tintImage null ne and{ + name + }if + end + ] + _inDistiller { + /DeviceCMYK [ + spot1 begin + name null ne tintImage null ne and{ + spot_C spot_M spot_Y spot_K 1 + }{ + 0 0 0 0 0 + }ifelse + end + spot2 begin + name null ne tintImage null ne and{ + spot_C spot_M spot_Y spot_K 2 + }{ + 0 0 0 0 0 + }ifelse + end + 5 1 roll 6 -2 roll add + dup 1 eq { + pop + 8 /index cvx 1 /exch cvx /sub cvx + 9 1 /roll cvx + }{ + 2 eq { + 8 /index cvx 1 /exch cvx /sub cvx + 10 1 /roll cvx + }if + }ifelse + 4 1 /roll cvx 5 -2 /roll cvx + 8 /index cvx /mul cvx /exch cvx 9 /index cvx /mul cvx /add cvx 7 1 /roll cvx + 3 1 /roll cvx 4 -2 /roll cvx + 7 /index cvx /mul cvx /exch cvx 8 /index cvx /mul cvx /add cvx 6 1 /roll cvx + 2 1 /roll cvx 3 -2 /roll cvx + 6 /index cvx /mul cvx /exch cvx 7 /index cvx /mul cvx /add cvx 5 1 /roll cvx + 5 /index cvx /mul cvx /exch cvx 6 /index cvx /mul cvx /add cvx 4 1 /roll cvx + 6 -2 /roll cvx /pop cvx /pop cvx + ] cvx bind + }{ + /DeviceCMYK {} + }ifelse + ] setcolorspace + end + /_nColorSpace currentcolorspace pt + }if + + _nSamples 1 gt{ + /_ndx 0 pt + [blendColor] cvx exec + }if + _renderCMYK{ + /_C0 [currentcolor] pt + /_C0_Space currentcolorspace pt + }{ + /_C0 [ + _nCustomColorSD begin + spot1 begin + name null ne{ + tintValue + }if + end + spot2 begin + name null ne{ + tintValue + }if + end + end + ] pt + /_C0_Space _nColorSpace pt + }ifelse + + _nSamples 1 gt{ + /_ndx _nSamples 1 sub pt + [blendColor] cvx exec + }if + _renderCMYK{ + /_C1 [currentcolor] pt + /_C1_Space currentcolorspace pt + }{ + /_C1 [ + _nCustomColorSD begin + spot1 begin + name null ne{ + tintValue + }if + end + spot2 begin + name null ne{ + tintValue + }if + end + end + ] pt + /_C1_Space _nColorSpace pt + }ifelse + + /_rampColorSpace _C0_Space pt + _spotColor{ + nsetcustomcolorend + }if + }def +}def +/initializeMultiPassSeps{ + /invertXfer{ + [ + { + 1 exch sub + }/exec load systemdict /currenttransfer get exec /exec load + ] cvx systemdict /settransfer get exec + }def + /ccThrough{ + gsave + 1 setCustomColor + currentcmykcolor + grestore + add add add 0 ne + }def + /spotConverted + { + begin + _isCMYKSep not{ + false + }{ + name null eq{ + false + }{ + tintValue null eq tintImage null eq and{ + true + }{ + spot_C spot_M spot_Y spot_K name ccThrough + }ifelse + }ifelse + }ifelse + end + }def + /spotChannel + { + _isCMYKSep{ + pop false + }{ + /_spotDict xp + _spotDict/name get null eq{ + false + }{ + _spotDict/spot_C get + _spotDict/spot_M get + _spotDict/spot_Y get + _spotDict/spot_K get + _spotDict/name get + ccThrough + }ifelse + }ifelse + }def + /getChannelData + { + _isCMYKSep dup{ + pop renderCMYK + }if + { + _blackPlate{ + 4 1 roll 3 npop blackInk + }{ + _yellowPlate{ + 4 2 roll 3 npop yellowInk + }{ + _magentaPlate{ + 4 3 roll 3 npop magentaInk + }{ + 3 npop cyanInk + }ifelse + }ifelse + }ifelse + { + true /nonZeroData + }{ + true /zeroData + }ifelse + }{ + 4 npop + spot1/name get null ne + spot1 spotChannel and{ + spot1/tintImage get dup null ne{ + false /nonZeroData + }{ + pop false /noData + }ifelse + }{ + spot2/name get null ne + spot2 spotChannel and{ + spot2/tintImage get dup null ne{ + false /nonZeroData + }{ + pop false /noData + }ifelse + }{ + false /noData + }ifelse + }ifelse + }ifelse + }def + /renderChannelData + { + /_tmp xp + _tmp /nonZeroData ne currentoverprint and{ + pop + _tmp /zeroData eq{pop}if + 4 npop + }{ + _tmp /nonZeroData eq{ + { + invertXfer + }if + systemdict/image + get 5 execImage + }{ + pop + _tmp /zeroData eq{pop}if + 4 npop + knockOut + }ifelse + }ifelse + }def + /bwImage{ + begin + gsave + dup dup dup + getChannelData + exch pop false exch + renderChannelData + grestore + end + }def + /ncolorimage{ + begin + pop pop + gsave + spot2/name get null ne spot2 spotChannel and{ + true setoverprint + }if + getChannelData + renderChannelData + grestore + end + }def + /getRampColorSpace{ + + /_renderCMYK _rampSD begin renderCMYK end pt + + _nSamples 1 gt{ + /_ndx 0 pt + [blendColor] cvx exec + }if + + _renderCMYK{ + /_C0 [currentcolor] pt + /_C0_Space currentcolorspace pt + }{ + /_C0 [ + _nCustomColorSD begin + 0 + spot1 begin + name null ne + tintValue null ne and + spot1 spotChannel and{ + pop tintValue + }if + end + spot2 begin + name null ne + tintValue null ne and + spot2 spotChannel and{ + pop tintValue + }if + end + 1 exch sub + end + ] pt + /_C0_Space /DeviceGray pt + }ifelse + + _nSamples 1 gt{ + /_ndx _nSamples 1 sub pt + [blendColor] cvx exec + }if + + _renderCMYK{ + /_C1 [currentcolor] pt + /_C1_Space currentcolorspace pt + }{ + /_C1 [ + _nCustomColorSD begin + 0 + spot1 begin + name null ne + tintValue null ne and + spot1 spotChannel and{ + pop tintValue + }if + end + spot2 begin + name null ne + tintValue null ne and + spot2 spotChannel and{ + pop tintValue + }if + end + 1 exch sub + end + ] pt + /_C1_Space /DeviceGray pt + }ifelse + + /_rampColorSpace _C0_Space pt + _spotColor{ + nsetcustomcolorend + }if + }def +}def +end +end +defaultpacking setpacking +%%EndResource +%%BeginResource: procset AGM_Gradient 1.0 0 +%%Title: (AGM Gradient Procset) +%%Version: 1.0 0 +%%CreationDate: (4/26/96) () +%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) +userdict /defaultpacking currentpacking put true setpacking +userdict /AGM_Gradient 20 dict dup begin put +/AGM_Gradient_private 201 dict def +/initialize +{ + AGM_Gradient begin + AGM_Gradient_private begin + initializeVars + + /bd systemdict/mark get def + /ed + _level2PS + { + (>>) + }{ + (counttomark 2 idiv dup dict begin {def} repeat pop currentdict end) + } ifelse + cvx def + + _level2PS{ + initializeLev2 + }{ + initializeLev1 + }ifelse + + queryDevice + + initializeRectFill + initializeShading + initializeOps + _producingSeps{ + AGM_Gradient_Sep/initialize get exec + }{ + initializeComposite + }ifelse + _illustrator{ + /f{}def + /F{}def + /s{}def + /S{}def + /b{}def + /B{}def + }if + /image where{ + /image get /_image xd + }if + /colorimage where{ + /colorimage get /_colorimage xd + }if + AGM_Gradient_private + { + dup xcheck 1 index type /arraytype eq and + { + bind + }if + pop pop + }forall + AGM_Gradient + { + dup xcheck 1 index type /arraytype eq and + { + bind + }if + pop pop + }forall + end + + currentdict readonly pop + end +}def +/initializeAI +{ + pop pop + AGM_Gradient/AGM_Gradient_private get /_illustrator true put + AGM_Gradient/initialize get exec + AGM_Gradient begin +}def +/unload{ + systemdict/languagelevel known{ + systemdict/languagelevel get 2 ge{ + userdict/AGM_Gradient_Sep 2 copy known{ + undef + }{ + pop pop + }ifelse + userdict/AGM_Gradient 2 copy known{ + undef + }{ + pop pop + }ifelse + }if + }if +}def +/terminate{ + currentdict AGM_Gradient eq{ + end + }if +}def + +AGM_Gradient_private begin +/initializeVars{ + /_d255 256 array def + 0 1 255{ + _d255 exch dup 255 div put + }bind for + /_d255- 256 array def + 0 1 255{ + _d255- exch 1 _d255 2 index get sub put + }bind for + /_sSave nd + /_dUserSpace matrix defaultmatrix def + /_bUMatrix matrix def + /_imageMatrix matrix def + /_saveMatrix matrix def + /_xm matrix def + /_ccAry1 5 array def + /_bbox 4 array pt + /_level2PS + systemdict/languagelevel known dup{ + pop systemdict/languagelevel get 2 ge + }if + def + /_level3PS + _level2PS systemdict/shfill known and + def + currentdict /_illustrator known not{ + /_illustrator false def + }if + +}def +/initializeOps +{ + AGM_Gradient begin + currentdict/Bc known not{ + /Bc{ + + _renderFlag 2 eq _enabledSmoothShade or{ + 6 npop + }{ + pushBSpace + _rampIndex 0 eq{ + pop pop + setCStop + }if + linealFill + popBSpace + }ifelse + + }def + }if + + currentdict/Bg known not{ + /Bg{ + 10 npop + /_gradName xp + /_renderFlag xp + /_enabledSmoothShade false pt + + _renderFlag 2 ne{ + + _illustrator{ + _of setoverprint + }if + + /_enabledSmoothShade + _level3PS{ + _usingSmoothShade + _producingSeps not + currentoverprint not or and + _noImage not and + }{ + false + }ifelse + pt + + _illustrator _eo and _renderFlag 3 eq or{ + eoclip + }{ + clip + }ifelse + + _gradNames _gradName 2 copy known{ + get + mark exch aload pop + /_gradType xp + 1 sub dup /_rampIndex xp + /_maxRampIndex xp + mark exch aload pop + 0 0 + }if + pop pop + getRampData + }{ + mark mark + }ifelse + }def + }if + + currentdict/Bm known not{ + /Bm{ + _renderFlag 2 ne{ + _gradType 0 eq{ + linealRamp + }{ + radialGrad + }ifelse + }{ + 6 npop + }ifelse + }def + }if + + currentdict/Bh known not{ + /Bh{ + 2 npop + /_yHi xp + /_xHi xp + /_radHilite _xHi 0 ne _yHi 0 ne or pt + }def + }if + + currentdict/Bn known not{ + /Bn{ + AGM_Gradient_private begin + dict /_gradNames xp + end + }def + }if + + currentdict/Bd known not{ + /Bd{ + AGM_Gradient begin + AGM_Gradient_private begin + /_nColorsBd xp + /_gradType xp + /_gradName xp + }def + }if + + currentdict/BD known not{ + /BD{ + currentdict/_gradNames known not{ + /_gradNames 20 dict def + }if + ] _nColorsBd _gradType + ] _gradName exch /_gradNames xput + end + end + }def + }if + + currentdict/Bb known not{ + /Bb{ + + AGM_Gradient/AGM_Gradient_private get /_illustrator get not{ + AGM_Gradient begin + }if + AGM_Gradient_private begin + _producingSeps{ + AGM_Gradient_Sep/AGM_Gradient_Sep_private get begin + }if + mySave + }def + }if + + currentdict/BB known not{ + /BB{ + + /_tmp xp + cleartomark cleartomark + + _tmp dup + _renderFlag + + myRestore + + _producingSeps{ + end + }if + + _illustrator dup + end + not { + end + }if + + { + 2 ne exch 0 gt and{ + 2 eq{ + s + }{ + S + }ifelse + }{ + pop newpath + }ifelse + }{ + pop newpath + }ifelse + + + }def + }if + + currentdict/Xm known not{ + /Xm{ + _xm astore pop + }def + }if + + end +}def +/queryDevice{ + /_inDistiller + systemdict /currentdistillerparams known + def + /_inRipSep + _level2PS{ + currentpagedevice/Separations 2 copy known{ + get + }{ + pop pop false + }ifelse + }{ + false + }ifelse + _inDistiller or + def + /_noImage /lv1Fix where{ + pop lv1Fix + }{ + false + }ifelse + def + /_useShells where{ + /_useShells get /_usingShells xp + }{ + /_usingShells false def + }ifelse + + /_useSmoothShade where{ + pop + }{ + /_useSmoothShade false def + }ifelse + /_forceToCMYK where{ + pop + }{ + /_forceToCMYK false def + }ifelse + /_cyanPlate 1 0 0 0 testCMYKColorThrough def + /_magentaPlate 0 1 0 0 testCMYKColorThrough def + /_yellowPlate 0 0 1 0 testCMYKColorThrough def + /_blackPlate 0 0 0 1 testCMYKColorThrough def + /_compositeJob + _cyanPlate _magentaPlate and _yellowPlate and _blackPlate and + def + /_isCMYKSep + _cyanPlate _magentaPlate or _yellowPlate or _blackPlate or + def + /_compositeSpotDevice where{ + pop + }{ + /_compositeSpotDevice _compositeJob not _inRipSep or{ + 1 + }{ + 0 + }ifelse + def + }ifelse + /_producingSeps _compositeSpotDevice 0 ne def + /_deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt def + /_dpiThreshold where{ + pop + }{ + /_dpiThreshold 600 def + }ifelse + /_screenFreqThreshold where{ + pop + }{ + /_screenFreqThreshold 150 def + }ifelse + /_contoneDevice where{ + pop + }{ + /_contoneDevice false def + }ifelse + /_subSampleOK + _deviceDPI _dpiThreshold le + currentScreenFreq _screenFreqThreshold le and + _contoneDevice not and + def +}def +/initializeRectFill{ + /rectfill where dup{ + exch pop not _producingSeps or + }{ + not + }ifelse + { + /rectfill{ + gsave + newpath + 4 2 roll moveto + 1 index 0 rlineto + 0 1 index rlineto + 1 index neg 0 rlineto + pop pop + closepath + fill + grestore + }def + }if +}def +/initializeLev1{ + /currentScreenFreq{ + currentscreen pop pop + }def + /_byte 1 string def + /colorimage where{ + pop + }{ + /colorimage{ + pop pop + /_blackTmp xp + /_yellowTmp xp + /_magentaTmp xp + /_cyanTmp xp + /_cnt 0 pt + [ + _byte dup 0 + _cyanTmp + /_cnt cvx /get cvx _d255 /exch cvx /get cvx .3 /mul cvx + _magentaTmp + /_cnt cvx /get cvx _d255 /exch cvx /get cvx .59 /mul cvx + _yellowTmp + /_cnt cvx /get cvx _d255 /exch cvx /get cvx .11 /mul cvx + _blackTmp + /_cnt cvx /get cvx _d255 /exch cvx /get cvx + /add cvx /add cvx /add cvx 1 /exch cvx /sub cvx + /dup cvx 0 /lt cvx{ + pop 0 + }/if cvx + /dup cvx 1 /gt cvx{ + pop 1 + }/if cvx + 255 /mul cvx /cvi cvx + 256 /mod cvx + /dup cvx 0 /lt cvx{ + pop 0 + }/if cvx + /put cvx + /_cnt dup cvx 1 /add cvx /pt cvx + ] cvx + bind + /_image load 5 execImage + }def + }ifelse +}def +/initializeLev2{ + /level2ScreenFreq{ + begin + 60 + HalftoneType 1 eq{ + pop Frequency + }if + HalftoneType 2 eq{ + pop GrayFrequency + }if + HalftoneType 5 eq{ + pop Default level2ScreenFreq + }if + end + }def + /currentScreenFreq{ + currenthalftone level2ScreenFreq + }def +}def +/initializeShading{ + _useSmoothShade _level3PS and{ + /_usingSmoothShade true pt + initializeLev3_Ops + }{ + /_usingSmoothShade false pt + }ifelse +}def +/initializeLev3_Ops +{ + /initShFill{ + /_index _gradType 0 eq {0}{_maxRampIndex 1 sub} ifelse pt + /_rampFuncsArray _maxRampIndex array pt + /_boundsArray _maxRampIndex 1 sub array pt + /_encodeArray _maxRampIndex 2 mul array pt + /_beginCoord _rampPoint pt + /_colorSpace null pt + /_firstFill _rampIndex _maxRampIndex eq pt + /_lastFill false pt + }def + /linealShFill{ + popBSpace + _xm aload pop pushBSpace + + /_size _index 1 add pt + _size _maxRampIndex lt { + /_rampFuncsArray _rampFuncsArray 0 _size getinterval pt + /_boundsArray _boundsArray 0 _size 1 sub getinterval pt + /_encodeArray _encodeArray 0 _size 2 mul getinterval pt + }if + + bd + /ShadingType 2 + /ColorSpace _colorSpace + _rgbInCMYK{ + /Function [ + _cData sampFunc + _mData sampFunc + _yData sampFunc + _kData sampFunc + ] + }{ + /Function + bd + /FunctionType 3 + /Domain [0 1] + /Functions _rampFuncsArray + /Bounds _boundsArray + /Encode _encodeArray + ed + }ifelse + /Extend [_firstFill _lastFill] + /Domain [0 1] + /Coords [_beginCoord 0 _endCoord 0] + ed + shfill + }def + + /radialShFill{ + /_size _maxRampIndex _index sub pt + _size _maxRampIndex lt { + /_rampFuncsArray _rampFuncsArray _index _size getinterval pt + /_boundsArray _boundsArray _index _size 1 sub getinterval pt + /_encodeArray _encodeArray _index 2 mul _size 2 mul getinterval pt + }if + + /_rampLen _beginCoord _endCoord sub pt + bd + /ShadingType 3 + /ColorSpace _colorSpace + _rgbInCMYK{ + /Function [ + _cData sampFunc + _mData sampFunc + _yData sampFunc + _kData sampFunc + ] + }{ + /Function + bd + /FunctionType 3 + /Domain [0 1] + /Functions _rampFuncsArray + /Bounds _boundsArray + /Encode _encodeArray + ed + }ifelse + /Extend [_lastFill _firstFill] + /Domain [0 1] + /Coords [_xHi _rampLen mul _yHi _rampLen mul _endCoord 0 0 _beginCoord] + ed + shfill + + _radHilite{ + _xHi _rampLen mul _yHi _rampLen mul translate + }if + }def + + % + /sampFunc{ + /_tmp exch pt + bd + _tmp length 1 eq { + _tmp 0 get + /_tmp 2 string pt + dup _tmp 0 3 -1 roll put + _tmp 1 3 -1 roll put + }if + /FunctionType 0 + /Order 1 + /Size [_tmp length] + /Domain [0 1] + /BitsPerSample 8 + /DataSource _tmp + /Range [0 1] + ed + }def + + /fillRamp{ + + + /_invert _midPoint 0.5 lt pt + _rampIndex _maxRampIndex eq { + initShFill + }if + + getRampColorSpace + + _colorSpace null eq{ + /_colorSpace _rampColorSpace pt + }{ + _colorSpace _rampColorSpace ne _rgbInCMYK or{ + /_index _index 1 + _gradType 0 eq{ + sub pt + linealShFill + }{ + add pt + radialShFill + }ifelse + initShFill + /_colorSpace _rampColorSpace pt + } if + }ifelse + /_endCoord _endPoint pt + /_rgbInCMYK false pt + _producingSeps _forceToCMYK or _rgbRamp and { + _spotColor{ + _renderCMYK + }{ + _isCMYKSep + }ifelse + }{ + false + }ifelse + { + _compositeJob{ + /_rgbInCMYK true pt + _cyanData _magentaData _yellowData _blackData _nSamples 4 expandColor + dup length string copy /_kData exch pt + dup length string copy /_yData exch pt + dup length string copy /_mData exch pt + dup length string copy /_cData exch pt + }{ + _rampFuncsArray _index + _cyanPlate{_cyanData}if + _magentaPlate{_magentaData}if + _yellowPlate{_yellowData}if + _blackPlate{_blackData}if + _nSamples expandOne + sampFunc + dup begin /Decode [1 0] def end + put + /_invert false pt + }ifelse + }{ + _rampFuncsArray _index + bd + /FunctionType 2 + /Domain [0 1] + /N 0.5 log _invert{1 _midPoint sub}{_midPoint}ifelse log div + _gradType 0 eq{ + _invert{/C1}{/C0}ifelse _C0 + _invert{/C0}{/C1}ifelse _C1 + }{ + _invert{/C0}{/C1}ifelse _C1 + _invert{/C1}{/C0}ifelse _C0 + }ifelse + ed + put + }ifelse + + _rampIndex 1 ne{ + _boundsArray _index _gradType 1 eq{1 sub}if _endCoord put + } if + + 0 1 _invert {exch}if + _encodeArray _index 2 mul 1 add 3 -1 roll put + _encodeArray _index 2 mul 3 -1 roll put + _rampIndex 1 eq { + /_lastFill true pt + _gradType 0 eq{ + linealShFill + }{ + radialShFill + }ifelse + }if + /_index _index 1 + _gradType 0 eq{ + add pt + }{ + sub pt + }ifelse + }def +}def +/initializeComposite{ + /bwImage{ + pop /_image load 5 execImage + }def + /rampImage{ + _enabledSmoothShade{ + fillRamp + }{ + _color{ + _nSamples setImageParms + + + _rgbRamp _forceToCMYK not and{ + _redData _greenData _blueData _nSamples 3 expandColor + true 3 null ncolorimage + }{ + _cyanData _magentaData _yellowData _blackData _nSamples 4 expandColor + true 4 null ncolorimage + }ifelse + }{ + _nSamples setImageParms _blackData null bwImage + }ifelse + }ifelse + }def + /setCStop{ + /_colorStyle exch pt + _colorStyle 0 eq{ + 1 exch sub + 0 0 0 + 4 -1 roll + }if + + _colorStyle 2 eq{ + _forceToCMYK{ + 3 npop setcmykcolor + }{ + setrgbcolor 4 npop + }ifelse + }if + + _colorStyle 3 eq{ + 1 exch sub /_tmp xp + pop + 4{ + _tmp mul 4 1 roll + }repeat + }if + + _colorStyle 4 eq{ + _forceToCMYK{ + 6 npop setcmykcolor + }{ + 3 -1 roll pop pop + 1 exch sub /_tmp xp + 3{ + 1 exch sub _tmp mul 1 exch sub 3 1 roll + }repeat + setrgbcolor + 4 npop + }ifelse + }if + _colorStyle 2 ne _colorStyle 4 ne and{ + null nsetcustomcolor + }if + }def + /nsetcustomcolor + { + pop setcmykcolor + }def + /nsetcustomcolorend + { + }def + /ncolorimage{ + pop + /_colorimage load 10 execImage + }def + _noImage not _level2PS not and{ + /linealFill{ + 8 setImageParms + _color{ + currentcmykcolor + 4{ + makeByte8 4 1 roll + }repeat + true 4 null ncolorimage + }{ + currentgray makeByte8 null bwImage + }ifelse + }def + }if + /getRampColorSpace{ + _nSamples 1 gt{ + /_ndx 0 pt + [blendColor] cvx exec + }if + /_C0 [currentcolor] pt + /_C0_Space currentcolorspace pt + + _nSamples 1 gt{ + /_ndx _nSamples 1 sub pt + [blendColor] cvx exec + }if + /_C1 [currentcolor] pt + /_C1_Space currentcolorspace pt + + /_rampColorSpace _C0_Space pt + + _spotColor{ + nsetcustomcolorend + }if + }def +}def +/npop{ + {pop}repeat +}def +/xd{ + exch def +}def +/nd{ + null def +}def +/pt{ + AGM_Gradient_private 3 1 roll put +}def +/xp{ + exch pt +}def +/xput{ + dup load dup length exch maxlength eq{ + dup dup load dup + length 2 mul dict copy def + }if + load begin + def + end +}def +/mySave{ + save /_sSave xp +}def +/myRestore{ + _sSave type /savetype eq{ + _sSave restore + }if +}def +/gMark{ + counttomark 2 add -1 roll +}def +/execImage{ + /_tmp xp + { + exec + }stopped{ + $error /errorname get /undefinedresult ne{ + stop + }{ + _tmp npop + }ifelse + }if +}def +/pushBSpace{ + newpath gsave + _bUMatrix astore concat +}def +/popBSpace{ + grestore +}def +/makeByte8{ + /_tmp 0 pt + 255 mul cvi + 8 string 8{ + dup _tmp 3 index put + /_tmp _tmp 1 add pt + }repeat + exch pop +}def +/setImageParms{ + 1 8 2 index 0 0 1 0 0 _imageMatrix astore +}def +/linealFill{ + 0 0 1 1 rectfill +}def +/testCMYKColorThrough{ + gsave + setcmykcolor currentcmykcolor + grestore + add add add 0 ne +}def +/expandOne { + /_tmp xp + dup type /stringtype ne{ + _tmp string + exch + dup 0 ne{ + 255 mul cvi + 0 1 _tmp 1 sub{ + 3 copy + exch put pop + }for + }if + pop + }if +}def +/expandColor{ + /_channels xp + /_len xp + _channels{ + _len expandOne _channels 1 roll + }repeat +}def +/blendColor{ + + _color{ + _rgbRamp _producingSeps not and _forceToCMYK not and{ + _redData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + _greenData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + _blueData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + /setrgbcolor cvx + }{ + _cyanData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + _magentaData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + _yellowData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + _blackData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + + _spotColor{ + _rampSD begin + /_rampSD cvx /begin cvx + + spot1 begin + tintImage dup type /stringtype eq{ + /_ndx cvx /get cvx _d255- /exch cvx /get cvx + }{ + dup null ne{ + name type /nametype ne{ + 1 exch sub + }if + }if + }ifelse + end + /spot1 cvx /tintValue 3 -1 /roll cvx /put cvx + + spot2 begin + tintImage dup type /stringtype eq{ + /_ndx cvx /get cvx _d255- /exch cvx /get cvx + }{ + dup null ne{ + name type /nametype ne{ + 1 exch sub + }if + }if + }ifelse + end + /spot2 cvx /tintValue 3 -1 /roll cvx /put cvx + /end cvx + end + /_rampSD cvx + /nsetcustomcolor cvx + }{ + /setcmykcolor cvx + }ifelse + }ifelse + }{ + _blackData dup type /stringtype eq{ + /_ndx cvx /get cvx _d255 /exch cvx /get cvx + }if + + _enabledSmoothShade{ + 1 /exch cvx /sub cvx 0 0 0 4 -1 /roll cvx /setcmykcolor cvx + }{ + /setgray cvx + }ifelse + }ifelse +}def +/useRectImage{ + _subSampleOK _enabledSmoothShade not and{ + { + mark + 0 1 dtransform atan cvi 90 mod 0 eq + 1 0 dtransform atan cvi 90 mod 0 eq + } stopped + { + cleartomark + false + } + { + and exch pop + } ifelse + }{ + false + }ifelse +}def +/linealImage{ + _noImage{ + rectImage + }{ + _producingSeps{ + AGM_Gradient_Sep/AGM_Gradient_Sep_private get + /rampImage get exec + }{ + useRectImage{ + rectImage + }{ + rampImage + }ifelse + }ifelse + }ifelse +}def +/linealRamp{ + pushBSpace + _ramp{ + linealImage + }{ + linealFill + }ifelse + popBSpace + /_rampIndex _rampIndex 1 sub pt + _rampIndex 0 gt{ + getRampData + }if +}def +/radialGrad{ + /_usingShells currentoverprint _producingSeps and _usingShells or pt + /_firstShell true pt + _enabledSmoothShade not{ + currentoverprint _producingSeps and{ + + newpath + clippath pathbbox + 1 add 4 1 roll + 1 add 4 1 roll + 1 sub 4 1 roll + 1 sub 4 1 roll + _bbox astore pop + + newpath + _bbox 0 get _bbox 1 get moveto + _bbox 2 get _bbox 1 get lineto + _bbox 2 get _bbox 3 get lineto + _bbox 0 get _bbox 3 get lineto + closepath + 6 copy + gsave _bUMatrix astore concat + 1 0 moveto 0 0 1 0 360 arc closepath + eoclip fill + popBSpace + }{ + fill + }ifelse + }if + pushBSpace + + _radHilite{ + _xHi _yHi _bUMatrix idtransform /_yHi xp /_xHi xp + _rampPoint 1 lt{ + 1 _rampPoint sub dup _xHi mul exch _yHi mul translate + }if + }if + _rampIndex{ + radialRamp + /_rampIndex _rampIndex 1 sub pt + _rampIndex 0 gt{ + getRampData + }if + }repeat + + popBSpace + +}def +/getNSamples{ + 0 exch + { + dup type /stringtype eq{ + length exch pop exit + }if + pop + }forall + dup 0 eq{ + pop 1 + }if +}def +/getRampData{ + /_rampType gMark pt + /_color _rampType 0 gt pt + /_ccRGB _rampType 5 eq _rampType 6 eq or pt + /_rgbRamp _rampType 4 eq _ccRGB or pt + /_ccProcess _rampType 2 eq _rampType 3 eq or pt + _producingSeps{ + _rampSD initSpotDict + /_spotColor _ccProcess _ccRGB or pt + }{ + /_spotColor false pt + }ifelse + /_ramp true pt + 100 div /_rampPoint xp + 100 div /_midPoint xp + + dup /_colorStyle xp + _colorStyle 0 eq{ + 2 + }{ + _colorStyle 1 eq{ + 5 + }{ + _colorStyle 2 eq{ + 8 + }{ + _colorStyle 3 eq{ + _producingSeps{ + _rampSD /spot1 get begin + /name 3 index def + /spot_K 4 index def + /spot_Y 5 index def + /spot_M 6 index def + /spot_C 7 index def + end + }if + 7 + }{ + _producingSeps{ + _rampSD/spot1 get begin + /name 4 index def + /spot_K 8 index def + /spot_Y 9 index def + /spot_M 10 index def + /spot_C 11 index def + end + }if + 11 + } ifelse + }ifelse + }ifelse + }ifelse + /_tmp xp + _tmp index 100 div /_endPoint xp + + _gradType 1 eq{ + _tmp 1 add index 100 div /_midPoint xp + }if + + _producingSeps{ + _tmp 2 add index /_nextColorStyle xp + _nextColorStyle 3 eq{ + /_tmp _tmp 4 add pt + _tmp index dup + _rampSD/spot1 get /name get ne{ + _rampSD /spot2 get begin + /name xd + /spot_K _tmp 2 add index def + /spot_Y _tmp 3 add index def + /spot_M _tmp 4 add index def + /spot_C _tmp 5 add index def + end + }{ + pop + }ifelse + }if + _nextColorStyle 4 eq{ + /_tmp _tmp 5 add pt + _tmp index dup + _rampSD/spot1 get /name get ne{ + _rampSD /spot2 get begin + /name xd + /spot_K _tmp 5 add index def + /spot_Y _tmp 6 add index def + /spot_M _tmp 7 add index def + /spot_C _tmp 8 add index def + end + }{ + pop + }ifelse + }if + }if + _rampType 3 eq _rampType 6 eq or{ + /_tint2Data gMark pt + }if + _ccProcess _ccRGB or{ + /_tint1Data gMark pt + }if + _rgbRamp{ + /_blueData gMark pt + /_greenData gMark pt + /_redData gMark pt + }if + + _producingSeps{ + _ccProcess _ccRGB or{ + _rampType 3 eq _rampType 6 eq or{ + _rampSD /spot2 get begin + /tintImage _gradType 0 eq{ + _tint2Data + }{ + _tint1Data + }ifelse + def + name null eq{ + /name /Black def + }if + end + }if + _rampSD /spot1 get begin + /tintImage _gradType 0 eq _rampType 2 eq or _rampType 5 eq or{ + _tint1Data + }{ + _tint2Data + }ifelse + def + _rampType 2 eq _rampType 5 eq or{ + name null eq{ + /name _rampSD/spot2 get /name get def + /spot_C _rampSD/spot2 get /spot_C get def + /spot_M _rampSD/spot2 get /spot_M get def + /spot_Y _rampSD/spot2 get /spot_Y get def + /spot_K _rampSD/spot2 get /spot_K get def + _rampSD/spot2 get /name null put + }if + }{ + name null eq{ + /name /Black def + }if + }ifelse + end + }if + }if + /_blackData gMark pt + _rampType 0 gt{ + counttomark 4 add -3 roll + /_yellowData xp + /_magentaData xp + /_cyanData xp + }if + _ramp{ + /_nSamples + [ + _rampType 0 eq {_blackData}if + _rampType 1 eq {_cyanData _magentaData _yellowData _blackData}if + _rampType 2 eq {_cyanData _magentaData _yellowData _blackData _tint1Data}if + _rampType 3 eq {_cyanData _magentaData _yellowData _blackData _tint1Data _tint2Data}if + _rampType 4 eq {_cyanData _magentaData _yellowData _blackData _redData _greenData _blueData}if + _rampType 5 eq {_cyanData _magentaData _yellowData _blackData _redData _greenData _blueData _tint1Data}if + _rampType 6 eq {_cyanData _magentaData _yellowData _blackData _redData _greenData _blueData _tint1Data _tint2Data}if + ] getNSamples pt + _enabledSmoothShade not {/_ramp _nSamples 1 gt pt} if + } if + + setCStop +}def +/rectImage{ + gsave + /_sInc 1 pt + /_bInc 1 _nSamples div pt + /_nSubSamples _nSamples pt + /_optimize false pt + + _subSampleOK{ + /_uRampLen 1 0 dtransform _dUserSpace idtransform dup mul exch dup mul add sqrt pt + /_pChange _uRampLen 0 eq{0}{_nSamples _uRampLen div}ifelse pt + + _pChange .5 gt dup /_optimize xp{ + /_nSubSamples _uRampLen 2 div round cvi dup 1 le{pop 2}if pt + /_bInc 1 _nSubSamples div pt + /_sInc _nSamples 1 sub _nSubSamples 1 sub div pt + }if + }if + 0 + _nSubSamples + [ + /dup cvx + _optimize { + /round cvx /cvi cvx + } if + /_ndx /exch cvx /pt cvx + blendColor + 0 0 _bInc 1 /rectfill cvx + _bInc 0 /translate cvx + _sInc /add cvx + ] cvx + bind + repeat + pop + _spotColor{ + nsetcustomcolorend + }if + grestore +}def +/radialInit{ + /_nRadSamples _nSamples dup 0 eq{pop 1}if pt + /_sInc -1 pt + /_rampLen _rampPoint _endPoint sub pt + /_bInc _rampLen _nSamples div neg pt + /_optimize false pt + _subSampleOK{ + /_uRampLen + _rampLen 0 dtransform _dUserSpace idtransform dup mul exch dup mul add sqrt + 0 _rampLen dtransform _dUserSpace idtransform dup mul exch dup mul add sqrt + 2 copy lt{ + exch + }if pop + pt + /_pChange + _uRampLen 0 eq{ + 0 + }{ + _nSamples _uRampLen div + }ifelse + pt + _pChange .5 gt dup /_optimize xp{ + /_nRadSamples _uRampLen 2 div round cvi dup 1 le{pop 2}if pt + /_bInc _rampLen _nRadSamples div neg pt + /_sInc _nSamples 1 sub _nRadSamples 1 sub div neg pt + }if + }if + _radHilite{ + /_xBCInc _xHi _rampLen mul _nRadSamples div pt + /_yBCInc _yHi _rampLen mul _nRadSamples div pt + }if +}def +/radialRamp{ + _enabledSmoothShade{ + fillRamp + }{ + /_saveMatrix _saveMatrix currentmatrix def + + radialInit + + % + % + true + _producingSeps _rgbRamp not and{ + _nSamples 1 gt{ + pop + /_ndx 0 pt + [blendColor] cvx exec + currentInkN + /_ndx _nSamples 1 sub pt + [blendColor] cvx exec + currentInkN + or + }if + }if + { + _rampPoint + + _nSamples 1 sub + + _nRadSamples + [ + /dup cvx + + _optimize{ + /round cvx /cvi cvx + }if + + /_ndx /exch cvx /pt cvx + + _usingShells{ + /_firstShell cvx{ + /_firstShell false pt + }{ + 0 0 3 index 360 0 arcn fill + }/ifelse cvx + }if + + blendColor + + _usingShells{ + 0 0 3 /index cvx 0 360 /arc cvx + }{ + 0 0 3 /index cvx 0 360 /arc cvx /fill cvx + }ifelse + + /exch cvx _bInc /add cvx /exch cvx + + _sInc /add cvx + + _radHilite{ + _xBCInc _yBCInc /translate cvx + }if + ] cvx bind + repeat + + pop pop + }{ + _usingShells{ + 0 0 _rampPoint 360 0 arcn fill + }if + }ifelse + + _saveMatrix setmatrix + + _radHilite{ + _xHi _rampLen mul _yHi _rampLen mul translate + }if + + _usingShells _rampIndex 1 eq and{ + fill + }if + + _spotColor{ + nsetcustomcolorend + }if + }ifelse +}def +end +end +defaultpacking setpacking +%%EndResource +%%BeginProcSet: Adobe_ColorImage_AI6 1.3 0 +userdict /Adobe_ColorImage_AI6 known not +{ + userdict /Adobe_ColorImage_AI6 53 dict put +} if +userdict /Adobe_ColorImage_AI6 get begin +/initialize { + Adobe_ColorImage_AI6 begin + Adobe_ColorImage_AI6 { + dup type /arraytype eq { + dup xcheck { + bind + } if + } if + pop pop + } forall +} def +/terminate { end } def +currentdict /Adobe_ColorImage_AI6_Vars known not { + /Adobe_ColorImage_AI6_Vars 41 dict def +} if +Adobe_ColorImage_AI6_Vars begin + /plateindex -1 def + /_newproc null def + /_proc1 null def + /_proc2 null def + /sourcearray 4 array def + /_ptispace null def + /_ptiname null def + /_pti0 0 def + /_pti1 0 def + /_ptiproc null def + /_ptiscale 0 def + /_pticomps 0 def + /_ptibuf 0 string def + /_gtigray 0 def + /_cticmyk null def + /_rtirgb null def + /XIEnable true def + /XIType 0 def + /XIEncoding 0 def + /XICompression 0 def + /XIChannelCount 0 def + /XIBitsPerPixel 0 def + /XIImageHeight 0 def + /XIImageWidth 0 def + /XIImageMatrix null def + /XIRowBytes 0 def + /XIFile null def + /XIBuffer1 null def + /XIBuffer2 null def + /XIBuffer3 null def + /XIDataProc null def + /XIColorSpace /DeviceGray def + /XIColorValues 0 def + /XIPlateList false def +end +/ci6colorimage /colorimage where {/colorimage get}{null} ifelse def +/ci6image systemdict /image get def +/ci6curtransfer systemdict /currenttransfer get def +/ci6curoverprint /currentoverprint where {/currentoverprint get}{{_of}} ifelse def +/ci6foureq { + 4 index ne { + pop pop pop false + }{ + 4 index ne { + pop pop false + }{ + 4 index ne { + pop false + }{ + 4 index eq + } ifelse + } ifelse + } ifelse +} def +/ci6testplate { + Adobe_ColorImage_AI6_Vars begin + /plateindex -1 def + /setcmykcolor where { + pop + gsave + 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub + grestore + 1 0 0 0 ci6foureq { + /plateindex 0 def + }{ + 0 1 0 0 ci6foureq { + /plateindex 1 def + }{ + 0 0 1 0 ci6foureq { + /plateindex 2 def + }{ + 0 0 0 1 ci6foureq { + /plateindex 3 def + }{ + 0 0 0 0 ci6foureq { + /plateindex 5 def + } if + } ifelse + } ifelse + } ifelse + } ifelse + pop pop pop pop + } if + plateindex + end +} def +/ci6concatprocs { + /packedarray where { + pop dup type /packedarraytype eq 2 index type + /packedarraytype eq or + }{ + false + } ifelse + { + /_proc2 exch cvlit def + /_proc1 exch cvlit def + _proc1 aload pop + _proc2 aload pop + _proc1 length + _proc2 length add + packedarray cvx + }{ + /_proc2 exch cvlit def + /_proc1 exch cvlit def + /_newproc _proc1 length _proc2 length add array def + _newproc 0 _proc1 putinterval + _newproc _proc1 length _proc2 putinterval + _newproc cvx + } ifelse +} def +/ci6istint { + type /arraytype eq +} def +/ci6isspot { + dup type /arraytype eq { + dup length 1 sub get /Separation eq + }{ + pop false + } ifelse +} def +/ci6spotname { + dup ci6isspot {dup length 2 sub get}{pop ()} ifelse +} def +/ci6altspace { + aload pop pop pop ci6colormake +} def +/ci6numcomps { + dup /DeviceGray eq { + pop 1 + }{ + dup /DeviceRGB eq { + pop 3 + }{ + /DeviceCMYK eq { + 4 + }{ + 1 + } ifelse + } ifelse + } ifelse +} def +/ci6marksplate { + dup /DeviceGray eq { + pop plateindex 3 eq + }{ + dup /DeviceRGB eq { + pop plateindex 5 ne + }{ + dup /DeviceCMYK eq { + pop plateindex 5 ne + }{ + dup ci6isspot { + /findcmykcustomcolor where { + pop + dup length 2 sub get + 0.1 0.1 0.1 0.1 5 -1 roll + findcmykcustomcolor 1 setcustomcolor + systemdict /currentgray get exec + 1 ne + }{ + pop plateindex 5 ne + } ifelse + }{ + pop plateindex 5 ne + } ifelse + } ifelse + } ifelse + } ifelse +} def +/ci6colormake { + dup ci6numcomps + exch 1 index 2 add 1 roll + dup 1 eq {pop}{array astore} ifelse + exch +} def +/ci6colorexpand { + dup ci6spotname exch + dup ci6istint { + ci6altspace + exch 4 1 roll + }{ + 1 3 1 roll + } ifelse +} def +/ci6colortint { + dup /DeviceGray eq { + 3 1 roll 1 exch sub mul 1 exch sub exch + }{ + dup /DeviceRGB eq { + 3 1 roll {1 exch sub 1 index mul 1 exch sub exch} forall pop 3 array astore exch + }{ + dup /DeviceCMYK eq { + 3 1 roll {1 index mul exch} forall pop 4 array astore exch + }{ + 3 1 roll mul exch + } ifelse + } ifelse + } ifelse +} def +/ci6colortocmyk { + dup /DeviceGray eq { + pop 1 exch sub 0 0 0 4 -1 roll 4 array astore + }{ + dup /DeviceRGB eq { + pop aload pop _rgbtocmyk 4 array astore + }{ + dup /DeviceCMYK eq { + pop + }{ + ci6altspace ci6colortint ci6colortocmyk + } ifelse + } ifelse + } ifelse +} def +/ci6makeimagedict { + 7 dict begin + /ImageType 1 def + /Decode exch def + /DataSource exch def + /ImageMatrix exch def + /BitsPerComponent exch def + /Height exch def + /Width exch def + currentdict end +} def +/ci6stringinvert { + 0 1 2 index length 1 sub { + dup 2 index exch get 255 exch sub 2 index 3 1 roll put + } for +} def +/ci6stringknockout { + 0 1 2 index length 1 sub { + 255 2 index 3 1 roll put + } for +} def +/ci6stringapply { + 0 1 4 index length 1 sub { + dup + 4 index exch get + 3 index 3 1 roll + 3 index exec + } for + pop exch pop +} def +/ci6walkrgbstring { + 0 3 index + dup length 1 sub 0 3 3 -1 roll { + 3 getinterval {} forall + 5 index exec + 3 index + } for + + 5 {pop} repeat +} def +/ci6walkcmykstring +{ + 0 3 index + dup length 1 sub 0 4 3 -1 roll { + 4 getinterval {} forall + + 6 index exec + + 3 index + + } for + + 5 { pop } repeat + +} def +/ci6putrgbtograystr +{ + .11 mul exch + + .59 mul add exch + + .3 mul add + + cvi 3 copy put + + pop 1 add +} def +/ci6putcmyktograystr +{ + exch .11 mul add + + exch .59 mul add + + exch .3 mul add + + dup 255 gt { pop 255 } if + + 255 exch sub cvi 3 copy put + + pop 1 add +} def +/ci6rgbtograyproc { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + XIBuffer3 + dup 3 1 roll + + /ci6putrgbtograystr load exch + ci6walkrgbstring + end +} def +/ci6cmyktograyproc { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + XIBuffer3 + dup 3 1 roll + + /ci6putcmyktograystr load exch + ci6walkcmykstring + end +} def +/ci6separatecmykproc { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + + XIBuffer3 + + 0 2 index + + plateindex 4 2 index length 1 sub { + get 255 exch sub + + 3 copy put pop 1 add + + 2 index + } for + pop pop exch pop + end +} def + +/ci6compositeimage { + dup 1 eq { + pop pop image + }{ + /ci6colorimage load null ne { + ci6colorimage + }{ + 3 1 roll pop + sourcearray 0 3 -1 roll put + 3 eq {/ci6rgbtograyproc}{/ci6cmyktograyproc} ifelse load + image + } ifelse + } ifelse +} def +/ci6knockoutimage { + gsave + 0 ci6curtransfer exec 1 ci6curtransfer exec + eq { + 0 ci6curtransfer exec 0.5 lt + }{ + 0 ci6curtransfer exec 1 ci6curtransfer exec gt + } ifelse + {{pop 0}}{{pop 1}} ifelse + systemdict /settransfer get exec + ci6compositeimage + grestore +} def +/ci6drawimage { + ci6testplate -1 eq { + pop ci6compositeimage + }{ + dup type /arraytype eq { + dup length plateindex gt {plateindex get}{pop false} ifelse + }{ + { + true + }{ + dup 1 eq {plateindex 3 eq}{plateindex 3 le} ifelse + } ifelse + } ifelse + { + dup 1 eq { + pop pop ci6image + }{ + dup 3 eq { + ci6compositeimage + }{ + pop pop + sourcearray 0 3 -1 roll put + /ci6separatecmykproc load + ci6image + } ifelse + } ifelse + }{ + ci6curoverprint { + 7 {pop} repeat + }{ + ci6knockoutimage + } ifelse + } ifelse + } ifelse +} def +/ci6proctintimage { + /_ptispace exch store /_ptiname exch store /_pti1 exch store /_pti0 exch store /_ptiproc exch store + /_pticomps _ptispace ci6numcomps store + /_ptiscale _pti1 _pti0 sub store + level2? { + _ptiname length 0 gt version cvr 2012 ge and { + [/Separation _ptiname _ptispace {_ptiproc}] setcolorspace + [_pti0 _pti1] ci6makeimagedict ci6image + }{ + [/Indexed _ptispace 255 {255 div _ptiscale mul _pti0 add _ptiproc}] setcolorspace + [0 255] ci6makeimagedict ci6image + } ifelse + }{ + _pticomps 1 eq { + { + dup + { + 255 div _ptiscale mul _pti0 add _ptiproc 255 mul cvi put + } ci6stringapply + } ci6concatprocs ci6image + }{ + { + dup length _pticomps mul dup _ptibuf length ne {/_ptibuf exch string store}{pop} ifelse + _ptibuf { + exch _pticomps mul exch 255 div _ptiscale mul _pti0 add _ptiproc + _pticomps 2 add -2 roll + _pticomps 1 sub -1 0 { + 1 index add 2 index exch + 5 -1 roll + 255 mul cvi put + } for + pop pop + } ci6stringapply + } ci6concatprocs false _pticomps + /ci6colorimage load null eq {7 {pop} repeat}{ci6colorimage} ifelse + } ifelse + } ifelse +} def +/ci6graytintimage { + /_gtigray 5 -1 roll store + {1 _gtigray sub mul 1 exch sub} 4 1 roll + /DeviceGray ci6proctintimage +} def +/ci6cmyktintimage { + /_cticmyk 5 -1 roll store + {_cticmyk {1 index mul exch} forall pop} 4 1 roll + /DeviceCMYK ci6proctintimage +} def +/ci6rgbtintimage { + /_rtirgb 5 -1 roll store + {_rtirgb {1 exch sub 1 index mul 1 exch sub exch} forall pop} 4 1 roll + /DeviceRGB ci6proctintimage +} def +/ci6tintimage { + ci6testplate -1 eq { + ci6colorexpand + 3 -1 roll 5 -1 roll {0}{0 exch} ifelse 4 2 roll + dup /DeviceGray eq { + pop ci6graytintimage + }{ + dup /DeviceRGB eq { + pop ci6rgbtintimage + }{ + pop ci6cmyktintimage + } ifelse + } ifelse + }{ + dup ci6marksplate { + plateindex 5 lt { + ci6colortocmyk plateindex get + dup 0 eq ci6curoverprint and { + 7 {pop} repeat + }{ + 1 exch sub + exch {1 0}{0 1} ifelse () ci6graytintimage + } ifelse + }{ + pop exch {0}{0 exch} ifelse 0 3 1 roll () ci6graytintimage + } ifelse + }{ + ci6curoverprint { + 8 {pop} repeat + }{ + pop pop pop + {pop 1} 0 1 () /DeviceGray ci6proctintimage + } ifelse + } ifelse + } ifelse +} def +/XINullImage { +} def +/XIImageMask { + XIImageWidth XIImageHeight false + [XIImageWidth 0 0 XIImageHeight neg 0 0] + /XIDataProc load + imagemask +} def +/XIImageTint { + XIImageWidth XIImageHeight XIBitsPerPixel + [XIImageWidth 0 0 XIImageHeight neg 0 0] + /XIDataProc load + XIType 3 eq XIColorValues XIColorSpace ci6tintimage +} def +/XIImage { + XIImageWidth XIImageHeight XIBitsPerPixel + [XIImageWidth 0 0 XIImageHeight neg 0 0] + /XIDataProc load + false XIChannelCount XIPlateList ci6drawimage +} def +/XG { + pop pop +} def +/XF { + 13 {pop} repeat +} def +/Xh { + Adobe_ColorImage_AI6_Vars begin + gsave + /XIType exch def + /XIImageHeight exch def + /XIImageWidth exch def + /XIImageMatrix exch def + 0 0 moveto + XIImageMatrix concat + XIImageWidth XIImageHeight scale + + /_lp /null ddef + _fc + /_lp /imagemask ddef + end +} def +/XH { + Adobe_ColorImage_AI6_Vars begin + grestore + end +} def +/XIEnable { + Adobe_ColorImage_AI6_Vars /XIEnable 3 -1 roll put +} def +/XC { + Adobe_ColorImage_AI6_Vars begin + ci6colormake + /XIColorSpace exch def + /XIColorValues exch def + end +} def +/XIPlates { + Adobe_ColorImage_AI6_Vars begin + /XIPlateList exch def + end +} def +/XI +{ + Adobe_ColorImage_AI6_Vars begin + gsave + /XIType exch def + cvi dup + 256 idiv /XICompression exch store + 256 mod /XIEncoding exch store + pop pop + /XIChannelCount exch def + /XIBitsPerPixel exch def + /XIImageHeight exch def + /XIImageWidth exch def + pop pop pop pop + /XIImageMatrix exch def + XIBitsPerPixel 1 eq { + XIImageWidth 8 div ceiling cvi + }{ + XIImageWidth XIChannelCount mul + } ifelse + /XIRowBytes exch def + XIEnable { + /XIBuffer3 XIImageWidth string def + XICompression 0 eq { + /XIBuffer1 XIRowBytes string def + XIEncoding 0 eq { + {currentfile XIBuffer1 readhexstring pop} + }{ + {currentfile XIBuffer1 readstring pop} + } ifelse + }{ + /XIBuffer1 256 string def + /XIBuffer2 XIRowBytes string def + {currentfile XIBuffer1 readline pop (%) anchorsearch {pop} if} + /ASCII85Decode filter /DCTDecode filter + /XIFile exch def + {XIFile XIBuffer2 readstring pop} + } ifelse + /XIDataProc exch def + + XIType 1 ne { + 0 setgray + } if + XIType 1 eq { + XIImageMask + }{ + XIType 2 eq XIType 3 eq or { + XIImageTint + }{ + XIImage + } ifelse + } ifelse + }{ + XINullImage + } ifelse + /XIPlateList false def + grestore + end +} def +end +%%EndProcSet +%%BeginResource: procset Adobe_Illustrator_AI5 1.3 0 +%%Title: (Adobe Illustrator (R) Version 8.0 Full Prolog) +%%Version: 1.3 0 +%%CreationDate: (3/7/1994) () +%%Copyright: ((C) 1987-1998 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_Illustrator_AI5_vars 112 dict dup begin +put +/_?cmyk false def +/_eo false def +/_lp /none def +/_pf +{ +} def +/_ps +{ +} def +/_psf +{ +} def +/_pss +{ +} def +/_pjsf +{ +} def +/_pjss +{ +} def +/_pola 0 def +/_doClip 0 def +/cf currentflat def +/_lineorientation 0 def +/_charorientation 0 def +/_yokoorientation 0 def +/_tm matrix def +/_renderStart +[ +/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 +] def +/_renderEnd +[ +null null null null /i1 /i1 /i1 /i1 +] def +/_render -1 def +/_shift [0 0] def +/_ax 0 def +/_ay 0 def +/_cx 0 def +/_cy 0 def +/_leading +[ +0 0 +] def +/_ctm matrix def +/_mtx matrix def +/_sp 16#020 def +/_hyphen (-) def +/_fontSize 0 def +/_fontAscent 0 def +/_fontDescent 0 def +/_fontHeight 0 def +/_fontRotateAdjust 0 def +/Ss 256 string def +Ss 0 (fonts/) putinterval +/_cnt 0 def +/_scale [1 1] def +/_nativeEncoding 0 def +/_useNativeEncoding 0 def +/_tempEncode 0 def +/_pntr 0 def +/_tDict 2 dict def +/_hfname 100 string def +/_hffound false def +/Tx +{ +} def +/Tj +{ +} def +/CRender +{ +} def +/_AI3_savepage +{ +} def +/_gf null def +/_cf 4 array def +/_rgbf 3 array def +/_if null def +/_of false def +/_fc +{ +} def +/_gs null def +/_cs 4 array def +/_rgbs 3 array def +/_is null def +/_os false def +/_sc +{ +} def +/_pd 1 dict def +/_ed 15 dict def +/_pm matrix def +/_fm null def +/_fd null def +/_fdd null def +/_sm null def +/_sd null def +/_sdd null def +/_i null def +/_lobyte 0 def +/_hibyte 0 def +/_cproc null def +/_cscript 0 def +/_hvax 0 def +/_hvay 0 def +/_hvwb 0 def +/_hvcx 0 def +/_hvcy 0 def +/_bitfont null def +/_bitlobyte 0 def +/_bithibyte 0 def +/_bitkey null def +/_bitdata null def +/_bitindex 0 def +/discardSave null def +/buffer 256 string def +/beginString null def +/endString null def +/endStringLength null def +/layerCnt 1 def +/layerCount 1 def +/perCent (%) 0 get def +/perCentSeen? false def +/newBuff null def +/newBuffButFirst null def +/newBuffLast null def +/clipForward? false def +end +userdict /Adobe_Illustrator_AI5 known not { + userdict /Adobe_Illustrator_AI5 100 dict put +} if +userdict /Adobe_Illustrator_AI5 get begin +/initialize +{ + Adobe_Illustrator_AI5 dup begin + Adobe_Illustrator_AI5_vars begin + /_aicmykps where {pop /_?cmyk _aicmykps def}if + discardDict + { + bind pop pop + } forall + dup /nc get begin + { + dup xcheck 1 index type /operatortype ne and + { + bind + } if + pop pop + } forall + end + newpath +} def +/terminate +{ + end + end +} def +/_ +null def +/ddef +{ + Adobe_Illustrator_AI5_vars 3 1 roll put +} def +/xput +{ + dup load dup length exch maxlength eq + { + dup dup load dup + length 2 mul dict copy def + } if + load begin + def + end +} def +/npop +{ + { + pop + } repeat +} def +/hswj +{ + dup stringwidth 3 2 roll + { + _hvwb eq { exch _hvcx add exch _hvcy add } if + exch _hvax add exch _hvay add + } cforall +} def +/vswj +{ + 0 0 3 -1 roll + { + dup 255 le + _charorientation 1 eq + and + { + dup cstring stringwidth 5 2 roll + _hvwb eq { exch _hvcy sub exch _hvcx sub } if + exch _hvay sub exch _hvax sub + 4 -1 roll sub exch + 3 -1 roll sub exch + } + { + _hvwb eq { exch _hvcy sub exch _hvcx sub } if + exch _hvay sub exch _hvax sub + _fontHeight sub + } ifelse + } cforall +} def +/swj +{ + 6 1 roll + /_hvay exch ddef + /_hvax exch ddef + /_hvwb exch ddef + /_hvcy exch ddef + /_hvcx exch ddef + _lineorientation 0 eq { hswj } { vswj } ifelse +} def +/sw +{ + 0 0 0 6 3 roll swj +} def +/vjss +{ + 4 1 roll + { + dup cstring + dup length 1 eq + _charorientation 1 eq + and + { + -90 rotate + currentpoint + _fontRotateAdjust add + moveto + gsave + false charpath currentpoint + 5 index setmatrix stroke + grestore + _fontRotateAdjust sub + moveto + _sp eq + { + 5 index 5 index rmoveto + } if + 2 copy rmoveto + 90 rotate + } + { + currentpoint + _fontHeight sub + 5 index sub + 3 index _sp eq + { + 9 index sub + } if + + currentpoint + exch 4 index stringwidth pop 2 div sub + exch _fontAscent sub + moveto + + gsave + 2 index false charpath + 6 index setmatrix stroke + grestore + + moveto pop pop + } ifelse + } cforall + 6 npop +} def +/hjss +{ + 4 1 roll + { + dup cstring + gsave + false charpath currentpoint + 5 index setmatrix stroke + grestore + moveto + _sp eq + { + 5 index 5 index rmoveto + } if + 2 copy rmoveto + } cforall + 6 npop +} def +/jss +{ + _lineorientation 0 eq { hjss } { vjss } ifelse +} def +/ss +{ + 0 0 0 7 3 roll jss +} def +/vjsp +{ + 4 1 roll + { + dup cstring + dup length 1 eq + _charorientation 1 eq + and + { + -90 rotate + currentpoint + _fontRotateAdjust add + moveto + false charpath + currentpoint + _fontRotateAdjust sub + moveto + _sp eq + { + 5 index 5 index rmoveto + } if + 2 copy rmoveto + 90 rotate + } + { + currentpoint + _fontHeight sub + 5 index sub + 3 index _sp eq + { + 9 index sub + } if + + currentpoint + exch 4 index stringwidth pop 2 div sub + exch _fontAscent sub + moveto + + 2 index false charpath + + moveto pop pop + } ifelse + } cforall + 6 npop +} def +/hjsp +{ + 4 1 roll + { + dup cstring + false charpath + _sp eq + { + 5 index 5 index rmoveto + } if + 2 copy rmoveto + } cforall + 6 npop +} def +/jsp +{ + matrix currentmatrix + _lineorientation 0 eq {hjsp} {vjsp} ifelse +} def +/sp +{ + matrix currentmatrix + 0 0 0 7 3 roll + _lineorientation 0 eq {hjsp} {vjsp} ifelse +} def +/pl +{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform +} def +/setstrokeadjust where +{ + pop true setstrokeadjust + /c + { + curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll curveto + } def + /V + /v load def + /y + { + 2 copy curveto + } def + /Y + /y load def + /l + { + lineto + } def + /L + /l load def + /m + { + moveto + } def +} +{ + /c + { + pl curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll pl curveto + } def + /V + /v load def + /y + { + pl 2 copy curveto + } def + /Y + /y load def + /l + { + pl lineto + } def + /L + /l load def + /m + { + pl moveto + } def +} ifelse +/d +{ + setdash +} def +/cf +{ +} def +/i +{ + dup 0 eq + { + pop cf + } if + setflat +} def +/j +{ + setlinejoin +} def +/J +{ + setlinecap +} def +/M +{ + setmiterlimit +} def +/w +{ + setlinewidth +} def +/XR +{ + 0 ne + /_eo exch ddef +} def +/H +{ +} def +/h +{ + closepath +} def +/N +{ + _pola 0 eq + { + _doClip 1 eq + { + _eo {eoclip} {clip} ifelse /_doClip 0 ddef + } if + newpath + } + { + /CRender + { + N + } ddef + } ifelse +} def +/n +{ + N +} def +/F +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc + /_doClip 0 ddef + } + { + _pf + } ifelse + } + { + /CRender + { + F + } ddef + } ifelse +} def +/f +{ + closepath + F +} def +/S +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + _ps + } ifelse + } + { + /CRender + { + S + } ddef + } ifelse +} def +/s +{ + closepath + S +} def +/B +{ + _pola 0 eq + { + _doClip 1 eq + gsave F grestore + { + gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + S + } ifelse + } + { + /CRender + { + B + } ddef + } ifelse +} def +/b +{ + closepath + B +} def +/W +{ + /_doClip 1 ddef +} def +/* +{ + count 0 ne + { + dup type /stringtype eq + { + pop + } if + } if + newpath +} def +/u +{ +} def +/U +{ +} def +/q +{ + _pola 0 eq + { + gsave + } if +} def +/Q +{ + _pola 0 eq + { + grestore + } if +} def +/*u +{ + _pola 1 add /_pola exch ddef +} def +/*U +{ + _pola 1 sub /_pola exch ddef + _pola 0 eq + { + CRender + } if +} def +/D +{ + pop +} def +/*w +{ +} def +/*W +{ +} def +/` +{ + /_i save ddef + clipForward? + { + nulldevice + } if + 6 1 roll 4 npop + concat pop + userdict begin + /showpage + { + } def + 0 setgray + 0 setlinecap + 1 setlinewidth + 0 setlinejoin + 10 setmiterlimit + [] 0 setdash + /setstrokeadjust where {pop false setstrokeadjust} if + newpath + 0 setgray + false setoverprint +} def +/~ +{ + end + _i restore +} def +/_rgbtocmyk +{ + 3 + { + 1 exch sub 3 1 roll + } repeat + 3 copy 1 4 1 roll + 3 + { + 3 index 2 copy gt + { + exch + } if + pop 4 1 roll + } repeat + pop pop pop + 4 1 roll + 3 + { + 3 index sub + 3 1 roll + } repeat + 4 -1 roll +} def +/setrgbfill +{ + _rgbf astore pop + /_fc + { + _lp /fill ne + { + _of setoverprint + _rgbf aload pop setrgbcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + hvashow + } ddef + /_pjsf + { + _fc + hvawidthshow + } ddef + /_lp /none ddef +} def +/setrgbstroke +{ + _rgbs astore pop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _rgbs aload pop setrgbcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/O +{ + 0 ne + /_of exch ddef + /_lp /none ddef +} def +/R +{ + 0 ne + /_os exch ddef + /_lp /none ddef +} def +/g +{ + /_gf exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _gf setgray + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + hvashow + } ddef + /_pjsf + { + _fc + hvawidthshow + } ddef + /_lp /none ddef +} def +/G +{ + /_gs exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _gs setgray + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/k +{ + _cf astore pop + /_fc + { + _lp /fill ne + { + _of setoverprint + _cf aload pop setcmykcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + hvashow + } ddef + /_pjsf + { + _fc + hvawidthshow + } ddef + /_lp /none ddef +} def +/K +{ + _cs astore pop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _cs aload pop setcmykcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/Xa +{ + _?cmyk { + 3 npop k + }{ + setrgbfill 4 npop + } ifelse +} def +/XA +{ + _?cmyk { + 3 npop K + }{ + setrgbstroke 4 npop + } ifelse +} def +/Xs +{ + /_gf exch ddef + 5 npop + /_fc + { + _lp /fill ne + { + _of setoverprint + _gf setAIseparationgray + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + hvashow + } ddef + /_pjsf + { + _fc + hvawidthshow + } ddef + /_lp /none ddef +} def +/XS +{ + /_gs exch ddef + 5 npop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _gs setAIseparationgray + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/Xx +{ + exch + /_gf exch ddef + 0 eq { + findcmykcustomcolor + }{ + _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse + { + 4 1 roll 3 npop + findcmykcustomcolor + }{ + 8 -4 roll 4 npop + findrgbcustomcolor + } ifelse + } ifelse + /_if exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _if _gf 1 exch sub setcustomcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + hvashow + } ddef + /_pjsf + { + _fc + hvawidthshow + } ddef + /_lp /none ddef +} def +/XX +{ + exch + /_gs exch ddef + 0 eq { + findcmykcustomcolor + }{ + _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse + { + 4 1 roll 3 npop + findcmykcustomcolor + }{ + 8 -4 roll 4 npop + findrgbcustomcolor + } ifelse + } ifelse + /_is exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _is _gs 1 exch sub setcustomcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/x +{ + /_gf exch ddef + findcmykcustomcolor + /_if exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _if _gf 1 exch sub setcustomcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + hvashow + } ddef + /_pjsf + { + _fc + hvawidthshow + } ddef + /_lp /none ddef +} def +/X +{ + /_gs exch ddef + findcmykcustomcolor + /_is exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _is _gs 1 exch sub setcustomcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/XK +{ + 3 -1 roll pop + 0 eq + { + 1 exch sub + 3 {dup 3 1 roll mul 5 1 roll} repeat + mul 4 1 roll + K + } + { + 1 exch sub 4 1 roll + 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat + 4 -1 roll pop + XA + } ifelse +} def +/Xk +{ + 3 -1 roll pop + 0 eq + { + 1 exch sub + 3 {dup 3 1 roll mul 5 1 roll} repeat + mul 4 1 roll + k + } + { + 1 exch sub 4 1 roll + 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat + 4 -1 roll pop + Xa + } ifelse +} def +/A +{ + pop +} def +/annotatepage +{ +userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse +} def +/XT { + pop pop +} def +/Xt { + pop +} def +/discard +{ + save /discardSave exch store + discardDict begin + /endString exch store + gt38? + { + 2 add + } if + load + stopped + pop + end + discardSave restore +} bind def +userdict /discardDict 7 dict dup begin +put +/pre38Initialize +{ + /endStringLength endString length store + /newBuff buffer 0 endStringLength getinterval store + /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store + /newBuffLast newBuff endStringLength 1 sub 1 getinterval store +} def +/shiftBuffer +{ + newBuff 0 newBuffButFirst putinterval + newBuffLast 0 + currentfile read not + { + stop + } if + put +} def +0 +{ + pre38Initialize + mark + currentfile newBuff readstring exch pop + { + { + newBuff endString eq + { + cleartomark stop + } if + shiftBuffer + } loop + } + { + stop + } ifelse +} def +1 +{ + pre38Initialize + /beginString exch store + mark + currentfile newBuff readstring exch pop + { + { + newBuff beginString eq + { + /layerCount dup load 1 add store + } + { + newBuff endString eq + { + /layerCount dup load 1 sub store + layerCount 0 eq + { + cleartomark stop + } if + } if + } ifelse + shiftBuffer + } loop + } if +} def +2 +{ + mark + { + currentfile buffer {readline} stopped { + % assume error was due to overfilling the buffer + }{ + not + { + stop + } if + endString eq { + cleartomark stop + } if + }ifelse + } loop +} def +3 +{ + /beginString exch store + /layerCnt 1 store + mark + { + currentfile buffer {readline} stopped { + % assume error was due to overfilling the buffer + }{ + not + { + stop + } if + dup beginString eq + { + pop /layerCnt dup load 1 add store + } + { + endString eq + { + layerCnt 1 eq + { + cleartomark stop + } + { + /layerCnt dup load 1 sub store + } ifelse + } if + } ifelse + }ifelse + } loop +} def +end +userdict /clipRenderOff 15 dict dup begin +put +{ + /n /N /s /S /f /F /b /B +} +{ + { + _doClip 1 eq + { + /_doClip 0 ddef _eo {eoclip} {clip} ifelse + } if + newpath + } def +} forall +/Tr /pop load def +/Bb {} def +/BB /pop load def +/Bg {12 npop} def +/Bm {6 npop} def +/Bc /Bm load def +/Bh {4 npop} def +end +/Lb +{ + 6 npop + 7 2 roll + 5 npop + 0 eq + { + 0 eq + { + (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard + } + { + + /clipForward? true def + + /Tx /pop load def + /Tj /pop load def + + currentdict end clipRenderOff begin begin + } ifelse + } + { + 0 eq + { + save /discardSave exch store + } if + } ifelse +} bind def +/LB +{ + discardSave dup null ne + { + restore + } + { + pop + clipForward? + { + currentdict + end + end + begin + + /clipForward? false ddef + } if + } ifelse +} bind def +/Pb +{ + pop pop + 0 (%AI5_EndPalette) discard +} bind def +/Np +{ + 0 (%AI5_End_NonPrinting--) discard +} bind def +/Ln /pop load def +/Ap +/pop load def +/Ar +{ + 72 exch div + 0 dtransform dup mul exch dup mul add sqrt + dup 1 lt + { + pop 1 + } if + setflat +} def +/Mb +{ + q +} def +/Md +{ +} def +/MB +{ + Q +} def +/nc 4 dict def +nc begin +/setgray +{ + pop +} bind def +/setcmykcolor +{ + 4 npop +} bind def +/setrgbcolor +{ + 3 npop +} bind def +/setcustomcolor +{ + 2 npop +} bind def +currentdict readonly pop +end +/XP +{ + 4 npop +} bind def +/XD +{ + pop +} bind def +end +setpacking +%%EndResource +%%BeginResource: procset Adobe_pattern_AI5 1.1 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Pattern Operators) +%%Version: 1.1 0 +%%CreationDate: (03/26/93) () +%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_Illustrator_AI5 known not { + userdict /Adobe_Illustrator_AI5 95 dict put +} if +userdict /Adobe_Illustrator_AI5 get begin +/@ +{ +} def +/& +{ +} def +/dp +{ + dup null eq + { + pop + _dp 0 ne + { + 0 1 _dp 1 sub _dl mod + { + _da exch get 3 get + } for + _dp 1 sub _dl mod 1 add packedarray + _da 0 get aload pop 8 -1 roll 5 -1 roll pop 4 1 roll + definepattern pop + } if + } + { + _dp 0 ne _dp _dl mod 0 eq and + { + null dp + } if + 7 packedarray _da exch _dp _dl mod exch put + _dp _dl mod _da 0 get 4 get 2 packedarray + /_dp _dp 1 add def + } ifelse +} def +/E +{ + _ed begin + dup 0 get type /arraytype ne + { + 0 + { + dup 1 add index type /arraytype eq + { + 1 add + } + { + exit + } ifelse + } loop + array astore + } if + /_dd exch def + /_ury exch def + /_urx exch def + /_lly exch def + /_llx exch def + /_n exch def + /_y 0 def + /_dl 4 def + /_dp 0 def + /_da _dl array def + 0 1 _dd length 1 sub + { + /_d exch _dd exch get def + 0 2 _d length 2 sub + { + /_x exch def + /_c false def + /_r _d _x 1 add get cvlit def + _r _ ne + { + _urx _llx sub _ury _lly sub + [ + 1 0 0 1 0 0 + ] + [ + /save cvx + _llx neg _lly neg /translate cvx + _c + { + nc /begin cvx + } if + _r dup type /stringtype eq + { + cvx + } + { + { + exec + } /forall cvx + } ifelse + _c + { + /end cvx + } if + /restore cvx + ] cvx + /_fn 12 _n length add string def + _y _fn cvs pop + /_y _y 1 add def + _fn 12 _n putinterval + _fn _c false dp + _d exch _x 1 add exch put + } if + } for + } for + null dp + _n _dd /_pd + end + xput +} def +/fc +{ + _fm dup concatmatrix pop +} def +/p +{ + /_fm exch ddef + 9 -2 roll _pm translate fc + 7 -2 roll _pm scale fc + 5 -1 roll _pm rotate fc + 4 -2 roll exch 0 ne + { + dup _pm rotate fc + 1 -1 _pm scale fc + neg _pm rotate fc + } + { + pop + } ifelse + dup _pm rotate fc + exch dup sin exch cos div 1 0 0 1 0 6 2 roll + _pm astore fc + neg _pm rotate fc + _pd exch get /_fdd exch ddef + /_pf + { + save + /_doClip 0 ddef + 0 1 _fdd length 1 sub + { + /_fd exch _fdd exch get ddef + _fd + 0 2 _fd length 2 sub + { + gsave + 2 copy get dup _ ne + { + cvx exec _fc + } + { + pop + } ifelse + 2 copy 1 add get dup _ ne + { + aload pop findfont _fm + patternfill + } + { + pop + fill + } ifelse + grestore + pop + } for + pop + } for + restore + newpath + } ddef + /_psf + { + save + /_doClip 0 ddef + 0 1 _fdd length 1 sub + { + /_fd exch _fdd exch get ddef + _fd + 0 2 _fd length 2 sub + { + gsave + 2 copy get dup _ ne + { + cvx exec _fc + } + { + pop + } ifelse + 2 copy 1 add get dup _ ne + { + aload pop findfont _fm + 9 copy 6 npop patternashow + } + { + pop + 6 copy 3 npop hvashow + } ifelse + grestore + pop + } for + pop + } for + restore + sw rmoveto + } ddef + /_pjsf + { + save + /_doClip 0 ddef + 0 1 _fdd length 1 sub + { + /_fd exch _fdd exch get ddef + _fd + 0 2 _fd length 2 sub + { + gsave + 2 copy get dup _ ne + { + cvx exec _fc + } + { + pop + } ifelse + 2 copy 1 add get dup _ ne + { + aload pop findfont _fm + 12 copy 6 npop patternawidthshow + } + { + pop 9 copy 3 npop hvawidthshow + } ifelse + grestore + pop + } for + pop + } for + restore + swj rmoveto + } ddef + /_lp /none ddef +} def +/sc +{ + _sm dup concatmatrix pop +} def +/P +{ + /_sm exch ddef + 9 -2 roll _pm translate sc + 7 -2 roll _pm scale sc + 5 -1 roll _pm rotate sc + 4 -2 roll exch 0 ne + { + dup _pm rotate sc + 1 -1 _pm scale sc + neg _pm rotate sc + } + { + pop + } ifelse + dup _pm rotate sc + exch dup sin exch cos div 1 0 0 1 0 6 2 roll + _pm astore sc + neg _pm rotate sc + _pd exch get /_sdd exch ddef + /_ps + { + save + /_doClip 0 ddef + 0 1 _sdd length 1 sub + { + /_sd exch _sdd exch get ddef + _sd + 0 2 _sd length 2 sub + { + gsave + 2 copy get dup _ ne + { + cvx exec _sc + } + { + pop + } ifelse + 2 copy 1 add get dup _ ne + { + aload pop findfont _sm + patternstroke + } + { + pop stroke + } ifelse + grestore + pop + } for + pop + } for + restore + newpath + } ddef + /_pss + { + save + /_doClip 0 ddef + 0 1 _sdd length 1 sub + { + /_sd exch _sdd exch get ddef + _sd + 0 2 _sd length 2 sub + { + gsave + 2 copy get dup _ ne + { + cvx exec _sc + } + { + pop + } ifelse + 2 copy 1 add get dup _ ne + { + aload pop findfont _sm + 10 copy 6 npop patternashowstroke + } + { + pop 7 copy 3 npop ss + } ifelse + grestore + pop + } for + pop + } for + restore + pop sw rmoveto + } ddef + /_pjss + { + save + /_doClip 0 ddef + 0 1 _sdd length 1 sub + { + /_sd exch _sdd exch get ddef + _sd + 0 2 _sd length 2 sub + { + gsave + 2 copy get dup _ ne + { + cvx exec _sc + } + { + pop + } ifelse + 2 copy 1 add get dup _ ne + { + aload pop findfont _sm + 13 copy 6 npop patternawidthshowstroke + } + { + pop 10 copy 3 npop jss + } ifelse + grestore + pop + } for + pop + } for + restore + pop swj rmoveto + } ddef + /_lp /none ddef +} def +end +userdict /Adobe_pattern_AI5 18 dict dup begin +put +/initialize +{ + /definepattern where + { + pop + pop pop + } + { + begin + begin + Adobe_pattern_AI5 begin + Adobe_pattern_AI5 + { + dup xcheck + { + bind + } if + pop pop + } forall + mark + cachestatus 7 1 roll pop pop pop pop exch pop exch + { + { + 10000 add + dup 2 index gt + { + exit + } if + dup setcachelimit + } loop + } stopped + cleartomark + end + + end + end + + Adobe_pattern_AI5 begin + } ifelse +} def +/terminate +{ + currentdict Adobe_pattern_AI5 eq + { + end + } if +} def +errordict +/nocurrentpoint +{ + pop + stop +} put +errordict +/invalidaccess +{ + pop + stop +} put +/patternencoding +256 array def +0 1 255 +{ + patternencoding exch ( ) 2 copy exch 0 exch put cvn put +} for +/definepattern +{ + 17 dict begin + /uniform exch def + /cache exch def + /key exch def + /procarray exch def + /mtx exch matrix invertmatrix def + /height exch def + /width exch def + /ctm matrix currentmatrix def + /ptm matrix def + /str 32 string def + /slice 9 dict def + slice /s 1 put + slice /q 256 procarray length div sqrt floor cvi put + slice /b 0 put + /FontBBox + [ + 0 0 0 0 + ] def + /FontMatrix mtx matrix copy def + /Encoding patternencoding def + /FontType 3 def + /BuildChar + { + exch + begin + /setstrokeadjust where {pop true setstrokeadjust} if + slice begin + dup q dup mul mod s idiv /i exch def + dup q dup mul mod s mod /j exch def + q dup mul idiv procarray exch get + /xl j width s div mul def + /xg j 1 add width s div mul def + /yl i height s div mul def + /yg i 1 add height s div mul def + uniform + { + 1 1 + } + { + width 0 dtransform + dup mul exch dup mul add sqrt dup 1 add exch div + 0 height dtransform + dup mul exch dup mul add sqrt dup 1 add exch div + } ifelse + width 0 cache + { + xl 4 index mul yl 4 index mul xg 6 index mul yg 6 index mul + setcachedevice + } + { + setcharwidth + } ifelse + gsave + scale + newpath + xl yl moveto + xg yl lineto + xg yg lineto + xl yg lineto + closepath + clip + newpath + end + end + exec + grestore + } def + key currentdict definefont + end +} def +/patterncachesize +{ + gsave + newpath + 0 0 moveto + width 0 lineto + width height lineto + 0 height lineto + closepath + patternmatrix setmatrix + pathbbox + exch ceiling 4 -1 roll floor sub 3 1 roll + ceiling exch floor sub + mul 1 add + grestore +} def +/patterncachelimit +{ + cachestatus 7 1 roll 6 npop 8 mul +} def +/patternpath +{ + exch dup begin + setfont + ctm setmatrix + concat + slice exch /b exch slice /q get dup mul mul put + FontMatrix concat + uniform + { + width 0 dtransform round width div exch round width div exch + 0 height dtransform round height div exch height div exch + 0 0 transform round exch round exch + ptm astore setmatrix + } + { + ptm currentmatrix pop + } ifelse + { + currentpoint + } stopped not + { + 2 npop + pathbbox + true + 4 index 3 index eq + 4 index 3 index eq + and + { + pop false + { + { + 2 npop + } + { + 3 npop true + } + { + 7 npop true + } + { + pop true + } pathforall + } stopped + { + 5 npop true + } if + } if + { + height div ceiling height mul 4 1 roll + width div ceiling width mul 4 1 roll + height div floor height mul 4 1 roll + width div floor width mul 4 1 roll + 2 index sub height div ceiling cvi exch + 3 index sub width div ceiling cvi exch + 4 2 roll moveto + FontMatrix mtx invertmatrix + dup dup 4 get exch 5 get rmoveto + ptm ptm concatmatrix pop + slice /s + patterncachesize patterncachelimit div ceiling sqrt ceiling cvi + dup slice /q get gt + { + pop slice /q get + } if + put + 0 1 slice /s get dup mul 1 sub + { + slice /b get add + gsave + 0 1 str length 1 sub + { + str exch 2 index put + } for + pop + dup + { + gsave + ptm setmatrix + 1 index str length idiv + { + str show + } repeat + 1 index str length mod str exch 0 exch getinterval show + grestore + 0 height rmoveto + } repeat + grestore + } for + 2 npop + } + { + 4 npop + } ifelse + } if + end +} def +/patternclip +{ + _eo {eoclip} {clip} ifelse +} def +/patternstrokepath +{ + strokepath +} def +/patternmatrix +matrix def +/patternfill +{ + dup type /dicttype eq + { + Adobe_pattern_AI5 /patternmatrix get + } if + gsave + patternclip + Adobe_pattern_AI5 /patternpath get exec + grestore + newpath +} def +/patternstroke +{ + dup type /dicttype eq + { + Adobe_pattern_AI5 /patternmatrix get + } if + gsave + patternstrokepath + true + { + { + { + newpath + moveto + } + { + lineto + } + { + curveto + } + { + closepath + 3 copy + Adobe_pattern_AI5 /patternfill get exec + } pathforall + 3 npop + } stopped + { + 5 npop + patternclip + Adobe_pattern_AI5 /patternfill get exec + } if + } + { + patternclip + Adobe_pattern_AI5 /patternfill get exec + } ifelse + grestore + newpath +} def +/vpatternawidthshow +{ + 6 1 roll + /_hvay exch ddef + /_hvax exch ddef + /_hvwb exch ddef + /_hvcy exch ddef + /_hvcx exch ddef + + { + dup cstring + dup length 1 eq + _charorientation 1 eq + and + { + -90 rotate + currentpoint + _fontRotateAdjust add + moveto + gsave + false charpath currentpoint + 5 index 5 index 5 index Adobe_pattern_AI5 /patternfill get exec + grestore + _fontRotateAdjust sub + moveto + _hvwb eq { _hvcx _hvcy rmoveto } if + _hvax _hvay rmoveto + 90 rotate + } + { + currentpoint + _fontHeight sub + _hvax sub + 3 index _hvwb eq { _hvcx sub } if + currentpoint + exch 4 index stringwidth pop 2 div sub + exch _fontAscent sub + moveto + gsave + 2 index false charpath + 6 index 6 index 6 index Adobe_pattern_AI5 /patternfill get exec + grestore + newpath moveto pop pop + } ifelse + } cforall + 3 npop +} def +/hpatternawidthshow +{ + { + dup cstring exch + gsave + 3 index eq { 5 index 5 index rmoveto } if + false charpath currentpoint + 9 index 9 index 9 index + Adobe_pattern_AI5 /patternfill get exec + grestore + newpath moveto + 2 copy rmoveto + } cforall + 8 npop +} def +/patternashow +{ +0 0 0 6 3 roll +patternawidthshow +} def +/patternawidthshow +{ + 6 index type /dicttype eq + { + Adobe_pattern_AI5 /patternmatrix get 7 1 roll + } if + _lineorientation 0 eq { hpatternawidthshow } { vpatternawidthshow } ifelse +} def +/vpatternawidthshowstroke +{ + 7 1 roll + 6 1 roll + /_hvay exch ddef + /_hvax exch ddef + /_hvwb exch ddef + /_hvcy exch ddef + /_hvcx exch ddef + { + dup cstring + dup length 1 eq + _charorientation 1 eq + and + { + -90 rotate + currentpoint + _fontRotateAdjust add + moveto + gsave + false charpath currentpoint + 3 index setmatrix + 6 index 6 index 6 index Adobe_pattern_AI5 /patternstroke get exec + grestore + _fontRotateAdjust sub + moveto + _hvwb eq { _hvcx _hvcy rmoveto } if + _hvax _hvay rmoveto + 90 rotate + } + { + currentpoint + _fontHeight sub + _hvax sub + 3 index _hvwb eq { _hvcx sub } if + currentpoint + exch 4 index stringwidth pop 2 div sub + exch _fontAscent sub + moveto + gsave + 2 index false charpath + 4 index setmatrix + 7 index 7 index 7 index Adobe_pattern_AI5 /patternstroke get exec + grestore + newpath moveto pop pop + } ifelse + } cforall + 4 npop +} def +/hpatternawidthshowstroke +{ + 7 1 roll + { + dup cstring exch + gsave + 3 index eq { 5 index 5 index rmoveto } if + false charpath currentpoint + 7 index setmatrix + 10 index 10 index 10 index + Adobe_pattern_AI5 /patternstroke get exec + grestore + newpath moveto + 2 copy rmoveto + } cforall + 9 npop +} def +/patternashowstroke +{ + 0 0 0 7 3 roll + patternawidthshowstroke +} def +/patternawidthshowstroke +{ + 7 index type /dicttype eq + { + patternmatrix /patternmatrix get 8 1 roll + } if + _lineorientation 0 eq { hpatternawidthshowstroke } { vpatternawidthshowstroke } ifelse +} def +end +setpacking +%%EndResource +%%BeginResource: procset Adobe_cshow 2.0 8 +%%Title: (Writing System Operators) +%%Version: 2.0 8 +%%CreationDate: (1/23/89) () +%%Copyright: ((C) 1992-1996 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_cshow 14 dict dup begin put +/initialize +{ + Adobe_cshow begin + Adobe_cshow + { + dup xcheck + { + bind + } if + pop pop + } forall + end + Adobe_cshow begin +} def +/terminate +{ +currentdict Adobe_cshow eq + { + end + } if +} def +/cforall +{ + /_lobyte 0 ddef + /_hibyte 0 ddef + /_cproc exch ddef + /_cscript currentfont /FontScript known { currentfont /FontScript get } { -1 } ifelse ddef + { + /_lobyte exch ddef + _hibyte 0 eq + _cscript 1 eq + _lobyte 129 ge _lobyte 159 le and + _lobyte 224 ge _lobyte 252 le and or and + _cscript 2 eq + _lobyte 161 ge _lobyte 254 le and and + _cscript 3 eq + _lobyte 161 ge _lobyte 254 le and and + _cscript 25 eq + _lobyte 161 ge _lobyte 254 le and and + _cscript -1 eq + or or or or and + { + /_hibyte _lobyte ddef + } + { + _hibyte 256 mul _lobyte add + _cproc + /_hibyte 0 ddef + } ifelse + } forall +} def +/cstring +{ + dup 256 lt + { + (s) dup 0 4 3 roll put + } + { + dup 256 idiv exch 256 mod + (hl) dup dup 0 6 5 roll put 1 4 3 roll put + } ifelse +} def +/clength +{ + 0 exch + { 256 lt { 1 } { 2 } ifelse add } cforall +} def +/hawidthshow +{ + { + dup cstring + show + _hvax _hvay rmoveto + _hvwb eq { _hvcx _hvcy rmoveto } if + } cforall +} def +/vawidthshow +{ + { + dup 255 le + _charorientation 1 eq + and + { + -90 rotate + 0 _fontRotateAdjust rmoveto + cstring + _hvcx _hvcy _hvwb _hvax _hvay 6 -1 roll awidthshow + 0 _fontRotateAdjust neg rmoveto + 90 rotate + } + { + currentpoint + _fontHeight sub + exch _hvay sub exch _hvax sub + 2 index _hvwb eq { exch _hvcy sub exch _hvcx sub } if + 3 2 roll + cstring + dup stringwidth pop 2 div neg _fontAscent neg rmoveto + show + moveto + } ifelse + } cforall +} def +/hvawidthshow +{ + 6 1 roll + /_hvay exch ddef + /_hvax exch ddef + /_hvwb exch ddef + /_hvcy exch ddef + /_hvcx exch ddef + _lineorientation 0 eq { hawidthshow } { vawidthshow } ifelse +} def +/hvwidthshow +{ + 0 0 3 -1 roll hvawidthshow +} def +/hvashow +{ + 0 0 0 6 -3 roll hvawidthshow +} def +/hvshow +{ + 0 0 0 0 0 6 -1 roll hvawidthshow +} def +currentdict readonly pop end +setpacking +%%EndResource +%%BeginResource: procset Adobe_shading_AI8 1.0 0 +%%Title: (Adobe Illustrator 8 Shading Procset) +%%Version: 1.0 0 +%%CreationDate: (12/17/97) () +%%Copyright: ((C) 1987-1997 Adobe Systems Incorporated All Rights Reserved) +userdict /defaultpacking currentpacking put true setpacking +userdict /Adobe_shading_AI8 10 dict dup begin put +/initialize { + Adobe_shading_AI8 begin + Adobe_shading_AI8 bdprocs + Mesh /initialize get exec +} def +/terminate { + currentdict Adobe_shading_AI8 eq { + end + } if +} def +/bdprocs { + { + dup xcheck 1 index type /arraytype eq and { + bind + } if + pop pop + } forall +} def +/X! {pop} def +/X# {pop pop} def +/Mesh 40 dict def +Mesh begin +/initialize { + Mesh bdprocs + Mesh begin + /emulate? /AI8MeshEmulation where { + pop AI8MeshEmulation + }{ + systemdict /shfill known not + } ifelse def + end +} def +/bd { + shadingdict begin +} def +/paint { + emulate? { + end + }{ + /_lp /none ddef _fc /_lp /none ddef + + /AIColorSpace AIColorSpace tocolorspace store + /ColorSpace AIColorSpace topsspace store + + version_ge_3010.106 not systemdict /setsmoothness known and { + 0.0001 setsmoothness + } if + + composite? { + /DataSource getdatasrc def + Matrix concat + currentdict end + shfill + }{ + AIColorSpace makesmarks AIPlateList markingplate and not isoverprint and { + end + }{ + /ColorSpace /DeviceGray store + /Decode [0 1 0 1 0 1] store + /DataSource getplatesrc def + Matrix concat + currentdict end + shfill + } ifelse + } ifelse + } ifelse +} def +/shadingdict 12 dict def +shadingdict begin + /ShadingType 6 def + /BitsPerCoordinate 16 def + /BitsPerComponent 8 def + /BitsPerFlag 8 def +end +/datafile null def +/databuf 256 string def +/dataptr 0 def +/srcspace null def +/srcchannels 0 def +/dstchannels 0 def +/dstplate 0 def +/srctodstcolor null def +/getplatesrc { + /srcspace AIColorSpace store + /srcchannels AIColorSpace getnchannels store + /dstchannels 1 store + /dstplate getplateindex store + /srctodstcolor srcspace makesmarks { + dstplate 4 eq { + {1 exch sub} + }{ + {srcspace tocmyk 3 dstplate sub index 1 exch sub 5 1 roll 4 {pop} repeat} + } ifelse + }{ + {srcchannels {pop} repeat 1} + } ifelse store + /datafile getdatasrc store + /rdpatch168 load DataLength () /SubFileDecode filter +} def +/getdatasrc { + /rdcmntline load /ASCII85Decode filter +} def +/rdpatch168 { + /dataptr 0 store + 49 rdcount + 4 { + dup {pop srcchannels getint8} if + dup {pop srctodstcolor dstchannels putint8 true} if + } repeat + {databuf 0 dataptr getinterval}{()} ifelse +} def +/rdpatch3216 { + /dataptr 0 store + 97 rdcount + 4 { + dup {pop srcchannels getint16} if + dup {pop srctodstcolor dstchannels putint16 true} if + } repeat + {databuf 0 dataptr getinterval}{()} ifelse +} def +/rdcount { + dup 0 gt { + datafile databuf dataptr 4 -1 roll getinterval readstring + exch length dataptr add /dataptr exch store + }{ + true + } ifelse +} def +/getint8 { + mark true 3 -1 roll + { + dup {pop datafile read} if + dup {pop 255 div true} if + } repeat + { + counttomark 1 add -1 roll pop true + }{ + cleartomark false + } ifelse +} def +/putint8 { + dup dataptr add /dataptr exch store + dataptr exch + { + 1 sub exch + 255 mul cvi + databuf 2 index + 3 -1 roll put + } repeat + pop +} def +/getint16 { + mark true 3 -1 roll + { + dup {pop datafile read} if + dup {pop 256 mul datafile read} if + dup {pop add 65535 div true} if + } repeat + { + counttomark 1 add -1 roll pop true + }{ + cleartomark false + } ifelse +} def +/putint16 { + dup 2 mul dataptr add /dataptr exch store + dataptr exch + { + 2 sub exch + 65535 mul cvi dup + 256 idiv databuf 3 index 3 -1 roll put + 256 mod databuf 2 index 1 add 3 -1 roll put + } repeat + pop +} def +/srcbuf 256 string def +/rdcmntline { + currentfile srcbuf readline pop + (%) anchorsearch {pop} if +} def +/getplateindex { + 0 [cyan? magenta? yellow? black? customColor?] {{exit} if 1 add} forall +} def +/aicsarray 4 array def +/aicsaltvals 4 array def +/aicsaltcolr aicsaltvals def +/tocolorspace { + dup type /arraytype eq { + mark exch aload pop + aicsarray 0 3 -1 roll put + aicsarray 1 3 -1 roll put + dup aicsarray 2 3 -1 roll put + gettintxform aicsarray 3 3 -1 roll put + counttomark aicsaltvals 0 3 -1 roll getinterval /aicsaltcolr exch store + aicsaltcolr astore pop pop + aicsarray + } if +} def +/subtintxform {aicsaltcolr {1 index mul exch} forall pop} def +/addtintxform {aicsaltcolr {1 sub 1 index mul 1 add exch} forall pop} def +/gettintxform { + /DeviceRGB eq {/addtintxform}{/subtintxform} ifelse load +} def +/getnchannels { + dup type /arraytype eq {0 get} if + colorspacedict exch get begin Channels end +} def +/makesmarks { + composite? { + pop true + }{ + dup dup type /arraytype eq {0 get} if + colorspacedict exch get begin MarksPlate end + } ifelse +} def +/markingplate { + composite? { + pop true + }{ + dup type /arraytype eq { + dup length getplateindex gt {getplateindex get}{pop false} ifelse + } if + } ifelse +} def +/tocmyk { + dup dup type /arraytype eq {0 get} if + colorspacedict exch get begin ToCMYK end +} def +/topsspace { + dup dup type /arraytype eq {0 get} if + colorspacedict exch get begin ToPSSpace end +} def +/colorspacedict 5 dict dup begin + /DeviceGray 4 dict dup begin + /Channels 1 def + /MarksPlate {pop black?} def + /ToCMYK {pop 1 exch sub 0 0 0 4 -1 roll} def + /ToPSSpace {} def + end def + /DeviceRGB 4 dict dup begin + /Channels 3 def + /MarksPlate {pop isCMYKSep?} def + /ToCMYK {pop _rgbtocmyk} def + /ToPSSpace {} def + end def + /DeviceCMYK 4 dict dup begin + /Channels 4 def + /MarksPlate {pop isCMYKSep?} def + /ToCMYK {pop} def + /ToPSSpace {} def + end def + /Separation 4 dict dup begin + /Channels 1 def + /MarksPlate { + /findcmykcustomcolor where { + pop dup 1 exch ToCMYK 5 -1 roll 1 get + findcmykcustomcolor 1 setcustomcolor + systemdict /currentgray get exec + 1 ne + }{ + pop false + } ifelse + } def + /ToCMYK { + dup 2 get mark exch 4 2 roll + 3 get exec + counttomark -1 roll tocmyk + 5 -1 roll pop + } def + /ToPSSpace {} def + end def + /Process 4 dict dup begin + /Channels 1 def + /MarksPlate { + isCMYKSep? { + 1 exch ToCMYK 4 array astore getplateindex get 0 ne + }{ + pop false + } ifelse + } def + /ToCMYK { + dup 2 get mark exch 4 2 roll + 3 get exec + counttomark -1 roll tocmyk + 5 -1 roll pop + } def + /ToPSSpace { + 4 array copy dup 0 /Separation put + } def + end def +end def +/isoverprint { + /currentoverprint where {pop currentoverprint}{_of} ifelse +} def +/version_ge_3010.106 { + version {cvr} stopped { + pop + false + }{ + 3010.106 ge + } ifelse +} def +end +end +defaultpacking setpacking +%%EndResource +%%EndProlog +%%BeginSetup +userdict /_useSmoothShade true put +userdict /_aicmykps false put +userdict /_forceToCMYK false put +Adobe_level2_AI5 /initialize get exec +Adobe_cshow /initialize get exec +Adobe_screens_AI5 /initialize get exec +Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 AGM_Gradient /initializeAI get exec +Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_pattern_AI5 /initialize get exec +Adobe_ColorImage_AI6 /initialize get exec +Adobe_shading_AI8 /initialize get exec +Adobe_Illustrator_AI5 /initialize get exec +%AI5_Begin_NonPrinting +Np +%AI8_PluginGroupInfo +(Adobe Flare Plugin) (Flare) (flare.aip) +%AI8_PluginGroupInfo +(Adobe Deform Plugin) (Adobe H\374llen-Zusatzmodul) (Envelope and Warp.aip) +%AI8_PluginGroupInfo +(Adobe Planar Group) (Adobe-Zusatzmodul Interaktiv malen) (Live Paint.aip) +%AI8_PluginGroupInfo +(Adobe Perspective Plugin Group) (Adobe Perspective Plugin Group) (Perspective.aip) +%AI8_PluginGroupInfo +(Adobe Vectorized Object) (Nachgezeichnetes Bild) (Illustrator.exe) +%AI8_PluginGroupInfo +(Adobe Path Blends) (Adobe Angleichungen-Zusatzmodul) (Live Blends.aip) +%AI8_PluginGroupInfo +(Adobe Symbolism) (Adobe Symbolism) (Symbolism.aip) +%AI8_PluginGroupInfo +(Adobe PatternOnPath Brush Tool) (Adobe Musterpinsel-Zusatzmodul) (ArtOnPath.aip) +%AI8_PluginGroupInfo +(Adobe PatternOnPath Brush Tool) (Adobe Musterpinsel-Zusatzmodul) (ArtOnPath.aip) +%AI8_PluginGroupInfo +(Adobe ArtOnPath Brush Tool) (Adobe Bildpinsel-Zusatzmodul) (ArtOnPath.aip) +%AI8_PluginGroupInfo +(Adobe ArtOnPath Brush Tool) (Adobe Bildpinsel-Zusatzmodul) (ArtOnPath.aip) +%AI8_PluginGroupInfo +(Adobe Calligraphic Brush Tool) (Adobe Kalligrafiepinsel-Zusatzmodul) (Calligraphic Brush Tool.aip) +%AI8_PluginGroupInfo +(Adobe Scatter Brush Tool) (Adobe Spezialpinsel-Zusatzmodul) (Scatter Brush Tool.aip) +%AI8_PluginGroupInfo +(Adobe Scatter Brush Tool) (Adobe Spezialpinsel-Zusatzmodul) (Scatter Brush Tool.aip) +%AI8_PluginGroupInfo +(Adobe Pattern Editor Plugin Group) (Adobe Pattern Editor Plugin Group) (Swatch Libraries.aip) +%AI8_PluginGroupInfo +(Pathfinder Suite) (Adobe Zusammengesetzte Form) (PathFinder Suite.aip) +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +13 Bn +%AI5_BeginGradient: (Orange, Gelb) +(Orange, Gelb) 0 5 Bd +[ +< +05050505050505050505050505050505050505050505050505050505060606060606060606060606 +0606060606 +> +< +BBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3 +E4E5E6E7E8 +> +< +D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4 +D4D4D4D4D4 +> +0 +1 %_Br +< +03030303030303030303030303030404040404040404040404040404040404040404040404040404 +040404040404040405050505050505 +> +< +8485868788898A8B8C8D8E8F9091929495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABAC +ADAEAFB0B1B2B3B4B5B6B7B8B9BABB +> +< +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 +D6D6D6D6D6D6D6D6D6D5D5D5D5D5D5 +> +0 +1 %_Br +< +02020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020303030303030303030303030303030303030303030303030303030303 +> +< +38393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F5051525455565758595A5B5C5D5E5F60 +6162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F8081828384 +> +< +FFFEFEFDFDFCFCFBFBFAFAF9F9F8F8F7F7F6F5F5F4F4F3F3F2F2F1F1F0F0EFEFEEEEEDECECEBEBEA +EAE9E9E8E8E7E7E6E6E5E5E4E4E3E2E2E1E1E0E0DFDFDEDEDDDDDCDCDBDBDAD9D9D8D8D7 +> +0 +1 %_Br +< +00000000000000000000000000000000000000000101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +0101010101010101010101010102020202020202020202020202020202020202020202020202 +> +< +000102030405060708090A0B0B0C0D0E0F101112121314151616171819191A1B1C1C1D1E1E1F2020 +212222232324252526262727282829292A2A2B2B2C2C2D2D2E2E2E2F2F3030303131313232323333 +3333343434343535353536363636363637373737373737373838383838383838383838383838 +> +< +DBDCDDDDDEDEDFE0E0E1E1E2E3E3E4E4E5E5E6E6E7E7E8E9E9EAEAEAEBEBECECEDEDEEEEEFEFEFF0 +F0F1F1F1F2F2F3F3F3F4F4F4F5F5F5F6F6F6F7F7F7F7F8F8F8F9F9F9F9FAFAFAFAFAFBFBFBFBFBFC +FCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +> +0 +1 %_Br +[ +0.0235 0.91 0.83 0 1 50 100 %_BS +%_0.0235 0.91 0.83 0 1 50 100 Bs +0.0184 0.7341 0.8365 0 1 50 88.764 %_BS +%_0.0184 0.7341 0.8365 0 1 50 88.764 Bs +0.0121 0.5186 0.8445 0 1 50 66.8539 %_BS +%_0.0121 0.5186 0.8445 0 1 50 66.8539 Bs +0.0061 0.22 1 0 1 50 28.0899 %_BS +%_0.0061 0.22 1 0 1 50 28.0899 Bs +0 0 0.86 0 1 28 0 %_BS +%_0 0 0.86 0 1 28 0 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Sehr weiche schwarze Vignette) +(Sehr weiche schwarze Vignette) 1 3 Bd +[ +0.2 +0.2 +0.2 +1 +1 %_Br +0.2 +0.2 +0.2 +1 +1 %_Br +[ +0.2 0.2 0.2 1 1 56.0729 57.4443 %_BS +%_0.2 0.2 0.2 1 1 56.0729 57.4443 Bs +0.2 0.2 0.2 1 1 31.8603 79.7713 %_BS +%_0.2 0.2 0.2 1 1 31.8603 79.7713 Bs +0.2 0.2 0.2 1 1 50 100 %_BS +%_0.2 0.2 0.2 1 1 50 100 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 14) +(Unnamed gradient 14) 1 4 Bd +[ +< +000102030405060708090A0B0C0D0E0F10111212131415161718191A1B1C1D1D1E1F202122232425 +25262728292A2B2B2C2D2E2F303031323334353536373839393A3B3C3C3D3E3F3F40414242434445 +4546474848494A4A4B4C4D4D4E4F4F5051515253535455555656575858595A5A5B5B5C5D5D5E5E5F +5F6061616262636364646566666767686869696A6A6B6B6C6C6D6D6D6E6E6F6F7070717171727273 +737374747575757676767777777878787979797A7A7A7B7B7B7B7C7C7C7C7D7D7D7D7E7E7E7E7E7F +7F7F7F7F8080808080808080818181818181818181 +> +< +000001010102020203030304040404050505060606070707080808080909090A0A0A0A0B0B0B0C0C +0C0C0D0D0D0E0E0E0E0F0F0F10101010111111111212121213131313141414141515151516161616 +171717171818181818191919191A1A1A1A1A1B1B1B1B1C1C1C1C1C1D1D1D1D1D1E1E1E1E1E1F1F1F +1F1F1F20202020202121212121212222222222222323232323232324242424242424252525252525 +25262626262626262627272727272727272728282828282828282828282929292929292929292929 +292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A +> +< +00000000000000000101010101010101010101010101010202020202020202020202020202020203 +03030303030303030303030303030303040404040404040404040404040404040404050505050505 +05050505050505050505050505050606060606060606060606060606060606060606060607070707 +07070707070707070707070707070707070707070707070808080808080808080808080808080808 +08080808080808080808080808080808080808080909090909090909090909090909090909090909 +090909090909090909090909090909090909090909 +> +< +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101 +> +1 %_Br +< +8182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8 +A9AAABACADAEAFB0B1B2B3B4B5B6B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1 +D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECED +> +< +2A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F5051 +52535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576777879 +7A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495 +> +< +09090909090909090909090909090909090908080808080808080808080808080808080808080808 +08080808080808080808080808080707070707070707070707070707070707070707070707070707 +07070707070707070706060606060606060606060606060606060606 +> +< +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000 +> +1 %_Br +< +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE +EEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF +EFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 +> +< +95959696969797979898989999999A9A9A9B9B9B9C9C9C9D9D9D9E9E9F9F9FA0A0A0A1A1A1A2A2A3 +A3A3A4A4A4A5A5A5A6A6A7A7A7A8A8A8A9A9AAAAAAABABABACACADADADAEAEAEAFAFB0B0B0B1B1B1 +B2B2B3B3B3B4B4B5B5B5B6B6B6B7B7B8B8 +> +< +06070708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1E1E1F20212223242526272829 +2A2B2C2C2D2E2F303132333435363738393A3B3C3D3E3F40414243444445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F60 +> +< +0001020203040506070708090A0B0C0D0E0F0F101112131415161718191A1B1C1C1D1E1F20212223 +2425262728292A2B2C2D2E2F30313232333435363738393A3B3C3D3E3F404142434445464748494A +4B4C4D4E4F505152535455565758595A5B +> +1 %_Br +[ +0 0 0 0 1 33.3333 0 %_BS +%_0 0 0 0 1 33.3333 0 Bs +0.5059 0.1647 0.0353 0.0039 1 50 29.2135 %_BS +%_0.5059 0.1647 0.0353 0.0039 1 50 29.2135 Bs +0.9294 0.5843 0.0235 0 1 51.9231 64.6067 %_BS +%_0.9294 0.5843 0.0235 0 1 51.9231 64.6067 Bs +0.9412 0.7216 0.3765 0.3569 1 51.9231 100 %_BS +%_0.9412 0.7216 0.3765 0.3569 1 51.9231 100 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 18) +(Unnamed gradient 18) 1 4 Bd +[ +< +000102030405060708090A0B0C0D0E0F10111212131415161718191A1B1C1D1D1E1F202122232425 +25262728292A2B2B2C2D2E2F303031323334353536373839393A3B3C3C3D3E3F3F40414242434445 +4546474848494A4A4B4C4D4D4E4F4F5051515253535455555656575858595A5A5B5B5C5D5D5E5E5F +5F6061616262636364646566666767686869696A6A6B6B6C6C6D6D6D6E6E6F6F7070717171727273 +737374747575757676767777777878787979797A7A7A7B7B7B7B7C7C7C7C7D7D7D7D7E7E7E7E7E7F +7F7F7F7F8080808080808080818181818181818181 +> +< +000001010102020203030304040404050505060606070707080808080909090A0A0A0A0B0B0B0C0C +0C0C0D0D0D0E0E0E0E0F0F0F10101010111111111212121213131313141414141515151516161616 +171717171818181818191919191A1A1A1A1A1B1B1B1B1C1C1C1C1C1D1D1D1D1D1E1E1E1E1E1F1F1F +1F1F1F20202020202121212121212222222222222323232323232324242424242424252525252525 +25262626262626262627272727272727272728282828282828282828282929292929292929292929 +292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A +> +< +00000000000000000101010101010101010101010101010202020202020202020202020202020203 +03030303030303030303030303030303040404040404040404040404040404040404050505050505 +05050505050505050505050505050606060606060606060606060606060606060606060607070707 +07070707070707070707070707070707070707070707070808080808080808080808080808080808 +08080808080808080808080808080808080808080909090909090909090909090909090909090909 +090909090909090909090909090909090909090909 +> +< +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101 +> +1 %_Br +< +8182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8 +A9AAABACADAEAFB0B1B2B3B4B5B6B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1 +D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECED +> +< +2A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F5051 +52535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576777879 +7A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495 +> +< +09090909090909090909090909090909090908080808080808080808080808080808080808080808 +08080808080808080808080808080707070707070707070707070707070707070707070707070707 +07070707070707070706060606060606060606060606060606060606 +> +< +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000 +> +1 %_Br +< +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC +ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC +ECECECECECECECECECECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB +EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB +> +< +959595969696969697979797979898989899999999999A9A9A9A9B9B9B9B9B9C9C9C9C9D9D9D9D9E +9E9E9E9E9F9F9F9FA0A0A0A0A1A1A1A1A2A2A2A2A2A3A3A3A3A4A4A4A4A5A5A5A5A6A6A6A6A7A7A7 +A7A7A8A8A8A8A9A9A9A9AAAAAAAAABABABABACACACACADADADADAEAEAEAEAFAFAFAFB0B0B0B0B1B1 +B1B1B1B2B2B2B2B3B3B3B3B4B4B4B4B5B5B5B5B6B6B6B6B7B7B7B7B8B8B8B8B9B9B9B9BABABABABB +BBBBBBBCBCBCBCBDBDBDBDBEBEBEBEBFBFBFBFC0C0C0C1C1C1 +> +< +06060707080809090A0A0B0B0C0D0D0E0E0F0F1010111112131314141515161617181819191A1A1B +1B1C1D1D1E1E1F1F20212122222324242525262627282829292A2B2B2C2C2D2D2E2F2F3030313232 +3333343535363637383839393A3A3B3C3C3D3D3E3F3F404041424243434445454646474848494A4A +4B4B4C4D4D4E4E4F50505151525353545455565657585859595A5B5B5C5C5D5E5E5F5F6061616263 +63646465666667676869696A6B6B6C6C6D6E6E6F7070717172 +> +< +0001010203040505060708090A0B0B0C0D0E0F10111212131415161718191A1A1B1C1D1E1F202122 +23242425262728292A2B2C2D2E2F30313132333435363738393A3B3C3D3E3F404141424344454647 +48494A4B4C4D4E4F50515253545556565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E +6F70717273747576777879797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495 +969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAE +> +1 %_Br +[ +0 0 0 0 1 33.3333 0 %_BS +%_0 0 0 0 1 33.3333 0 Bs +0.5059 0.1647 0.0353 0.0039 1 50 35.955 %_BS +%_0.5059 0.1647 0.0353 0.0039 1 50 35.955 Bs +0.9294 0.5843 0.0235 0 1 51.9231 85.3932 %_BS +%_0.9294 0.5843 0.0235 0 1 51.9231 85.3932 Bs +0.9216 0.7569 0.4471 0.6824 1 51.9231 100 %_BS +%_0.9216 0.7569 0.4471 0.6824 1 51.9231 100 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 35) +(Unnamed gradient 35) 0 2 Bd +[ +0 +< +666564636261605F5E5D5C5B5A5958565554535251504F4E4D4C4B4A49484746454443424140 +> +1 +0 +1 %_Br +[ +0 0.25 1 0 1 50 76.0736 %_BS +%_0 0.25 1 0 1 50 76.0736 Bs +0 0.4 1 0 1 50 23.3129 %_BS +%_0 0.4 1 0 1 50 23.3129 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 4) +(Unnamed gradient 4) 1 2 Bd +[ +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F8081 +> +< +0000010101020202030303040404050505060606070707070808080909090A0A0A0B0B0B0C0C0C0D +0D0D0E0E0E0F0F0F101010111111121212131313141414151515151616161717171818181919191A +1A1A1B1B1B1C1C1C1D1D1D1E1E1E1F1F1F2020202121212222222323232324242425252526262627 +27272828282929292A2A +> +< +00000000000000000101010101010101010101010101020202020202020202020202020203030303 +03030303030303030303030404040404040404040404040404050505050505050505050505050506 +06060606060606060606060606060707070707070707070707070707080808080808080808080808 +08080909090909090909 +> +< +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101 +> +1 %_Br +[ +0 0 0 0 1 50 0 %_BS +%_0 0 0 0 1 50 0 Bs +0.5059 0.1647 0.0353 0.0039 1 50 100 %_BS +%_0.5059 0.1647 0.0353 0.0039 1 50 100 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 41) +(Unnamed gradient 41) 1 2 Bd +[ +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1E1F202122232425262728 +292A2B2C2D2E2F303132333435363738393A +> +< +000101020303040405060607080809090A0B0B0C0D0D0E0F0F101011121213141415151617171819 +191A1B1B1C1C1D1E1E1F2020212122232324 +> +< +00000001010101020202020303030303040404040505050505060606060707070708080808080909 +09090A0A0A0A0A0B0B0B0B0C0C0C0C0D0D0D +> +< +00000000000000000000000000000001010101010101010101010101010101010101010101010101 +010101020202020202020202020202020202 +> +1 %_Br +[ +0 0 0 0 1 50 0 %_BS +%_0 0 0 0 1 50 0 Bs +0.2275 0.1412 0.051 0.0078 1 50 100 %_BS +%_0.2275 0.1412 0.051 0.0078 1 50 100 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 5) +(Unnamed gradient 5) 1 4 Bd +[ +< +000102030405060708090A0B0C0D0E0F10111212131415161718191A1B1C1D1D1E1F202122232425 +25262728292A2B2B2C2D2E2F303031323334353536373839393A3B3C3C3D3E3F3F40414242434445 +4546474848494A4A4B4C4D4D4E4F4F5051515253535455555656575858595A5A5B5B5C5D5D5E5E5F +5F6061616262636364646566666767686869696A6A6B6B6C6C6D6D6D6E6E6F6F7070717171727273 +737374747575757676767777777878787979797A7A7A7B7B7B7B7C7C7C7C7D7D7D7D7E7E7E7E7E7F +7F7F7F7F8080808080808080818181818181818181 +> +< +000001010102020203030304040404050505060606070707080808080909090A0A0A0A0B0B0B0C0C +0C0C0D0D0D0E0E0E0E0F0F0F10101010111111111212121213131313141414141515151516161616 +171717171818181818191919191A1A1A1A1A1B1B1B1B1C1C1C1C1C1D1D1D1D1D1E1E1E1E1E1F1F1F +1F1F1F20202020202121212121212222222222222323232323232324242424242424252525252525 +25262626262626262627272727272727272728282828282828282828282929292929292929292929 +292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A +> +< +00000000000000000101010101010101010101010101010202020202020202020202020202020203 +03030303030303030303030303030303040404040404040404040404040404040404050505050505 +05050505050505050505050505050606060606060606060606060606060606060606060607070707 +07070707070707070707070707070707070707070707070808080808080808080808080808080808 +08080808080808080808080808080808080808080909090909090909090909090909090909090909 +090909090909090909090909090909090909090909 +> +< +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101 +> +1 %_Br +< +8182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8 +A9AAABACADAEAFB0B1B2B3B4B5B6B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1 +D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECED +> +< +2A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F5051 +52535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576777879 +7A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495 +> +< +09090909090909090909090909090909090908080808080808080808080808080808080808080808 +08080808080808080808080808080707070707070707070707070707070707070707070707070707 +07070707070707070706060606060606060606060606060606060606 +> +< +01010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000 +> +1 %_Br +< +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC +ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC +ECECECECECECECECECECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB +EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB +> +< +959595969696969697979797979898989899999999999A9A9A9A9B9B9B9B9B9C9C9C9C9D9D9D9D9E +9E9E9E9E9F9F9F9FA0A0A0A0A1A1A1A1A2A2A2A2A2A3A3A3A3A4A4A4A4A5A5A5A5A6A6A6A6A7A7A7 +A7A7A8A8A8A8A9A9A9A9AAAAAAAAABABABABACACACACADADADADAEAEAEAEAFAFAFAFB0B0B0B0B1B1 +B1B1B1B2B2B2B2B3B3B3B3B4B4B4B4B5B5B5B5B6B6B6B6B7B7B7B7B8B8B8B8B9B9B9B9BABABABABB +BBBBBBBCBCBCBCBDBDBDBDBEBEBEBEBFBFBFBFC0C0C0C1C1C1 +> +< +06060707080809090A0A0B0B0C0D0D0E0E0F0F1010111112131314141515161617181819191A1A1B +1B1C1D1D1E1E1F1F20212122222324242525262627282829292A2B2B2C2C2D2D2E2F2F3030313232 +3333343535363637383839393A3A3B3C3C3D3D3E3F3F404041424243434445454646474848494A4A +4B4B4C4D4D4E4E4F50505151525353545455565657585859595A5B5B5C5C5D5E5E5F5F6061616263 +63646465666667676869696A6B6B6C6C6D6E6E6F7070717172 +> +< +0001010203040505060708090A0B0B0C0D0E0F10111212131415161718191A1A1B1C1D1E1F202122 +23242425262728292A2B2C2D2E2F30313132333435363738393A3B3C3D3E3F404141424344454647 +48494A4B4C4D4E4F50515253545556565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E +6F70717273747576777879797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495 +969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAE +> +1 %_Br +[ +0 0 0 0 1 33.3333 0 %_BS +%_0 0 0 0 1 33.3333 0 Bs +0.5059 0.1647 0.0353 0.0039 1 50 56.7416 %_BS +%_0.5059 0.1647 0.0353 0.0039 1 50 56.7416 Bs +0.9294 0.5843 0.0235 0 1 51.9231 85.3932 %_BS +%_0.9294 0.5843 0.0235 0 1 51.9231 85.3932 Bs +0.9216 0.7569 0.4471 0.6824 1 51.9231 100 %_BS +%_0.9216 0.7569 0.4471 0.6824 1 51.9231 100 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 51) +(Unnamed gradient 51) 0 2 Bd +[ +< +1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F +1F202020202020202021212121212121222222222223232323232324242424252525252526262626 +27272728282828292929292A2A2A2B2B2B2C2C2C2D2D2D2E2E2E2F2F2F3030313131323233333334 +3435353636363737383839393A3A3B3B3C3C3C3D3E3E3F3F40404141424243434444454646474748 +49494A4A4B4C4C4D4D4E4F4F5051515253535455555657575859595A5B5C5C5D5E5F5F6061626263 +646566666768696A6A6B6C6D6E6E6F70717273747475767778797A7B7C7C7D7E7F80818283848586 +8788898A8B8C8D8E +> +< +16161616161616161616161616161616161616161616161616161616161616171717171717171717 +17171718181818181818181819191919191919191A1A1A1A1A1A1B1B1B1B1B1B1C1C1C1C1C1D1D1D +1D1D1E1E1E1E1E1F1F1F1F2020202021212121222222222323232424242525252526262627272728 +28282929292A2A2A2B2B2C2C2C2D2D2D2E2E2F2F2F30303131323232333334343535353636373738 +3839393A3A3B3B3C3C3D3D3E3E3F3F4040414142434344444545464747484849494A4B4B4C4C4D4E +4E4F5050515252535354555556575758595A5A5B5C5C5D5E5E5F606161626364646566676768696A +6A6B6C6D6E6E6F70 +> +< +11111111111111111111111111111111111111111111111111111111111111121212121212121212 +12121213131313131313131314141414141414151515151515161616161616171717171718181818 +18191919191A1A1A1A1A1B1B1B1B1C1C1C1D1D1D1D1E1E1E1F1F1F1F202020212121222222232323 +242424252525262627272728282929292A2A2B2B2B2C2C2D2D2E2E2E2F2F30303131323233333434 +353536363737383839393A3A3B3B3C3D3D3E3E3F3F404041424243434445454646474848494A4A4B +4C4C4D4E4E4F5050515252535454555656575859595A5B5C5C5D5E5F5F6061626263646566666768 +696A6A6B6C6D6E6F +> +< +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000010101010101010101010101010101010101010101010101010101010102020202020202 +02020202020202020202020203030303030303030303030303030304040404040404040404040405 +05050505050505050505050606060606060606060607070707070707070708080808080808080809 +090909090909090A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0C0C0C0C0C0C0C0D0D0D0D0D0D0D0E0E0E0E +0E0E0E0F0F0F0F0F0F10101010101011111111111112121212121313131313131414141414151515 +1515161616161617 +> +1 %_Br +[ +0.555993 0.439094 0.433417 0.088563 1 50 100 %_BS +%_0.555993 0.439094 0.433417 0.088563 1 50 100 Bs +0.115175 0.08484 0.065003 0 1 73.0337 0 %_BS +%_0.115175 0.08484 0.065003 0 1 73.0337 0 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 54) +(Unnamed gradient 54) 0 2 Bd +[ +< +1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F202020202020202121 +2121212122222222222323232323242424242525252526262627272727282828292929292A2A2A2B +2B2B2C2C2C2D2D2E2E2E2F2F2F30303131313232333333343435353636373737383839393A3A3B3B +3C3C3D3D3E3E3F3F4040414142434344444545464747484849494A4B4B4C4C4D4E4E4F5050515252 +535354555556575858595A5A5B5C5C5D5E5F5F606161626364646566676768696A6B6B6C6D6E6F6F +7071727373747576777878797A7B7C7D7E7F7F80818283848586878888898A8B8C8D8E8F90919293 +9495969798999A9B9C9D +> +< +16161616161616161616161616161616161616161616171717171717171717171718181818181818 +181919191919191A1A1A1A1A1A1B1B1B1B1B1C1C1C1C1C1D1D1D1D1D1E1E1E1E1F1F1F1F20202020 +212121222222222323232424242525252626262727272828282929292A2A2A2B2B2C2C2C2D2D2D2E +2E2F2F30303031313232323333343435353636373737383839393A3A3B3B3C3C3D3D3E3E3F3F4040 +414242434344444545464647484849494A4A4B4C4C4D4D4E4F4F5050515252535454555656575758 +59595A5B5B5C5D5D5E5F6060616262636464656667676869696A6B6C6C6D6E6F6F70717273737475 +76767778797A7A7B7C7D +> +< +11111111111111111111111111111111111111111111121212121212121212121313131313131313 +1414141414141515151515151616161616171717171718181818191919191A1A1A1A1B1B1B1B1C1C +1C1D1D1D1D1E1E1E1F1F1F2020202121212222222323232424242525262626272728282829292A2A +2A2B2B2C2C2D2D2E2E2E2F2F30303131323233333434353536363737383839393A3A3B3B3C3C3D3E +3E3F3F40404141424343444445464647474849494A4B4B4C4C4D4E4E4F5050515252535454555656 +575858595A5B5B5C5D5D5E5F60606162636364656666676869696A6B6C6C6D6E6F70707172737475 +75767778797A7A7B7C7D +> +< +00000000000000000000000000000000000000000000000000000101010101010101010101010101 +01010101010202020202020202020202020203030303030303030303030404040404040404040505 +050505050505060606060606060607070707070707080808080808080909090909090A0A0A0A0A0A +0B0B0B0B0B0B0C0C0C0C0C0D0D0D0D0D0E0E0E0E0E0F0F0F0F0F1010101010111111111112121212 +131313131414141414151515151616161617171717181818181919191A1A1A1A1B1B1B1B1C1C1C1D +1D1D1D1E1E1E1F1F1F1F202020212121222222222323232424242525252626262727272828282929 +292A2A2A2B2B2B2C2C2C +> +1 %_Br +[ +0.614191 0.489448 0.489815 0.173739 1 50 100 %_BS +%_0.614191 0.489448 0.489815 0.173739 1 50 100 Bs +0.115175 0.08484 0.065003 0 1 70.2247 0 %_BS +%_0.115175 0.08484 0.065003 0 1 70.2247 0 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Unnamed gradient 83) +(Unnamed gradient 83) 1 2 Bd +[ +< +A6A5A4A3A2A1A09F9E9D9C9B9A9897969594939291908F8E8D8C +> +0 +1 +< +1A1817161514131211100F0E0D0C0B0A09080706050403020100 +> +1 %_Br +[ +0.65 0 1 0.1 1 50 34.7917 %_BS +%_0.65 0 1 0.1 1 50 34.7917 Bs +0.55 0 1 0 1 50 76.0736 %_BS +%_0.55 0 1 0 1 50 76.0736 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Verblassender Himmel) +(Verblassender Himmel) 0 2 Bd +[ +0.8 +0.4 +0 +< +00 +> +1 %_Br +[ +0.8 0.4 0 0.000031 1 50 100 %_BS +%_0.8 0.4 0 0.000031 1 50 100 Bs +0.8 0.4 0 0 1 50 0 %_BS +%_0.8 0.4 0 0 1 50 0 Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Wei\737, Schwarz) +(Wei\737, Schwarz) 0 2 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +[ +0 0 0 1 1 50 100 %_BS +%_0 0 0 1 1 50 100 Bs +0 0 0 0 1 50 0 %_BS +%_0 0 0 0 1 50 0 Bs +BD +%AI5_EndGradient +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI3_BeginPattern: (Pompadour) +(Pompadour) 218.1958 183.1699 385.1958 350.1699 [ +%AI3_Tile +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +407.2622 96.3711 m +407.3872 96.3711 407.4927 96.4629 407.5103 96.585 c +409.8911 112.5996 419.1646 125.9746 431.9028 133.9814 c +432.0063 134.0449 432.0493 134.1758 432.0044 134.29 c +431.9575 134.4023 431.8384 134.4688 431.7173 134.4443 c +421.2466 132.3398 411.9243 126.5811 405.27 118.4141 C +400.645 131.7891 390.0337 140.418 376.9692 144.0654 C +381.7778 149.6582 379.2622 157.5986 371.8501 158.9023 c +371.7368 158.9229 371.6255 158.8643 371.5767 158.7607 c +371.5278 158.6563 371.5552 158.5322 371.6431 158.46 c +375.6157 155.1143 374.1626 147.04 362.3052 147.04 c +354.5103 147.04 349.4849 150.2188 349.4849 154.5254 c +349.4849 157.9102 352.5474 159.7559 355.1255 159.7559 c +359.5415 159.7559 362.0649 155.7949 360.1685 152.2129 c +360.1138 152.1104 360.1353 151.9814 360.2231 151.9033 c +360.311 151.8271 360.4399 151.8184 360.5376 151.8857 c +362.7856 153.4492 364.356 155.5059 364.356 158.6768 c +364.356 164.0635 359.3306 169.8066 351.0239 169.8066 c +342.1021 169.8066 334.0005 162.9355 334.0005 154.5254 c +334.0005 142.71 344.0493 137.0918 354.6138 136.0918 C +350.2485 134.4189 346.981 129.5664 v +346.9146 129.4697 346.9243 129.3418 347.0024 129.2559 c +347.0806 129.1689 347.2056 129.1475 347.3091 129.2012 c +353.1392 132.2822 359.7954 133.9453 366.811 133.9453 c +386.4321 133.9453 403.3579 117.541 407.0103 96.5801 c +407.0317 96.4561 407.1392 96.3691 407.2622 96.3711 c +f +483.9399 148.7773 m +488.5493 156.4551 490.1919 169.627 485.897 179.46 c +485.8481 179.5703 485.8833 179.6992 485.9829 179.7686 c +486.0806 179.8379 486.2153 179.8281 486.3032 179.7461 c +491.1099 175.1914 495.2427 164.5684 493.0083 152.2871 C +496.106 149.8936 498.0532 147.5176 499.522 144.335 c +499.5688 144.2314 499.5415 144.1104 499.4556 144.0352 c +499.3696 143.9629 499.2446 143.9551 499.1489 144.0186 c +494.1528 147.3809 489.686 148.5283 483.9399 148.7773 C +f +473.3306 28.9707 m +473.4009 28.8672 473.3833 28.7266 473.2915 28.6426 c +473.1978 28.5586 473.0571 28.5547 472.9595 28.6348 c +466.145 34.1621 457.0845 37.6895 445.9243 37.6895 c +418.3521 37.6895 400.9517 21.1719 398.2173 3.76367 c +398.1997 3.65234 398.1099 3.56641 397.9985 3.55078 c +397.8872 3.53711 397.7778 3.59766 397.7329 3.70117 c +395.0083 9.95898 393.3657 19.0352 401.7817 31.209 c +406.8169 38.4941 412.9106 43.5098 412.9106 50.0273 c +412.9106 54.2852 410.6509 57.1797 407.2231 57.1797 c +403.6177 57.1797 401.2876 54.0918 401.2876 50.625 c +401.2876 48.877 401.7915 47.1465 402.6958 45.5801 c +402.7544 45.4766 402.7368 45.3496 402.6509 45.2676 c +402.5649 45.1875 402.436 45.1758 402.3384 45.2402 c +399.3657 47.1777 396.7114 50.6367 396.7114 55.5117 c +396.7114 62.6836 402.8442 68.6816 411.1802 68.6816 c +420.1548 68.6816 427.5044 61.6328 427.5044 51.4922 c +427.5044 48.0156 426.5142 43.8242 424.0415 40.3613 C +427.4263 43.1875 429.2329 45.1875 430.7192 49.5117 C +441.1196 51.3223 452.2251 49.6602 461.0493 43.8691 C +461.3052 49.9707 463.3013 55.0605 467.3931 59.1875 c +467.4771 59.2715 467.6079 59.2852 467.7075 59.2227 c +467.8091 59.1582 467.8521 59.0332 467.811 58.9219 c +464.9341 50.9199 466.8657 38.7246 473.3306 28.9707 c +f +560.6978 35.6055 m +558.4517 30.8066 553.2388 28.1211 547.2368 28.0117 c +547.1118 28.0098 547.0044 28.0977 546.9829 28.2188 c +546.9595 28.3418 547.0278 28.4609 547.1431 28.5039 c +549.1899 29.2578 550.8052 30.5762 551.6646 32.4141 c +553.8774 37.1426 550.2974 43.5098 543.6509 46.7832 c +543.5728 46.8223 543.52 46.8965 543.5103 46.9824 c +543.5005 47.0684 543.5337 47.1523 543.6001 47.207 c +547.8911 50.7266 553.0122 57.2617 553.0122 70.627 c +553.0122 89.3086 540.8579 107.0898 524.7368 107.0898 c +515.5239 107.0898 508.104 100.6934 504.2661 91.0977 C +508.4868 96.8564 514.2446 101.2051 522.1782 101.2051 c +533.8208 101.2051 543.0337 88.7969 543.0337 70.8828 c +543.0337 53.9941 531.1333 34.2891 515.2681 34.2891 c +506.5669 34.2891 500.0435 41.3281 500.0435 50.4121 c +500.0435 58.4746 505.2896 63.0781 511.1763 63.0781 c +515.6099 63.0781 518.6685 59.9473 519.6196 56.5527 c +519.6509 56.4375 519.6001 56.3164 519.4927 56.2598 c +519.3872 56.2051 519.2583 56.2305 519.1802 56.3223 c +518.4282 57.2168 517.2837 57.9609 515.5259 57.9609 c +512.5825 57.9609 511.0474 55.4316 511.0474 53.6113 c +511.0474 50.1563 513.606 47.7246 517.4458 47.7246 c +522.6899 47.7246 526.7856 53.4824 526.7856 60.9023 c +526.7856 70.1152 517.9556 78.5586 509.1274 78.5586 c +500.106 78.5586 490.4478 70.5 490.4478 55.5293 c +490.4478 40.8164 500.4282 23.9258 516.2935 23.9258 c +525.5435 23.9258 533.4048 28.0957 539.436 35.002 c +539.5161 35.0918 539.6489 35.1152 539.7544 35.0547 c +539.8599 34.9941 539.9067 34.8672 539.8677 34.752 c +535.4341 21.8164 537.9126 9.60742 544.688 9.60742 c +548.0024 9.60742 549.6899 11.9863 549.6899 14.5234 c +549.6899 17.1309 547.7915 19.2852 544.7212 19.6777 c +544.6001 19.6934 544.5063 19.793 544.4985 19.9141 c +544.4927 20.0352 544.5708 20.1465 544.6899 20.1758 c +551.5044 21.9395 558.5142 18.2285 558.5142 11.1328 c +558.5142 4.85547 553.1372 0.001953 546.1021 0.001953 c +535.4653 0.001953 530.3774 11.2715 532.6431 21.5371 C +527.1841 14.4922 519.0903 8.70117 507.4653 8.70117 c +483.9224 8.70117 472.0239 35.5703 472.0239 53.6113 c +472.0239 69.9883 475.3501 80.4785 482.2603 88.5391 C +474.1978 82.3984 470.8716 75.6172 469.3384 66.2773 C +463.1958 57.832 447.2036 57.832 v +440.5161 57.832 434.2739 60.3086 429.4302 64.998 C +429.4282 64.9961 429.4263 64.9941 429.4243 64.9902 C +429.3892 65.0313 429.3501 65.0703 429.3149 65.1094 C +428.9946 65.4238 428.6802 65.748 428.3716 66.082 C +423.3091 70.9316 413.1802 75.4785 403.9399 71.6797 c +403.8345 71.6367 403.7134 71.6699 403.6431 71.7578 c +403.5728 71.8477 403.5708 71.9727 403.6392 72.0645 c +408.0454 78.0898 415.6626 80.0059 421.3169 79.1309 C +420.272 82.8457 419.6938 87.0117 419.6938 91.6094 c +419.6938 108.0137 428.4927 119.5801 438.106 125.2109 C +434.9517 129.0137 435.5962 134.9883 439.1372 139.0449 c +439.2173 139.1357 439.3481 139.1582 439.4536 139.0996 c +439.5571 139.041 439.606 138.918 439.5708 138.8018 c +437.8403 133.2695 442.9634 128.6523 449.7524 128.9004 c +449.8755 128.9033 449.9829 128.8193 450.0103 128.6992 c +450.0356 128.5801 449.9712 128.457 449.8579 128.4111 c +439.7212 124.248 433.0005 115.4316 433.0005 104.4033 c +433.0005 92.8906 439.9087 83.5488 451.0415 83.5488 c +460.1255 83.5488 469.2095 91.8672 469.2095 102.2285 c +469.2095 110.2891 464.731 115.0225 458.9731 115.0225 c +453.9849 115.0225 450.0181 111.5684 450.0181 107.4736 c +450.0181 101.6211 456.6001 99.499 460.1118 104.1309 c +460.1821 104.2227 460.3032 104.2559 460.4087 104.2129 c +460.5161 104.1699 460.5806 104.0625 460.5669 103.9482 c +460.0435 99.5586 456.8149 95.4482 451.8091 95.4482 c +447.2036 95.4482 442.4692 99.2861 442.4692 107.4746 c +442.4692 117.1982 451.8071 127.0508 467.1606 127.0508 c +488.1431 127.0508 499.5317 103.3809 489.2974 84.4453 C +494.5415 90.459 499.2759 96.8555 499.2759 108.2432 c +499.2759 129.75 478.0122 144.291 452.9224 135.7441 c +452.8032 135.7021 452.6724 135.7559 452.6157 135.8672 c +452.5571 135.9785 452.5884 136.1143 452.6899 136.1895 c +459.6958 141.2979 467.0337 148.8262 467.0337 161.4668 c +467.0337 174.6475 458.3345 183.9854 444.772 183.9854 c +434.2798 183.9854 427.6274 177.5879 427.6274 170.04 c +427.6274 164.2822 431.3462 159.6768 437.7349 159.6768 c +447.2466 159.6768 450.481 170.0195 445.5591 174.6445 c +445.4751 174.7236 445.4556 174.8516 445.5103 174.9521 c +445.5669 175.0547 445.6841 175.1055 445.7974 175.0762 c +450.5669 173.8398 455.1353 169.0068 455.1353 161.7236 c +455.1353 149.1855 443.4927 140.8682 430.6978 140.8682 c +424.7017 140.8682 418.8989 142.623 414.2271 145.9102 C +414.7778 150.0635 413.3579 154.6602 411.2603 157.752 C +413.2095 150.8848 411.1021 139.5732 400.5864 139.5732 c +394.6958 139.5732 390.8013 144.1025 390.8013 149.4551 c +390.8013 155.7793 396.147 158.7314 400.4966 158.125 c +400.6118 158.1104 400.7017 158.0186 400.7134 157.9023 c +400.7271 157.7891 400.6606 157.6797 400.5532 157.6367 c +398.9673 157.0293 397.6118 155.3691 397.6118 153.373 c +397.6118 150.873 399.52 149.3906 401.52 149.3906 c +404.8149 149.3906 406.645 153.0605 405.4927 157.1104 C +405.5044 157.1104 L +404.4321 159.9473 403.8286 163.1152 403.8286 166.6055 c +403.8286 183.3672 422.0103 199.3398 444.9497 199.3398 c +469.1626 199.3398 482.0044 182.0664 482.0044 164.2822 c +482.0044 154.7461 478.4224 147.5225 473.8149 142.915 C +493.7368 145.0332 506.313 136.5176 513.0942 124.2354 C +508.6157 120.3975 506.9536 114.7676 Y +512.3267 121.8057 521.5376 127.9453 534.4595 127.9453 c +554.0356 127.9453 569.3911 108.7539 569.3911 88.1563 c +569.3911 75.084 564.5884 62.375 554.8267 53.9102 C +560.8638 48.8809 563.4731 41.5391 560.6978 35.6055 c +f +*U +*u +482.2114 160.9053 m +482.1782 160.7852 482.2388 160.6582 482.3521 160.6094 c +497.1763 154.0957 507.6372 141.6289 512.0063 127.2324 c +512.0415 127.1152 512.1548 127.0391 512.2778 127.0527 c +512.3989 127.0664 512.4946 127.166 512.5024 127.2871 c +513.229 137.9434 510.1274 148.4531 504.0005 157.0234 C +518.1216 157.9648 529.2407 165.9297 536.1997 177.5723 C +540.3286 171.46 548.6509 171.7969 551.8599 178.6035 c +551.9106 178.708 551.8833 178.832 551.7954 178.9063 c +551.7075 178.9805 551.5806 178.9873 551.4868 178.9219 c +547.2134 175.9688 539.8071 179.498 542.9282 190.9355 c +544.981 198.4561 549.3716 202.4668 553.5259 201.333 c +556.7915 200.4414 557.7661 197.002 557.0864 194.5146 c +555.9243 190.2539 551.438 188.8623 548.481 191.6357 c +548.397 191.7158 548.2681 191.7285 548.1704 191.6641 c +548.0728 191.5986 548.0298 191.4775 548.0688 191.3662 c +548.9868 188.7852 550.5571 186.7285 553.6157 185.8936 c +558.811 184.4756 565.6743 187.8115 567.8618 195.8252 c +570.2114 204.4316 565.7153 214.0566 557.604 216.2715 c +546.2036 219.3818 538.1392 211.166 534.3931 201.2383 C +533.9263 205.8896 530.1079 210.3203 v +530.0317 210.4092 529.9048 210.4336 529.8013 210.3818 c +529.6978 210.3291 529.6431 210.2129 529.6665 210.0996 c +531.106 203.6641 530.9575 196.8047 529.1099 190.0361 c +523.9438 171.1074 503.6626 159.0977 482.479 161.0938 c +482.354 161.1055 482.2407 161.0254 482.2114 160.9053 c +f +512.5806 73.1348 m +518.7739 66.666 531.0493 61.6133 541.6646 63.168 c +541.7856 63.1855 541.9009 63.1172 541.9399 63.0039 c +541.981 62.8906 541.936 62.7637 541.8345 62.7012 c +536.1743 59.2617 524.8384 58.0723 513.5786 63.4609 C +510.4536 61.1035 507.6489 59.8496 504.1919 59.2715 c +504.0806 59.2539 503.9692 59.3125 503.9204 59.4141 c +503.8735 59.5156 503.8989 59.6387 503.9849 59.7148 c +508.5454 63.6484 510.8286 67.6563 512.5806 73.1348 C +f +399.7935 114.9121 m +399.6763 114.8711 399.5454 114.9258 399.4888 115.0371 c +399.4321 115.1484 399.4653 115.2852 399.5688 115.3594 c +406.6938 120.4785 412.4829 128.291 415.4204 139.0566 c +422.6802 165.6563 411.3267 186.792 395.2544 194.0146 c +395.1509 194.0605 395.0903 194.1689 395.106 194.2803 c +395.1216 194.3926 395.2095 194.4814 395.3208 194.4971 c +402.0747 195.4785 411.2622 194.6729 420.7915 183.3486 c +426.4927 176.5732 429.7271 169.373 436.0142 167.6563 c +440.1216 166.5352 443.5103 167.9551 444.4126 171.2617 c +445.3618 174.7393 442.9966 177.8018 439.6528 178.7148 c +437.9653 179.1738 436.1626 179.1436 434.4146 178.6836 c +434.2993 178.6533 434.1821 178.7051 434.1255 178.8086 c +434.0708 178.9121 434.0923 179.04 434.1802 179.1172 c +436.8325 181.4746 440.8677 183.125 445.5708 181.8408 c +452.4907 179.9531 456.6606 172.457 454.4673 164.415 c +452.104 155.7578 443.3696 150.5234 433.5864 153.1934 c +430.2329 154.1084 426.4497 156.168 423.7603 159.4648 C +425.5942 155.4551 427.0493 153.1855 430.8286 150.6133 C +429.8364 140.1035 425.3091 129.8271 417.4009 122.8389 C +423.2192 120.9863 427.604 117.7207 430.5083 112.6855 c +430.5669 112.582 430.5454 112.4531 430.4595 112.373 c +430.3696 112.293 430.2388 112.2832 430.1411 112.3535 c +423.1802 117.2344 410.9048 118.582 399.7935 114.9121 c +f +383.1919 28.8809 m +379.1548 32.3105 377.936 38.0469 379.4106 43.8672 c +379.4419 43.9883 379.5552 44.0684 379.6782 44.0566 c +379.8032 44.0469 379.8989 43.9492 379.9106 43.8281 c +380.0981 41.6543 380.9458 39.748 382.4927 38.4355 c +386.4712 35.0566 393.5571 36.834 398.4634 42.3828 c +398.522 42.4492 398.6079 42.4805 398.6938 42.4668 c +398.7798 42.4531 398.8521 42.3984 398.8872 42.3203 c +401.1528 37.2539 406.1079 30.5938 419.0005 27.0742 c +437.0239 22.1563 457.3794 29.1992 461.6235 44.752 c +464.0493 53.6406 459.8306 62.4824 451.5845 68.7109 C +456.0298 63.123 458.7075 56.4238 456.6177 48.7695 c +453.5532 37.5391 439.1567 31.918 421.8755 36.6348 c +405.5825 41.0801 389.7075 57.748 393.8833 73.0547 c +396.1743 81.4492 404.6821 85.8887 413.4458 83.4961 c +421.2231 81.375 424.2837 75.1016 422.7329 69.4219 c +421.5669 65.1445 417.7407 63.0195 414.2153 62.9941 c +414.0962 62.9941 413.9927 63.0762 413.9653 63.1934 c +413.9419 63.3105 413.9985 63.4277 414.1079 63.4785 c +415.1704 63.9688 416.188 64.877 416.6509 66.5742 c +417.4263 69.4121 415.3911 71.5605 413.6353 72.0391 c +410.3032 72.9492 407.2837 71.1211 406.272 67.416 c +404.8911 62.3574 409.3677 56.8906 416.5239 54.9355 c +425.4126 52.5117 435.8833 58.8066 438.2075 67.3223 c +440.5825 76.0254 435.3501 87.4648 420.9087 91.4063 c +406.7153 95.2813 387.7935 90.0996 383.6157 74.793 c +381.1802 65.8691 383.1333 57.1875 388.2075 49.5508 c +388.2739 49.4512 388.2622 49.3164 388.1763 49.2305 c +388.0884 49.1445 387.9536 49.1328 387.854 49.2012 c +376.5415 56.8828 364.1118 57.707 362.3267 51.1699 c +361.4536 47.9727 363.3052 45.7188 365.7524 45.0508 c +368.2681 44.3652 370.8462 45.6289 372.0337 48.4883 c +372.0806 48.5996 372.2017 48.6641 372.3208 48.6406 c +372.438 48.6133 372.5259 48.5098 372.522 48.3867 c +372.4302 41.3477 367.0044 35.5625 360.1587 37.4316 c +354.1021 39.084 350.8364 45.5488 352.688 52.3359 c +355.4888 62.5977 367.6997 64.5391 377.0063 59.6504 C +371.647 66.7715 368.1919 76.1035 371.2524 87.3184 c +377.4517 110.0313 406.5044 114.4355 423.9087 109.6855 c +439.7075 105.373 448.9517 99.4023 454.9087 90.6152 C +451.1079 100.0098 445.4419 105.0039 436.8345 108.9434 C +430.3052 117.0918 434.5161 132.5195 v +436.2759 138.9707 440.3091 144.3418 446.1079 147.7793 C +446.1079 147.7813 446.106 147.7842 446.1021 147.7871 C +446.1509 147.8105 446.1997 147.8379 446.2466 147.8613 C +446.6333 148.0879 447.0298 148.3057 447.4321 148.5146 C +453.4438 152.1211 460.4966 160.6973 459.2661 170.6113 c +459.2524 170.7236 459.3149 170.832 459.4185 170.877 c +459.5239 170.9219 459.645 170.8896 459.7153 170.8018 c +464.3677 164.9629 464.2114 157.1104 461.8794 151.8857 C +465.7368 151.915 469.9087 151.375 474.3442 150.165 c +490.1685 145.8457 499.0122 134.3135 501.9126 123.5566 C +506.4106 125.5977 512.0063 123.4043 514.9888 118.9199 c +515.0532 118.8184 515.0415 118.6855 514.9575 118.5996 c +514.8735 118.5156 514.7407 118.5 514.6392 118.5645 c +509.7583 121.6914 503.9556 117.9648 502.4048 111.3496 c +502.3774 111.2305 502.2681 111.1484 502.145 111.1543 c +502.022 111.1602 501.9204 111.2539 501.9067 111.377 c +500.5591 122.251 493.8228 131.0566 483.1841 133.96 c +472.0767 136.9922 461.2446 132.7852 458.3149 122.0469 c +455.9224 113.2832 461.5571 102.3301 471.5513 99.6016 c +479.3286 97.4785 485.0747 100.5527 486.5903 106.1074 c +487.9048 110.9199 485.6157 115.6563 481.6665 116.7344 c +476.0181 118.2754 472.2388 112.4844 475.7837 107.877 c +475.8521 107.7852 475.854 107.6602 475.7837 107.5684 c +475.7153 107.4766 475.5923 107.4434 475.4868 107.4863 c +471.3892 109.1465 468.2739 113.3418 469.5923 118.1729 c +470.8052 122.6152 475.7544 126.1729 483.6548 124.0166 c +493.0356 121.457 500.0806 109.8555 496.0376 95.043 c +490.5142 74.7988 464.6802 70.0449 449.1079 84.9043 C +453.5278 78.2617 458.4517 72.0098 469.438 69.0117 c +490.188 63.3496 509.813 80.0332 508.1724 106.4902 c +508.1646 106.6152 508.2505 106.7285 508.3735 106.7539 c +508.4946 106.7813 508.6196 106.7129 508.6646 106.5977 c +511.7466 98.4922 517.0786 89.4316 529.2739 86.1035 c +541.9888 82.6328 553.2876 88.5664 556.8599 101.6504 c +559.6216 111.7734 555.2017 119.875 547.9204 121.8623 c +542.3657 123.3789 536.9419 121.0039 535.2603 114.8398 c +532.7563 105.6641 541.8833 99.8203 547.6411 103.3516 c +547.7388 103.4121 547.8677 103.3965 547.9497 103.3164 c +548.0337 103.2363 548.0513 103.1094 547.9927 103.0078 c +545.5454 98.7324 539.6802 95.5977 532.6548 97.5156 c +520.5571 100.8164 515.6001 114.2383 518.9673 126.5811 c +520.5454 132.3652 523.7681 137.502 528.1685 141.1426 C +532.0298 139.5186 536.8384 139.6777 540.3735 140.8867 C +533.2349 140.8154 522.8794 145.8262 525.647 155.9707 c +527.1978 161.6533 532.5923 164.2188 537.7563 162.8086 c +543.8579 161.1436 545.2974 155.21 543.5688 151.1729 c +543.522 151.0654 543.4106 151.0039 543.2974 151.0225 c +543.1821 151.04 543.0942 151.1318 543.0825 151.2471 c +542.9146 152.9375 541.6685 154.6836 539.7446 155.208 c +537.3325 155.8662 535.3989 154.415 534.8735 152.4854 c +534.0044 149.3066 537.063 146.5752 541.2739 146.6211 C +541.27 146.6094 L +544.2896 146.8984 547.5044 146.6445 550.8716 145.7266 c +567.0415 141.3125 577.6646 119.5674 571.6235 97.4375 c +565.2485 74.0781 545.2056 66.2363 528.0474 70.9199 c +518.8481 73.4297 512.8228 78.7871 509.5903 84.4453 C +506.3892 64.668 494.8618 54.7793 481.229 51.4707 C +478.7056 56.8008 473.7114 59.8867 Y +479.0864 52.8496 482.5845 42.3477 479.1821 29.8809 c +474.0278 10.9961 451.4712 1.23438 431.6001 6.6582 c +418.9888 10.0996 407.9927 18.0801 402.397 29.7266 C +395.9556 25.2266 388.186 24.6406 383.1919 28.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +530.1294 102.9688 m +530.0044 102.9688 529.8989 102.877 529.8794 102.7539 c +527.5005 86.7402 518.2271 73.3652 505.4888 65.3594 c +505.3853 65.2949 505.3403 65.1641 505.3872 65.0508 c +505.4321 64.9375 505.5532 64.8711 505.6724 64.8965 c +516.145 67 525.4653 72.7598 532.1216 80.9277 C +536.7466 67.5508 547.3579 58.9219 560.4224 55.2734 C +555.6138 49.6816 558.1294 41.7402 565.5415 40.4375 c +565.6548 40.416 565.7661 40.4746 565.8149 40.5781 c +565.8638 40.6816 565.8364 40.8066 565.7485 40.8809 c +561.7759 44.2266 563.229 52.3008 575.0864 52.3008 c +582.8804 52.3008 587.9077 49.1211 587.9077 44.8145 c +587.9077 41.4297 584.8452 39.584 582.2651 39.584 c +577.8511 39.584 575.3267 43.5449 577.2231 47.127 c +577.2778 47.2305 577.2563 47.3574 577.1685 47.4355 c +577.0806 47.5137 576.9517 47.5215 576.854 47.4551 c +574.606 45.8906 573.0356 43.834 573.0356 40.6641 c +573.0356 35.2773 578.062 29.5352 586.3687 29.5332 c +595.2905 29.5332 603.3921 36.4043 603.3921 44.8145 c +603.3921 56.6309 593.3433 62.248 582.7788 63.248 C +587.144 64.9219 590.4116 69.7734 v +590.478 69.8691 590.4683 69.998 590.3901 70.084 c +590.312 70.1719 590.1851 70.1934 590.0835 70.1387 c +584.2534 67.0566 577.5942 65.3945 570.5806 65.3945 c +550.9575 65.3945 534.0337 81.7988 530.3813 102.7607 c +530.3599 102.8818 530.2524 102.9727 530.1294 102.9688 c +f +453.4517 50.5625 m +448.8442 42.8867 447.1997 29.7129 451.4946 19.8809 c +451.5435 19.7695 451.5083 19.6406 451.4087 19.5703 c +451.3091 19.502 451.1763 19.5117 451.0884 19.5957 c +446.2817 24.1484 442.1489 34.7715 444.3833 47.0527 C +441.2876 49.4473 439.3384 51.8223 437.8696 55.0059 c +437.8228 55.1074 437.8501 55.2305 437.936 55.3047 c +438.022 55.377 438.147 55.3848 438.2427 55.3203 c +443.2388 51.959 447.7056 50.8125 453.4517 50.5625 C +f +464.0591 170.3691 m +463.9907 170.4727 464.0083 170.6133 464.1001 170.6973 c +464.1938 170.7813 464.3345 170.7852 464.4321 170.7061 c +471.2466 165.1797 480.3071 161.6504 491.4673 161.6504 c +519.0376 161.6504 536.4399 178.1689 539.1743 195.5771 c +539.1919 195.6885 539.2817 195.7734 539.3931 195.7891 c +539.5044 195.8047 539.6138 195.7422 539.6587 195.6396 c +542.3833 189.3818 544.0259 180.3057 535.6099 168.1309 c +530.5747 160.8457 524.479 155.8311 524.479 149.3145 c +524.479 145.0566 526.7407 142.1602 530.1685 142.1602 c +533.7739 142.1602 536.106 145.248 536.104 148.7148 c +536.104 150.4629 535.6001 152.1934 534.6958 153.7607 c +534.6372 153.8633 534.6548 153.9902 534.7407 154.0723 c +534.8247 154.1523 534.9556 154.165 535.0532 154.1016 c +538.0259 152.1641 540.6802 148.7021 540.6802 143.8281 c +540.6802 136.6563 534.5474 130.6602 526.2095 130.6602 c +517.2368 130.6602 509.8872 137.709 509.8872 147.8477 c +509.8872 151.3262 510.8755 155.5156 513.3501 158.9805 C +509.9653 156.1523 508.1587 154.1523 506.6724 149.8271 C +496.272 148.0186 485.1665 149.6797 476.3403 155.4727 C +476.0864 149.3711 474.0903 144.2793 469.9985 140.1533 c +469.9146 140.0684 469.7837 140.0547 469.6841 140.1182 c +469.5825 140.1816 469.5415 140.3066 469.5806 140.4189 c +472.4575 148.4199 470.5239 160.6152 464.0591 170.3691 c +f +376.6938 163.7344 m +378.938 168.5352 384.1528 171.2188 390.1548 171.3271 c +390.2798 171.3311 390.3872 171.2432 390.4087 171.1211 c +390.4321 170.998 390.3638 170.8779 390.2485 170.8359 c +388.2017 170.082 386.5864 168.7637 385.7271 166.9258 c +383.5142 162.1973 387.0942 155.8301 393.7407 152.5566 c +393.8188 152.5186 393.8716 152.4434 393.8813 152.3594 c +393.8911 152.2725 393.856 152.1885 393.7915 152.1318 c +389.5005 148.6143 384.3794 142.0781 384.3794 128.7148 c +384.3774 110.0322 396.5337 92.25 412.6548 92.25 c +421.8677 92.25 429.2876 98.6465 433.1255 108.2422 C +428.9028 102.4844 423.145 98.1348 415.2114 98.1348 c +403.5708 98.1348 394.3579 110.5439 394.356 128.459 c +394.356 145.3457 406.2583 165.0518 422.1216 165.0508 c +430.8247 165.0488 437.3481 158.0117 437.3481 148.9277 c +437.3481 140.8672 432.1021 136.2637 426.2173 136.2637 c +421.7798 136.2637 418.7231 139.3936 417.772 142.7871 c +417.7388 142.9023 417.7915 143.0254 417.897 143.0811 c +418.0044 143.1357 418.1333 143.1104 418.2114 143.0186 c +418.9634 142.124 420.1079 141.3809 421.8657 141.3809 c +424.8091 141.3789 426.3442 143.9082 426.3442 145.7285 c +426.3442 149.1836 423.7856 151.6152 419.9458 151.6152 c +414.7036 151.6152 410.606 145.8564 410.606 138.4385 c +410.606 129.2236 419.436 120.7813 428.2642 120.7813 c +437.2856 120.7813 446.9438 128.8408 446.9438 143.8125 c +446.9419 158.5234 436.9653 175.4141 421.0981 175.4141 c +411.8481 175.4141 403.9849 171.2441 397.9556 164.3398 c +397.8755 164.248 397.7427 164.2246 397.6392 164.2852 c +397.5317 164.3477 397.4849 164.4727 397.5239 164.5879 c +401.9575 177.5234 399.4771 189.7344 392.7036 189.7324 c +389.3892 189.7324 387.7017 187.3535 387.7017 184.8154 c +387.7017 182.21 389.6001 180.0566 392.6704 179.6611 c +392.7915 179.6475 392.8833 179.5479 392.8931 179.4268 c +392.8989 179.3047 392.8188 179.1943 392.7017 179.1641 c +385.8872 177.4004 378.8774 181.1133 378.8774 188.2061 c +378.8774 194.4854 384.2544 199.3398 391.2896 199.3398 c +401.9263 199.3379 407.0142 188.0684 404.7485 177.8047 C +410.2075 184.8486 418.3013 190.6396 429.9263 190.6396 c +453.4692 190.6396 465.3677 163.7715 465.3677 145.7285 c +465.3677 129.3525 462.0415 118.8604 455.1313 110.8018 C +463.1938 116.9404 466.52 123.7227 468.0552 133.0645 C +474.1958 141.5078 490.188 141.5078 v +496.8755 141.5078 503.1177 139.0322 507.9614 134.3438 C +507.9634 134.3447 507.9653 134.3477 507.9673 134.3486 C +508.0024 134.3105 508.0396 134.2695 508.0767 134.2314 C +508.397 133.915 508.7114 133.5918 509.02 133.2578 C +514.0806 128.4102 524.2114 123.8633 533.4517 127.6602 c +533.5571 127.7031 533.6782 127.6699 533.7485 127.582 c +533.8188 127.4932 533.8188 127.3672 533.7524 127.2754 c +529.3462 121.252 521.729 119.335 516.0747 120.21 C +517.1177 116.4941 517.6958 112.3281 517.6958 107.7305 c +517.6978 91.3262 508.8989 79.7598 499.2856 74.1289 C +502.438 70.3281 501.7954 64.3535 498.2544 60.2949 c +498.1743 60.2051 498.0435 60.1816 497.938 60.2402 c +497.8345 60.2988 497.7837 60.4238 497.8188 60.5391 c +499.5513 66.0703 494.4282 70.6875 487.6392 70.4395 c +487.5161 70.4355 487.4067 70.5195 487.3813 70.6406 c +487.356 70.7617 487.4185 70.8828 487.5337 70.9277 c +497.6685 75.0918 504.3911 83.9102 504.3892 94.9355 c +504.3911 106.4492 497.481 115.79 486.3501 115.79 c +477.2661 115.79 468.1821 107.4727 468.1821 97.1133 c +468.1821 89.0508 472.6587 84.3184 478.4165 84.3164 c +483.4067 84.3184 487.3735 87.7715 487.3735 91.8672 c +487.3735 97.7188 480.7896 99.8408 477.2778 95.209 c +477.2095 95.1172 477.0864 95.084 476.981 95.127 c +476.8755 95.1689 476.811 95.2773 476.8228 95.3926 c +477.3462 99.7813 480.5767 103.8926 485.5825 103.8926 c +490.188 103.8926 494.9224 100.0518 494.9224 91.8652 c +494.9224 82.1406 485.5845 72.291 470.231 72.2891 c +449.2466 72.2891 437.8599 95.959 448.0942 114.8945 C +442.8501 108.8809 438.1157 102.4844 438.1157 91.0977 c +438.1138 69.5898 459.3794 55.0488 484.4692 63.5977 c +484.5884 63.6367 484.7192 63.584 484.7759 63.4746 c +484.8345 63.3633 484.8013 63.2266 484.6997 63.1523 c +477.6938 58.043 470.356 50.5137 470.356 37.873 c +470.356 24.6934 479.0552 15.3535 492.6196 15.3535 c +503.1099 15.3535 509.7642 21.752 509.7642 29.2988 c +509.7642 35.0566 506.0454 39.6641 499.6567 39.6641 c +490.1431 39.6641 486.9087 29.3203 491.8325 24.6953 c +491.9165 24.6152 491.936 24.4902 491.8813 24.3887 c +491.8247 24.2871 491.7056 24.2344 491.5942 24.2637 c +486.8247 25.5 482.2563 30.332 482.2563 37.6152 c +482.2544 50.1563 493.897 58.4727 506.6919 58.4727 c +512.688 58.4727 518.4907 56.7188 523.1646 53.4297 C +522.6118 49.2773 524.0317 44.6816 526.1313 41.5879 C +524.1821 48.457 526.2915 59.7656 536.8032 59.7676 c +542.6958 59.7656 546.5903 55.2383 546.5903 49.8867 c +546.5903 43.5605 541.2446 40.6094 536.895 41.2148 c +536.7798 41.2305 536.6899 41.3223 536.6763 41.4375 c +536.6646 41.5527 536.731 41.6602 536.8384 41.7031 c +538.4243 42.3105 539.7817 43.9727 539.7817 45.9668 c +539.7817 48.4668 537.8696 49.9492 535.8696 49.9492 c +532.5767 49.9492 530.7466 46.2793 531.8989 42.2305 C +531.8872 42.2285 L +532.9595 39.3926 533.561 36.2246 533.561 32.7363 c +533.561 15.9746 515.3813 0.001953 492.4399 0 c +468.229 0 455.3872 17.2734 455.3892 35.0566 c +455.3892 44.5938 458.9692 51.8184 463.5767 56.4258 C +443.6548 54.3066 431.0786 62.8223 424.2974 75.1035 C +428.7759 78.9414 430.438 84.5723 Y +425.0649 77.5352 415.854 71.3945 402.9321 71.3945 c +383.356 71.3945 368.0005 90.5859 368.0005 111.1836 c +368.0005 124.2568 372.8032 136.9648 382.5649 145.4307 C +376.5278 150.459 373.9185 157.8018 376.6938 163.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +240.2622 96.3711 m +240.3872 96.3711 240.4927 96.4629 240.5103 96.585 c +242.8911 112.5996 252.1646 125.9746 264.9028 133.9814 c +265.0063 134.0449 265.0493 134.1758 265.0044 134.29 c +264.9575 134.4023 264.8384 134.4688 264.7173 134.4443 c +254.2466 132.3398 244.9243 126.5811 238.27 118.4141 C +233.644 131.7891 223.0337 140.418 209.9692 144.0654 C +214.7778 149.6582 212.2622 157.5986 204.8501 158.9023 c +204.7368 158.9229 204.6245 158.8643 204.5757 158.7607 c +204.5278 158.6563 204.5542 158.5322 204.6421 158.46 c +208.6157 155.1143 207.1616 147.04 195.3052 147.04 c +187.5103 147.04 182.4849 150.2188 182.4849 154.5254 c +182.4849 157.9102 185.5464 159.7559 188.1255 159.7559 c +192.5415 159.7559 195.0649 155.7949 193.1675 152.2129 c +193.1128 152.1104 193.1353 151.9814 193.2231 151.9033 c +193.311 151.8271 193.4399 151.8184 193.5366 151.8857 c +195.7856 153.4492 197.356 155.5059 197.356 158.6768 c +197.356 164.0635 192.3306 169.8066 184.0239 169.8066 c +175.1021 169.8066 167.0005 162.9355 167.0005 154.5254 c +167.0005 142.71 177.0493 137.0918 187.6138 136.0918 C +183.2485 134.4189 179.98 129.5664 v +179.9146 129.4697 179.9243 129.3418 180.0015 129.2559 c +180.0796 129.1689 180.2056 129.1475 180.3091 129.2012 c +186.1392 132.2822 192.7954 133.9453 199.811 133.9453 c +219.4321 133.9453 236.3579 117.541 240.0103 96.5801 c +240.0317 96.4561 240.1382 96.3691 240.2622 96.3711 c +f +316.9399 148.7773 m +321.5493 156.4551 323.1919 169.627 318.897 179.46 c +318.8481 179.5703 318.8833 179.6992 318.9829 179.7686 c +319.0806 179.8379 319.2153 179.8281 319.3032 179.7461 c +324.1099 175.1914 328.2427 164.5684 326.0083 152.2871 C +329.106 149.8936 331.0532 147.5176 332.522 144.335 c +332.5688 144.2314 332.5415 144.1104 332.4556 144.0352 c +332.3696 143.9629 332.2446 143.9551 332.1489 144.0186 c +327.1528 147.3809 322.686 148.5283 316.9399 148.7773 C +f +306.3306 28.9707 m +306.4009 28.8672 306.3833 28.7266 306.2915 28.6426 c +306.1978 28.5586 306.0571 28.5547 305.9595 28.6348 c +299.145 34.1621 290.0845 37.6895 278.9243 37.6895 c +251.3521 37.6895 233.9517 21.1719 231.2163 3.76367 c +231.1987 3.65234 231.1099 3.56641 230.9985 3.55078 c +230.8862 3.53711 230.7778 3.59766 230.7329 3.70117 c +228.0073 9.95898 226.3657 19.0352 234.7817 31.209 c +239.8159 38.4941 245.9106 43.5098 245.9106 50.0273 c +245.9106 54.2852 243.6509 57.1797 240.2231 57.1797 c +236.6177 57.1797 234.2866 54.0918 234.2866 50.625 c +234.2866 48.877 234.7915 47.1465 235.6958 45.5801 c +235.7544 45.4766 235.7358 45.3496 235.6509 45.2676 c +235.5649 45.1875 235.436 45.1758 235.3384 45.2402 c +232.3657 47.1777 229.7114 50.6367 229.7114 55.5117 c +229.7114 62.6836 235.8442 68.6816 244.1802 68.6816 c +253.1548 68.6816 260.5044 61.6328 260.5044 51.4922 c +260.5044 48.0156 259.5142 43.8242 257.0415 40.3613 C +260.4263 43.1875 262.2329 45.1875 263.7192 49.5117 C +274.1196 51.3223 285.2251 49.6602 294.0493 43.8691 C +294.3052 49.9707 296.3013 55.0605 300.3931 59.1875 c +300.4771 59.2715 300.6079 59.2852 300.7075 59.2227 c +300.8091 59.1582 300.8521 59.0332 300.811 58.9219 c +297.9341 50.9199 299.8657 38.7246 306.3306 28.9707 c +f +393.6978 35.6055 m +391.4517 30.8066 386.2388 28.1211 380.2368 28.0117 c +380.1118 28.0098 380.0044 28.0977 379.9829 28.2188 c +379.9595 28.3418 380.0278 28.4609 380.1431 28.5039 c +382.1899 29.2578 383.8052 30.5762 384.6646 32.4141 c +386.8774 37.1426 383.2974 43.5098 376.6509 46.7832 c +376.5728 46.8223 376.52 46.8965 376.5103 46.9824 c +376.5005 47.0684 376.5337 47.1523 376.6001 47.207 c +380.8911 50.7266 386.0122 57.2617 386.0122 70.627 c +386.0122 89.3086 373.8579 107.0898 357.7368 107.0898 c +348.5239 107.0898 341.104 100.6934 337.2661 91.0977 C +341.4868 96.8564 347.2446 101.2051 355.1782 101.2051 c +366.8208 101.2051 376.0337 88.7969 376.0337 70.8828 c +376.0337 53.9941 364.1333 34.2891 348.2681 34.2891 c +339.5669 34.2891 333.0435 41.3281 333.0435 50.4121 c +333.0435 58.4746 338.2896 63.0781 344.1763 63.0781 c +348.6099 63.0781 351.6685 59.9473 352.6196 56.5527 c +352.6509 56.4375 352.6001 56.3164 352.4927 56.2598 c +352.3872 56.2051 352.2583 56.2305 352.1802 56.3223 c +351.4282 57.2168 350.2837 57.9609 348.5259 57.9609 c +345.5825 57.9609 344.0474 55.4316 344.0474 53.6113 c +344.0474 50.1563 346.606 47.7246 350.4458 47.7246 c +355.6899 47.7246 359.7856 53.4824 359.7856 60.9023 c +359.7856 70.1152 350.9556 78.5586 342.1274 78.5586 c +333.106 78.5586 323.4478 70.5 323.4478 55.5293 c +323.4478 40.8164 333.4282 23.9258 349.2935 23.9258 c +358.5435 23.9258 366.4048 28.0957 372.436 35.002 c +372.5161 35.0918 372.6489 35.1152 372.7544 35.0547 c +372.8599 34.9941 372.9067 34.8672 372.8677 34.752 c +368.4341 21.8164 370.9126 9.60742 377.688 9.60742 c +381.0024 9.60742 382.6899 11.9863 382.6899 14.5234 c +382.6899 17.1309 380.7915 19.2852 377.7212 19.6777 c +377.6001 19.6934 377.5063 19.793 377.4985 19.9141 c +377.4927 20.0352 377.5708 20.1465 377.6899 20.1758 c +384.5044 21.9395 391.5142 18.2285 391.5142 11.1328 c +391.5142 4.85547 386.1372 0.001953 379.1021 0.001953 c +368.4653 0.001953 363.3774 11.2715 365.6431 21.5371 C +360.1841 14.4922 352.0903 8.70117 340.4653 8.70117 c +316.9224 8.70117 305.0239 35.5703 305.0239 53.6113 c +305.0239 69.9883 308.3501 80.4785 315.2603 88.5391 C +307.1978 82.3984 303.8716 75.6172 302.3384 66.2773 C +296.1958 57.832 280.2036 57.832 v +273.5161 57.832 267.2739 60.3086 262.4302 64.998 C +262.4282 64.9961 262.4263 64.9941 262.4243 64.9902 C +262.3892 65.0313 262.3501 65.0703 262.3149 65.1094 C +261.9946 65.4238 261.6802 65.748 261.3716 66.082 C +256.3091 70.9316 246.1802 75.4785 236.9399 71.6797 c +236.8345 71.6367 236.7134 71.6699 236.6431 71.7578 c +236.5728 71.8477 236.5708 71.9727 236.6382 72.0645 c +241.0454 78.0898 248.6626 80.0059 254.3169 79.1309 C +253.272 82.8457 252.6938 87.0117 252.6938 91.6094 c +252.6938 108.0137 261.4927 119.5801 271.106 125.2109 C +267.9517 129.0137 268.5962 134.9883 272.1372 139.0449 c +272.2173 139.1357 272.3481 139.1582 272.4536 139.0996 c +272.5571 139.041 272.606 138.918 272.5708 138.8018 c +270.8403 133.2695 275.9634 128.6523 282.7524 128.9004 c +282.8755 128.9033 282.9829 128.8193 283.0103 128.6992 c +283.0356 128.5801 282.9712 128.457 282.8579 128.4111 c +272.7212 124.248 266.0005 115.4316 266.0005 104.4033 c +266.0005 92.8906 272.9087 83.5488 284.0415 83.5488 c +293.1255 83.5488 302.2095 91.8672 302.2095 102.2285 c +302.2095 110.2891 297.731 115.0225 291.9731 115.0225 c +286.9849 115.0225 283.0181 111.5684 283.0181 107.4736 c +283.0181 101.6211 289.6001 99.499 293.1118 104.1309 c +293.1821 104.2227 293.3032 104.2559 293.4087 104.2129 c +293.5161 104.1699 293.5806 104.0625 293.5669 103.9482 c +293.0435 99.5586 289.8149 95.4482 284.8091 95.4482 c +280.2036 95.4482 275.4692 99.2861 275.4692 107.4746 c +275.4692 117.1982 284.8071 127.0508 300.1606 127.0508 c +321.1431 127.0508 332.5317 103.3809 322.2974 84.4453 C +327.5415 90.459 332.2759 96.8555 332.2759 108.2432 c +332.2759 129.75 311.0122 144.291 285.9224 135.7441 c +285.8032 135.7021 285.6724 135.7559 285.6157 135.8672 c +285.5571 135.9785 285.5884 136.1143 285.6899 136.1895 c +292.6958 141.2979 300.0337 148.8262 300.0337 161.4668 c +300.0337 174.6475 291.3345 183.9854 277.772 183.9854 c +267.2798 183.9854 260.6274 177.5879 260.6274 170.04 c +260.6274 164.2822 264.3462 159.6768 270.7349 159.6768 c +280.2466 159.6768 283.481 170.0195 278.5591 174.6445 c +278.4751 174.7236 278.4556 174.8516 278.5103 174.9521 c +278.5669 175.0547 278.6841 175.1055 278.7974 175.0762 c +283.5669 173.8398 288.1353 169.0068 288.1353 161.7236 c +288.1353 149.1855 276.4927 140.8682 263.6978 140.8682 c +257.7017 140.8682 251.8989 142.623 247.2271 145.9102 C +247.7778 150.0635 246.3579 154.6602 244.2603 157.752 C +246.2095 150.8848 244.1021 139.5732 233.5864 139.5732 c +227.6958 139.5732 223.8013 144.1025 223.8013 149.4551 c +223.8013 155.7793 229.147 158.7314 233.4966 158.125 c +233.6118 158.1104 233.7007 158.0186 233.7134 157.9023 c +233.7271 157.7891 233.6606 157.6797 233.5532 157.6367 c +231.9673 157.0293 230.6108 155.3691 230.6108 153.373 c +230.6108 150.873 232.52 149.3906 234.52 149.3906 c +237.8149 149.3906 239.645 153.0605 238.4927 157.1104 C +238.5044 157.1104 L +237.4312 159.9473 236.8286 163.1152 236.8286 166.6055 c +236.8286 183.3672 255.0103 199.3398 277.9497 199.3398 c +302.1626 199.3398 315.0044 182.0664 315.0044 164.2822 c +315.0044 154.7461 311.4224 147.5225 306.8149 142.915 C +326.7368 145.0332 339.313 136.5176 346.0942 124.2354 C +341.6157 120.3975 339.9536 114.7676 Y +345.3267 121.8057 354.5376 127.9453 367.4595 127.9453 c +387.0356 127.9453 402.3911 108.7539 402.3911 88.1563 c +402.3911 75.084 397.5884 62.375 387.8267 53.9102 C +393.8638 48.8809 396.4731 41.5391 393.6978 35.6055 c +f +*U +*u +315.2114 160.9053 m +315.1782 160.7852 315.2388 160.6582 315.3521 160.6094 c +330.1763 154.0957 340.6372 141.6289 345.0063 127.2324 c +345.0415 127.1152 345.1548 127.0391 345.2778 127.0527 c +345.3989 127.0664 345.4946 127.166 345.5024 127.2871 c +346.229 137.9434 343.1274 148.4531 337.0005 157.0234 C +351.1216 157.9648 362.2407 165.9297 369.1997 177.5723 C +373.3286 171.46 381.6509 171.7969 384.8599 178.6035 c +384.9106 178.708 384.8833 178.832 384.7954 178.9063 c +384.7075 178.9805 384.5806 178.9873 384.4868 178.9219 c +380.2134 175.9688 372.8071 179.498 375.9282 190.9355 c +377.981 198.4561 382.3716 202.4668 386.5259 201.333 c +389.7915 200.4414 390.7661 197.002 390.0864 194.5146 c +388.9243 190.2539 384.438 188.8623 381.481 191.6357 c +381.397 191.7158 381.2681 191.7285 381.1704 191.6641 c +381.0728 191.5986 381.0298 191.4775 381.0688 191.3662 c +381.9868 188.7852 383.5571 186.7285 386.6157 185.8936 c +391.811 184.4756 398.6743 187.8115 400.8618 195.8252 c +403.2114 204.4316 398.7153 214.0566 390.604 216.2715 c +379.2036 219.3818 371.1392 211.166 367.3931 201.2383 C +366.9263 205.8896 363.1079 210.3203 v +363.0317 210.4092 362.9048 210.4336 362.8013 210.3818 c +362.6978 210.3291 362.6431 210.2129 362.6665 210.0996 c +364.106 203.6641 363.9575 196.8047 362.1099 190.0361 c +356.9438 171.1074 336.6626 159.0977 315.479 161.0938 c +315.354 161.1055 315.2407 161.0254 315.2114 160.9053 c +f +345.5806 73.1348 m +351.7739 66.666 364.0493 61.6133 374.6646 63.168 c +374.7856 63.1855 374.9009 63.1172 374.9399 63.0039 c +374.981 62.8906 374.936 62.7637 374.8345 62.7012 c +369.1743 59.2617 357.8384 58.0723 346.5786 63.4609 C +343.4536 61.1035 340.6489 59.8496 337.1919 59.2715 c +337.0806 59.2539 336.9692 59.3125 336.9204 59.4141 c +336.8735 59.5156 336.8989 59.6387 336.9849 59.7148 c +341.5454 63.6484 343.8286 67.6563 345.5806 73.1348 C +f +232.7935 114.9121 m +232.6753 114.8711 232.5444 114.9258 232.4878 115.0371 c +232.4312 115.1484 232.4644 115.2852 232.5679 115.3594 c +239.6938 120.4785 245.4829 128.291 248.4204 139.0566 c +255.6802 165.6563 244.3267 186.792 228.2534 194.0146 c +228.1499 194.0605 228.0903 194.1689 228.105 194.2803 c +228.1216 194.3926 228.2085 194.4814 228.3198 194.4971 c +235.0747 195.4785 244.2622 194.6729 253.7915 183.3486 c +259.4927 176.5732 262.7271 169.373 269.0142 167.6563 c +273.1216 166.5352 276.5103 167.9551 277.4126 171.2617 c +278.3618 174.7393 275.9966 177.8018 272.6528 178.7148 c +270.9653 179.1738 269.1626 179.1436 267.4146 178.6836 c +267.2993 178.6533 267.1821 178.7051 267.1255 178.8086 c +267.0708 178.9121 267.0923 179.04 267.1802 179.1172 c +269.8325 181.4746 273.8677 183.125 278.5708 181.8408 c +285.4907 179.9531 289.6606 172.457 287.4673 164.415 c +285.104 155.7578 276.3696 150.5234 266.5864 153.1934 c +263.2329 154.1084 259.4497 156.168 256.7603 159.4648 C +258.5942 155.4551 260.0493 153.1855 263.8286 150.6133 C +262.8364 140.1035 258.3091 129.8271 250.4009 122.8389 C +256.2192 120.9863 260.604 117.7207 263.5083 112.6855 c +263.5669 112.582 263.5454 112.4531 263.4595 112.373 c +263.3696 112.293 263.2388 112.2832 263.1411 112.3535 c +256.1802 117.2344 243.9048 118.582 232.7935 114.9121 c +f +216.1919 28.8809 m +212.1538 32.3105 210.936 38.0469 212.4106 43.8672 c +212.4419 43.9883 212.5542 44.0684 212.6772 44.0566 c +212.8022 44.0469 212.8989 43.9492 212.9097 43.8281 c +213.0981 41.6543 213.9448 39.748 215.4917 38.4355 c +219.4712 35.0566 226.5562 36.834 231.4634 42.3828 c +231.522 42.4492 231.6079 42.4805 231.6929 42.4668 c +231.7788 42.4531 231.8511 42.3984 231.8862 42.3203 c +234.1519 37.2539 239.1079 30.5938 252.0005 27.0742 c +270.0239 22.1563 290.3794 29.1992 294.6235 44.752 c +297.0493 53.6406 292.8306 62.4824 284.5845 68.7109 C +289.0298 63.123 291.7075 56.4238 289.6177 48.7695 c +286.5532 37.5391 272.1567 31.918 254.8755 36.6348 c +238.5825 41.0801 222.7065 57.748 226.8833 73.0547 c +229.1743 81.4492 237.6821 85.8887 246.4458 83.4961 c +254.2231 81.375 257.2837 75.1016 255.7329 69.4219 c +254.5669 65.1445 250.7407 63.0195 247.2153 62.9941 c +247.0962 62.9941 246.9927 63.0762 246.9653 63.1934 c +246.9419 63.3105 246.9985 63.4277 247.1079 63.4785 c +248.1704 63.9688 249.188 64.877 249.6509 66.5742 c +250.4263 69.4121 248.3911 71.5605 246.6353 72.0391 c +243.3022 72.9492 240.2827 71.1211 239.271 67.416 c +237.8911 62.3574 242.3667 56.8906 249.5239 54.9355 c +258.4126 52.5117 268.8833 58.8066 271.2075 67.3223 c +273.5825 76.0254 268.3501 87.4648 253.9087 91.4063 c +239.7153 95.2813 220.7925 90.0996 216.6157 74.793 c +214.1802 65.8691 216.1333 57.1875 221.2075 49.5508 c +221.2739 49.4512 221.2612 49.3164 221.1753 49.2305 c +221.0884 49.1445 220.9536 49.1328 220.853 49.2012 c +209.5415 56.8828 197.1108 57.707 195.3267 51.1699 c +194.4536 47.9727 196.3042 45.7188 198.7524 45.0508 c +201.2681 44.3652 203.8462 45.6289 205.0327 48.4883 c +205.0796 48.5996 205.2007 48.6641 205.3198 48.6406 c +205.438 48.6133 205.5249 48.5098 205.522 48.3867 c +205.4292 41.3477 200.0034 35.5625 193.1577 37.4316 c +187.1021 39.084 183.8354 45.5488 185.688 52.3359 c +188.4888 62.5977 200.6997 64.5391 210.0063 59.6504 C +204.647 66.7715 201.1919 76.1035 204.2524 87.3184 c +210.4507 110.0313 239.5044 114.4355 256.9087 109.6855 c +272.7075 105.373 281.9517 99.4023 287.9087 90.6152 C +284.1079 100.0098 278.4419 105.0039 269.8345 108.9434 C +263.3052 117.0918 267.5161 132.5195 v +269.2759 138.9707 273.3091 144.3418 279.1079 147.7793 C +279.1079 147.7813 279.106 147.7842 279.1021 147.7871 C +279.1509 147.8105 279.1997 147.8379 279.2466 147.8613 C +279.6333 148.0879 280.0298 148.3057 280.4321 148.5146 C +286.4438 152.1211 293.4966 160.6973 292.2661 170.6113 c +292.2524 170.7236 292.3149 170.832 292.4185 170.877 c +292.5239 170.9219 292.645 170.8896 292.7153 170.8018 c +297.3677 164.9629 297.2114 157.1104 294.8794 151.8857 C +298.7368 151.915 302.9087 151.375 307.3442 150.165 c +323.1685 145.8457 332.0122 134.3135 334.9126 123.5566 C +339.4106 125.5977 345.0063 123.4043 347.9888 118.9199 c +348.0532 118.8184 348.0415 118.6855 347.9575 118.5996 c +347.8735 118.5156 347.7407 118.5 347.6392 118.5645 c +342.7583 121.6914 336.9556 117.9648 335.4048 111.3496 c +335.3774 111.2305 335.2681 111.1484 335.145 111.1543 c +335.022 111.1602 334.9204 111.2539 334.9067 111.377 c +333.5591 122.251 326.8228 131.0566 316.1841 133.96 c +305.0767 136.9922 294.2446 132.7852 291.3149 122.0469 c +288.9224 113.2832 294.5571 102.3301 304.5513 99.6016 c +312.3286 97.4785 318.0747 100.5527 319.5903 106.1074 c +320.9048 110.9199 318.6157 115.6563 314.6665 116.7344 c +309.0181 118.2754 305.2388 112.4844 308.7837 107.877 c +308.8521 107.7852 308.854 107.6602 308.7837 107.5684 c +308.7153 107.4766 308.5923 107.4434 308.4868 107.4863 c +304.3892 109.1465 301.2739 113.3418 302.5923 118.1729 c +303.8052 122.6152 308.7544 126.1729 316.6548 124.0166 c +326.0356 121.457 333.0806 109.8555 329.0376 95.043 c +323.5142 74.7988 297.6802 70.0449 282.1079 84.9043 C +286.5278 78.2617 291.4517 72.0098 302.438 69.0117 c +323.188 63.3496 342.813 80.0332 341.1724 106.4902 c +341.1646 106.6152 341.2505 106.7285 341.3735 106.7539 c +341.4946 106.7813 341.6196 106.7129 341.6646 106.5977 c +344.7466 98.4922 350.0786 89.4316 362.2739 86.1035 c +374.9888 82.6328 386.2876 88.5664 389.8599 101.6504 c +392.6216 111.7734 388.2017 119.875 380.9204 121.8623 c +375.3657 123.3789 369.9419 121.0039 368.2603 114.8398 c +365.7563 105.6641 374.8833 99.8203 380.6411 103.3516 c +380.7388 103.4121 380.8677 103.3965 380.9497 103.3164 c +381.0337 103.2363 381.0513 103.1094 380.9927 103.0078 c +378.5454 98.7324 372.6802 95.5977 365.6548 97.5156 c +353.5571 100.8164 348.6001 114.2383 351.9673 126.5811 c +353.5454 132.3652 356.7681 137.502 361.1685 141.1426 C +365.0298 139.5186 369.8384 139.6777 373.3735 140.8867 C +366.2349 140.8154 355.8794 145.8262 358.647 155.9707 c +360.1978 161.6533 365.5923 164.2188 370.7563 162.8086 c +376.8579 161.1436 378.2974 155.21 376.5688 151.1729 c +376.522 151.0654 376.4106 151.0039 376.2974 151.0225 c +376.1821 151.04 376.0942 151.1318 376.0825 151.2471 c +375.9146 152.9375 374.6685 154.6836 372.7446 155.208 c +370.3325 155.8662 368.3989 154.415 367.8735 152.4854 c +367.0044 149.3066 370.063 146.5752 374.2739 146.6211 C +374.27 146.6094 L +377.2896 146.8984 380.5044 146.6445 383.8716 145.7266 c +400.0415 141.3125 410.6646 119.5674 404.6235 97.4375 c +398.2485 74.0781 378.2056 66.2363 361.0474 70.9199 c +351.8481 73.4297 345.8228 78.7871 342.5903 84.4453 C +339.3892 64.668 327.8618 54.7793 314.229 51.4707 C +311.7056 56.8008 306.7114 59.8867 Y +312.0864 52.8496 315.5845 42.3477 312.1821 29.8809 c +307.0278 10.9961 284.4712 1.23438 264.6001 6.6582 c +251.9888 10.0996 240.9927 18.0801 235.397 29.7266 C +228.9556 25.2266 221.186 24.6406 216.1919 28.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +363.1294 102.9688 m +363.0044 102.9688 362.8989 102.877 362.8794 102.7539 c +360.5005 86.7402 351.2271 73.3652 338.4888 65.3594 c +338.3853 65.2949 338.3403 65.1641 338.3872 65.0508 c +338.4321 64.9375 338.5532 64.8711 338.6724 64.8965 c +349.145 67 358.4653 72.7598 365.1216 80.9277 C +369.7466 67.5508 380.3579 58.9219 393.4224 55.2734 C +388.6138 49.6816 391.1294 41.7402 398.5415 40.4375 c +398.6548 40.416 398.7661 40.4746 398.8149 40.5781 c +398.8638 40.6816 398.8364 40.8066 398.7485 40.8809 c +394.7759 44.2266 396.229 52.3008 408.0864 52.3008 c +415.8794 52.3008 420.9067 49.1211 420.9067 44.8145 c +420.9067 41.4297 417.8442 39.584 415.2642 39.584 c +410.8501 39.584 408.3267 43.5449 410.2231 47.127 c +410.2778 47.2305 410.2563 47.3574 410.1685 47.4355 c +410.0806 47.5137 409.9517 47.5215 409.854 47.4551 c +407.606 45.8906 406.0356 43.834 406.0356 40.6641 c +406.0356 35.2773 411.061 29.5352 419.3677 29.5332 c +428.2896 29.5332 436.3911 36.4043 436.3911 44.8145 c +436.3911 56.6309 426.3423 62.248 415.7778 63.248 C +420.1431 64.9219 423.4106 69.7734 v +423.4771 69.8691 423.4673 69.998 423.3892 70.084 c +423.311 70.1719 423.1841 70.1934 423.0825 70.1387 c +417.2524 67.0566 410.5942 65.3945 403.5806 65.3945 c +383.9575 65.3945 367.0337 81.7988 363.3813 102.7607 c +363.3599 102.8818 363.2524 102.9727 363.1294 102.9688 c +f +286.4517 50.5625 m +281.8442 42.8867 280.1997 29.7129 284.4946 19.8809 c +284.5435 19.7695 284.5083 19.6406 284.4087 19.5703 c +284.3091 19.502 284.1763 19.5117 284.0884 19.5957 c +279.2817 24.1484 275.1489 34.7715 277.3833 47.0527 C +274.2876 49.4473 272.3384 51.8223 270.8696 55.0059 c +270.8228 55.1074 270.8501 55.2305 270.936 55.3047 c +271.022 55.377 271.147 55.3848 271.2427 55.3203 c +276.2388 51.959 280.7056 50.8125 286.4517 50.5625 C +f +297.0591 170.3691 m +296.9907 170.4727 297.0083 170.6133 297.1001 170.6973 c +297.1938 170.7813 297.3345 170.7852 297.4321 170.7061 c +304.2466 165.1797 313.3071 161.6504 324.4673 161.6504 c +352.0376 161.6504 369.4399 178.1689 372.1743 195.5771 c +372.1919 195.6885 372.2817 195.7734 372.3931 195.7891 c +372.5044 195.8047 372.6138 195.7422 372.6587 195.6396 c +375.3833 189.3818 377.0259 180.3057 368.6099 168.1309 c +363.5747 160.8457 357.479 155.8311 357.479 149.3145 c +357.479 145.0566 359.7407 142.1602 363.1685 142.1602 c +366.7739 142.1602 369.106 145.248 369.104 148.7148 c +369.104 150.4629 368.6001 152.1934 367.6958 153.7607 c +367.6372 153.8633 367.6548 153.9902 367.7407 154.0723 c +367.8247 154.1523 367.9556 154.165 368.0532 154.1016 c +371.0259 152.1641 373.6802 148.7021 373.6802 143.8281 c +373.6802 136.6563 367.5474 130.6602 359.2095 130.6602 c +350.2368 130.6602 342.8872 137.709 342.8872 147.8477 c +342.8872 151.3262 343.8755 155.5156 346.3501 158.9805 C +342.9653 156.1523 341.1587 154.1523 339.6724 149.8271 C +329.272 148.0186 318.1665 149.6797 309.3403 155.4727 C +309.0864 149.3711 307.0903 144.2793 302.9985 140.1533 c +302.9146 140.0684 302.7837 140.0547 302.6841 140.1182 c +302.5825 140.1816 302.5415 140.3066 302.5806 140.4189 c +305.4575 148.4199 303.5239 160.6152 297.0591 170.3691 c +f +209.6938 163.7344 m +211.938 168.5352 217.1528 171.2188 223.1548 171.3271 c +223.2798 171.3311 223.3872 171.2432 223.4087 171.1211 c +223.4321 170.998 223.3638 170.8779 223.2485 170.8359 c +221.2017 170.082 219.5864 168.7637 218.7271 166.9258 c +216.5142 162.1973 220.0942 155.8301 226.7407 152.5566 c +226.8188 152.5186 226.8716 152.4434 226.8813 152.3594 c +226.8911 152.2725 226.856 152.1885 226.7915 152.1318 c +222.5005 148.6143 217.3794 142.0781 217.3794 128.7148 c +217.3774 110.0322 229.5337 92.25 245.6548 92.25 c +254.8677 92.25 262.2876 98.6465 266.1255 108.2422 C +261.9028 102.4844 256.145 98.1348 248.2114 98.1348 c +236.5708 98.1348 227.3579 110.5439 227.356 128.459 c +227.356 145.3457 239.2583 165.0518 255.1216 165.0508 c +263.8247 165.0488 270.3481 158.0117 270.3481 148.9277 c +270.3481 140.8672 265.1021 136.2637 259.2173 136.2637 c +254.7798 136.2637 251.7231 139.3936 250.772 142.7871 c +250.7388 142.9023 250.7915 143.0254 250.897 143.0811 c +251.0044 143.1357 251.1333 143.1104 251.2114 143.0186 c +251.9634 142.124 253.1079 141.3809 254.8657 141.3809 c +257.8091 141.3789 259.3442 143.9082 259.3442 145.7285 c +259.3442 149.1836 256.7856 151.6152 252.9458 151.6152 c +247.7036 151.6152 243.606 145.8564 243.606 138.4385 c +243.606 129.2236 252.436 120.7813 261.2642 120.7813 c +270.2856 120.7813 279.9438 128.8408 279.9438 143.8125 c +279.9419 158.5234 269.9653 175.4141 254.0981 175.4141 c +244.8481 175.4141 236.9849 171.2441 230.9556 164.3398 c +230.8755 164.248 230.7427 164.2246 230.6392 164.2852 c +230.5317 164.3477 230.4849 164.4727 230.5239 164.5879 c +234.9575 177.5234 232.4771 189.7344 225.7036 189.7324 c +222.3892 189.7324 220.7017 187.3535 220.7017 184.8154 c +220.7017 182.21 222.6001 180.0566 225.6704 179.6611 c +225.7915 179.6475 225.8833 179.5479 225.8931 179.4268 c +225.8989 179.3047 225.8188 179.1943 225.7017 179.1641 c +218.8872 177.4004 211.8774 181.1133 211.8774 188.2061 c +211.8774 194.4854 217.2544 199.3398 224.2896 199.3398 c +234.9263 199.3379 240.0142 188.0684 237.7485 177.8047 C +243.2075 184.8486 251.3013 190.6396 262.9263 190.6396 c +286.4692 190.6396 298.3677 163.7715 298.3677 145.7285 c +298.3677 129.3525 295.0415 118.8604 288.1313 110.8018 C +296.1938 116.9404 299.52 123.7227 301.0552 133.0645 C +307.1958 141.5078 323.188 141.5078 v +329.8755 141.5078 336.1177 139.0322 340.9614 134.3438 C +340.9634 134.3447 340.9653 134.3477 340.9673 134.3486 C +341.0024 134.3105 341.0396 134.2695 341.0767 134.2314 C +341.397 133.915 341.7114 133.5918 342.02 133.2578 C +347.0806 128.4102 357.2114 123.8633 366.4517 127.6602 c +366.5571 127.7031 366.6782 127.6699 366.7485 127.582 c +366.8188 127.4932 366.8188 127.3672 366.7524 127.2754 c +362.3462 121.252 354.729 119.335 349.0747 120.21 C +350.1177 116.4941 350.6958 112.3281 350.6958 107.7305 c +350.6978 91.3262 341.8989 79.7598 332.2856 74.1289 C +335.438 70.3281 334.7954 64.3535 331.2544 60.2949 c +331.1743 60.2051 331.0435 60.1816 330.938 60.2402 c +330.8345 60.2988 330.7837 60.4238 330.8188 60.5391 c +332.5513 66.0703 327.4282 70.6875 320.6392 70.4395 c +320.5161 70.4355 320.4067 70.5195 320.3813 70.6406 c +320.356 70.7617 320.4185 70.8828 320.5337 70.9277 c +330.6685 75.0918 337.3911 83.9102 337.3892 94.9355 c +337.3911 106.4492 330.481 115.79 319.3501 115.79 c +310.2661 115.79 301.1821 107.4727 301.1821 97.1133 c +301.1821 89.0508 305.6587 84.3184 311.4165 84.3164 c +316.4067 84.3184 320.3735 87.7715 320.3735 91.8672 c +320.3735 97.7188 313.7896 99.8408 310.2778 95.209 c +310.2095 95.1172 310.0864 95.084 309.981 95.127 c +309.8755 95.1689 309.811 95.2773 309.8228 95.3926 c +310.3462 99.7813 313.5767 103.8926 318.5825 103.8926 c +323.188 103.8926 327.9224 100.0518 327.9224 91.8652 c +327.9224 82.1406 318.5845 72.291 303.231 72.2891 c +282.2466 72.2891 270.8599 95.959 281.0942 114.8945 C +275.8501 108.8809 271.1157 102.4844 271.1157 91.0977 c +271.1138 69.5898 292.3794 55.0488 317.4692 63.5977 c +317.5884 63.6367 317.7192 63.584 317.7759 63.4746 c +317.8345 63.3633 317.8013 63.2266 317.6997 63.1523 c +310.6938 58.043 303.356 50.5137 303.356 37.873 c +303.356 24.6934 312.0552 15.3535 325.6196 15.3535 c +336.1099 15.3535 342.7642 21.752 342.7642 29.2988 c +342.7642 35.0566 339.0454 39.6641 332.6567 39.6641 c +323.1431 39.6641 319.9087 29.3203 324.8325 24.6953 c +324.9165 24.6152 324.936 24.4902 324.8813 24.3887 c +324.8247 24.2871 324.7056 24.2344 324.5942 24.2637 c +319.8247 25.5 315.2563 30.332 315.2563 37.6152 c +315.2544 50.1563 326.897 58.4727 339.6919 58.4727 c +345.688 58.4727 351.4907 56.7188 356.1646 53.4297 C +355.6118 49.2773 357.0317 44.6816 359.1313 41.5879 C +357.1821 48.457 359.2915 59.7656 369.8032 59.7676 c +375.6958 59.7656 379.5903 55.2383 379.5903 49.8867 c +379.5903 43.5605 374.2446 40.6094 369.895 41.2148 c +369.7798 41.2305 369.6899 41.3223 369.6763 41.4375 c +369.6646 41.5527 369.731 41.6602 369.8384 41.7031 c +371.4243 42.3105 372.7817 43.9727 372.7817 45.9668 c +372.7817 48.4668 370.8696 49.9492 368.8696 49.9492 c +365.5767 49.9492 363.7466 46.2793 364.8989 42.2305 C +364.8872 42.2285 L +365.9595 39.3926 366.561 36.2246 366.561 32.7363 c +366.561 15.9746 348.3813 0.001953 325.4399 0 c +301.229 0 288.3872 17.2734 288.3892 35.0566 c +288.3892 44.5938 291.9692 51.8184 296.5767 56.4258 C +276.6548 54.3066 264.0786 62.8223 257.2974 75.1035 C +261.7759 78.9414 263.438 84.5723 Y +258.0649 77.5352 248.854 71.3945 235.9321 71.3945 c +216.356 71.3945 201.0005 90.5859 201.0005 111.1836 c +201.0005 124.2568 205.8032 136.9648 215.5649 145.4307 C +209.5278 150.459 206.9185 157.8018 209.6938 163.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +73.2617 96.3711 m +73.3867 96.3711 73.4922 96.4629 73.5098 96.585 c +75.8906 112.5996 85.1641 125.9746 97.9023 133.9814 c +98.0059 134.0449 98.0488 134.1758 98.0039 134.29 c +97.957 134.4023 97.8379 134.4688 97.7168 134.4443 c +87.2461 132.3398 77.9238 126.5811 71.2695 118.4141 C +66.6436 131.7891 56.0332 140.418 42.9688 144.0654 C +47.7773 149.6582 45.2617 157.5986 37.8496 158.9023 c +37.7363 158.9229 37.624 158.8643 37.5752 158.7607 c +37.5273 158.6563 37.5537 158.5322 37.6416 158.46 c +41.6152 155.1143 40.1611 147.04 28.3047 147.04 c +20.5098 147.04 15.4844 150.2188 15.4844 154.5254 c +15.4844 157.9102 18.5459 159.7559 21.125 159.7559 c +25.541 159.7559 28.0645 155.7949 26.167 152.2129 c +26.1123 152.1104 26.1348 151.9814 26.2227 151.9033 c +26.3105 151.8271 26.4395 151.8184 26.5361 151.8857 c +28.7852 153.4492 30.3555 155.5059 30.3555 158.6768 c +30.3555 164.0635 25.3301 169.8066 17.0234 169.8066 c +8.10156 169.8066 0 162.9355 0 154.5254 c +0 142.71 10.0488 137.0918 20.6133 136.0918 C +16.248 134.4189 12.9795 129.5664 v +12.9141 129.4697 12.9238 129.3418 13.001 129.2559 c +13.0791 129.1689 13.2051 129.1475 13.3086 129.2012 c +19.1387 132.2822 25.7949 133.9453 32.8105 133.9453 c +52.4316 133.9453 69.3574 117.541 73.0098 96.5801 c +73.0313 96.4561 73.1377 96.3691 73.2617 96.3711 c +f +149.9395 148.7773 m +154.5488 156.4551 156.1914 169.627 151.8965 179.46 c +151.8477 179.5703 151.8828 179.6992 151.9824 179.7686 c +152.0801 179.8379 152.2148 179.8281 152.3027 179.7461 c +157.1094 175.1914 161.2422 164.5684 159.0078 152.2871 C +162.1055 149.8936 164.0527 147.5176 165.5215 144.335 c +165.5684 144.2314 165.541 144.1104 165.4551 144.0352 c +165.3691 143.9629 165.2441 143.9551 165.1484 144.0186 c +160.1523 147.3809 155.6855 148.5283 149.9395 148.7773 C +f +139.3301 28.9707 m +139.4004 28.8672 139.3828 28.7266 139.291 28.6426 c +139.1973 28.5586 139.0566 28.5547 138.959 28.6348 c +132.1445 34.1621 123.084 37.6895 111.9238 37.6895 c +84.3516 37.6895 66.9512 21.1719 64.2158 3.76367 c +64.1982 3.65234 64.1094 3.56641 63.998 3.55078 c +63.8857 3.53711 63.7773 3.59766 63.7324 3.70117 c +61.0068 9.95898 59.3652 19.0352 67.7813 31.209 c +72.8154 38.4941 78.9102 43.5098 78.9102 50.0273 c +78.9102 54.2852 76.6504 57.1797 73.2227 57.1797 c +69.6172 57.1797 67.2861 54.0918 67.2861 50.625 c +67.2861 48.877 67.791 47.1465 68.6953 45.5801 c +68.7539 45.4766 68.7354 45.3496 68.6504 45.2676 c +68.5645 45.1875 68.4355 45.1758 68.3379 45.2402 c +65.3652 47.1777 62.7109 50.6367 62.7109 55.5117 c +62.7109 62.6836 68.8438 68.6816 77.1797 68.6816 c +86.1543 68.6816 93.5039 61.6328 93.5039 51.4922 c +93.5039 48.0156 92.5137 43.8242 90.041 40.3613 C +93.4258 43.1875 95.2324 45.1875 96.7188 49.5117 C +107.1191 51.3223 118.2246 49.6602 127.0488 43.8691 C +127.3047 49.9707 129.3008 55.0605 133.3926 59.1875 c +133.4766 59.2715 133.6074 59.2852 133.707 59.2227 c +133.8086 59.1582 133.8516 59.0332 133.8105 58.9219 c +130.9336 50.9199 132.8652 38.7246 139.3301 28.9707 c +f +226.6973 35.6055 m +224.4512 30.8066 219.2383 28.1211 213.2363 28.0117 c +213.1113 28.0098 213.0039 28.0977 212.9824 28.2188 c +212.959 28.3418 213.0273 28.4609 213.1426 28.5039 c +215.1895 29.2578 216.8047 30.5762 217.6641 32.4141 c +219.877 37.1426 216.2969 43.5098 209.6504 46.7832 c +209.5723 46.8223 209.5195 46.8965 209.5098 46.9824 c +209.5 47.0684 209.5332 47.1523 209.5996 47.207 c +213.8906 50.7266 219.0117 57.2617 219.0117 70.627 c +219.0117 89.3086 206.8574 107.0898 190.7363 107.0898 c +181.5234 107.0898 174.1035 100.6934 170.2656 91.0977 C +174.4863 96.8564 180.2441 101.2051 188.1777 101.2051 c +199.8203 101.2051 209.0332 88.7969 209.0332 70.8828 c +209.0332 53.9941 197.1328 34.2891 181.2676 34.2891 c +172.5664 34.2891 166.043 41.3281 166.043 50.4121 c +166.043 58.4746 171.2891 63.0781 177.1758 63.0781 c +181.6094 63.0781 184.668 59.9473 185.6191 56.5527 c +185.6504 56.4375 185.5996 56.3164 185.4922 56.2598 c +185.3867 56.2051 185.2578 56.2305 185.1797 56.3223 c +184.4277 57.2168 183.2832 57.9609 181.5254 57.9609 c +178.582 57.9609 177.0469 55.4316 177.0469 53.6113 c +177.0469 50.1563 179.6055 47.7246 183.4453 47.7246 c +188.6895 47.7246 192.7852 53.4824 192.7852 60.9023 c +192.7852 70.1152 183.9551 78.5586 175.127 78.5586 c +166.1055 78.5586 156.4473 70.5 156.4473 55.5293 c +156.4473 40.8164 166.4277 23.9258 182.293 23.9258 c +191.543 23.9258 199.4043 28.0957 205.4355 35.002 c +205.5156 35.0918 205.6484 35.1152 205.7539 35.0547 c +205.8594 34.9941 205.9063 34.8672 205.8672 34.752 c +201.4336 21.8164 203.9121 9.60742 210.6875 9.60742 c +214.002 9.60742 215.6895 11.9863 215.6895 14.5234 c +215.6895 17.1309 213.791 19.2852 210.7207 19.6777 c +210.5996 19.6934 210.5059 19.793 210.498 19.9141 c +210.4922 20.0352 210.5703 20.1465 210.6895 20.1758 c +217.5039 21.9395 224.5137 18.2285 224.5137 11.1328 c +224.5137 4.85547 219.1367 0.001953 212.1016 0.001953 c +201.4648 0.001953 196.377 11.2715 198.6426 21.5371 C +193.1836 14.4922 185.0898 8.70117 173.4648 8.70117 c +149.9219 8.70117 138.0234 35.5703 138.0234 53.6113 c +138.0234 69.9883 141.3496 80.4785 148.2598 88.5391 C +140.1973 82.3984 136.8711 75.6172 135.3379 66.2773 C +129.1953 57.832 113.2031 57.832 v +106.5156 57.832 100.2734 60.3086 95.4297 64.998 C +95.4277 64.9961 95.4258 64.9941 95.4238 64.9902 C +95.3887 65.0313 95.3496 65.0703 95.3145 65.1094 C +94.9941 65.4238 94.6797 65.748 94.3711 66.082 C +89.3086 70.9316 79.1797 75.4785 69.9395 71.6797 c +69.834 71.6367 69.7129 71.6699 69.6426 71.7578 c +69.5723 71.8477 69.5703 71.9727 69.6377 72.0645 c +74.0449 78.0898 81.6621 80.0059 87.3164 79.1309 C +86.2715 82.8457 85.6934 87.0117 85.6934 91.6094 c +85.6934 108.0137 94.4922 119.5801 104.1055 125.2109 C +100.9512 129.0137 101.5957 134.9883 105.1367 139.0449 c +105.2168 139.1357 105.3477 139.1582 105.4531 139.0996 c +105.5566 139.041 105.6055 138.918 105.5703 138.8018 c +103.8398 133.2695 108.9629 128.6523 115.752 128.9004 c +115.875 128.9033 115.9824 128.8193 116.0098 128.6992 c +116.0352 128.5801 115.9707 128.457 115.8574 128.4111 c +105.7207 124.248 99 115.4316 99 104.4033 c +99 92.8906 105.9082 83.5488 117.041 83.5488 c +126.125 83.5488 135.209 91.8672 135.209 102.2285 c +135.209 110.2891 130.7305 115.0225 124.9727 115.0225 c +119.9844 115.0225 116.0176 111.5684 116.0176 107.4736 c +116.0176 101.6211 122.5996 99.499 126.1113 104.1309 c +126.1816 104.2227 126.3027 104.2559 126.4082 104.2129 c +126.5156 104.1699 126.5801 104.0625 126.5664 103.9482 c +126.043 99.5586 122.8145 95.4482 117.8086 95.4482 c +113.2031 95.4482 108.4688 99.2861 108.4688 107.4746 c +108.4688 117.1982 117.8066 127.0508 133.1602 127.0508 c +154.1426 127.0508 165.5313 103.3809 155.2969 84.4453 C +160.541 90.459 165.2754 96.8555 165.2754 108.2432 c +165.2754 129.75 144.0117 144.291 118.9219 135.7441 c +118.8027 135.7021 118.6719 135.7559 118.6152 135.8672 c +118.5566 135.9785 118.5879 136.1143 118.6895 136.1895 c +125.6953 141.2979 133.0332 148.8262 133.0332 161.4668 c +133.0332 174.6475 124.334 183.9854 110.7715 183.9854 c +100.2793 183.9854 93.627 177.5879 93.627 170.04 c +93.627 164.2822 97.3457 159.6768 103.7344 159.6768 c +113.2461 159.6768 116.4805 170.0195 111.5586 174.6445 c +111.4746 174.7236 111.4551 174.8516 111.5098 174.9521 c +111.5664 175.0547 111.6836 175.1055 111.7969 175.0762 c +116.5664 173.8398 121.1348 169.0068 121.1348 161.7236 c +121.1348 149.1855 109.4922 140.8682 96.6973 140.8682 c +90.7012 140.8682 84.8984 142.623 80.2266 145.9102 C +80.7773 150.0635 79.3574 154.6602 77.2598 157.752 C +79.209 150.8848 77.1016 139.5732 66.5859 139.5732 c +60.6953 139.5732 56.8008 144.1025 56.8008 149.4551 c +56.8008 155.7793 62.1465 158.7314 66.4961 158.125 c +66.6113 158.1104 66.7002 158.0186 66.7129 157.9023 c +66.7266 157.7891 66.6602 157.6797 66.5527 157.6367 c +64.9668 157.0293 63.6104 155.3691 63.6104 153.373 c +63.6104 150.873 65.5195 149.3906 67.5195 149.3906 c +70.8145 149.3906 72.6445 153.0605 71.4922 157.1104 C +71.5039 157.1104 L +70.4307 159.9473 69.8281 163.1152 69.8281 166.6055 c +69.8281 183.3672 88.0098 199.3398 110.9492 199.3398 c +135.1621 199.3398 148.0039 182.0664 148.0039 164.2822 c +148.0039 154.7461 144.4219 147.5225 139.8145 142.915 C +159.7363 145.0332 172.3125 136.5176 179.0938 124.2354 C +174.6152 120.3975 172.9531 114.7676 Y +178.3262 121.8057 187.5371 127.9453 200.459 127.9453 c +220.0352 127.9453 235.3906 108.7539 235.3906 88.1563 c +235.3906 75.084 230.5879 62.375 220.8262 53.9102 C +226.8633 48.8809 229.4727 41.5391 226.6973 35.6055 c +f +*U +*u +148.2109 160.9053 m +148.1777 160.7852 148.2383 160.6582 148.3516 160.6094 c +163.1758 154.0957 173.6367 141.6289 178.0059 127.2324 c +178.041 127.1152 178.1543 127.0391 178.2773 127.0527 c +178.3984 127.0664 178.4941 127.166 178.502 127.2871 c +179.2285 137.9434 176.127 148.4531 170 157.0234 C +184.1211 157.9648 195.2402 165.9297 202.1992 177.5723 C +206.3281 171.46 214.6504 171.7969 217.8594 178.6035 c +217.9102 178.708 217.8828 178.832 217.7949 178.9063 c +217.707 178.9805 217.5801 178.9873 217.4863 178.9219 c +213.2129 175.9688 205.8066 179.498 208.9277 190.9355 c +210.9805 198.4561 215.3711 202.4668 219.5254 201.333 c +222.791 200.4414 223.7656 197.002 223.0859 194.5146 c +221.9238 190.2539 217.4375 188.8623 214.4805 191.6357 c +214.3965 191.7158 214.2676 191.7285 214.1699 191.6641 c +214.0723 191.5986 214.0293 191.4775 214.0684 191.3662 c +214.9863 188.7852 216.5566 186.7285 219.6152 185.8936 c +224.8105 184.4756 231.6738 187.8115 233.8613 195.8252 c +236.2109 204.4316 231.7148 214.0566 223.6035 216.2715 c +212.2031 219.3818 204.1387 211.166 200.3926 201.2383 C +199.9258 205.8896 196.1074 210.3203 v +196.0313 210.4092 195.9043 210.4336 195.8008 210.3818 c +195.6973 210.3291 195.6426 210.2129 195.666 210.0996 c +197.1055 203.6641 196.957 196.8047 195.1094 190.0361 c +189.9434 171.1074 169.6621 159.0977 148.4785 161.0938 c +148.3535 161.1055 148.2402 161.0254 148.2109 160.9053 c +f +178.5801 73.1348 m +184.7734 66.666 197.0488 61.6133 207.6641 63.168 c +207.7852 63.1855 207.9004 63.1172 207.9395 63.0039 c +207.9805 62.8906 207.9355 62.7637 207.834 62.7012 c +202.1738 59.2617 190.8379 58.0723 179.5781 63.4609 C +176.4531 61.1035 173.6484 59.8496 170.1914 59.2715 c +170.0801 59.2539 169.9688 59.3125 169.9199 59.4141 c +169.873 59.5156 169.8984 59.6387 169.9844 59.7148 c +174.5449 63.6484 176.8281 67.6563 178.5801 73.1348 C +f +65.793 114.9121 m +65.6748 114.8711 65.5439 114.9258 65.4873 115.0371 c +65.4307 115.1484 65.4639 115.2852 65.5674 115.3594 c +72.6934 120.4785 78.4824 128.291 81.4199 139.0566 c +88.6797 165.6563 77.3262 186.792 61.2529 194.0146 c +61.1494 194.0605 61.0898 194.1689 61.1045 194.2803 c +61.1211 194.3926 61.208 194.4814 61.3193 194.4971 c +68.0742 195.4785 77.2617 194.6729 86.791 183.3486 c +92.4922 176.5732 95.7266 169.373 102.0137 167.6563 c +106.1211 166.5352 109.5098 167.9551 110.4121 171.2617 c +111.3613 174.7393 108.9961 177.8018 105.6523 178.7148 c +103.9648 179.1738 102.1621 179.1436 100.4141 178.6836 c +100.2988 178.6533 100.1816 178.7051 100.125 178.8086 c +100.0703 178.9121 100.0918 179.04 100.1797 179.1172 c +102.832 181.4746 106.8672 183.125 111.5703 181.8408 c +118.4902 179.9531 122.6602 172.457 120.4668 164.415 c +118.1035 155.7578 109.3691 150.5234 99.5859 153.1934 c +96.2324 154.1084 92.4492 156.168 89.7598 159.4648 C +91.5938 155.4551 93.0488 153.1855 96.8281 150.6133 C +95.8359 140.1035 91.3086 129.8271 83.4004 122.8389 C +89.2188 120.9863 93.6035 117.7207 96.5078 112.6855 c +96.5664 112.582 96.5449 112.4531 96.459 112.373 c +96.3691 112.293 96.2383 112.2832 96.1406 112.3535 c +89.1797 117.2344 76.9043 118.582 65.793 114.9121 c +f +49.1914 28.8809 m +45.1533 32.3105 43.9355 38.0469 45.4102 43.8672 c +45.4414 43.9883 45.5537 44.0684 45.6768 44.0566 c +45.8018 44.0469 45.8984 43.9492 45.9092 43.8281 c +46.0977 41.6543 46.9443 39.748 48.4912 38.4355 c +52.4707 35.0566 59.5557 36.834 64.4629 42.3828 c +64.5215 42.4492 64.6074 42.4805 64.6924 42.4668 c +64.7783 42.4531 64.8506 42.3984 64.8857 42.3203 c +67.1514 37.2539 72.1074 30.5938 85 27.0742 c +103.0234 22.1563 123.3789 29.1992 127.623 44.752 c +130.0488 53.6406 125.8301 62.4824 117.584 68.7109 C +122.0293 63.123 124.707 56.4238 122.6172 48.7695 c +119.5527 37.5391 105.1563 31.918 87.875 36.6348 c +71.582 41.0801 55.7061 57.748 59.8828 73.0547 c +62.1738 81.4492 70.6816 85.8887 79.4453 83.4961 c +87.2227 81.375 90.2832 75.1016 88.7324 69.4219 c +87.5664 65.1445 83.7402 63.0195 80.2148 62.9941 c +80.0957 62.9941 79.9922 63.0762 79.9648 63.1934 c +79.9414 63.3105 79.998 63.4277 80.1074 63.4785 c +81.1699 63.9688 82.1875 64.877 82.6504 66.5742 c +83.4258 69.4121 81.3906 71.5605 79.6348 72.0391 c +76.3018 72.9492 73.2822 71.1211 72.2705 67.416 c +70.8906 62.3574 75.3662 56.8906 82.5234 54.9355 c +91.4121 52.5117 101.8828 58.8066 104.207 67.3223 c +106.582 76.0254 101.3496 87.4648 86.9082 91.4063 c +72.7148 95.2813 53.792 90.0996 49.6152 74.793 c +47.1797 65.8691 49.1328 57.1875 54.207 49.5508 c +54.2734 49.4512 54.2607 49.3164 54.1748 49.2305 c +54.0879 49.1445 53.9531 49.1328 53.8525 49.2012 c +42.541 56.8828 30.1104 57.707 28.3262 51.1699 c +27.4531 47.9727 29.3037 45.7188 31.752 45.0508 c +34.2676 44.3652 36.8457 45.6289 38.0322 48.4883 c +38.0791 48.5996 38.2002 48.6641 38.3193 48.6406 c +38.4375 48.6133 38.5244 48.5098 38.5215 48.3867 c +38.4287 41.3477 33.0029 35.5625 26.1572 37.4316 c +20.1016 39.084 16.835 45.5488 18.6875 52.3359 c +21.4883 62.5977 33.6992 64.5391 43.0059 59.6504 C +37.6465 66.7715 34.1914 76.1035 37.252 87.3184 c +43.4502 110.0313 72.5039 114.4355 89.9082 109.6855 c +105.707 105.373 114.9512 99.4023 120.9082 90.6152 C +117.1074 100.0098 111.4414 105.0039 102.834 108.9434 C +96.3047 117.0918 100.5156 132.5195 v +102.2754 138.9707 106.3086 144.3418 112.1074 147.7793 C +112.1074 147.7813 112.1055 147.7842 112.1016 147.7871 C +112.1504 147.8105 112.1992 147.8379 112.2461 147.8613 C +112.6328 148.0879 113.0293 148.3057 113.4316 148.5146 C +119.4434 152.1211 126.4961 160.6973 125.2656 170.6113 c +125.252 170.7236 125.3145 170.832 125.418 170.877 c +125.5234 170.9219 125.6445 170.8896 125.7148 170.8018 c +130.3672 164.9629 130.2109 157.1104 127.8789 151.8857 C +131.7363 151.915 135.9082 151.375 140.3438 150.165 c +156.168 145.8457 165.0117 134.3135 167.9121 123.5566 C +172.4102 125.5977 178.0059 123.4043 180.9883 118.9199 c +181.0527 118.8184 181.041 118.6855 180.957 118.5996 c +180.873 118.5156 180.7402 118.5 180.6387 118.5645 c +175.7578 121.6914 169.9551 117.9648 168.4043 111.3496 c +168.377 111.2305 168.2676 111.1484 168.1445 111.1543 c +168.0215 111.1602 167.9199 111.2539 167.9063 111.377 c +166.5586 122.251 159.8223 131.0566 149.1836 133.96 c +138.0762 136.9922 127.2441 132.7852 124.3145 122.0469 c +121.9219 113.2832 127.5566 102.3301 137.5508 99.6016 c +145.3281 97.4785 151.0742 100.5527 152.5898 106.1074 c +153.9043 110.9199 151.6152 115.6563 147.666 116.7344 c +142.0176 118.2754 138.2383 112.4844 141.7832 107.877 c +141.8516 107.7852 141.8535 107.6602 141.7832 107.5684 c +141.7148 107.4766 141.5918 107.4434 141.4863 107.4863 c +137.3887 109.1465 134.2734 113.3418 135.5918 118.1729 c +136.8047 122.6152 141.7539 126.1729 149.6543 124.0166 c +159.0352 121.457 166.0801 109.8555 162.0371 95.043 c +156.5137 74.7988 130.6797 70.0449 115.1074 84.9043 C +119.5273 78.2617 124.4512 72.0098 135.4375 69.0117 c +156.1875 63.3496 175.8125 80.0332 174.1719 106.4902 c +174.1641 106.6152 174.25 106.7285 174.373 106.7539 c +174.4941 106.7813 174.6191 106.7129 174.6641 106.5977 c +177.7461 98.4922 183.0781 89.4316 195.2734 86.1035 c +207.9883 82.6328 219.2871 88.5664 222.8594 101.6504 c +225.6211 111.7734 221.2012 119.875 213.9199 121.8623 c +208.3652 123.3789 202.9414 121.0039 201.2598 114.8398 c +198.7559 105.6641 207.8828 99.8203 213.6406 103.3516 c +213.7383 103.4121 213.8672 103.3965 213.9492 103.3164 c +214.0332 103.2363 214.0508 103.1094 213.9922 103.0078 c +211.5449 98.7324 205.6797 95.5977 198.6543 97.5156 c +186.5566 100.8164 181.5996 114.2383 184.9668 126.5811 c +186.5449 132.3652 189.7676 137.502 194.168 141.1426 C +198.0293 139.5186 202.8379 139.6777 206.373 140.8867 C +199.2344 140.8154 188.8789 145.8262 191.6465 155.9707 c +193.1973 161.6533 198.5918 164.2188 203.7559 162.8086 c +209.8574 161.1436 211.2969 155.21 209.5684 151.1729 c +209.5215 151.0654 209.4102 151.0039 209.2969 151.0225 c +209.1816 151.04 209.0938 151.1318 209.082 151.2471 c +208.9141 152.9375 207.668 154.6836 205.7441 155.208 c +203.332 155.8662 201.3984 154.415 200.873 152.4854 c +200.0039 149.3066 203.0625 146.5752 207.2734 146.6211 C +207.2695 146.6094 L +210.2891 146.8984 213.5039 146.6445 216.8711 145.7266 c +233.041 141.3125 243.6641 119.5674 237.623 97.4375 c +231.248 74.0781 211.2051 66.2363 194.0469 70.9199 c +184.8477 73.4297 178.8223 78.7871 175.5898 84.4453 C +172.3887 64.668 160.8613 54.7793 147.2285 51.4707 C +144.7051 56.8008 139.7109 59.8867 Y +145.0859 52.8496 148.584 42.3477 145.1816 29.8809 c +140.0273 10.9961 117.4707 1.23438 97.5996 6.6582 c +84.9883 10.0996 73.9922 18.0801 68.3965 29.7266 C +61.9551 25.2266 54.1855 24.6406 49.1914 28.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +196.1289 102.9688 m +196.0039 102.9688 195.8984 102.877 195.8789 102.7539 c +193.5 86.7402 184.2266 73.3652 171.4883 65.3594 c +171.3848 65.2949 171.3398 65.1641 171.3867 65.0508 c +171.4316 64.9375 171.5527 64.8711 171.6719 64.8965 c +182.1445 67 191.4648 72.7598 198.1211 80.9277 C +202.7461 67.5508 213.3574 58.9219 226.4219 55.2734 C +221.6133 49.6816 224.1289 41.7402 231.541 40.4375 c +231.6543 40.416 231.7656 40.4746 231.8145 40.5781 c +231.8633 40.6816 231.8359 40.8066 231.748 40.8809 c +227.7754 44.2266 229.2285 52.3008 241.0859 52.3008 c +248.8794 52.3008 253.9067 49.1211 253.9067 44.8145 c +253.9067 41.4297 250.8442 39.584 248.2642 39.584 c +243.8501 39.584 241.3262 43.5449 243.2227 47.127 c +243.2773 47.2305 243.2559 47.3574 243.168 47.4355 c +243.0801 47.5137 242.9512 47.5215 242.8535 47.4551 c +240.6055 45.8906 239.0352 43.834 239.0352 40.6641 c +239.0352 35.2773 244.061 29.5352 252.3677 29.5332 c +261.2896 29.5332 269.3911 36.4043 269.3911 44.8145 c +269.3911 56.6309 259.3423 62.248 248.7778 63.248 C +253.1431 64.9219 256.4106 69.7734 v +256.4771 69.8691 256.4673 69.998 256.3892 70.084 c +256.311 70.1719 256.1841 70.1934 256.0825 70.1387 c +250.2524 67.0566 243.5938 65.3945 236.5801 65.3945 c +216.957 65.3945 200.0332 81.7988 196.3809 102.7607 c +196.3594 102.8818 196.252 102.9727 196.1289 102.9688 c +f +119.4512 50.5625 m +114.8438 42.8867 113.1992 29.7129 117.4941 19.8809 c +117.543 19.7695 117.5078 19.6406 117.4082 19.5703 c +117.3086 19.502 117.1758 19.5117 117.0879 19.5957 c +112.2813 24.1484 108.1484 34.7715 110.3828 47.0527 C +107.2871 49.4473 105.3379 51.8223 103.8691 55.0059 c +103.8223 55.1074 103.8496 55.2305 103.9355 55.3047 c +104.0215 55.377 104.1465 55.3848 104.2422 55.3203 c +109.2383 51.959 113.7051 50.8125 119.4512 50.5625 C +f +130.0586 170.3691 m +129.9902 170.4727 130.0078 170.6133 130.0996 170.6973 c +130.1934 170.7813 130.334 170.7852 130.4316 170.7061 c +137.2461 165.1797 146.3066 161.6504 157.4668 161.6504 c +185.0371 161.6504 202.4395 178.1689 205.1738 195.5771 c +205.1914 195.6885 205.2813 195.7734 205.3926 195.7891 c +205.5039 195.8047 205.6133 195.7422 205.6582 195.6396 c +208.3828 189.3818 210.0254 180.3057 201.6094 168.1309 c +196.5742 160.8457 190.4785 155.8311 190.4785 149.3145 c +190.4785 145.0566 192.7402 142.1602 196.168 142.1602 c +199.7734 142.1602 202.1055 145.248 202.1035 148.7148 c +202.1035 150.4629 201.5996 152.1934 200.6953 153.7607 c +200.6367 153.8633 200.6543 153.9902 200.7402 154.0723 c +200.8242 154.1523 200.9551 154.165 201.0527 154.1016 c +204.0254 152.1641 206.6797 148.7021 206.6797 143.8281 c +206.6797 136.6563 200.5469 130.6602 192.209 130.6602 c +183.2363 130.6602 175.8867 137.709 175.8867 147.8477 c +175.8867 151.3262 176.875 155.5156 179.3496 158.9805 C +175.9648 156.1523 174.1582 154.1523 172.6719 149.8271 C +162.2715 148.0186 151.166 149.6797 142.3398 155.4727 C +142.0859 149.3711 140.0898 144.2793 135.998 140.1533 c +135.9141 140.0684 135.7832 140.0547 135.6836 140.1182 c +135.582 140.1816 135.541 140.3066 135.5801 140.4189 c +138.457 148.4199 136.5234 160.6152 130.0586 170.3691 c +f +42.6934 163.7344 m +44.9375 168.5352 50.1523 171.2188 56.1543 171.3271 c +56.2793 171.3311 56.3867 171.2432 56.4082 171.1211 c +56.4316 170.998 56.3633 170.8779 56.248 170.8359 c +54.2012 170.082 52.5859 168.7637 51.7266 166.9258 c +49.5137 162.1973 53.0938 155.8301 59.7402 152.5566 c +59.8184 152.5186 59.8711 152.4434 59.8809 152.3594 c +59.8906 152.2725 59.8555 152.1885 59.791 152.1318 c +55.5 148.6143 50.3789 142.0781 50.3789 128.7148 c +50.377 110.0322 62.5332 92.25 78.6543 92.25 c +87.8672 92.25 95.2871 98.6465 99.125 108.2422 C +94.9023 102.4844 89.1445 98.1348 81.2109 98.1348 c +69.5703 98.1348 60.3574 110.5439 60.3555 128.459 c +60.3555 145.3457 72.2578 165.0518 88.1211 165.0508 c +96.8242 165.0488 103.3477 158.0117 103.3477 148.9277 c +103.3477 140.8672 98.1016 136.2637 92.2168 136.2637 c +87.7793 136.2637 84.7227 139.3936 83.7715 142.7871 c +83.7383 142.9023 83.791 143.0254 83.8965 143.0811 c +84.0039 143.1357 84.1328 143.1104 84.2109 143.0186 c +84.9629 142.124 86.1074 141.3809 87.8652 141.3809 c +90.8086 141.3789 92.3438 143.9082 92.3438 145.7285 c +92.3438 149.1836 89.7852 151.6152 85.9453 151.6152 c +80.7031 151.6152 76.6055 145.8564 76.6055 138.4385 c +76.6055 129.2236 85.4355 120.7813 94.2637 120.7813 c +103.2852 120.7813 112.9434 128.8408 112.9434 143.8125 c +112.9414 158.5234 102.9648 175.4141 87.0977 175.4141 c +77.8477 175.4141 69.9844 171.2441 63.9551 164.3398 c +63.875 164.248 63.7422 164.2246 63.6387 164.2852 c +63.5313 164.3477 63.4844 164.4727 63.5234 164.5879 c +67.957 177.5234 65.4766 189.7344 58.7031 189.7324 c +55.3887 189.7324 53.7012 187.3535 53.7012 184.8154 c +53.7012 182.21 55.5996 180.0566 58.6699 179.6611 c +58.791 179.6475 58.8828 179.5479 58.8926 179.4268 c +58.8984 179.3047 58.8184 179.1943 58.7012 179.1641 c +51.8867 177.4004 44.877 181.1133 44.877 188.2061 c +44.877 194.4854 50.2539 199.3398 57.2891 199.3398 c +67.9258 199.3379 73.0137 188.0684 70.748 177.8047 C +76.207 184.8486 84.3008 190.6396 95.9258 190.6396 c +119.4688 190.6396 131.3672 163.7715 131.3672 145.7285 c +131.3672 129.3525 128.041 118.8604 121.1309 110.8018 C +129.1934 116.9404 132.5195 123.7227 134.0547 133.0645 C +140.1953 141.5078 156.1875 141.5078 v +162.875 141.5078 169.1172 139.0322 173.9609 134.3438 C +173.9629 134.3447 173.9648 134.3477 173.9668 134.3486 C +174.002 134.3105 174.0391 134.2695 174.0762 134.2314 C +174.3965 133.915 174.7109 133.5918 175.0195 133.2578 C +180.0801 128.4102 190.2109 123.8633 199.4512 127.6602 c +199.5566 127.7031 199.6777 127.6699 199.748 127.582 c +199.8184 127.4932 199.8184 127.3672 199.752 127.2754 c +195.3457 121.252 187.7285 119.335 182.0742 120.21 C +183.1172 116.4941 183.6953 112.3281 183.6953 107.7305 c +183.6973 91.3262 174.8984 79.7598 165.2852 74.1289 C +168.4375 70.3281 167.7949 64.3535 164.2539 60.2949 c +164.1738 60.2051 164.043 60.1816 163.9375 60.2402 c +163.834 60.2988 163.7832 60.4238 163.8184 60.5391 c +165.5508 66.0703 160.4277 70.6875 153.6387 70.4395 c +153.5156 70.4355 153.4063 70.5195 153.3809 70.6406 c +153.3555 70.7617 153.418 70.8828 153.5332 70.9277 c +163.668 75.0918 170.3906 83.9102 170.3887 94.9355 c +170.3906 106.4492 163.4805 115.79 152.3496 115.79 c +143.2656 115.79 134.1816 107.4727 134.1816 97.1133 c +134.1816 89.0508 138.6582 84.3184 144.416 84.3164 c +149.4063 84.3184 153.373 87.7715 153.373 91.8672 c +153.373 97.7188 146.7891 99.8408 143.2773 95.209 c +143.209 95.1172 143.0859 95.084 142.9805 95.127 c +142.875 95.1689 142.8105 95.2773 142.8223 95.3926 c +143.3457 99.7813 146.5762 103.8926 151.582 103.8926 c +156.1875 103.8926 160.9219 100.0518 160.9219 91.8652 c +160.9219 82.1406 151.584 72.291 136.2305 72.2891 c +115.2461 72.2891 103.8594 95.959 114.0938 114.8945 C +108.8496 108.8809 104.1152 102.4844 104.1152 91.0977 c +104.1133 69.5898 125.3789 55.0488 150.4688 63.5977 c +150.5879 63.6367 150.7188 63.584 150.7754 63.4746 c +150.834 63.3633 150.8008 63.2266 150.6992 63.1523 c +143.6934 58.043 136.3555 50.5137 136.3555 37.873 c +136.3555 24.6934 145.0547 15.3535 158.6191 15.3535 c +169.1094 15.3535 175.7637 21.752 175.7637 29.2988 c +175.7637 35.0566 172.0449 39.6641 165.6563 39.6641 c +156.1426 39.6641 152.9082 29.3203 157.832 24.6953 c +157.916 24.6152 157.9355 24.4902 157.8809 24.3887 c +157.8242 24.2871 157.7051 24.2344 157.5938 24.2637 c +152.8242 25.5 148.2559 30.332 148.2559 37.6152 c +148.2539 50.1563 159.8965 58.4727 172.6914 58.4727 c +178.6875 58.4727 184.4902 56.7188 189.1641 53.4297 C +188.6113 49.2773 190.0313 44.6816 192.1309 41.5879 C +190.1816 48.457 192.291 59.7656 202.8027 59.7676 c +208.6953 59.7656 212.5898 55.2383 212.5898 49.8867 c +212.5898 43.5605 207.2441 40.6094 202.8945 41.2148 c +202.7793 41.2305 202.6895 41.3223 202.6758 41.4375 c +202.6641 41.5527 202.7305 41.6602 202.8379 41.7031 c +204.4238 42.3105 205.7813 43.9727 205.7813 45.9668 c +205.7813 48.4668 203.8691 49.9492 201.8691 49.9492 c +198.5762 49.9492 196.7461 46.2793 197.8984 42.2305 C +197.8867 42.2285 L +198.959 39.3926 199.5605 36.2246 199.5605 32.7363 c +199.5605 15.9746 181.3809 0.001953 158.4395 0 c +134.2285 0 121.3867 17.2734 121.3887 35.0566 c +121.3887 44.5938 124.9688 51.8184 129.5762 56.4258 C +109.6543 54.3066 97.0781 62.8223 90.2969 75.1035 C +94.7754 78.9414 96.4375 84.5723 Y +91.0645 77.5352 81.8535 71.3945 68.9316 71.3945 c +49.3555 71.3945 34 90.5859 34 111.1836 c +34 124.2568 38.8027 136.9648 48.5645 145.4307 C +42.5273 150.459 39.918 157.8018 42.6934 163.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +407.2622 263.3711 m +407.3872 263.3711 407.4927 263.4629 407.5103 263.585 c +409.8911 279.5996 419.1646 292.9746 431.9028 300.9814 c +432.0063 301.0449 432.0493 301.1758 432.0044 301.29 c +431.9575 301.4023 431.8384 301.4688 431.7173 301.4443 c +421.2466 299.3398 411.9243 293.5811 405.27 285.4141 C +400.645 298.7891 390.0337 307.418 376.9692 311.0654 C +381.7778 316.6582 379.2622 324.5986 371.8501 325.9023 c +371.7368 325.9229 371.6255 325.8643 371.5767 325.7607 c +371.5278 325.6563 371.5552 325.5322 371.6431 325.46 c +375.6157 322.1143 374.1626 314.04 362.3052 314.04 c +354.5103 314.04 349.4849 317.2188 349.4849 321.5254 c +349.4849 324.9102 352.5474 326.7559 355.1255 326.7559 c +359.5415 326.7559 362.0649 322.7949 360.1685 319.2129 c +360.1138 319.1104 360.1353 318.9814 360.2231 318.9033 c +360.311 318.8271 360.4399 318.8184 360.5376 318.8857 c +362.7856 320.4492 364.356 322.5059 364.356 325.6768 c +364.356 331.0635 359.3306 336.8066 351.0239 336.8066 c +342.1021 336.8066 334.0005 329.9355 334.0005 321.5254 c +334.0005 309.71 344.0493 304.0918 354.6138 303.0918 C +350.2485 301.4189 346.981 296.5664 v +346.9146 296.4697 346.9243 296.3418 347.0024 296.2559 c +347.0806 296.1689 347.2056 296.1475 347.3091 296.2012 c +353.1392 299.2822 359.7954 300.9453 366.811 300.9453 c +386.4321 300.9453 403.3579 284.541 407.0103 263.5801 c +407.0317 263.4561 407.1392 263.3691 407.2622 263.3711 c +f +483.9399 315.7773 m +488.5493 323.4551 490.1919 336.627 485.897 346.46 c +485.8481 346.5703 485.8833 346.6992 485.9829 346.7686 c +486.0806 346.8379 486.2153 346.8281 486.3032 346.7461 c +491.1099 342.1914 495.2427 331.5684 493.0083 319.2871 C +496.106 316.8936 498.0532 314.5176 499.522 311.335 c +499.5688 311.2314 499.5415 311.1104 499.4556 311.0352 c +499.3696 310.9629 499.2446 310.9551 499.1489 311.0186 c +494.1528 314.3809 489.686 315.5283 483.9399 315.7773 C +f +473.3306 195.9707 m +473.4009 195.8672 473.3833 195.7266 473.2915 195.6426 c +473.1978 195.5586 473.0571 195.5547 472.9595 195.6348 c +466.145 201.1621 457.0845 204.6895 445.9243 204.6895 c +418.3521 204.6895 400.9517 188.1719 398.2173 170.7637 c +398.1997 170.6523 398.1099 170.5664 397.9985 170.5508 c +397.8872 170.5371 397.7778 170.5977 397.7329 170.7012 c +395.0083 176.959 393.3657 186.0352 401.7817 198.209 c +406.8169 205.4941 412.9106 210.5098 412.9106 217.0273 c +412.9106 221.2852 410.6509 224.1797 407.2231 224.1797 c +403.6177 224.1797 401.2876 221.0918 401.2876 217.625 c +401.2876 215.877 401.7915 214.1465 402.6958 212.5801 c +402.7544 212.4766 402.7368 212.3496 402.6509 212.2676 c +402.5649 212.1875 402.436 212.1758 402.3384 212.2402 c +399.3657 214.1777 396.7114 217.6367 396.7114 222.5117 c +396.7114 229.6836 402.8442 235.6816 411.1802 235.6816 c +420.1548 235.6816 427.5044 228.6328 427.5044 218.4922 c +427.5044 215.0156 426.5142 210.8242 424.0415 207.3613 C +427.4263 210.1875 429.2329 212.1875 430.7192 216.5117 C +441.1196 218.3223 452.2251 216.6602 461.0493 210.8691 C +461.3052 216.9707 463.3013 222.0605 467.3931 226.1875 c +467.4771 226.2715 467.6079 226.2852 467.7075 226.2227 c +467.8091 226.1582 467.8521 226.0332 467.811 225.9219 c +464.9341 217.9199 466.8657 205.7246 473.3306 195.9707 c +f +560.6978 202.6055 m +558.4517 197.8066 553.2388 195.1211 547.2368 195.0117 c +547.1118 195.0098 547.0044 195.0977 546.9829 195.2188 c +546.9595 195.3418 547.0278 195.4609 547.1431 195.5039 c +549.1899 196.2578 550.8052 197.5762 551.6646 199.4141 c +553.8774 204.1426 550.2974 210.5098 543.6509 213.7832 c +543.5728 213.8223 543.52 213.8965 543.5103 213.9824 c +543.5005 214.0684 543.5337 214.1523 543.6001 214.207 c +547.8911 217.7266 553.0122 224.2617 553.0122 237.627 c +553.0122 256.3086 540.8579 274.0898 524.7368 274.0898 c +515.5239 274.0898 508.104 267.6934 504.2661 258.0977 C +508.4868 263.8564 514.2446 268.2051 522.1782 268.2051 c +533.8208 268.2051 543.0337 255.7969 543.0337 237.8828 c +543.0337 220.9941 531.1333 201.2891 515.2681 201.2891 c +506.5669 201.2891 500.0435 208.3281 500.0435 217.4121 c +500.0435 225.4746 505.2896 230.0781 511.1763 230.0781 c +515.6099 230.0781 518.6685 226.9473 519.6196 223.5527 c +519.6509 223.4375 519.6001 223.3164 519.4927 223.2598 c +519.3872 223.2051 519.2583 223.2305 519.1802 223.3223 c +518.4282 224.2168 517.2837 224.9609 515.5259 224.9609 c +512.5825 224.9609 511.0474 222.4316 511.0474 220.6113 c +511.0474 217.1563 513.606 214.7246 517.4458 214.7246 c +522.6899 214.7246 526.7856 220.4824 526.7856 227.9023 c +526.7856 237.1152 517.9556 245.5586 509.1274 245.5586 c +500.106 245.5586 490.4478 237.5 490.4478 222.5293 c +490.4478 207.8164 500.4282 190.9258 516.2935 190.9258 c +525.5435 190.9258 533.4048 195.0957 539.436 202.002 c +539.5161 202.0918 539.6489 202.1152 539.7544 202.0547 c +539.8599 201.9941 539.9067 201.8672 539.8677 201.752 c +535.4341 188.8164 537.9126 176.6074 544.688 176.6074 c +548.0024 176.6074 549.6899 178.9863 549.6899 181.5234 c +549.6899 184.1309 547.7915 186.2852 544.7212 186.6777 c +544.6001 186.6934 544.5063 186.793 544.4985 186.9141 c +544.4927 187.0352 544.5708 187.1465 544.6899 187.1758 c +551.5044 188.9395 558.5142 185.2285 558.5142 178.1328 c +558.5142 171.8555 553.1372 167.002 546.1021 167.002 c +535.4653 167.002 530.3774 178.2715 532.6431 188.5371 C +527.1841 181.4922 519.0903 175.7012 507.4653 175.7012 c +483.9224 175.7012 472.0239 202.5703 472.0239 220.6113 c +472.0239 236.9883 475.3501 247.4785 482.2603 255.5391 C +474.1978 249.3984 470.8716 242.6172 469.3384 233.2773 C +463.1958 224.832 447.2036 224.832 v +440.5161 224.832 434.2739 227.3086 429.4302 231.998 C +429.4282 231.9961 429.4263 231.9941 429.4243 231.9902 C +429.3892 232.0313 429.3501 232.0703 429.3149 232.1094 C +428.9946 232.4238 428.6802 232.748 428.3716 233.082 C +423.3091 237.9316 413.1802 242.4785 403.9399 238.6797 c +403.8345 238.6367 403.7134 238.6699 403.6431 238.7578 c +403.5728 238.8477 403.5708 238.9727 403.6392 239.0645 c +408.0454 245.0898 415.6626 247.0059 421.3169 246.1309 C +420.272 249.8457 419.6938 254.0117 419.6938 258.6094 c +419.6938 275.0137 428.4927 286.5801 438.106 292.2109 C +434.9517 296.0137 435.5962 301.9883 439.1372 306.0449 c +439.2173 306.1357 439.3481 306.1582 439.4536 306.0996 c +439.5571 306.041 439.606 305.918 439.5708 305.8018 c +437.8403 300.2695 442.9634 295.6523 449.7524 295.9004 c +449.8755 295.9033 449.9829 295.8193 450.0103 295.6992 c +450.0356 295.5801 449.9712 295.457 449.8579 295.4111 c +439.7212 291.248 433.0005 282.4316 433.0005 271.4033 c +433.0005 259.8906 439.9087 250.5488 451.0415 250.5488 c +460.1255 250.5488 469.2095 258.8672 469.2095 269.2285 c +469.2095 277.2891 464.731 282.0225 458.9731 282.0225 c +453.9849 282.0225 450.0181 278.5684 450.0181 274.4736 c +450.0181 268.6211 456.6001 266.499 460.1118 271.1309 c +460.1821 271.2227 460.3032 271.2559 460.4087 271.2129 c +460.5161 271.1699 460.5806 271.0625 460.5669 270.9482 c +460.0435 266.5586 456.8149 262.4482 451.8091 262.4482 c +447.2036 262.4482 442.4692 266.2861 442.4692 274.4746 c +442.4692 284.1982 451.8071 294.0508 467.1606 294.0508 c +488.1431 294.0508 499.5317 270.3809 489.2974 251.4453 C +494.5415 257.459 499.2759 263.8555 499.2759 275.2432 c +499.2759 296.75 478.0122 311.291 452.9224 302.7441 c +452.8032 302.7021 452.6724 302.7559 452.6157 302.8672 c +452.5571 302.9785 452.5884 303.1143 452.6899 303.1895 c +459.6958 308.2979 467.0337 315.8262 467.0337 328.4668 c +467.0337 341.6475 458.3345 350.9854 444.772 350.9854 c +434.2798 350.9854 427.6274 344.5879 427.6274 337.04 c +427.6274 331.2822 431.3462 326.6768 437.7349 326.6768 c +447.2466 326.6768 450.481 337.0195 445.5591 341.6445 c +445.4751 341.7236 445.4556 341.8516 445.5103 341.9521 c +445.5669 342.0547 445.6841 342.1055 445.7974 342.0762 c +450.5669 340.8398 455.1353 336.0068 455.1353 328.7236 c +455.1353 316.1855 443.4927 307.8682 430.6978 307.8682 c +424.7017 307.8682 418.8989 309.623 414.2271 312.9102 C +414.7778 317.0635 413.3579 321.6602 411.2603 324.752 C +413.2095 317.8848 411.1021 306.5732 400.5864 306.5732 c +394.6958 306.5732 390.8013 311.1025 390.8013 316.4551 c +390.8013 322.7793 396.147 325.7314 400.4966 325.125 c +400.6118 325.1104 400.7017 325.0186 400.7134 324.9023 c +400.7271 324.7891 400.6606 324.6797 400.5532 324.6367 c +398.9673 324.0293 397.6118 322.3691 397.6118 320.373 c +397.6118 317.873 399.52 316.3906 401.52 316.3906 c +404.8149 316.3906 406.645 320.0605 405.4927 324.1104 C +405.5044 324.1104 L +404.4321 326.9473 403.8286 330.1152 403.8286 333.6055 c +403.8286 350.3672 422.0103 366.3398 444.9497 366.3398 c +469.1626 366.3398 482.0044 349.0664 482.0044 331.2822 c +482.0044 321.7461 478.4224 314.5225 473.8149 309.915 C +493.7368 312.0332 506.313 303.5176 513.0942 291.2354 C +508.6157 287.3975 506.9536 281.7676 Y +512.3267 288.8057 521.5376 294.9453 534.4595 294.9453 c +554.0356 294.9453 569.3911 275.7539 569.3911 255.1563 c +569.3911 242.084 564.5884 229.375 554.8267 220.9102 C +560.8638 215.8809 563.4731 208.5391 560.6978 202.6055 c +f +*U +*u +482.2114 327.9053 m +482.1782 327.7852 482.2388 327.6582 482.3521 327.6094 c +497.1763 321.0957 507.6372 308.6289 512.0063 294.2324 c +512.0415 294.1152 512.1548 294.0391 512.2778 294.0527 c +512.3989 294.0664 512.4946 294.166 512.5024 294.2871 c +513.229 304.9434 510.1274 315.4531 504.0005 324.0234 C +518.1216 324.9648 529.2407 332.9297 536.1997 344.5723 C +540.3286 338.46 548.6509 338.7969 551.8599 345.6035 c +551.9106 345.708 551.8833 345.832 551.7954 345.9063 c +551.7075 345.9805 551.5806 345.9873 551.4868 345.9219 c +547.2134 342.9688 539.8071 346.498 542.9282 357.9355 c +544.981 365.4561 549.3716 369.4668 553.5259 368.333 c +556.7915 367.4414 557.7661 364.002 557.0864 361.5146 c +555.9243 357.2539 551.438 355.8623 548.481 358.6357 c +548.397 358.7158 548.2681 358.7285 548.1704 358.6641 c +548.0728 358.5986 548.0298 358.4775 548.0688 358.3662 c +548.9868 355.7852 550.5571 353.7285 553.6157 352.8936 c +558.811 351.4756 565.6743 354.8115 567.8618 362.8252 c +570.2114 371.4316 565.7153 381.0566 557.604 383.2715 c +546.2036 386.3818 538.1392 378.166 534.3931 368.2383 C +533.9263 372.8896 530.1079 377.3203 v +530.0317 377.4092 529.9048 377.4336 529.8013 377.3818 c +529.6978 377.3291 529.6431 377.2129 529.6665 377.0996 c +531.106 370.6641 530.9575 363.8047 529.1099 357.0361 c +523.9438 338.1074 503.6626 326.0977 482.479 328.0938 c +482.354 328.1055 482.2407 328.0254 482.2114 327.9053 c +f +512.5806 240.1348 m +518.7739 233.666 531.0493 228.6133 541.6646 230.168 c +541.7856 230.1855 541.9009 230.1172 541.9399 230.0039 c +541.981 229.8906 541.936 229.7637 541.8345 229.7012 c +536.1743 226.2617 524.8384 225.0723 513.5786 230.4609 C +510.4536 228.1035 507.6489 226.8496 504.1919 226.2715 c +504.0806 226.2539 503.9692 226.3125 503.9204 226.4141 c +503.8735 226.5156 503.8989 226.6387 503.9849 226.7148 c +508.5454 230.6484 510.8286 234.6563 512.5806 240.1348 C +f +399.7935 281.9121 m +399.6763 281.8711 399.5454 281.9258 399.4888 282.0371 c +399.4321 282.1484 399.4653 282.2852 399.5688 282.3594 c +406.6938 287.4785 412.4829 295.291 415.4204 306.0566 c +422.6802 332.6563 411.3267 353.792 395.2544 361.0146 c +395.1509 361.0605 395.0903 361.1689 395.106 361.2803 c +395.1216 361.3926 395.2095 361.4814 395.3208 361.4971 c +402.0747 362.4785 411.2622 361.6729 420.7915 350.3486 c +426.4927 343.5732 429.7271 336.373 436.0142 334.6563 c +440.1216 333.5352 443.5103 334.9551 444.4126 338.2617 c +445.3618 341.7393 442.9966 344.8018 439.6528 345.7148 c +437.9653 346.1738 436.1626 346.1436 434.4146 345.6836 c +434.2993 345.6533 434.1821 345.7051 434.1255 345.8086 c +434.0708 345.9121 434.0923 346.04 434.1802 346.1172 c +436.8325 348.4746 440.8677 350.125 445.5708 348.8408 c +452.4907 346.9531 456.6606 339.457 454.4673 331.415 c +452.104 322.7578 443.3696 317.5234 433.5864 320.1934 c +430.2329 321.1084 426.4497 323.168 423.7603 326.4648 C +425.5942 322.4551 427.0493 320.1855 430.8286 317.6133 C +429.8364 307.1035 425.3091 296.8271 417.4009 289.8389 C +423.2192 287.9863 427.604 284.7207 430.5083 279.6855 c +430.5669 279.582 430.5454 279.4531 430.4595 279.373 c +430.3696 279.293 430.2388 279.2832 430.1411 279.3535 c +423.1802 284.2344 410.9048 285.582 399.7935 281.9121 c +f +383.1919 195.8809 m +379.1548 199.3105 377.936 205.0469 379.4106 210.8672 c +379.4419 210.9883 379.5552 211.0684 379.6782 211.0566 c +379.8032 211.0469 379.8989 210.9492 379.9106 210.8281 c +380.0981 208.6543 380.9458 206.748 382.4927 205.4355 c +386.4712 202.0566 393.5571 203.834 398.4634 209.3828 c +398.522 209.4492 398.6079 209.4805 398.6938 209.4668 c +398.7798 209.4531 398.8521 209.3984 398.8872 209.3203 c +401.1528 204.2539 406.1079 197.5938 419.0005 194.0742 c +437.0239 189.1563 457.3794 196.1992 461.6235 211.752 c +464.0493 220.6406 459.8306 229.4824 451.5845 235.7109 C +456.0298 230.123 458.7075 223.4238 456.6177 215.7695 c +453.5532 204.5391 439.1567 198.918 421.8755 203.6348 c +405.5825 208.0801 389.7075 224.748 393.8833 240.0547 c +396.1743 248.4492 404.6821 252.8887 413.4458 250.4961 c +421.2231 248.375 424.2837 242.1016 422.7329 236.4219 c +421.5669 232.1445 417.7407 230.0195 414.2153 229.9941 c +414.0962 229.9941 413.9927 230.0762 413.9653 230.1934 c +413.9419 230.3105 413.9985 230.4277 414.1079 230.4785 c +415.1704 230.9688 416.188 231.877 416.6509 233.5742 c +417.4263 236.4121 415.3911 238.5605 413.6353 239.0391 c +410.3032 239.9492 407.2837 238.1211 406.272 234.416 c +404.8911 229.3574 409.3677 223.8906 416.5239 221.9355 c +425.4126 219.5117 435.8833 225.8066 438.2075 234.3223 c +440.5825 243.0254 435.3501 254.4648 420.9087 258.4063 c +406.7153 262.2813 387.7935 257.0996 383.6157 241.793 c +381.1802 232.8691 383.1333 224.1875 388.2075 216.5508 c +388.2739 216.4512 388.2622 216.3164 388.1763 216.2305 c +388.0884 216.1445 387.9536 216.1328 387.854 216.2012 c +376.5415 223.8828 364.1118 224.707 362.3267 218.1699 c +361.4536 214.9727 363.3052 212.7188 365.7524 212.0508 c +368.2681 211.3652 370.8462 212.6289 372.0337 215.4883 c +372.0806 215.5996 372.2017 215.6641 372.3208 215.6406 c +372.438 215.6133 372.5259 215.5098 372.522 215.3867 c +372.4302 208.3477 367.0044 202.5625 360.1587 204.4316 c +354.1021 206.084 350.8364 212.5488 352.688 219.3359 c +355.4888 229.5977 367.6997 231.5391 377.0063 226.6504 C +371.647 233.7715 368.1919 243.1035 371.2524 254.3184 c +377.4517 277.0313 406.5044 281.4355 423.9087 276.6855 c +439.7075 272.373 448.9517 266.4023 454.9087 257.6152 C +451.1079 267.0098 445.4419 272.0039 436.8345 275.9434 C +430.3052 284.0918 434.5161 299.5195 v +436.2759 305.9707 440.3091 311.3418 446.1079 314.7793 C +446.1079 314.7813 446.106 314.7842 446.1021 314.7871 C +446.1509 314.8105 446.1997 314.8379 446.2466 314.8613 C +446.6333 315.0879 447.0298 315.3057 447.4321 315.5146 C +453.4438 319.1211 460.4966 327.6973 459.2661 337.6113 c +459.2524 337.7236 459.3149 337.832 459.4185 337.877 c +459.5239 337.9219 459.645 337.8896 459.7153 337.8018 c +464.3677 331.9629 464.2114 324.1104 461.8794 318.8857 C +465.7368 318.915 469.9087 318.375 474.3442 317.165 c +490.1685 312.8457 499.0122 301.3135 501.9126 290.5566 C +506.4106 292.5977 512.0063 290.4043 514.9888 285.9199 c +515.0532 285.8184 515.0415 285.6855 514.9575 285.5996 c +514.8735 285.5156 514.7407 285.5 514.6392 285.5645 c +509.7583 288.6914 503.9556 284.9648 502.4048 278.3496 c +502.3774 278.2305 502.2681 278.1484 502.145 278.1543 c +502.022 278.1602 501.9204 278.2539 501.9067 278.377 c +500.5591 289.251 493.8228 298.0566 483.1841 300.96 c +472.0767 303.9922 461.2446 299.7852 458.3149 289.0469 c +455.9224 280.2832 461.5571 269.3301 471.5513 266.6016 c +479.3286 264.4785 485.0747 267.5527 486.5903 273.1074 c +487.9048 277.9199 485.6157 282.6563 481.6665 283.7344 c +476.0181 285.2754 472.2388 279.4844 475.7837 274.877 c +475.8521 274.7852 475.854 274.6602 475.7837 274.5684 c +475.7153 274.4766 475.5923 274.4434 475.4868 274.4863 c +471.3892 276.1465 468.2739 280.3418 469.5923 285.1729 c +470.8052 289.6152 475.7544 293.1729 483.6548 291.0166 c +493.0356 288.457 500.0806 276.8555 496.0376 262.043 c +490.5142 241.7988 464.6802 237.0449 449.1079 251.9043 C +453.5278 245.2617 458.4517 239.0098 469.438 236.0117 c +490.188 230.3496 509.813 247.0332 508.1724 273.4902 c +508.1646 273.6152 508.2505 273.7285 508.3735 273.7539 c +508.4946 273.7813 508.6196 273.7129 508.6646 273.5977 c +511.7466 265.4922 517.0786 256.4316 529.2739 253.1035 c +541.9888 249.6328 553.2876 255.5664 556.8599 268.6504 c +559.6216 278.7734 555.2017 286.875 547.9204 288.8623 c +542.3657 290.3789 536.9419 288.0039 535.2603 281.8398 c +532.7563 272.6641 541.8833 266.8203 547.6411 270.3516 c +547.7388 270.4121 547.8677 270.3965 547.9497 270.3164 c +548.0337 270.2363 548.0513 270.1094 547.9927 270.0078 c +545.5454 265.7324 539.6802 262.5977 532.6548 264.5156 c +520.5571 267.8164 515.6001 281.2383 518.9673 293.5811 c +520.5454 299.3652 523.7681 304.502 528.1685 308.1426 C +532.0298 306.5186 536.8384 306.6777 540.3735 307.8867 C +533.2349 307.8154 522.8794 312.8262 525.647 322.9707 c +527.1978 328.6533 532.5923 331.2188 537.7563 329.8086 c +543.8579 328.1436 545.2974 322.21 543.5688 318.1729 c +543.522 318.0654 543.4106 318.0039 543.2974 318.0225 c +543.1821 318.04 543.0942 318.1318 543.0825 318.2471 c +542.9146 319.9375 541.6685 321.6836 539.7446 322.208 c +537.3325 322.8662 535.3989 321.415 534.8735 319.4854 c +534.0044 316.3066 537.063 313.5752 541.2739 313.6211 C +541.27 313.6094 L +544.2896 313.8984 547.5044 313.6445 550.8716 312.7266 c +567.0415 308.3125 577.6646 286.5674 571.6235 264.4375 c +565.2485 241.0781 545.2056 233.2363 528.0474 237.9199 c +518.8481 240.4297 512.8228 245.7871 509.5903 251.4453 C +506.3892 231.668 494.8618 221.7793 481.229 218.4707 C +478.7056 223.8008 473.7114 226.8867 Y +479.0864 219.8496 482.5845 209.3477 479.1821 196.8809 c +474.0278 177.9961 451.4712 168.2344 431.6001 173.6582 c +418.9888 177.0996 407.9927 185.0801 402.397 196.7266 C +395.9556 192.2266 388.186 191.6406 383.1919 195.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +530.1294 269.9688 m +530.0044 269.9688 529.8989 269.877 529.8794 269.7539 c +527.5005 253.7402 518.2271 240.3652 505.4888 232.3594 c +505.3853 232.2949 505.3403 232.1641 505.3872 232.0508 c +505.4321 231.9375 505.5532 231.8711 505.6724 231.8965 c +516.145 234 525.4653 239.7598 532.1216 247.9277 C +536.7466 234.5508 547.3579 225.9219 560.4224 222.2734 C +555.6138 216.6816 558.1294 208.7402 565.5415 207.4375 c +565.6548 207.416 565.7661 207.4746 565.8149 207.5781 c +565.8638 207.6816 565.8364 207.8066 565.7485 207.8809 c +561.7759 211.2266 563.229 219.3008 575.0864 219.3008 c +582.8804 219.3008 587.9077 216.1211 587.9077 211.8145 c +587.9077 208.4297 584.8452 206.584 582.2651 206.584 c +577.8511 206.584 575.3267 210.5449 577.2231 214.127 c +577.2778 214.2305 577.2563 214.3574 577.1685 214.4355 c +577.0806 214.5137 576.9517 214.5215 576.854 214.4551 c +574.606 212.8906 573.0356 210.834 573.0356 207.6641 c +573.0356 202.2773 578.062 196.5352 586.3687 196.5332 c +595.2905 196.5332 603.3921 203.4043 603.3921 211.8145 c +603.3921 223.6309 593.3433 229.248 582.7788 230.248 C +587.144 231.9219 590.4116 236.7734 v +590.478 236.8691 590.4683 236.998 590.3901 237.084 c +590.312 237.1719 590.1851 237.1934 590.0835 237.1387 c +584.2534 234.0566 577.5942 232.3945 570.5806 232.3945 c +550.9575 232.3945 534.0337 248.7988 530.3813 269.7607 c +530.3599 269.8818 530.2524 269.9727 530.1294 269.9688 c +f +453.4517 217.5625 m +448.8442 209.8867 447.1997 196.7129 451.4946 186.8809 c +451.5435 186.7695 451.5083 186.6406 451.4087 186.5703 c +451.3091 186.502 451.1763 186.5117 451.0884 186.5957 c +446.2817 191.1484 442.1489 201.7715 444.3833 214.0527 C +441.2876 216.4473 439.3384 218.8223 437.8696 222.0059 c +437.8228 222.1074 437.8501 222.2305 437.936 222.3047 c +438.022 222.377 438.147 222.3848 438.2427 222.3203 c +443.2388 218.959 447.7056 217.8125 453.4517 217.5625 C +f +464.0591 337.3691 m +463.9907 337.4727 464.0083 337.6133 464.1001 337.6973 c +464.1938 337.7813 464.3345 337.7852 464.4321 337.7061 c +471.2466 332.1797 480.3071 328.6504 491.4673 328.6504 c +519.0376 328.6504 536.4399 345.1689 539.1743 362.5771 c +539.1919 362.6885 539.2817 362.7734 539.3931 362.7891 c +539.5044 362.8047 539.6138 362.7422 539.6587 362.6396 c +542.3833 356.3818 544.0259 347.3057 535.6099 335.1309 c +530.5747 327.8457 524.479 322.8311 524.479 316.3145 c +524.479 312.0566 526.7407 309.1602 530.1685 309.1602 c +533.7739 309.1602 536.106 312.248 536.104 315.7148 c +536.104 317.4629 535.6001 319.1934 534.6958 320.7607 c +534.6372 320.8633 534.6548 320.9902 534.7407 321.0723 c +534.8247 321.1523 534.9556 321.165 535.0532 321.1016 c +538.0259 319.1641 540.6802 315.7021 540.6802 310.8281 c +540.6802 303.6563 534.5474 297.6602 526.2095 297.6602 c +517.2368 297.6602 509.8872 304.709 509.8872 314.8477 c +509.8872 318.3262 510.8755 322.5156 513.3501 325.9805 C +509.9653 323.1523 508.1587 321.1523 506.6724 316.8271 C +496.272 315.0186 485.1665 316.6797 476.3403 322.4727 C +476.0864 316.3711 474.0903 311.2793 469.9985 307.1533 c +469.9146 307.0684 469.7837 307.0547 469.6841 307.1182 c +469.5825 307.1816 469.5415 307.3066 469.5806 307.4189 c +472.4575 315.4199 470.5239 327.6152 464.0591 337.3691 c +f +376.6938 330.7344 m +378.938 335.5352 384.1528 338.2188 390.1548 338.3271 c +390.2798 338.3311 390.3872 338.2432 390.4087 338.1211 c +390.4321 337.998 390.3638 337.8779 390.2485 337.8359 c +388.2017 337.082 386.5864 335.7637 385.7271 333.9258 c +383.5142 329.1973 387.0942 322.8301 393.7407 319.5566 c +393.8188 319.5186 393.8716 319.4434 393.8813 319.3594 c +393.8911 319.2725 393.856 319.1885 393.7915 319.1318 c +389.5005 315.6143 384.3794 309.0781 384.3794 295.7148 c +384.3774 277.0322 396.5337 259.25 412.6548 259.25 c +421.8677 259.25 429.2876 265.6465 433.1255 275.2422 C +428.9028 269.4844 423.145 265.1348 415.2114 265.1348 c +403.5708 265.1348 394.3579 277.5439 394.356 295.459 c +394.356 312.3457 406.2583 332.0518 422.1216 332.0508 c +430.8247 332.0488 437.3481 325.0117 437.3481 315.9277 c +437.3481 307.8672 432.1021 303.2637 426.2173 303.2637 c +421.7798 303.2637 418.7231 306.3936 417.772 309.7871 c +417.7388 309.9023 417.7915 310.0254 417.897 310.0811 c +418.0044 310.1357 418.1333 310.1104 418.2114 310.0186 c +418.9634 309.124 420.1079 308.3809 421.8657 308.3809 c +424.8091 308.3789 426.3442 310.9082 426.3442 312.7285 c +426.3442 316.1836 423.7856 318.6152 419.9458 318.6152 c +414.7036 318.6152 410.606 312.8564 410.606 305.4385 c +410.606 296.2236 419.436 287.7813 428.2642 287.7813 c +437.2856 287.7813 446.9438 295.8408 446.9438 310.8125 c +446.9419 325.5234 436.9653 342.4141 421.0981 342.4141 c +411.8481 342.4141 403.9849 338.2441 397.9556 331.3398 c +397.8755 331.248 397.7427 331.2246 397.6392 331.2852 c +397.5317 331.3477 397.4849 331.4727 397.5239 331.5879 c +401.9575 344.5234 399.4771 356.7344 392.7036 356.7324 c +389.3892 356.7324 387.7017 354.3535 387.7017 351.8154 c +387.7017 349.21 389.6001 347.0566 392.6704 346.6611 c +392.7915 346.6475 392.8833 346.5479 392.8931 346.4268 c +392.8989 346.3047 392.8188 346.1943 392.7017 346.1641 c +385.8872 344.4004 378.8774 348.1133 378.8774 355.2061 c +378.8774 361.4854 384.2544 366.3398 391.2896 366.3398 c +401.9263 366.3379 407.0142 355.0684 404.7485 344.8047 C +410.2075 351.8486 418.3013 357.6396 429.9263 357.6396 c +453.4692 357.6396 465.3677 330.7715 465.3677 312.7285 c +465.3677 296.3525 462.0415 285.8604 455.1313 277.8018 C +463.1938 283.9404 466.52 290.7227 468.0552 300.0645 C +474.1958 308.5078 490.188 308.5078 v +496.8755 308.5078 503.1177 306.0322 507.9614 301.3438 C +507.9634 301.3447 507.9653 301.3477 507.9673 301.3486 C +508.0024 301.3105 508.0396 301.2695 508.0767 301.2314 C +508.397 300.915 508.7114 300.5918 509.02 300.2578 C +514.0806 295.4102 524.2114 290.8633 533.4517 294.6602 c +533.5571 294.7031 533.6782 294.6699 533.7485 294.582 c +533.8188 294.4932 533.8188 294.3672 533.7524 294.2754 c +529.3462 288.252 521.729 286.335 516.0747 287.21 C +517.1177 283.4941 517.6958 279.3281 517.6958 274.7305 c +517.6978 258.3262 508.8989 246.7598 499.2856 241.1289 C +502.438 237.3281 501.7954 231.3535 498.2544 227.2949 c +498.1743 227.2051 498.0435 227.1816 497.938 227.2402 c +497.8345 227.2988 497.7837 227.4238 497.8188 227.5391 c +499.5513 233.0703 494.4282 237.6875 487.6392 237.4395 c +487.5161 237.4355 487.4067 237.5195 487.3813 237.6406 c +487.356 237.7617 487.4185 237.8828 487.5337 237.9277 c +497.6685 242.0918 504.3911 250.9102 504.3892 261.9355 c +504.3911 273.4492 497.481 282.79 486.3501 282.79 c +477.2661 282.79 468.1821 274.4727 468.1821 264.1133 c +468.1821 256.0508 472.6587 251.3184 478.4165 251.3164 c +483.4067 251.3184 487.3735 254.7715 487.3735 258.8672 c +487.3735 264.7188 480.7896 266.8408 477.2778 262.209 c +477.2095 262.1172 477.0864 262.084 476.981 262.127 c +476.8755 262.1689 476.811 262.2773 476.8228 262.3926 c +477.3462 266.7813 480.5767 270.8926 485.5825 270.8926 c +490.188 270.8926 494.9224 267.0518 494.9224 258.8652 c +494.9224 249.1406 485.5845 239.291 470.231 239.2891 c +449.2466 239.2891 437.8599 262.959 448.0942 281.8945 C +442.8501 275.8809 438.1157 269.4844 438.1157 258.0977 c +438.1138 236.5898 459.3794 222.0488 484.4692 230.5977 c +484.5884 230.6367 484.7192 230.584 484.7759 230.4746 c +484.8345 230.3633 484.8013 230.2266 484.6997 230.1523 c +477.6938 225.043 470.356 217.5137 470.356 204.873 c +470.356 191.6934 479.0552 182.3535 492.6196 182.3535 c +503.1099 182.3535 509.7642 188.752 509.7642 196.2988 c +509.7642 202.0566 506.0454 206.6641 499.6567 206.6641 c +490.1431 206.6641 486.9087 196.3203 491.8325 191.6953 c +491.9165 191.6152 491.936 191.4902 491.8813 191.3887 c +491.8247 191.2871 491.7056 191.2344 491.5942 191.2637 c +486.8247 192.5 482.2563 197.332 482.2563 204.6152 c +482.2544 217.1563 493.897 225.4727 506.6919 225.4727 c +512.688 225.4727 518.4907 223.7188 523.1646 220.4297 C +522.6118 216.2773 524.0317 211.6816 526.1313 208.5879 C +524.1821 215.457 526.2915 226.7656 536.8032 226.7676 c +542.6958 226.7656 546.5903 222.2383 546.5903 216.8867 c +546.5903 210.5605 541.2446 207.6094 536.895 208.2148 c +536.7798 208.2305 536.6899 208.3223 536.6763 208.4375 c +536.6646 208.5527 536.731 208.6602 536.8384 208.7031 c +538.4243 209.3105 539.7817 210.9727 539.7817 212.9668 c +539.7817 215.4668 537.8696 216.9492 535.8696 216.9492 c +532.5767 216.9492 530.7466 213.2793 531.8989 209.2305 C +531.8872 209.2285 L +532.9595 206.3926 533.561 203.2246 533.561 199.7363 c +533.561 182.9746 515.3813 167.002 492.4399 167 c +468.229 167 455.3872 184.2734 455.3892 202.0566 c +455.3892 211.5938 458.9692 218.8184 463.5767 223.4258 C +443.6548 221.3066 431.0786 229.8223 424.2974 242.1035 C +428.7759 245.9414 430.438 251.5723 Y +425.0649 244.5352 415.854 238.3945 402.9321 238.3945 c +383.356 238.3945 368.0005 257.5859 368.0005 278.1836 c +368.0005 291.2568 372.8032 303.9648 382.5649 312.4307 C +376.5278 317.459 373.9185 324.8018 376.6938 330.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +240.2622 263.3711 m +240.3872 263.3711 240.4927 263.4629 240.5103 263.585 c +242.8911 279.5996 252.1646 292.9746 264.9028 300.9814 c +265.0063 301.0449 265.0493 301.1758 265.0044 301.29 c +264.9575 301.4023 264.8384 301.4688 264.7173 301.4443 c +254.2466 299.3398 244.9243 293.5811 238.27 285.4141 C +233.644 298.7891 223.0337 307.418 209.9692 311.0654 C +214.7778 316.6582 212.2622 324.5986 204.8501 325.9023 c +204.7368 325.9229 204.6245 325.8643 204.5757 325.7607 c +204.5278 325.6563 204.5542 325.5322 204.6421 325.46 c +208.6157 322.1143 207.1616 314.04 195.3052 314.04 c +187.5103 314.04 182.4849 317.2188 182.4849 321.5254 c +182.4849 324.9102 185.5464 326.7559 188.1255 326.7559 c +192.5415 326.7559 195.0649 322.7949 193.1675 319.2129 c +193.1128 319.1104 193.1353 318.9814 193.2231 318.9033 c +193.311 318.8271 193.4399 318.8184 193.5366 318.8857 c +195.7856 320.4492 197.356 322.5059 197.356 325.6768 c +197.356 331.0635 192.3306 336.8066 184.0239 336.8066 c +175.1021 336.8066 167.0005 329.9355 167.0005 321.5254 c +167.0005 309.71 177.0493 304.0918 187.6138 303.0918 C +183.2485 301.4189 179.98 296.5664 v +179.9146 296.4697 179.9243 296.3418 180.0015 296.2559 c +180.0796 296.1689 180.2056 296.1475 180.3091 296.2012 c +186.1392 299.2822 192.7954 300.9453 199.811 300.9453 c +219.4321 300.9453 236.3579 284.541 240.0103 263.5801 c +240.0317 263.4561 240.1382 263.3691 240.2622 263.3711 c +f +316.9399 315.7773 m +321.5493 323.4551 323.1919 336.627 318.897 346.46 c +318.8481 346.5703 318.8833 346.6992 318.9829 346.7686 c +319.0806 346.8379 319.2153 346.8281 319.3032 346.7461 c +324.1099 342.1914 328.2427 331.5684 326.0083 319.2871 C +329.106 316.8936 331.0532 314.5176 332.522 311.335 c +332.5688 311.2314 332.5415 311.1104 332.4556 311.0352 c +332.3696 310.9629 332.2446 310.9551 332.1489 311.0186 c +327.1528 314.3809 322.686 315.5283 316.9399 315.7773 C +f +306.3306 195.9707 m +306.4009 195.8672 306.3833 195.7266 306.2915 195.6426 c +306.1978 195.5586 306.0571 195.5547 305.9595 195.6348 c +299.145 201.1621 290.0845 204.6895 278.9243 204.6895 c +251.3521 204.6895 233.9517 188.1719 231.2163 170.7637 c +231.1987 170.6523 231.1099 170.5664 230.9985 170.5508 c +230.8862 170.5371 230.7778 170.5977 230.7329 170.7012 c +228.0073 176.959 226.3657 186.0352 234.7817 198.209 c +239.8159 205.4941 245.9106 210.5098 245.9106 217.0273 c +245.9106 221.2852 243.6509 224.1797 240.2231 224.1797 c +236.6177 224.1797 234.2866 221.0918 234.2866 217.625 c +234.2866 215.877 234.7915 214.1465 235.6958 212.5801 c +235.7544 212.4766 235.7358 212.3496 235.6509 212.2676 c +235.5649 212.1875 235.436 212.1758 235.3384 212.2402 c +232.3657 214.1777 229.7114 217.6367 229.7114 222.5117 c +229.7114 229.6836 235.8442 235.6816 244.1802 235.6816 c +253.1548 235.6816 260.5044 228.6328 260.5044 218.4922 c +260.5044 215.0156 259.5142 210.8242 257.0415 207.3613 C +260.4263 210.1875 262.2329 212.1875 263.7192 216.5117 C +274.1196 218.3223 285.2251 216.6602 294.0493 210.8691 C +294.3052 216.9707 296.3013 222.0605 300.3931 226.1875 c +300.4771 226.2715 300.6079 226.2852 300.7075 226.2227 c +300.8091 226.1582 300.8521 226.0332 300.811 225.9219 c +297.9341 217.9199 299.8657 205.7246 306.3306 195.9707 c +f +393.6978 202.6055 m +391.4517 197.8066 386.2388 195.1211 380.2368 195.0117 c +380.1118 195.0098 380.0044 195.0977 379.9829 195.2188 c +379.9595 195.3418 380.0278 195.4609 380.1431 195.5039 c +382.1899 196.2578 383.8052 197.5762 384.6646 199.4141 c +386.8774 204.1426 383.2974 210.5098 376.6509 213.7832 c +376.5728 213.8223 376.52 213.8965 376.5103 213.9824 c +376.5005 214.0684 376.5337 214.1523 376.6001 214.207 c +380.8911 217.7266 386.0122 224.2617 386.0122 237.627 c +386.0122 256.3086 373.8579 274.0898 357.7368 274.0898 c +348.5239 274.0898 341.104 267.6934 337.2661 258.0977 C +341.4868 263.8564 347.2446 268.2051 355.1782 268.2051 c +366.8208 268.2051 376.0337 255.7969 376.0337 237.8828 c +376.0337 220.9941 364.1333 201.2891 348.2681 201.2891 c +339.5669 201.2891 333.0435 208.3281 333.0435 217.4121 c +333.0435 225.4746 338.2896 230.0781 344.1763 230.0781 c +348.6099 230.0781 351.6685 226.9473 352.6196 223.5527 c +352.6509 223.4375 352.6001 223.3164 352.4927 223.2598 c +352.3872 223.2051 352.2583 223.2305 352.1802 223.3223 c +351.4282 224.2168 350.2837 224.9609 348.5259 224.9609 c +345.5825 224.9609 344.0474 222.4316 344.0474 220.6113 c +344.0474 217.1563 346.606 214.7246 350.4458 214.7246 c +355.6899 214.7246 359.7856 220.4824 359.7856 227.9023 c +359.7856 237.1152 350.9556 245.5586 342.1274 245.5586 c +333.106 245.5586 323.4478 237.5 323.4478 222.5293 c +323.4478 207.8164 333.4282 190.9258 349.2935 190.9258 c +358.5435 190.9258 366.4048 195.0957 372.436 202.002 c +372.5161 202.0918 372.6489 202.1152 372.7544 202.0547 c +372.8599 201.9941 372.9067 201.8672 372.8677 201.752 c +368.4341 188.8164 370.9126 176.6074 377.688 176.6074 c +381.0024 176.6074 382.6899 178.9863 382.6899 181.5234 c +382.6899 184.1309 380.7915 186.2852 377.7212 186.6777 c +377.6001 186.6934 377.5063 186.793 377.4985 186.9141 c +377.4927 187.0352 377.5708 187.1465 377.6899 187.1758 c +384.5044 188.9395 391.5142 185.2285 391.5142 178.1328 c +391.5142 171.8555 386.1372 167.002 379.1021 167.002 c +368.4653 167.002 363.3774 178.2715 365.6431 188.5371 C +360.1841 181.4922 352.0903 175.7012 340.4653 175.7012 c +316.9224 175.7012 305.0239 202.5703 305.0239 220.6113 c +305.0239 236.9883 308.3501 247.4785 315.2603 255.5391 C +307.1978 249.3984 303.8716 242.6172 302.3384 233.2773 C +296.1958 224.832 280.2036 224.832 v +273.5161 224.832 267.2739 227.3086 262.4302 231.998 C +262.4282 231.9961 262.4263 231.9941 262.4243 231.9902 C +262.3892 232.0313 262.3501 232.0703 262.3149 232.1094 C +261.9946 232.4238 261.6802 232.748 261.3716 233.082 C +256.3091 237.9316 246.1802 242.4785 236.9399 238.6797 c +236.8345 238.6367 236.7134 238.6699 236.6431 238.7578 c +236.5728 238.8477 236.5708 238.9727 236.6382 239.0645 c +241.0454 245.0898 248.6626 247.0059 254.3169 246.1309 C +253.272 249.8457 252.6938 254.0117 252.6938 258.6094 c +252.6938 275.0137 261.4927 286.5801 271.106 292.2109 C +267.9517 296.0137 268.5962 301.9883 272.1372 306.0449 c +272.2173 306.1357 272.3481 306.1582 272.4536 306.0996 c +272.5571 306.041 272.606 305.918 272.5708 305.8018 c +270.8403 300.2695 275.9634 295.6523 282.7524 295.9004 c +282.8755 295.9033 282.9829 295.8193 283.0103 295.6992 c +283.0356 295.5801 282.9712 295.457 282.8579 295.4111 c +272.7212 291.248 266.0005 282.4316 266.0005 271.4033 c +266.0005 259.8906 272.9087 250.5488 284.0415 250.5488 c +293.1255 250.5488 302.2095 258.8672 302.2095 269.2285 c +302.2095 277.2891 297.731 282.0225 291.9731 282.0225 c +286.9849 282.0225 283.0181 278.5684 283.0181 274.4736 c +283.0181 268.6211 289.6001 266.499 293.1118 271.1309 c +293.1821 271.2227 293.3032 271.2559 293.4087 271.2129 c +293.5161 271.1699 293.5806 271.0625 293.5669 270.9482 c +293.0435 266.5586 289.8149 262.4482 284.8091 262.4482 c +280.2036 262.4482 275.4692 266.2861 275.4692 274.4746 c +275.4692 284.1982 284.8071 294.0508 300.1606 294.0508 c +321.1431 294.0508 332.5317 270.3809 322.2974 251.4453 C +327.5415 257.459 332.2759 263.8555 332.2759 275.2432 c +332.2759 296.75 311.0122 311.291 285.9224 302.7441 c +285.8032 302.7021 285.6724 302.7559 285.6157 302.8672 c +285.5571 302.9785 285.5884 303.1143 285.6899 303.1895 c +292.6958 308.2979 300.0337 315.8262 300.0337 328.4668 c +300.0337 341.6475 291.3345 350.9854 277.772 350.9854 c +267.2798 350.9854 260.6274 344.5879 260.6274 337.04 c +260.6274 331.2822 264.3462 326.6768 270.7349 326.6768 c +280.2466 326.6768 283.481 337.0195 278.5591 341.6445 c +278.4751 341.7236 278.4556 341.8516 278.5103 341.9521 c +278.5669 342.0547 278.6841 342.1055 278.7974 342.0762 c +283.5669 340.8398 288.1353 336.0068 288.1353 328.7236 c +288.1353 316.1855 276.4927 307.8682 263.6978 307.8682 c +257.7017 307.8682 251.8989 309.623 247.2271 312.9102 C +247.7778 317.0635 246.3579 321.6602 244.2603 324.752 C +246.2095 317.8848 244.1021 306.5732 233.5864 306.5732 c +227.6958 306.5732 223.8013 311.1025 223.8013 316.4551 c +223.8013 322.7793 229.147 325.7314 233.4966 325.125 c +233.6118 325.1104 233.7007 325.0186 233.7134 324.9023 c +233.7271 324.7891 233.6606 324.6797 233.5532 324.6367 c +231.9673 324.0293 230.6108 322.3691 230.6108 320.373 c +230.6108 317.873 232.52 316.3906 234.52 316.3906 c +237.8149 316.3906 239.645 320.0605 238.4927 324.1104 C +238.5044 324.1104 L +237.4312 326.9473 236.8286 330.1152 236.8286 333.6055 c +236.8286 350.3672 255.0103 366.3398 277.9497 366.3398 c +302.1626 366.3398 315.0044 349.0664 315.0044 331.2822 c +315.0044 321.7461 311.4224 314.5225 306.8149 309.915 C +326.7368 312.0332 339.313 303.5176 346.0942 291.2354 C +341.6157 287.3975 339.9536 281.7676 Y +345.3267 288.8057 354.5376 294.9453 367.4595 294.9453 c +387.0356 294.9453 402.3911 275.7539 402.3911 255.1563 c +402.3911 242.084 397.5884 229.375 387.8267 220.9102 C +393.8638 215.8809 396.4731 208.5391 393.6978 202.6055 c +f +*U +*u +315.2114 327.9053 m +315.1782 327.7852 315.2388 327.6582 315.3521 327.6094 c +330.1763 321.0957 340.6372 308.6289 345.0063 294.2324 c +345.0415 294.1152 345.1548 294.0391 345.2778 294.0527 c +345.3989 294.0664 345.4946 294.166 345.5024 294.2871 c +346.229 304.9434 343.1274 315.4531 337.0005 324.0234 C +351.1216 324.9648 362.2407 332.9297 369.1997 344.5723 C +373.3286 338.46 381.6509 338.7969 384.8599 345.6035 c +384.9106 345.708 384.8833 345.832 384.7954 345.9063 c +384.7075 345.9805 384.5806 345.9873 384.4868 345.9219 c +380.2134 342.9688 372.8071 346.498 375.9282 357.9355 c +377.981 365.4561 382.3716 369.4668 386.5259 368.333 c +389.7915 367.4414 390.7661 364.002 390.0864 361.5146 c +388.9243 357.2539 384.438 355.8623 381.481 358.6357 c +381.397 358.7158 381.2681 358.7285 381.1704 358.6641 c +381.0728 358.5986 381.0298 358.4775 381.0688 358.3662 c +381.9868 355.7852 383.5571 353.7285 386.6157 352.8936 c +391.811 351.4756 398.6743 354.8115 400.8618 362.8252 c +403.2114 371.4316 398.7153 381.0566 390.604 383.2715 c +379.2036 386.3818 371.1392 378.166 367.3931 368.2383 C +366.9263 372.8896 363.1079 377.3203 v +363.0317 377.4092 362.9048 377.4336 362.8013 377.3818 c +362.6978 377.3291 362.6431 377.2129 362.6665 377.0996 c +364.106 370.6641 363.9575 363.8047 362.1099 357.0361 c +356.9438 338.1074 336.6626 326.0977 315.479 328.0938 c +315.354 328.1055 315.2407 328.0254 315.2114 327.9053 c +f +345.5806 240.1348 m +351.7739 233.666 364.0493 228.6133 374.6646 230.168 c +374.7856 230.1855 374.9009 230.1172 374.9399 230.0039 c +374.981 229.8906 374.936 229.7637 374.8345 229.7012 c +369.1743 226.2617 357.8384 225.0723 346.5786 230.4609 C +343.4536 228.1035 340.6489 226.8496 337.1919 226.2715 c +337.0806 226.2539 336.9692 226.3125 336.9204 226.4141 c +336.8735 226.5156 336.8989 226.6387 336.9849 226.7148 c +341.5454 230.6484 343.8286 234.6563 345.5806 240.1348 C +f +232.7935 281.9121 m +232.6753 281.8711 232.5444 281.9258 232.4878 282.0371 c +232.4312 282.1484 232.4644 282.2852 232.5679 282.3594 c +239.6938 287.4785 245.4829 295.291 248.4204 306.0566 c +255.6802 332.6563 244.3267 353.792 228.2534 361.0146 c +228.1499 361.0605 228.0903 361.1689 228.105 361.2803 c +228.1216 361.3926 228.2085 361.4814 228.3198 361.4971 c +235.0747 362.4785 244.2622 361.6729 253.7915 350.3486 c +259.4927 343.5732 262.7271 336.373 269.0142 334.6563 c +273.1216 333.5352 276.5103 334.9551 277.4126 338.2617 c +278.3618 341.7393 275.9966 344.8018 272.6528 345.7148 c +270.9653 346.1738 269.1626 346.1436 267.4146 345.6836 c +267.2993 345.6533 267.1821 345.7051 267.1255 345.8086 c +267.0708 345.9121 267.0923 346.04 267.1802 346.1172 c +269.8325 348.4746 273.8677 350.125 278.5708 348.8408 c +285.4907 346.9531 289.6606 339.457 287.4673 331.415 c +285.104 322.7578 276.3696 317.5234 266.5864 320.1934 c +263.2329 321.1084 259.4497 323.168 256.7603 326.4648 C +258.5942 322.4551 260.0493 320.1855 263.8286 317.6133 C +262.8364 307.1035 258.3091 296.8271 250.4009 289.8389 C +256.2192 287.9863 260.604 284.7207 263.5083 279.6855 c +263.5669 279.582 263.5454 279.4531 263.4595 279.373 c +263.3696 279.293 263.2388 279.2832 263.1411 279.3535 c +256.1802 284.2344 243.9048 285.582 232.7935 281.9121 c +f +216.1919 195.8809 m +212.1538 199.3105 210.936 205.0469 212.4106 210.8672 c +212.4419 210.9883 212.5542 211.0684 212.6772 211.0566 c +212.8022 211.0469 212.8989 210.9492 212.9097 210.8281 c +213.0981 208.6543 213.9448 206.748 215.4917 205.4355 c +219.4712 202.0566 226.5562 203.834 231.4634 209.3828 c +231.522 209.4492 231.6079 209.4805 231.6929 209.4668 c +231.7788 209.4531 231.8511 209.3984 231.8862 209.3203 c +234.1519 204.2539 239.1079 197.5938 252.0005 194.0742 c +270.0239 189.1563 290.3794 196.1992 294.6235 211.752 c +297.0493 220.6406 292.8306 229.4824 284.5845 235.7109 C +289.0298 230.123 291.7075 223.4238 289.6177 215.7695 c +286.5532 204.5391 272.1567 198.918 254.8755 203.6348 c +238.5825 208.0801 222.7065 224.748 226.8833 240.0547 c +229.1743 248.4492 237.6821 252.8887 246.4458 250.4961 c +254.2231 248.375 257.2837 242.1016 255.7329 236.4219 c +254.5669 232.1445 250.7407 230.0195 247.2153 229.9941 c +247.0962 229.9941 246.9927 230.0762 246.9653 230.1934 c +246.9419 230.3105 246.9985 230.4277 247.1079 230.4785 c +248.1704 230.9688 249.188 231.877 249.6509 233.5742 c +250.4263 236.4121 248.3911 238.5605 246.6353 239.0391 c +243.3022 239.9492 240.2827 238.1211 239.271 234.416 c +237.8911 229.3574 242.3667 223.8906 249.5239 221.9355 c +258.4126 219.5117 268.8833 225.8066 271.2075 234.3223 c +273.5825 243.0254 268.3501 254.4648 253.9087 258.4063 c +239.7153 262.2813 220.7925 257.0996 216.6157 241.793 c +214.1802 232.8691 216.1333 224.1875 221.2075 216.5508 c +221.2739 216.4512 221.2612 216.3164 221.1753 216.2305 c +221.0884 216.1445 220.9536 216.1328 220.853 216.2012 c +209.5415 223.8828 197.1108 224.707 195.3267 218.1699 c +194.4536 214.9727 196.3042 212.7188 198.7524 212.0508 c +201.2681 211.3652 203.8462 212.6289 205.0327 215.4883 c +205.0796 215.5996 205.2007 215.6641 205.3198 215.6406 c +205.438 215.6133 205.5249 215.5098 205.522 215.3867 c +205.4292 208.3477 200.0034 202.5625 193.1577 204.4316 c +187.1021 206.084 183.8354 212.5488 185.688 219.3359 c +188.4888 229.5977 200.6997 231.5391 210.0063 226.6504 C +204.647 233.7715 201.1919 243.1035 204.2524 254.3184 c +210.4507 277.0313 239.5044 281.4355 256.9087 276.6855 c +272.7075 272.373 281.9517 266.4023 287.9087 257.6152 C +284.1079 267.0098 278.4419 272.0039 269.8345 275.9434 C +263.3052 284.0918 267.5161 299.5195 v +269.2759 305.9707 273.3091 311.3418 279.1079 314.7793 C +279.1079 314.7813 279.106 314.7842 279.1021 314.7871 C +279.1509 314.8105 279.1997 314.8379 279.2466 314.8613 C +279.6333 315.0879 280.0298 315.3057 280.4321 315.5146 C +286.4438 319.1211 293.4966 327.6973 292.2661 337.6113 c +292.2524 337.7236 292.3149 337.832 292.4185 337.877 c +292.5239 337.9219 292.645 337.8896 292.7153 337.8018 c +297.3677 331.9629 297.2114 324.1104 294.8794 318.8857 C +298.7368 318.915 302.9087 318.375 307.3442 317.165 c +323.1685 312.8457 332.0122 301.3135 334.9126 290.5566 C +339.4106 292.5977 345.0063 290.4043 347.9888 285.9199 c +348.0532 285.8184 348.0415 285.6855 347.9575 285.5996 c +347.8735 285.5156 347.7407 285.5 347.6392 285.5645 c +342.7583 288.6914 336.9556 284.9648 335.4048 278.3496 c +335.3774 278.2305 335.2681 278.1484 335.145 278.1543 c +335.022 278.1602 334.9204 278.2539 334.9067 278.377 c +333.5591 289.251 326.8228 298.0566 316.1841 300.96 c +305.0767 303.9922 294.2446 299.7852 291.3149 289.0469 c +288.9224 280.2832 294.5571 269.3301 304.5513 266.6016 c +312.3286 264.4785 318.0747 267.5527 319.5903 273.1074 c +320.9048 277.9199 318.6157 282.6563 314.6665 283.7344 c +309.0181 285.2754 305.2388 279.4844 308.7837 274.877 c +308.8521 274.7852 308.854 274.6602 308.7837 274.5684 c +308.7153 274.4766 308.5923 274.4434 308.4868 274.4863 c +304.3892 276.1465 301.2739 280.3418 302.5923 285.1729 c +303.8052 289.6152 308.7544 293.1729 316.6548 291.0166 c +326.0356 288.457 333.0806 276.8555 329.0376 262.043 c +323.5142 241.7988 297.6802 237.0449 282.1079 251.9043 C +286.5278 245.2617 291.4517 239.0098 302.438 236.0117 c +323.188 230.3496 342.813 247.0332 341.1724 273.4902 c +341.1646 273.6152 341.2505 273.7285 341.3735 273.7539 c +341.4946 273.7813 341.6196 273.7129 341.6646 273.5977 c +344.7466 265.4922 350.0786 256.4316 362.2739 253.1035 c +374.9888 249.6328 386.2876 255.5664 389.8599 268.6504 c +392.6216 278.7734 388.2017 286.875 380.9204 288.8623 c +375.3657 290.3789 369.9419 288.0039 368.2603 281.8398 c +365.7563 272.6641 374.8833 266.8203 380.6411 270.3516 c +380.7388 270.4121 380.8677 270.3965 380.9497 270.3164 c +381.0337 270.2363 381.0513 270.1094 380.9927 270.0078 c +378.5454 265.7324 372.6802 262.5977 365.6548 264.5156 c +353.5571 267.8164 348.6001 281.2383 351.9673 293.5811 c +353.5454 299.3652 356.7681 304.502 361.1685 308.1426 C +365.0298 306.5186 369.8384 306.6777 373.3735 307.8867 C +366.2349 307.8154 355.8794 312.8262 358.647 322.9707 c +360.1978 328.6533 365.5923 331.2188 370.7563 329.8086 c +376.8579 328.1436 378.2974 322.21 376.5688 318.1729 c +376.522 318.0654 376.4106 318.0039 376.2974 318.0225 c +376.1821 318.04 376.0942 318.1318 376.0825 318.2471 c +375.9146 319.9375 374.6685 321.6836 372.7446 322.208 c +370.3325 322.8662 368.3989 321.415 367.8735 319.4854 c +367.0044 316.3066 370.063 313.5752 374.2739 313.6211 C +374.27 313.6094 L +377.2896 313.8984 380.5044 313.6445 383.8716 312.7266 c +400.0415 308.3125 410.6646 286.5674 404.6235 264.4375 c +398.2485 241.0781 378.2056 233.2363 361.0474 237.9199 c +351.8481 240.4297 345.8228 245.7871 342.5903 251.4453 C +339.3892 231.668 327.8618 221.7793 314.229 218.4707 C +311.7056 223.8008 306.7114 226.8867 Y +312.0864 219.8496 315.5845 209.3477 312.1821 196.8809 c +307.0278 177.9961 284.4712 168.2344 264.6001 173.6582 c +251.9888 177.0996 240.9927 185.0801 235.397 196.7266 C +228.9556 192.2266 221.186 191.6406 216.1919 195.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +363.1294 269.9688 m +363.0044 269.9688 362.8989 269.877 362.8794 269.7539 c +360.5005 253.7402 351.2271 240.3652 338.4888 232.3594 c +338.3853 232.2949 338.3403 232.1641 338.3872 232.0508 c +338.4321 231.9375 338.5532 231.8711 338.6724 231.8965 c +349.145 234 358.4653 239.7598 365.1216 247.9277 C +369.7466 234.5508 380.3579 225.9219 393.4224 222.2734 C +388.6138 216.6816 391.1294 208.7402 398.5415 207.4375 c +398.6548 207.416 398.7661 207.4746 398.8149 207.5781 c +398.8638 207.6816 398.8364 207.8066 398.7485 207.8809 c +394.7759 211.2266 396.229 219.3008 408.0864 219.3008 c +415.8794 219.3008 420.9067 216.1211 420.9067 211.8145 c +420.9067 208.4297 417.8442 206.584 415.2642 206.584 c +410.8501 206.584 408.3267 210.5449 410.2231 214.127 c +410.2778 214.2305 410.2563 214.3574 410.1685 214.4355 c +410.0806 214.5137 409.9517 214.5215 409.854 214.4551 c +407.606 212.8906 406.0356 210.834 406.0356 207.6641 c +406.0356 202.2773 411.061 196.5352 419.3677 196.5332 c +428.2896 196.5332 436.3911 203.4043 436.3911 211.8145 c +436.3911 223.6309 426.3423 229.248 415.7778 230.248 C +420.1431 231.9219 423.4106 236.7734 v +423.4771 236.8691 423.4673 236.998 423.3892 237.084 c +423.311 237.1719 423.1841 237.1934 423.0825 237.1387 c +417.2524 234.0566 410.5942 232.3945 403.5806 232.3945 c +383.9575 232.3945 367.0337 248.7988 363.3813 269.7607 c +363.3599 269.8818 363.2524 269.9727 363.1294 269.9688 c +f +286.4517 217.5625 m +281.8442 209.8867 280.1997 196.7129 284.4946 186.8809 c +284.5435 186.7695 284.5083 186.6406 284.4087 186.5703 c +284.3091 186.502 284.1763 186.5117 284.0884 186.5957 c +279.2817 191.1484 275.1489 201.7715 277.3833 214.0527 C +274.2876 216.4473 272.3384 218.8223 270.8696 222.0059 c +270.8228 222.1074 270.8501 222.2305 270.936 222.3047 c +271.022 222.377 271.147 222.3848 271.2427 222.3203 c +276.2388 218.959 280.7056 217.8125 286.4517 217.5625 C +f +297.0591 337.3691 m +296.9907 337.4727 297.0083 337.6133 297.1001 337.6973 c +297.1938 337.7813 297.3345 337.7852 297.4321 337.7061 c +304.2466 332.1797 313.3071 328.6504 324.4673 328.6504 c +352.0376 328.6504 369.4399 345.1689 372.1743 362.5771 c +372.1919 362.6885 372.2817 362.7734 372.3931 362.7891 c +372.5044 362.8047 372.6138 362.7422 372.6587 362.6396 c +375.3833 356.3818 377.0259 347.3057 368.6099 335.1309 c +363.5747 327.8457 357.479 322.8311 357.479 316.3145 c +357.479 312.0566 359.7407 309.1602 363.1685 309.1602 c +366.7739 309.1602 369.106 312.248 369.104 315.7148 c +369.104 317.4629 368.6001 319.1934 367.6958 320.7607 c +367.6372 320.8633 367.6548 320.9902 367.7407 321.0723 c +367.8247 321.1523 367.9556 321.165 368.0532 321.1016 c +371.0259 319.1641 373.6802 315.7021 373.6802 310.8281 c +373.6802 303.6563 367.5474 297.6602 359.2095 297.6602 c +350.2368 297.6602 342.8872 304.709 342.8872 314.8477 c +342.8872 318.3262 343.8755 322.5156 346.3501 325.9805 C +342.9653 323.1523 341.1587 321.1523 339.6724 316.8271 C +329.272 315.0186 318.1665 316.6797 309.3403 322.4727 C +309.0864 316.3711 307.0903 311.2793 302.9985 307.1533 c +302.9146 307.0684 302.7837 307.0547 302.6841 307.1182 c +302.5825 307.1816 302.5415 307.3066 302.5806 307.4189 c +305.4575 315.4199 303.5239 327.6152 297.0591 337.3691 c +f +209.6938 330.7344 m +211.938 335.5352 217.1528 338.2188 223.1548 338.3271 c +223.2798 338.3311 223.3872 338.2432 223.4087 338.1211 c +223.4321 337.998 223.3638 337.8779 223.2485 337.8359 c +221.2017 337.082 219.5864 335.7637 218.7271 333.9258 c +216.5142 329.1973 220.0942 322.8301 226.7407 319.5566 c +226.8188 319.5186 226.8716 319.4434 226.8813 319.3594 c +226.8911 319.2725 226.856 319.1885 226.7915 319.1318 c +222.5005 315.6143 217.3794 309.0781 217.3794 295.7148 c +217.3774 277.0322 229.5337 259.25 245.6548 259.25 c +254.8677 259.25 262.2876 265.6465 266.1255 275.2422 C +261.9028 269.4844 256.145 265.1348 248.2114 265.1348 c +236.5708 265.1348 227.3579 277.5439 227.356 295.459 c +227.356 312.3457 239.2583 332.0518 255.1216 332.0508 c +263.8247 332.0488 270.3481 325.0117 270.3481 315.9277 c +270.3481 307.8672 265.1021 303.2637 259.2173 303.2637 c +254.7798 303.2637 251.7231 306.3936 250.772 309.7871 c +250.7388 309.9023 250.7915 310.0254 250.897 310.0811 c +251.0044 310.1357 251.1333 310.1104 251.2114 310.0186 c +251.9634 309.124 253.1079 308.3809 254.8657 308.3809 c +257.8091 308.3789 259.3442 310.9082 259.3442 312.7285 c +259.3442 316.1836 256.7856 318.6152 252.9458 318.6152 c +247.7036 318.6152 243.606 312.8564 243.606 305.4385 c +243.606 296.2236 252.436 287.7813 261.2642 287.7813 c +270.2856 287.7813 279.9438 295.8408 279.9438 310.8125 c +279.9419 325.5234 269.9653 342.4141 254.0981 342.4141 c +244.8481 342.4141 236.9849 338.2441 230.9556 331.3398 c +230.8755 331.248 230.7427 331.2246 230.6392 331.2852 c +230.5317 331.3477 230.4849 331.4727 230.5239 331.5879 c +234.9575 344.5234 232.4771 356.7344 225.7036 356.7324 c +222.3892 356.7324 220.7017 354.3535 220.7017 351.8154 c +220.7017 349.21 222.6001 347.0566 225.6704 346.6611 c +225.7915 346.6475 225.8833 346.5479 225.8931 346.4268 c +225.8989 346.3047 225.8188 346.1943 225.7017 346.1641 c +218.8872 344.4004 211.8774 348.1133 211.8774 355.2061 c +211.8774 361.4854 217.2544 366.3398 224.2896 366.3398 c +234.9263 366.3379 240.0142 355.0684 237.7485 344.8047 C +243.2075 351.8486 251.3013 357.6396 262.9263 357.6396 c +286.4692 357.6396 298.3677 330.7715 298.3677 312.7285 c +298.3677 296.3525 295.0415 285.8604 288.1313 277.8018 C +296.1938 283.9404 299.52 290.7227 301.0552 300.0645 C +307.1958 308.5078 323.188 308.5078 v +329.8755 308.5078 336.1177 306.0322 340.9614 301.3438 C +340.9634 301.3447 340.9653 301.3477 340.9673 301.3486 C +341.0024 301.3105 341.0396 301.2695 341.0767 301.2314 C +341.397 300.915 341.7114 300.5918 342.02 300.2578 C +347.0806 295.4102 357.2114 290.8633 366.4517 294.6602 c +366.5571 294.7031 366.6782 294.6699 366.7485 294.582 c +366.8188 294.4932 366.8188 294.3672 366.7524 294.2754 c +362.3462 288.252 354.729 286.335 349.0747 287.21 C +350.1177 283.4941 350.6958 279.3281 350.6958 274.7305 c +350.6978 258.3262 341.8989 246.7598 332.2856 241.1289 C +335.438 237.3281 334.7954 231.3535 331.2544 227.2949 c +331.1743 227.2051 331.0435 227.1816 330.938 227.2402 c +330.8345 227.2988 330.7837 227.4238 330.8188 227.5391 c +332.5513 233.0703 327.4282 237.6875 320.6392 237.4395 c +320.5161 237.4355 320.4067 237.5195 320.3813 237.6406 c +320.356 237.7617 320.4185 237.8828 320.5337 237.9277 c +330.6685 242.0918 337.3911 250.9102 337.3892 261.9355 c +337.3911 273.4492 330.481 282.79 319.3501 282.79 c +310.2661 282.79 301.1821 274.4727 301.1821 264.1133 c +301.1821 256.0508 305.6587 251.3184 311.4165 251.3164 c +316.4067 251.3184 320.3735 254.7715 320.3735 258.8672 c +320.3735 264.7188 313.7896 266.8408 310.2778 262.209 c +310.2095 262.1172 310.0864 262.084 309.981 262.127 c +309.8755 262.1689 309.811 262.2773 309.8228 262.3926 c +310.3462 266.7813 313.5767 270.8926 318.5825 270.8926 c +323.188 270.8926 327.9224 267.0518 327.9224 258.8652 c +327.9224 249.1406 318.5845 239.291 303.231 239.2891 c +282.2466 239.2891 270.8599 262.959 281.0942 281.8945 C +275.8501 275.8809 271.1157 269.4844 271.1157 258.0977 c +271.1138 236.5898 292.3794 222.0488 317.4692 230.5977 c +317.5884 230.6367 317.7192 230.584 317.7759 230.4746 c +317.8345 230.3633 317.8013 230.2266 317.6997 230.1523 c +310.6938 225.043 303.356 217.5137 303.356 204.873 c +303.356 191.6934 312.0552 182.3535 325.6196 182.3535 c +336.1099 182.3535 342.7642 188.752 342.7642 196.2988 c +342.7642 202.0566 339.0454 206.6641 332.6567 206.6641 c +323.1431 206.6641 319.9087 196.3203 324.8325 191.6953 c +324.9165 191.6152 324.936 191.4902 324.8813 191.3887 c +324.8247 191.2871 324.7056 191.2344 324.5942 191.2637 c +319.8247 192.5 315.2563 197.332 315.2563 204.6152 c +315.2544 217.1563 326.897 225.4727 339.6919 225.4727 c +345.688 225.4727 351.4907 223.7188 356.1646 220.4297 C +355.6118 216.2773 357.0317 211.6816 359.1313 208.5879 C +357.1821 215.457 359.2915 226.7656 369.8032 226.7676 c +375.6958 226.7656 379.5903 222.2383 379.5903 216.8867 c +379.5903 210.5605 374.2446 207.6094 369.895 208.2148 c +369.7798 208.2305 369.6899 208.3223 369.6763 208.4375 c +369.6646 208.5527 369.731 208.6602 369.8384 208.7031 c +371.4243 209.3105 372.7817 210.9727 372.7817 212.9668 c +372.7817 215.4668 370.8696 216.9492 368.8696 216.9492 c +365.5767 216.9492 363.7466 213.2793 364.8989 209.2305 C +364.8872 209.2285 L +365.9595 206.3926 366.561 203.2246 366.561 199.7363 c +366.561 182.9746 348.3813 167.002 325.4399 167 c +301.229 167 288.3872 184.2734 288.3892 202.0566 c +288.3892 211.5938 291.9692 218.8184 296.5767 223.4258 C +276.6548 221.3066 264.0786 229.8223 257.2974 242.1035 C +261.7759 245.9414 263.438 251.5723 Y +258.0649 244.5352 248.854 238.3945 235.9321 238.3945 c +216.356 238.3945 201.0005 257.5859 201.0005 278.1836 c +201.0005 291.2568 205.8032 303.9648 215.5649 312.4307 C +209.5278 317.459 206.9185 324.8018 209.6938 330.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +73.2617 263.3711 m +73.3867 263.3711 73.4922 263.4629 73.5098 263.585 c +75.8906 279.5996 85.1641 292.9746 97.9023 300.9814 c +98.0059 301.0449 98.0488 301.1758 98.0039 301.29 c +97.957 301.4023 97.8379 301.4688 97.7168 301.4443 c +87.2461 299.3398 77.9238 293.5811 71.2695 285.4141 C +66.6436 298.7891 56.0332 307.418 42.9688 311.0654 C +47.7773 316.6582 45.2617 324.5986 37.8496 325.9023 c +37.7363 325.9229 37.624 325.8643 37.5752 325.7607 c +37.5273 325.6563 37.5537 325.5322 37.6416 325.46 c +41.6152 322.1143 40.1611 314.04 28.3047 314.04 c +20.5098 314.04 15.4844 317.2188 15.4844 321.5254 c +15.4844 324.9102 18.5459 326.7559 21.125 326.7559 c +25.541 326.7559 28.0645 322.7949 26.167 319.2129 c +26.1123 319.1104 26.1348 318.9814 26.2227 318.9033 c +26.3105 318.8271 26.4395 318.8184 26.5361 318.8857 c +28.7852 320.4492 30.3555 322.5059 30.3555 325.6768 c +30.3555 331.0635 25.3301 336.8066 17.0234 336.8066 c +8.10156 336.8066 0 329.9355 0 321.5254 c +0 309.71 10.0488 304.0918 20.6133 303.0918 C +16.248 301.4189 12.9795 296.5664 v +12.9141 296.4697 12.9238 296.3418 13.001 296.2559 c +13.0791 296.1689 13.2051 296.1475 13.3086 296.2012 c +19.1387 299.2822 25.7949 300.9453 32.8105 300.9453 c +52.4316 300.9453 69.3574 284.541 73.0098 263.5801 c +73.0313 263.4561 73.1377 263.3691 73.2617 263.3711 c +f +149.9395 315.7773 m +154.5488 323.4551 156.1914 336.627 151.8965 346.46 c +151.8477 346.5703 151.8828 346.6992 151.9824 346.7686 c +152.0801 346.8379 152.2148 346.8281 152.3027 346.7461 c +157.1094 342.1914 161.2422 331.5684 159.0078 319.2871 C +162.1055 316.8936 164.0527 314.5176 165.5215 311.335 c +165.5684 311.2314 165.541 311.1104 165.4551 311.0352 c +165.3691 310.9629 165.2441 310.9551 165.1484 311.0186 c +160.1523 314.3809 155.6855 315.5283 149.9395 315.7773 C +f +139.3301 195.9707 m +139.4004 195.8672 139.3828 195.7266 139.291 195.6426 c +139.1973 195.5586 139.0566 195.5547 138.959 195.6348 c +132.1445 201.1621 123.084 204.6895 111.9238 204.6895 c +84.3516 204.6895 66.9512 188.1719 64.2158 170.7637 c +64.1982 170.6523 64.1094 170.5664 63.998 170.5508 c +63.8857 170.5371 63.7773 170.5977 63.7324 170.7012 c +61.0068 176.959 59.3652 186.0352 67.7813 198.209 c +72.8154 205.4941 78.9102 210.5098 78.9102 217.0273 c +78.9102 221.2852 76.6504 224.1797 73.2227 224.1797 c +69.6172 224.1797 67.2861 221.0918 67.2861 217.625 c +67.2861 215.877 67.791 214.1465 68.6953 212.5801 c +68.7539 212.4766 68.7354 212.3496 68.6504 212.2676 c +68.5645 212.1875 68.4355 212.1758 68.3379 212.2402 c +65.3652 214.1777 62.7109 217.6367 62.7109 222.5117 c +62.7109 229.6836 68.8438 235.6816 77.1797 235.6816 c +86.1543 235.6816 93.5039 228.6328 93.5039 218.4922 c +93.5039 215.0156 92.5137 210.8242 90.041 207.3613 C +93.4258 210.1875 95.2324 212.1875 96.7188 216.5117 C +107.1191 218.3223 118.2246 216.6602 127.0488 210.8691 C +127.3047 216.9707 129.3008 222.0605 133.3926 226.1875 c +133.4766 226.2715 133.6074 226.2852 133.707 226.2227 c +133.8086 226.1582 133.8516 226.0332 133.8105 225.9219 c +130.9336 217.9199 132.8652 205.7246 139.3301 195.9707 c +f +226.6973 202.6055 m +224.4512 197.8066 219.2383 195.1211 213.2363 195.0117 c +213.1113 195.0098 213.0039 195.0977 212.9824 195.2188 c +212.959 195.3418 213.0273 195.4609 213.1426 195.5039 c +215.1895 196.2578 216.8047 197.5762 217.6641 199.4141 c +219.877 204.1426 216.2969 210.5098 209.6504 213.7832 c +209.5723 213.8223 209.5195 213.8965 209.5098 213.9824 c +209.5 214.0684 209.5332 214.1523 209.5996 214.207 c +213.8906 217.7266 219.0117 224.2617 219.0117 237.627 c +219.0117 256.3086 206.8574 274.0898 190.7363 274.0898 c +181.5234 274.0898 174.1035 267.6934 170.2656 258.0977 C +174.4863 263.8564 180.2441 268.2051 188.1777 268.2051 c +199.8203 268.2051 209.0332 255.7969 209.0332 237.8828 c +209.0332 220.9941 197.1328 201.2891 181.2676 201.2891 c +172.5664 201.2891 166.043 208.3281 166.043 217.4121 c +166.043 225.4746 171.2891 230.0781 177.1758 230.0781 c +181.6094 230.0781 184.668 226.9473 185.6191 223.5527 c +185.6504 223.4375 185.5996 223.3164 185.4922 223.2598 c +185.3867 223.2051 185.2578 223.2305 185.1797 223.3223 c +184.4277 224.2168 183.2832 224.9609 181.5254 224.9609 c +178.582 224.9609 177.0469 222.4316 177.0469 220.6113 c +177.0469 217.1563 179.6055 214.7246 183.4453 214.7246 c +188.6895 214.7246 192.7852 220.4824 192.7852 227.9023 c +192.7852 237.1152 183.9551 245.5586 175.127 245.5586 c +166.1055 245.5586 156.4473 237.5 156.4473 222.5293 c +156.4473 207.8164 166.4277 190.9258 182.293 190.9258 c +191.543 190.9258 199.4043 195.0957 205.4355 202.002 c +205.5156 202.0918 205.6484 202.1152 205.7539 202.0547 c +205.8594 201.9941 205.9063 201.8672 205.8672 201.752 c +201.4336 188.8164 203.9121 176.6074 210.6875 176.6074 c +214.002 176.6074 215.6895 178.9863 215.6895 181.5234 c +215.6895 184.1309 213.791 186.2852 210.7207 186.6777 c +210.5996 186.6934 210.5059 186.793 210.498 186.9141 c +210.4922 187.0352 210.5703 187.1465 210.6895 187.1758 c +217.5039 188.9395 224.5137 185.2285 224.5137 178.1328 c +224.5137 171.8555 219.1367 167.002 212.1016 167.002 c +201.4648 167.002 196.377 178.2715 198.6426 188.5371 C +193.1836 181.4922 185.0898 175.7012 173.4648 175.7012 c +149.9219 175.7012 138.0234 202.5703 138.0234 220.6113 c +138.0234 236.9883 141.3496 247.4785 148.2598 255.5391 C +140.1973 249.3984 136.8711 242.6172 135.3379 233.2773 C +129.1953 224.832 113.2031 224.832 v +106.5156 224.832 100.2734 227.3086 95.4297 231.998 C +95.4277 231.9961 95.4258 231.9941 95.4238 231.9902 C +95.3887 232.0313 95.3496 232.0703 95.3145 232.1094 C +94.9941 232.4238 94.6797 232.748 94.3711 233.082 C +89.3086 237.9316 79.1797 242.4785 69.9395 238.6797 c +69.834 238.6367 69.7129 238.6699 69.6426 238.7578 c +69.5723 238.8477 69.5703 238.9727 69.6377 239.0645 c +74.0449 245.0898 81.6621 247.0059 87.3164 246.1309 C +86.2715 249.8457 85.6934 254.0117 85.6934 258.6094 c +85.6934 275.0137 94.4922 286.5801 104.1055 292.2109 C +100.9512 296.0137 101.5957 301.9883 105.1367 306.0449 c +105.2168 306.1357 105.3477 306.1582 105.4531 306.0996 c +105.5566 306.041 105.6055 305.918 105.5703 305.8018 c +103.8398 300.2695 108.9629 295.6523 115.752 295.9004 c +115.875 295.9033 115.9824 295.8193 116.0098 295.6992 c +116.0352 295.5801 115.9707 295.457 115.8574 295.4111 c +105.7207 291.248 99 282.4316 99 271.4033 c +99 259.8906 105.9082 250.5488 117.041 250.5488 c +126.125 250.5488 135.209 258.8672 135.209 269.2285 c +135.209 277.2891 130.7305 282.0225 124.9727 282.0225 c +119.9844 282.0225 116.0176 278.5684 116.0176 274.4736 c +116.0176 268.6211 122.5996 266.499 126.1113 271.1309 c +126.1816 271.2227 126.3027 271.2559 126.4082 271.2129 c +126.5156 271.1699 126.5801 271.0625 126.5664 270.9482 c +126.043 266.5586 122.8145 262.4482 117.8086 262.4482 c +113.2031 262.4482 108.4688 266.2861 108.4688 274.4746 c +108.4688 284.1982 117.8066 294.0508 133.1602 294.0508 c +154.1426 294.0508 165.5313 270.3809 155.2969 251.4453 C +160.541 257.459 165.2754 263.8555 165.2754 275.2432 c +165.2754 296.75 144.0117 311.291 118.9219 302.7441 c +118.8027 302.7021 118.6719 302.7559 118.6152 302.8672 c +118.5566 302.9785 118.5879 303.1143 118.6895 303.1895 c +125.6953 308.2979 133.0332 315.8262 133.0332 328.4668 c +133.0332 341.6475 124.334 350.9854 110.7715 350.9854 c +100.2793 350.9854 93.627 344.5879 93.627 337.04 c +93.627 331.2822 97.3457 326.6768 103.7344 326.6768 c +113.2461 326.6768 116.4805 337.0195 111.5586 341.6445 c +111.4746 341.7236 111.4551 341.8516 111.5098 341.9521 c +111.5664 342.0547 111.6836 342.1055 111.7969 342.0762 c +116.5664 340.8398 121.1348 336.0068 121.1348 328.7236 c +121.1348 316.1855 109.4922 307.8682 96.6973 307.8682 c +90.7012 307.8682 84.8984 309.623 80.2266 312.9102 C +80.7773 317.0635 79.3574 321.6602 77.2598 324.752 C +79.209 317.8848 77.1016 306.5732 66.5859 306.5732 c +60.6953 306.5732 56.8008 311.1025 56.8008 316.4551 c +56.8008 322.7793 62.1465 325.7314 66.4961 325.125 c +66.6113 325.1104 66.7002 325.0186 66.7129 324.9023 c +66.7266 324.7891 66.6602 324.6797 66.5527 324.6367 c +64.9668 324.0293 63.6104 322.3691 63.6104 320.373 c +63.6104 317.873 65.5195 316.3906 67.5195 316.3906 c +70.8145 316.3906 72.6445 320.0605 71.4922 324.1104 C +71.5039 324.1104 L +70.4307 326.9473 69.8281 330.1152 69.8281 333.6055 c +69.8281 350.3672 88.0098 366.3398 110.9492 366.3398 c +135.1621 366.3398 148.0039 349.0664 148.0039 331.2822 c +148.0039 321.7461 144.4219 314.5225 139.8145 309.915 C +159.7363 312.0332 172.3125 303.5176 179.0938 291.2354 C +174.6152 287.3975 172.9531 281.7676 Y +178.3262 288.8057 187.5371 294.9453 200.459 294.9453 c +220.0352 294.9453 235.3906 275.7539 235.3906 255.1563 c +235.3906 242.084 230.5879 229.375 220.8262 220.9102 C +226.8633 215.8809 229.4727 208.5391 226.6973 202.6055 c +f +*U +*u +148.2109 327.9053 m +148.1777 327.7852 148.2383 327.6582 148.3516 327.6094 c +163.1758 321.0957 173.6367 308.6289 178.0059 294.2324 c +178.041 294.1152 178.1543 294.0391 178.2773 294.0527 c +178.3984 294.0664 178.4941 294.166 178.502 294.2871 c +179.2285 304.9434 176.127 315.4531 170 324.0234 C +184.1211 324.9648 195.2402 332.9297 202.1992 344.5723 C +206.3281 338.46 214.6504 338.7969 217.8594 345.6035 c +217.9102 345.708 217.8828 345.832 217.7949 345.9063 c +217.707 345.9805 217.5801 345.9873 217.4863 345.9219 c +213.2129 342.9688 205.8066 346.498 208.9277 357.9355 c +210.9805 365.4561 215.3711 369.4668 219.5254 368.333 c +222.791 367.4414 223.7656 364.002 223.0859 361.5146 c +221.9238 357.2539 217.4375 355.8623 214.4805 358.6357 c +214.3965 358.7158 214.2676 358.7285 214.1699 358.6641 c +214.0723 358.5986 214.0293 358.4775 214.0684 358.3662 c +214.9863 355.7852 216.5566 353.7285 219.6152 352.8936 c +224.8105 351.4756 231.6738 354.8115 233.8613 362.8252 c +236.2109 371.4316 231.7148 381.0566 223.6035 383.2715 c +212.2031 386.3818 204.1387 378.166 200.3926 368.2383 C +199.9258 372.8896 196.1074 377.3203 v +196.0313 377.4092 195.9043 377.4336 195.8008 377.3818 c +195.6973 377.3291 195.6426 377.2129 195.666 377.0996 c +197.1055 370.6641 196.957 363.8047 195.1094 357.0361 c +189.9434 338.1074 169.6621 326.0977 148.4785 328.0938 c +148.3535 328.1055 148.2402 328.0254 148.2109 327.9053 c +f +178.5801 240.1348 m +184.7734 233.666 197.0488 228.6133 207.6641 230.168 c +207.7852 230.1855 207.9004 230.1172 207.9395 230.0039 c +207.9805 229.8906 207.9355 229.7637 207.834 229.7012 c +202.1738 226.2617 190.8379 225.0723 179.5781 230.4609 C +176.4531 228.1035 173.6484 226.8496 170.1914 226.2715 c +170.0801 226.2539 169.9688 226.3125 169.9199 226.4141 c +169.873 226.5156 169.8984 226.6387 169.9844 226.7148 c +174.5449 230.6484 176.8281 234.6563 178.5801 240.1348 C +f +65.793 281.9121 m +65.6748 281.8711 65.5439 281.9258 65.4873 282.0371 c +65.4307 282.1484 65.4639 282.2852 65.5674 282.3594 c +72.6934 287.4785 78.4824 295.291 81.4199 306.0566 c +88.6797 332.6563 77.3262 353.792 61.2529 361.0146 c +61.1494 361.0605 61.0898 361.1689 61.1045 361.2803 c +61.1211 361.3926 61.208 361.4814 61.3193 361.4971 c +68.0742 362.4785 77.2617 361.6729 86.791 350.3486 c +92.4922 343.5732 95.7266 336.373 102.0137 334.6563 c +106.1211 333.5352 109.5098 334.9551 110.4121 338.2617 c +111.3613 341.7393 108.9961 344.8018 105.6523 345.7148 c +103.9648 346.1738 102.1621 346.1436 100.4141 345.6836 c +100.2988 345.6533 100.1816 345.7051 100.125 345.8086 c +100.0703 345.9121 100.0918 346.04 100.1797 346.1172 c +102.832 348.4746 106.8672 350.125 111.5703 348.8408 c +118.4902 346.9531 122.6602 339.457 120.4668 331.415 c +118.1035 322.7578 109.3691 317.5234 99.5859 320.1934 c +96.2324 321.1084 92.4492 323.168 89.7598 326.4648 C +91.5938 322.4551 93.0488 320.1855 96.8281 317.6133 C +95.8359 307.1035 91.3086 296.8271 83.4004 289.8389 C +89.2188 287.9863 93.6035 284.7207 96.5078 279.6855 c +96.5664 279.582 96.5449 279.4531 96.459 279.373 c +96.3691 279.293 96.2383 279.2832 96.1406 279.3535 c +89.1797 284.2344 76.9043 285.582 65.793 281.9121 c +f +49.1914 195.8809 m +45.1533 199.3105 43.9355 205.0469 45.4102 210.8672 c +45.4414 210.9883 45.5537 211.0684 45.6768 211.0566 c +45.8018 211.0469 45.8984 210.9492 45.9092 210.8281 c +46.0977 208.6543 46.9443 206.748 48.4912 205.4355 c +52.4707 202.0566 59.5557 203.834 64.4629 209.3828 c +64.5215 209.4492 64.6074 209.4805 64.6924 209.4668 c +64.7783 209.4531 64.8506 209.3984 64.8857 209.3203 c +67.1514 204.2539 72.1074 197.5938 85 194.0742 c +103.0234 189.1563 123.3789 196.1992 127.623 211.752 c +130.0488 220.6406 125.8301 229.4824 117.584 235.7109 C +122.0293 230.123 124.707 223.4238 122.6172 215.7695 c +119.5527 204.5391 105.1563 198.918 87.875 203.6348 c +71.582 208.0801 55.7061 224.748 59.8828 240.0547 c +62.1738 248.4492 70.6816 252.8887 79.4453 250.4961 c +87.2227 248.375 90.2832 242.1016 88.7324 236.4219 c +87.5664 232.1445 83.7402 230.0195 80.2148 229.9941 c +80.0957 229.9941 79.9922 230.0762 79.9648 230.1934 c +79.9414 230.3105 79.998 230.4277 80.1074 230.4785 c +81.1699 230.9688 82.1875 231.877 82.6504 233.5742 c +83.4258 236.4121 81.3906 238.5605 79.6348 239.0391 c +76.3018 239.9492 73.2822 238.1211 72.2705 234.416 c +70.8906 229.3574 75.3662 223.8906 82.5234 221.9355 c +91.4121 219.5117 101.8828 225.8066 104.207 234.3223 c +106.582 243.0254 101.3496 254.4648 86.9082 258.4063 c +72.7148 262.2813 53.792 257.0996 49.6152 241.793 c +47.1797 232.8691 49.1328 224.1875 54.207 216.5508 c +54.2734 216.4512 54.2607 216.3164 54.1748 216.2305 c +54.0879 216.1445 53.9531 216.1328 53.8525 216.2012 c +42.541 223.8828 30.1104 224.707 28.3262 218.1699 c +27.4531 214.9727 29.3037 212.7188 31.752 212.0508 c +34.2676 211.3652 36.8457 212.6289 38.0322 215.4883 c +38.0791 215.5996 38.2002 215.6641 38.3193 215.6406 c +38.4375 215.6133 38.5244 215.5098 38.5215 215.3867 c +38.4287 208.3477 33.0029 202.5625 26.1572 204.4316 c +20.1016 206.084 16.835 212.5488 18.6875 219.3359 c +21.4883 229.5977 33.6992 231.5391 43.0059 226.6504 C +37.6465 233.7715 34.1914 243.1035 37.252 254.3184 c +43.4502 277.0313 72.5039 281.4355 89.9082 276.6855 c +105.707 272.373 114.9512 266.4023 120.9082 257.6152 C +117.1074 267.0098 111.4414 272.0039 102.834 275.9434 C +96.3047 284.0918 100.5156 299.5195 v +102.2754 305.9707 106.3086 311.3418 112.1074 314.7793 C +112.1074 314.7813 112.1055 314.7842 112.1016 314.7871 C +112.1504 314.8105 112.1992 314.8379 112.2461 314.8613 C +112.6328 315.0879 113.0293 315.3057 113.4316 315.5146 C +119.4434 319.1211 126.4961 327.6973 125.2656 337.6113 c +125.252 337.7236 125.3145 337.832 125.418 337.877 c +125.5234 337.9219 125.6445 337.8896 125.7148 337.8018 c +130.3672 331.9629 130.2109 324.1104 127.8789 318.8857 C +131.7363 318.915 135.9082 318.375 140.3438 317.165 c +156.168 312.8457 165.0117 301.3135 167.9121 290.5566 C +172.4102 292.5977 178.0059 290.4043 180.9883 285.9199 c +181.0527 285.8184 181.041 285.6855 180.957 285.5996 c +180.873 285.5156 180.7402 285.5 180.6387 285.5645 c +175.7578 288.6914 169.9551 284.9648 168.4043 278.3496 c +168.377 278.2305 168.2676 278.1484 168.1445 278.1543 c +168.0215 278.1602 167.9199 278.2539 167.9063 278.377 c +166.5586 289.251 159.8223 298.0566 149.1836 300.96 c +138.0762 303.9922 127.2441 299.7852 124.3145 289.0469 c +121.9219 280.2832 127.5566 269.3301 137.5508 266.6016 c +145.3281 264.4785 151.0742 267.5527 152.5898 273.1074 c +153.9043 277.9199 151.6152 282.6563 147.666 283.7344 c +142.0176 285.2754 138.2383 279.4844 141.7832 274.877 c +141.8516 274.7852 141.8535 274.6602 141.7832 274.5684 c +141.7148 274.4766 141.5918 274.4434 141.4863 274.4863 c +137.3887 276.1465 134.2734 280.3418 135.5918 285.1729 c +136.8047 289.6152 141.7539 293.1729 149.6543 291.0166 c +159.0352 288.457 166.0801 276.8555 162.0371 262.043 c +156.5137 241.7988 130.6797 237.0449 115.1074 251.9043 C +119.5273 245.2617 124.4512 239.0098 135.4375 236.0117 c +156.1875 230.3496 175.8125 247.0332 174.1719 273.4902 c +174.1641 273.6152 174.25 273.7285 174.373 273.7539 c +174.4941 273.7813 174.6191 273.7129 174.6641 273.5977 c +177.7461 265.4922 183.0781 256.4316 195.2734 253.1035 c +207.9883 249.6328 219.2871 255.5664 222.8594 268.6504 c +225.6211 278.7734 221.2012 286.875 213.9199 288.8623 c +208.3652 290.3789 202.9414 288.0039 201.2598 281.8398 c +198.7559 272.6641 207.8828 266.8203 213.6406 270.3516 c +213.7383 270.4121 213.8672 270.3965 213.9492 270.3164 c +214.0332 270.2363 214.0508 270.1094 213.9922 270.0078 c +211.5449 265.7324 205.6797 262.5977 198.6543 264.5156 c +186.5566 267.8164 181.5996 281.2383 184.9668 293.5811 c +186.5449 299.3652 189.7676 304.502 194.168 308.1426 C +198.0293 306.5186 202.8379 306.6777 206.373 307.8867 C +199.2344 307.8154 188.8789 312.8262 191.6465 322.9707 c +193.1973 328.6533 198.5918 331.2188 203.7559 329.8086 c +209.8574 328.1436 211.2969 322.21 209.5684 318.1729 c +209.5215 318.0654 209.4102 318.0039 209.2969 318.0225 c +209.1816 318.04 209.0938 318.1318 209.082 318.2471 c +208.9141 319.9375 207.668 321.6836 205.7441 322.208 c +203.332 322.8662 201.3984 321.415 200.873 319.4854 c +200.0039 316.3066 203.0625 313.5752 207.2734 313.6211 C +207.2695 313.6094 L +210.2891 313.8984 213.5039 313.6445 216.8711 312.7266 c +233.041 308.3125 243.6641 286.5674 237.623 264.4375 c +231.248 241.0781 211.2051 233.2363 194.0469 237.9199 c +184.8477 240.4297 178.8223 245.7871 175.5898 251.4453 C +172.3887 231.668 160.8613 221.7793 147.2285 218.4707 C +144.7051 223.8008 139.7109 226.8867 Y +145.0859 219.8496 148.584 209.3477 145.1816 196.8809 c +140.0273 177.9961 117.4707 168.2344 97.5996 173.6582 c +84.9883 177.0996 73.9922 185.0801 68.3965 196.7266 C +61.9551 192.2266 54.1855 191.6406 49.1914 195.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +196.1289 269.9688 m +196.0039 269.9688 195.8984 269.877 195.8789 269.7539 c +193.5 253.7402 184.2266 240.3652 171.4883 232.3594 c +171.3848 232.2949 171.3398 232.1641 171.3867 232.0508 c +171.4316 231.9375 171.5527 231.8711 171.6719 231.8965 c +182.1445 234 191.4648 239.7598 198.1211 247.9277 C +202.7461 234.5508 213.3574 225.9219 226.4219 222.2734 C +221.6133 216.6816 224.1289 208.7402 231.541 207.4375 c +231.6543 207.416 231.7656 207.4746 231.8145 207.5781 c +231.8633 207.6816 231.8359 207.8066 231.748 207.8809 c +227.7754 211.2266 229.2285 219.3008 241.0859 219.3008 c +248.8794 219.3008 253.9067 216.1211 253.9067 211.8145 c +253.9067 208.4297 250.8442 206.584 248.2642 206.584 c +243.8501 206.584 241.3262 210.5449 243.2227 214.127 c +243.2773 214.2305 243.2559 214.3574 243.168 214.4355 c +243.0801 214.5137 242.9512 214.5215 242.8535 214.4551 c +240.6055 212.8906 239.0352 210.834 239.0352 207.6641 c +239.0352 202.2773 244.061 196.5352 252.3677 196.5332 c +261.2896 196.5332 269.3911 203.4043 269.3911 211.8145 c +269.3911 223.6309 259.3423 229.248 248.7778 230.248 C +253.1431 231.9219 256.4106 236.7734 v +256.4771 236.8691 256.4673 236.998 256.3892 237.084 c +256.311 237.1719 256.1841 237.1934 256.0825 237.1387 c +250.2524 234.0566 243.5938 232.3945 236.5801 232.3945 c +216.957 232.3945 200.0332 248.7988 196.3809 269.7607 c +196.3594 269.8818 196.252 269.9727 196.1289 269.9688 c +f +119.4512 217.5625 m +114.8438 209.8867 113.1992 196.7129 117.4941 186.8809 c +117.543 186.7695 117.5078 186.6406 117.4082 186.5703 c +117.3086 186.502 117.1758 186.5117 117.0879 186.5957 c +112.2813 191.1484 108.1484 201.7715 110.3828 214.0527 C +107.2871 216.4473 105.3379 218.8223 103.8691 222.0059 c +103.8223 222.1074 103.8496 222.2305 103.9355 222.3047 c +104.0215 222.377 104.1465 222.3848 104.2422 222.3203 c +109.2383 218.959 113.7051 217.8125 119.4512 217.5625 C +f +130.0586 337.3691 m +129.9902 337.4727 130.0078 337.6133 130.0996 337.6973 c +130.1934 337.7813 130.334 337.7852 130.4316 337.7061 c +137.2461 332.1797 146.3066 328.6504 157.4668 328.6504 c +185.0371 328.6504 202.4395 345.1689 205.1738 362.5771 c +205.1914 362.6885 205.2813 362.7734 205.3926 362.7891 c +205.5039 362.8047 205.6133 362.7422 205.6582 362.6396 c +208.3828 356.3818 210.0254 347.3057 201.6094 335.1309 c +196.5742 327.8457 190.4785 322.8311 190.4785 316.3145 c +190.4785 312.0566 192.7402 309.1602 196.168 309.1602 c +199.7734 309.1602 202.1055 312.248 202.1035 315.7148 c +202.1035 317.4629 201.5996 319.1934 200.6953 320.7607 c +200.6367 320.8633 200.6543 320.9902 200.7402 321.0723 c +200.8242 321.1523 200.9551 321.165 201.0527 321.1016 c +204.0254 319.1641 206.6797 315.7021 206.6797 310.8281 c +206.6797 303.6563 200.5469 297.6602 192.209 297.6602 c +183.2363 297.6602 175.8867 304.709 175.8867 314.8477 c +175.8867 318.3262 176.875 322.5156 179.3496 325.9805 C +175.9648 323.1523 174.1582 321.1523 172.6719 316.8271 C +162.2715 315.0186 151.166 316.6797 142.3398 322.4727 C +142.0859 316.3711 140.0898 311.2793 135.998 307.1533 c +135.9141 307.0684 135.7832 307.0547 135.6836 307.1182 c +135.582 307.1816 135.541 307.3066 135.5801 307.4189 c +138.457 315.4199 136.5234 327.6152 130.0586 337.3691 c +f +42.6934 330.7344 m +44.9375 335.5352 50.1523 338.2188 56.1543 338.3271 c +56.2793 338.3311 56.3867 338.2432 56.4082 338.1211 c +56.4316 337.998 56.3633 337.8779 56.248 337.8359 c +54.2012 337.082 52.5859 335.7637 51.7266 333.9258 c +49.5137 329.1973 53.0938 322.8301 59.7402 319.5566 c +59.8184 319.5186 59.8711 319.4434 59.8809 319.3594 c +59.8906 319.2725 59.8555 319.1885 59.791 319.1318 c +55.5 315.6143 50.3789 309.0781 50.3789 295.7148 c +50.377 277.0322 62.5332 259.25 78.6543 259.25 c +87.8672 259.25 95.2871 265.6465 99.125 275.2422 C +94.9023 269.4844 89.1445 265.1348 81.2109 265.1348 c +69.5703 265.1348 60.3574 277.5439 60.3555 295.459 c +60.3555 312.3457 72.2578 332.0518 88.1211 332.0508 c +96.8242 332.0488 103.3477 325.0117 103.3477 315.9277 c +103.3477 307.8672 98.1016 303.2637 92.2168 303.2637 c +87.7793 303.2637 84.7227 306.3936 83.7715 309.7871 c +83.7383 309.9023 83.791 310.0254 83.8965 310.0811 c +84.0039 310.1357 84.1328 310.1104 84.2109 310.0186 c +84.9629 309.124 86.1074 308.3809 87.8652 308.3809 c +90.8086 308.3789 92.3438 310.9082 92.3438 312.7285 c +92.3438 316.1836 89.7852 318.6152 85.9453 318.6152 c +80.7031 318.6152 76.6055 312.8564 76.6055 305.4385 c +76.6055 296.2236 85.4355 287.7813 94.2637 287.7813 c +103.2852 287.7813 112.9434 295.8408 112.9434 310.8125 c +112.9414 325.5234 102.9648 342.4141 87.0977 342.4141 c +77.8477 342.4141 69.9844 338.2441 63.9551 331.3398 c +63.875 331.248 63.7422 331.2246 63.6387 331.2852 c +63.5313 331.3477 63.4844 331.4727 63.5234 331.5879 c +67.957 344.5234 65.4766 356.7344 58.7031 356.7324 c +55.3887 356.7324 53.7012 354.3535 53.7012 351.8154 c +53.7012 349.21 55.5996 347.0566 58.6699 346.6611 c +58.791 346.6475 58.8828 346.5479 58.8926 346.4268 c +58.8984 346.3047 58.8184 346.1943 58.7012 346.1641 c +51.8867 344.4004 44.877 348.1133 44.877 355.2061 c +44.877 361.4854 50.2539 366.3398 57.2891 366.3398 c +67.9258 366.3379 73.0137 355.0684 70.748 344.8047 C +76.207 351.8486 84.3008 357.6396 95.9258 357.6396 c +119.4688 357.6396 131.3672 330.7715 131.3672 312.7285 c +131.3672 296.3525 128.041 285.8604 121.1309 277.8018 C +129.1934 283.9404 132.5195 290.7227 134.0547 300.0645 C +140.1953 308.5078 156.1875 308.5078 v +162.875 308.5078 169.1172 306.0322 173.9609 301.3438 C +173.9629 301.3447 173.9648 301.3477 173.9668 301.3486 C +174.002 301.3105 174.0391 301.2695 174.0762 301.2314 C +174.3965 300.915 174.7109 300.5918 175.0195 300.2578 C +180.0801 295.4102 190.2109 290.8633 199.4512 294.6602 c +199.5566 294.7031 199.6777 294.6699 199.748 294.582 c +199.8184 294.4932 199.8184 294.3672 199.752 294.2754 c +195.3457 288.252 187.7285 286.335 182.0742 287.21 C +183.1172 283.4941 183.6953 279.3281 183.6953 274.7305 c +183.6973 258.3262 174.8984 246.7598 165.2852 241.1289 C +168.4375 237.3281 167.7949 231.3535 164.2539 227.2949 c +164.1738 227.2051 164.043 227.1816 163.9375 227.2402 c +163.834 227.2988 163.7832 227.4238 163.8184 227.5391 c +165.5508 233.0703 160.4277 237.6875 153.6387 237.4395 c +153.5156 237.4355 153.4063 237.5195 153.3809 237.6406 c +153.3555 237.7617 153.418 237.8828 153.5332 237.9277 c +163.668 242.0918 170.3906 250.9102 170.3887 261.9355 c +170.3906 273.4492 163.4805 282.79 152.3496 282.79 c +143.2656 282.79 134.1816 274.4727 134.1816 264.1133 c +134.1816 256.0508 138.6582 251.3184 144.416 251.3164 c +149.4063 251.3184 153.373 254.7715 153.373 258.8672 c +153.373 264.7188 146.7891 266.8408 143.2773 262.209 c +143.209 262.1172 143.0859 262.084 142.9805 262.127 c +142.875 262.1689 142.8105 262.2773 142.8223 262.3926 c +143.3457 266.7813 146.5762 270.8926 151.582 270.8926 c +156.1875 270.8926 160.9219 267.0518 160.9219 258.8652 c +160.9219 249.1406 151.584 239.291 136.2305 239.2891 c +115.2461 239.2891 103.8594 262.959 114.0938 281.8945 C +108.8496 275.8809 104.1152 269.4844 104.1152 258.0977 c +104.1133 236.5898 125.3789 222.0488 150.4688 230.5977 c +150.5879 230.6367 150.7188 230.584 150.7754 230.4746 c +150.834 230.3633 150.8008 230.2266 150.6992 230.1523 c +143.6934 225.043 136.3555 217.5137 136.3555 204.873 c +136.3555 191.6934 145.0547 182.3535 158.6191 182.3535 c +169.1094 182.3535 175.7637 188.752 175.7637 196.2988 c +175.7637 202.0566 172.0449 206.6641 165.6563 206.6641 c +156.1426 206.6641 152.9082 196.3203 157.832 191.6953 c +157.916 191.6152 157.9355 191.4902 157.8809 191.3887 c +157.8242 191.2871 157.7051 191.2344 157.5938 191.2637 c +152.8242 192.5 148.2559 197.332 148.2559 204.6152 c +148.2539 217.1563 159.8965 225.4727 172.6914 225.4727 c +178.6875 225.4727 184.4902 223.7188 189.1641 220.4297 C +188.6113 216.2773 190.0313 211.6816 192.1309 208.5879 C +190.1816 215.457 192.291 226.7656 202.8027 226.7676 c +208.6953 226.7656 212.5898 222.2383 212.5898 216.8867 c +212.5898 210.5605 207.2441 207.6094 202.8945 208.2148 c +202.7793 208.2305 202.6895 208.3223 202.6758 208.4375 c +202.6641 208.5527 202.7305 208.6602 202.8379 208.7031 c +204.4238 209.3105 205.7813 210.9727 205.7813 212.9668 c +205.7813 215.4668 203.8691 216.9492 201.8691 216.9492 c +198.5762 216.9492 196.7461 213.2793 197.8984 209.2305 C +197.8867 209.2285 L +198.959 206.3926 199.5605 203.2246 199.5605 199.7363 c +199.5605 182.9746 181.3809 167.002 158.4395 167 c +134.2285 167 121.3867 184.2734 121.3887 202.0566 c +121.3887 211.5938 124.9688 218.8184 129.5762 223.4258 C +109.6543 221.3066 97.0781 229.8223 90.2969 242.1035 C +94.7754 245.9414 96.4375 251.5723 Y +91.0645 244.5352 81.8535 238.3945 68.9316 238.3945 c +49.3555 238.3945 34 257.5859 34 278.1836 c +34 291.2568 38.8027 303.9648 48.5645 312.4307 C +42.5273 317.459 39.918 324.8018 42.6934 330.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +407.2622 430.3711 m +407.3872 430.3711 407.4927 430.4629 407.5103 430.585 c +409.8911 446.5996 419.1646 459.9746 431.9028 467.9814 c +432.0063 468.0449 432.0493 468.1758 432.0044 468.29 c +431.9575 468.4023 431.8384 468.4688 431.7173 468.4443 c +421.2466 466.3398 411.9243 460.5811 405.27 452.4141 C +400.645 465.7891 390.0337 474.418 376.9692 478.0654 C +381.7778 483.6582 379.2622 491.5986 371.8501 492.9023 c +371.7368 492.9229 371.6255 492.8643 371.5767 492.7607 c +371.5278 492.6563 371.5552 492.5322 371.6431 492.46 c +375.6157 489.1143 374.1626 481.04 362.3052 481.04 c +354.5103 481.04 349.4849 484.2188 349.4849 488.5254 c +349.4849 491.9102 352.5474 493.7559 355.1255 493.7559 c +359.5415 493.7559 362.0649 489.7949 360.1685 486.2129 c +360.1138 486.1104 360.1353 485.9814 360.2231 485.9033 c +360.311 485.8271 360.4399 485.8184 360.5376 485.8857 c +362.7856 487.4492 364.356 489.5059 364.356 492.6768 c +364.356 498.0635 359.3306 503.8066 351.0239 503.8066 c +342.1021 503.8066 334.0005 496.9355 334.0005 488.5254 c +334.0005 476.71 344.0493 471.0918 354.6138 470.0918 C +350.2485 468.4189 346.981 463.5664 v +346.9146 463.4697 346.9243 463.3418 347.0024 463.2559 c +347.0806 463.1689 347.2056 463.1475 347.3091 463.2012 c +353.1392 466.2822 359.7954 467.9453 366.811 467.9453 c +386.4321 467.9453 403.3579 451.541 407.0103 430.5801 c +407.0317 430.4561 407.1392 430.3691 407.2622 430.3711 c +f +483.9399 482.7773 m +488.5493 490.4551 490.1919 503.627 485.897 513.46 c +485.8481 513.5703 485.8833 513.6992 485.9829 513.7686 c +486.0806 513.8379 486.2153 513.8281 486.3032 513.7461 c +491.1099 509.1914 495.2427 498.5684 493.0083 486.2871 C +496.106 483.8936 498.0532 481.5176 499.522 478.335 c +499.5688 478.2314 499.5415 478.1104 499.4556 478.0352 c +499.3696 477.9629 499.2446 477.9551 499.1489 478.0186 c +494.1528 481.3809 489.686 482.5283 483.9399 482.7773 C +f +473.3306 362.9707 m +473.4009 362.8672 473.3833 362.7266 473.2915 362.6426 c +473.1978 362.5586 473.0571 362.5547 472.9595 362.6348 c +466.145 368.1621 457.0845 371.6895 445.9243 371.6895 c +418.3521 371.6895 400.9517 355.1719 398.2173 337.7637 c +398.1997 337.6523 398.1099 337.5664 397.9985 337.5508 c +397.8872 337.5371 397.7778 337.5977 397.7329 337.7012 c +395.0083 343.959 393.3657 353.0352 401.7817 365.209 c +406.8169 372.4941 412.9106 377.5098 412.9106 384.0273 c +412.9106 388.2852 410.6509 391.1797 407.2231 391.1797 c +403.6177 391.1797 401.2876 388.0918 401.2876 384.625 c +401.2876 382.877 401.7915 381.1465 402.6958 379.5801 c +402.7544 379.4766 402.7368 379.3496 402.6509 379.2676 c +402.5649 379.1875 402.436 379.1758 402.3384 379.2402 c +399.3657 381.1777 396.7114 384.6367 396.7114 389.5117 c +396.7114 396.6836 402.8442 402.6816 411.1802 402.6816 c +420.1548 402.6816 427.5044 395.6328 427.5044 385.4922 c +427.5044 382.0156 426.5142 377.8242 424.0415 374.3613 C +427.4263 377.1875 429.2329 379.1875 430.7192 383.5117 C +441.1196 385.3223 452.2251 383.6602 461.0493 377.8691 C +461.3052 383.9707 463.3013 389.0605 467.3931 393.1875 c +467.4771 393.2715 467.6079 393.2852 467.7075 393.2227 c +467.8091 393.1582 467.8521 393.0332 467.811 392.9219 c +464.9341 384.9199 466.8657 372.7246 473.3306 362.9707 c +f +560.6978 369.6055 m +558.4517 364.8066 553.2388 362.1211 547.2368 362.0117 c +547.1118 362.0098 547.0044 362.0977 546.9829 362.2188 c +546.9595 362.3418 547.0278 362.4609 547.1431 362.5039 c +549.1899 363.2578 550.8052 364.5762 551.6646 366.4141 c +553.8774 371.1426 550.2974 377.5098 543.6509 380.7832 c +543.5728 380.8223 543.52 380.8965 543.5103 380.9824 c +543.5005 381.0684 543.5337 381.1523 543.6001 381.207 c +547.8911 384.7266 553.0122 391.2617 553.0122 404.627 c +553.0122 423.3086 540.8579 441.0898 524.7368 441.0898 c +515.5239 441.0898 508.104 434.6934 504.2661 425.0977 C +508.4868 430.8564 514.2446 435.2051 522.1782 435.2051 c +533.8208 435.2051 543.0337 422.7969 543.0337 404.8828 c +543.0337 387.9941 531.1333 368.2891 515.2681 368.2891 c +506.5669 368.2891 500.0435 375.3281 500.0435 384.4121 c +500.0435 392.4746 505.2896 397.0781 511.1763 397.0781 c +515.6099 397.0781 518.6685 393.9473 519.6196 390.5527 c +519.6509 390.4375 519.6001 390.3164 519.4927 390.2598 c +519.3872 390.2051 519.2583 390.2305 519.1802 390.3223 c +518.4282 391.2168 517.2837 391.9609 515.5259 391.9609 c +512.5825 391.9609 511.0474 389.4316 511.0474 387.6113 c +511.0474 384.1563 513.606 381.7246 517.4458 381.7246 c +522.6899 381.7246 526.7856 387.4824 526.7856 394.9023 c +526.7856 404.1152 517.9556 412.5586 509.1274 412.5586 c +500.106 412.5586 490.4478 404.5 490.4478 389.5293 c +490.4478 374.8164 500.4282 357.9258 516.2935 357.9258 c +525.5435 357.9258 533.4048 362.0957 539.436 369.002 c +539.5161 369.0918 539.6489 369.1152 539.7544 369.0547 c +539.8599 368.9941 539.9067 368.8672 539.8677 368.752 c +535.4341 355.8164 537.9126 343.6074 544.688 343.6074 c +548.0024 343.6074 549.6899 345.9863 549.6899 348.5234 c +549.6899 351.1309 547.7915 353.2852 544.7212 353.6777 c +544.6001 353.6934 544.5063 353.793 544.4985 353.9141 c +544.4927 354.0352 544.5708 354.1465 544.6899 354.1758 c +551.5044 355.9395 558.5142 352.2285 558.5142 345.1328 c +558.5142 338.8555 553.1372 334.002 546.1021 334.002 c +535.4653 334.002 530.3774 345.2715 532.6431 355.5371 C +527.1841 348.4922 519.0903 342.7012 507.4653 342.7012 c +483.9224 342.7012 472.0239 369.5703 472.0239 387.6113 c +472.0239 403.9883 475.3501 414.4785 482.2603 422.5391 C +474.1978 416.3984 470.8716 409.6172 469.3384 400.2773 C +463.1958 391.832 447.2036 391.832 v +440.5161 391.832 434.2739 394.3086 429.4302 398.998 C +429.4282 398.9961 429.4263 398.9941 429.4243 398.9902 C +429.3892 399.0313 429.3501 399.0703 429.3149 399.1094 C +428.9946 399.4238 428.6802 399.748 428.3716 400.082 C +423.3091 404.9316 413.1802 409.4785 403.9399 405.6797 c +403.8345 405.6367 403.7134 405.6699 403.6431 405.7578 c +403.5728 405.8477 403.5708 405.9727 403.6392 406.0645 c +408.0454 412.0898 415.6626 414.0059 421.3169 413.1309 C +420.272 416.8457 419.6938 421.0117 419.6938 425.6094 c +419.6938 442.0137 428.4927 453.5801 438.106 459.2109 C +434.9517 463.0137 435.5962 468.9883 439.1372 473.0449 c +439.2173 473.1357 439.3481 473.1582 439.4536 473.0996 c +439.5571 473.041 439.606 472.918 439.5708 472.8018 c +437.8403 467.2695 442.9634 462.6523 449.7524 462.9004 c +449.8755 462.9033 449.9829 462.8193 450.0103 462.6992 c +450.0356 462.5801 449.9712 462.457 449.8579 462.4111 c +439.7212 458.248 433.0005 449.4316 433.0005 438.4033 c +433.0005 426.8906 439.9087 417.5488 451.0415 417.5488 c +460.1255 417.5488 469.2095 425.8672 469.2095 436.2285 c +469.2095 444.2891 464.731 449.0225 458.9731 449.0225 c +453.9849 449.0225 450.0181 445.5684 450.0181 441.4736 c +450.0181 435.6211 456.6001 433.499 460.1118 438.1309 c +460.1821 438.2227 460.3032 438.2559 460.4087 438.2129 c +460.5161 438.1699 460.5806 438.0625 460.5669 437.9482 c +460.0435 433.5586 456.8149 429.4482 451.8091 429.4482 c +447.2036 429.4482 442.4692 433.2861 442.4692 441.4746 c +442.4692 451.1982 451.8071 461.0508 467.1606 461.0508 c +488.1431 461.0508 499.5317 437.3809 489.2974 418.4453 C +494.5415 424.459 499.2759 430.8555 499.2759 442.2432 c +499.2759 463.75 478.0122 478.291 452.9224 469.7441 c +452.8032 469.7021 452.6724 469.7559 452.6157 469.8672 c +452.5571 469.9785 452.5884 470.1143 452.6899 470.1895 c +459.6958 475.2979 467.0337 482.8262 467.0337 495.4668 c +467.0337 508.6475 458.3345 517.9854 444.772 517.9854 c +434.2798 517.9854 427.6274 511.5879 427.6274 504.04 c +427.6274 498.2822 431.3462 493.6768 437.7349 493.6768 c +447.2466 493.6768 450.481 504.0195 445.5591 508.6445 c +445.4751 508.7236 445.4556 508.8516 445.5103 508.9521 c +445.5669 509.0547 445.6841 509.1055 445.7974 509.0762 c +450.5669 507.8398 455.1353 503.0068 455.1353 495.7236 c +455.1353 483.1855 443.4927 474.8682 430.6978 474.8682 c +424.7017 474.8682 418.8989 476.623 414.2271 479.9102 C +414.7778 484.0635 413.3579 488.6602 411.2603 491.752 C +413.2095 484.8848 411.1021 473.5732 400.5864 473.5732 c +394.6958 473.5732 390.8013 478.1025 390.8013 483.4551 c +390.8013 489.7793 396.147 492.7314 400.4966 492.125 c +400.6118 492.1104 400.7017 492.0186 400.7134 491.9023 c +400.7271 491.7891 400.6606 491.6797 400.5532 491.6367 c +398.9673 491.0293 397.6118 489.3691 397.6118 487.373 c +397.6118 484.873 399.52 483.3906 401.52 483.3906 c +404.8149 483.3906 406.645 487.0605 405.4927 491.1104 C +405.5044 491.1104 L +404.4321 493.9473 403.8286 497.1152 403.8286 500.6055 c +403.8286 517.3672 422.0103 533.3398 444.9497 533.3398 c +469.1626 533.3398 482.0044 516.0664 482.0044 498.2822 c +482.0044 488.7461 478.4224 481.5225 473.8149 476.915 C +493.7368 479.0332 506.313 470.5176 513.0942 458.2354 C +508.6157 454.3975 506.9536 448.7676 Y +512.3267 455.8057 521.5376 461.9453 534.4595 461.9453 c +554.0356 461.9453 569.3911 442.7539 569.3911 422.1563 c +569.3911 409.084 564.5884 396.375 554.8267 387.9102 C +560.8638 382.8809 563.4731 375.5391 560.6978 369.6055 c +f +*U +*u +482.2114 494.9053 m +482.1782 494.7852 482.2388 494.6582 482.3521 494.6094 c +497.1763 488.0957 507.6372 475.6289 512.0063 461.2324 c +512.0415 461.1152 512.1548 461.0391 512.2778 461.0527 c +512.3989 461.0664 512.4946 461.166 512.5024 461.2871 c +513.229 471.9434 510.1274 482.4531 504.0005 491.0234 C +518.1216 491.9648 529.2407 499.9297 536.1997 511.5723 C +540.3286 505.46 548.6509 505.7969 551.8599 512.6035 c +551.9106 512.708 551.8833 512.832 551.7954 512.9063 c +551.7075 512.9805 551.5806 512.9873 551.4868 512.9219 c +547.2134 509.9688 539.8071 513.498 542.9282 524.9355 c +544.981 532.4561 549.3716 536.4668 553.5259 535.333 c +556.7915 534.4414 557.7661 531.002 557.0864 528.5146 c +555.9243 524.2539 551.438 522.8623 548.481 525.6357 c +548.397 525.7158 548.2681 525.7285 548.1704 525.6641 c +548.0728 525.5986 548.0298 525.4775 548.0688 525.3662 c +548.9868 522.7852 550.5571 520.7285 553.6157 519.8936 c +558.811 518.4756 565.6743 521.8115 567.8618 529.8252 c +570.2114 538.4316 565.7153 548.0566 557.604 550.2715 c +546.2036 553.3818 538.1392 545.166 534.3931 535.2383 C +533.9263 539.8896 530.1079 544.3203 v +530.0317 544.4092 529.9048 544.4336 529.8013 544.3818 c +529.6978 544.3291 529.6431 544.2129 529.6665 544.0996 c +531.106 537.6641 530.9575 530.8047 529.1099 524.0361 c +523.9438 505.1074 503.6626 493.0977 482.479 495.0938 c +482.354 495.1055 482.2407 495.0254 482.2114 494.9053 c +f +512.5806 407.1348 m +518.7739 400.666 531.0493 395.6133 541.6646 397.168 c +541.7856 397.1855 541.9009 397.1172 541.9399 397.0039 c +541.981 396.8906 541.936 396.7637 541.8345 396.7012 c +536.1743 393.2617 524.8384 392.0723 513.5786 397.4609 C +510.4536 395.1035 507.6489 393.8496 504.1919 393.2715 c +504.0806 393.2539 503.9692 393.3125 503.9204 393.4141 c +503.8735 393.5156 503.8989 393.6387 503.9849 393.7148 c +508.5454 397.6484 510.8286 401.6563 512.5806 407.1348 C +f +399.7935 448.9121 m +399.6763 448.8711 399.5454 448.9258 399.4888 449.0371 c +399.4321 449.1484 399.4653 449.2852 399.5688 449.3594 c +406.6938 454.4785 412.4829 462.291 415.4204 473.0566 c +422.6802 499.6563 411.3267 520.7921 395.2544 528.0146 c +395.1509 528.0605 395.0903 528.1689 395.106 528.2803 c +395.1216 528.3926 395.2095 528.4814 395.3208 528.4971 c +402.0747 529.4785 411.2622 528.6729 420.7915 517.3486 c +426.4927 510.5732 429.7271 503.373 436.0142 501.6563 c +440.1216 500.5352 443.5103 501.9551 444.4126 505.2617 c +445.3618 508.7393 442.9966 511.8018 439.6528 512.7148 c +437.9653 513.1738 436.1626 513.1436 434.4146 512.6836 c +434.2993 512.6533 434.1821 512.7051 434.1255 512.8086 c +434.0708 512.9121 434.0923 513.04 434.1802 513.1172 c +436.8325 515.4746 440.8677 517.125 445.5708 515.8408 c +452.4907 513.9531 456.6606 506.457 454.4673 498.415 c +452.104 489.7578 443.3696 484.5234 433.5864 487.1934 c +430.2329 488.1084 426.4497 490.168 423.7603 493.4648 C +425.5942 489.4551 427.0493 487.1855 430.8286 484.6133 C +429.8364 474.1035 425.3091 463.8271 417.4009 456.8389 C +423.2192 454.9863 427.604 451.7207 430.5083 446.6855 c +430.5669 446.582 430.5454 446.4531 430.4595 446.373 c +430.3696 446.293 430.2388 446.2832 430.1411 446.3535 c +423.1802 451.2344 410.9048 452.582 399.7935 448.9121 c +f +383.1919 362.8809 m +379.1548 366.3105 377.936 372.0469 379.4106 377.8672 c +379.4419 377.9883 379.5552 378.0684 379.6782 378.0566 c +379.8032 378.0469 379.8989 377.9492 379.9106 377.8281 c +380.0981 375.6543 380.9458 373.748 382.4927 372.4355 c +386.4712 369.0566 393.5571 370.834 398.4634 376.3828 c +398.522 376.4492 398.6079 376.4805 398.6938 376.4668 c +398.7798 376.4531 398.8521 376.3984 398.8872 376.3203 c +401.1528 371.2539 406.1079 364.5938 419.0005 361.0742 c +437.0239 356.1563 457.3794 363.1992 461.6235 378.752 c +464.0493 387.6406 459.8306 396.4824 451.5845 402.7109 C +456.0298 397.123 458.7075 390.4238 456.6177 382.7695 c +453.5532 371.5391 439.1567 365.918 421.8755 370.6348 c +405.5825 375.0801 389.7075 391.748 393.8833 407.0547 c +396.1743 415.4492 404.6821 419.8887 413.4458 417.4961 c +421.2231 415.375 424.2837 409.1016 422.7329 403.4219 c +421.5669 399.1445 417.7407 397.0195 414.2153 396.9941 c +414.0962 396.9941 413.9927 397.0762 413.9653 397.1934 c +413.9419 397.3105 413.9985 397.4277 414.1079 397.4785 c +415.1704 397.9688 416.188 398.877 416.6509 400.5742 c +417.4263 403.4121 415.3911 405.5605 413.6353 406.0391 c +410.3032 406.9492 407.2837 405.1211 406.272 401.416 c +404.8911 396.3574 409.3677 390.8906 416.5239 388.9355 c +425.4126 386.5117 435.8833 392.8066 438.2075 401.3223 c +440.5825 410.0254 435.3501 421.4648 420.9087 425.4063 c +406.7153 429.2813 387.7935 424.0996 383.6157 408.793 c +381.1802 399.8691 383.1333 391.1875 388.2075 383.5508 c +388.2739 383.4512 388.2622 383.3164 388.1763 383.2305 c +388.0884 383.1445 387.9536 383.1328 387.854 383.2012 c +376.5415 390.8828 364.1118 391.707 362.3267 385.1699 c +361.4536 381.9727 363.3052 379.7188 365.7524 379.0508 c +368.2681 378.3652 370.8462 379.6289 372.0337 382.4883 c +372.0806 382.5996 372.2017 382.6641 372.3208 382.6406 c +372.438 382.6133 372.5259 382.5098 372.522 382.3867 c +372.4302 375.3477 367.0044 369.5625 360.1587 371.4316 c +354.1021 373.084 350.8364 379.5488 352.688 386.3359 c +355.4888 396.5977 367.6997 398.5391 377.0063 393.6504 C +371.647 400.7715 368.1919 410.1035 371.2524 421.3184 c +377.4517 444.0313 406.5044 448.4355 423.9087 443.6855 c +439.7075 439.373 448.9517 433.4023 454.9087 424.6152 C +451.1079 434.0098 445.4419 439.0039 436.8345 442.9434 C +430.3052 451.0918 434.5161 466.5195 v +436.2759 472.9707 440.3091 478.3418 446.1079 481.7793 C +446.1079 481.7813 446.106 481.7842 446.1021 481.7871 C +446.1509 481.8105 446.1997 481.8379 446.2466 481.8613 C +446.6333 482.0879 447.0298 482.3057 447.4321 482.5146 C +453.4438 486.1211 460.4966 494.6973 459.2661 504.6113 c +459.2524 504.7236 459.3149 504.832 459.4185 504.877 c +459.5239 504.9219 459.645 504.8896 459.7153 504.8018 c +464.3677 498.9629 464.2114 491.1104 461.8794 485.8857 C +465.7368 485.915 469.9087 485.375 474.3442 484.165 c +490.1685 479.8457 499.0122 468.3135 501.9126 457.5566 C +506.4106 459.5977 512.0063 457.4043 514.9888 452.9199 c +515.0532 452.8184 515.0415 452.6855 514.9575 452.5996 c +514.8735 452.5156 514.7407 452.5 514.6392 452.5645 c +509.7583 455.6914 503.9556 451.9648 502.4048 445.3496 c +502.3774 445.2305 502.2681 445.1484 502.145 445.1543 c +502.022 445.1602 501.9204 445.2539 501.9067 445.377 c +500.5591 456.251 493.8228 465.0566 483.1841 467.96 c +472.0767 470.9922 461.2446 466.7852 458.3149 456.0469 c +455.9224 447.2832 461.5571 436.3301 471.5513 433.6016 c +479.3286 431.4785 485.0747 434.5527 486.5903 440.1074 c +487.9048 444.9199 485.6157 449.6563 481.6665 450.7344 c +476.0181 452.2754 472.2388 446.4844 475.7837 441.877 c +475.8521 441.7852 475.854 441.6602 475.7837 441.5684 c +475.7153 441.4766 475.5923 441.4434 475.4868 441.4863 c +471.3892 443.1465 468.2739 447.3418 469.5923 452.1729 c +470.8052 456.6152 475.7544 460.1729 483.6548 458.0166 c +493.0356 455.457 500.0806 443.8555 496.0376 429.043 c +490.5142 408.7988 464.6802 404.0449 449.1079 418.9043 C +453.5278 412.2617 458.4517 406.0098 469.438 403.0117 c +490.188 397.3496 509.813 414.0332 508.1724 440.4902 c +508.1646 440.6152 508.2505 440.7285 508.3735 440.7539 c +508.4946 440.7813 508.6196 440.7129 508.6646 440.5977 c +511.7466 432.4922 517.0786 423.4316 529.2739 420.1035 c +541.9888 416.6328 553.2876 422.5664 556.8599 435.6504 c +559.6216 445.7734 555.2017 453.875 547.9204 455.8623 c +542.3657 457.3789 536.9419 455.0039 535.2603 448.8398 c +532.7563 439.6641 541.8833 433.8203 547.6411 437.3516 c +547.7388 437.4121 547.8677 437.3965 547.9497 437.3164 c +548.0337 437.2363 548.0513 437.1094 547.9927 437.0078 c +545.5454 432.7324 539.6802 429.5977 532.6548 431.5156 c +520.5571 434.8164 515.6001 448.2383 518.9673 460.5811 c +520.5454 466.3652 523.7681 471.502 528.1685 475.1426 C +532.0298 473.5186 536.8384 473.6777 540.3735 474.8867 C +533.2349 474.8154 522.8794 479.8262 525.647 489.9707 c +527.1978 495.6533 532.5923 498.2188 537.7563 496.8086 c +543.8579 495.1436 545.2974 489.21 543.5688 485.1729 c +543.522 485.0654 543.4106 485.0039 543.2974 485.0225 c +543.1821 485.04 543.0942 485.1318 543.0825 485.2471 c +542.9146 486.9375 541.6685 488.6836 539.7446 489.208 c +537.3325 489.8662 535.3989 488.415 534.8735 486.4854 c +534.0044 483.3066 537.063 480.5752 541.2739 480.6211 C +541.27 480.6094 L +544.2896 480.8984 547.5044 480.6445 550.8716 479.7266 c +567.0415 475.3125 577.6646 453.5674 571.6235 431.4375 c +565.2485 408.0781 545.2056 400.2363 528.0474 404.9199 c +518.8481 407.4297 512.8228 412.7871 509.5903 418.4453 C +506.3892 398.668 494.8618 388.7793 481.229 385.4707 C +478.7056 390.8008 473.7114 393.8867 Y +479.0864 386.8496 482.5845 376.3477 479.1821 363.8809 c +474.0278 344.9961 451.4712 335.2344 431.6001 340.6582 c +418.9888 344.0996 407.9927 352.0801 402.397 363.7266 C +395.9556 359.2266 388.186 358.6406 383.1919 362.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +530.1294 436.9688 m +530.0044 436.9688 529.8989 436.877 529.8794 436.7539 c +527.5005 420.7402 518.2271 407.3652 505.4888 399.3594 c +505.3853 399.2949 505.3403 399.1641 505.3872 399.0508 c +505.4321 398.9375 505.5532 398.8711 505.6724 398.8965 c +516.145 401 525.4653 406.7598 532.1216 414.9277 C +536.7466 401.5508 547.3579 392.9219 560.4224 389.2734 C +555.6138 383.6816 558.1294 375.7402 565.5415 374.4375 c +565.6548 374.416 565.7661 374.4746 565.8149 374.5781 c +565.8638 374.6816 565.8364 374.8066 565.7485 374.8809 c +561.7759 378.2266 563.229 386.3008 575.0864 386.3008 c +582.8804 386.3008 587.9077 383.1211 587.9077 378.8145 c +587.9077 375.4297 584.8452 373.584 582.2651 373.584 c +577.8511 373.584 575.3267 377.5449 577.2231 381.127 c +577.2778 381.2305 577.2563 381.3574 577.1685 381.4355 c +577.0806 381.5137 576.9517 381.5215 576.854 381.4551 c +574.606 379.8906 573.0356 377.834 573.0356 374.6641 c +573.0356 369.2773 578.062 363.5352 586.3687 363.5332 c +595.2905 363.5332 603.3921 370.4043 603.3921 378.8145 c +603.3921 390.6309 593.3433 396.248 582.7788 397.248 C +587.144 398.9219 590.4116 403.7734 v +590.478 403.8691 590.4683 403.998 590.3901 404.084 c +590.312 404.1719 590.1851 404.1934 590.0835 404.1387 c +584.2534 401.0566 577.5942 399.3945 570.5806 399.3945 c +550.9575 399.3945 534.0337 415.7988 530.3813 436.7607 c +530.3599 436.8818 530.2524 436.9727 530.1294 436.9688 c +f +453.4517 384.5625 m +448.8442 376.8867 447.1997 363.7129 451.4946 353.8809 c +451.5435 353.7695 451.5083 353.6406 451.4087 353.5703 c +451.3091 353.502 451.1763 353.5117 451.0884 353.5957 c +446.2817 358.1484 442.1489 368.7715 444.3833 381.0527 C +441.2876 383.4473 439.3384 385.8223 437.8696 389.0059 c +437.8228 389.1074 437.8501 389.2305 437.936 389.3047 c +438.022 389.377 438.147 389.3848 438.2427 389.3203 c +443.2388 385.959 447.7056 384.8125 453.4517 384.5625 C +f +464.0591 504.3691 m +463.9907 504.4727 464.0083 504.6133 464.1001 504.6973 c +464.1938 504.7813 464.3345 504.7852 464.4321 504.7061 c +471.2466 499.1797 480.3071 495.6504 491.4673 495.6504 c +519.0376 495.6504 536.4399 512.1689 539.1743 529.5771 c +539.1919 529.6885 539.2817 529.7734 539.3931 529.7891 c +539.5044 529.8047 539.6138 529.7422 539.6587 529.6396 c +542.3833 523.3818 544.0259 514.3057 535.6099 502.1309 c +530.5747 494.8457 524.479 489.8311 524.479 483.3145 c +524.479 479.0566 526.7407 476.1602 530.1685 476.1602 c +533.7739 476.1602 536.106 479.248 536.104 482.7148 c +536.104 484.4629 535.6001 486.1934 534.6958 487.7607 c +534.6372 487.8633 534.6548 487.9902 534.7407 488.0723 c +534.8247 488.1523 534.9556 488.165 535.0532 488.1016 c +538.0259 486.1641 540.6802 482.7021 540.6802 477.8281 c +540.6802 470.6563 534.5474 464.6602 526.2095 464.6602 c +517.2368 464.6602 509.8872 471.709 509.8872 481.8477 c +509.8872 485.3262 510.8755 489.5156 513.3501 492.9805 C +509.9653 490.1523 508.1587 488.1523 506.6724 483.8271 C +496.272 482.0186 485.1665 483.6797 476.3403 489.4727 C +476.0864 483.3711 474.0903 478.2793 469.9985 474.1533 c +469.9146 474.0684 469.7837 474.0547 469.6841 474.1182 c +469.5825 474.1816 469.5415 474.3066 469.5806 474.4189 c +472.4575 482.4199 470.5239 494.6152 464.0591 504.3691 c +f +376.6938 497.7344 m +378.938 502.5352 384.1528 505.2188 390.1548 505.3271 c +390.2798 505.3311 390.3872 505.2432 390.4087 505.1211 c +390.4321 504.998 390.3638 504.8779 390.2485 504.8359 c +388.2017 504.082 386.5864 502.7637 385.7271 500.9258 c +383.5142 496.1973 387.0942 489.8301 393.7407 486.5566 c +393.8188 486.5186 393.8716 486.4434 393.8813 486.3594 c +393.8911 486.2725 393.856 486.1885 393.7915 486.1318 c +389.5005 482.6143 384.3794 476.0781 384.3794 462.7148 c +384.3774 444.0322 396.5337 426.25 412.6548 426.25 c +421.8677 426.25 429.2876 432.6465 433.1255 442.2422 C +428.9028 436.4844 423.145 432.1348 415.2114 432.1348 c +403.5708 432.1348 394.3579 444.5439 394.356 462.459 c +394.356 479.3457 406.2583 499.0518 422.1216 499.0508 c +430.8247 499.0488 437.3481 492.0117 437.3481 482.9277 c +437.3481 474.8672 432.1021 470.2637 426.2173 470.2637 c +421.7798 470.2637 418.7231 473.3936 417.772 476.7871 c +417.7388 476.9023 417.7915 477.0254 417.897 477.0811 c +418.0044 477.1357 418.1333 477.1104 418.2114 477.0186 c +418.9634 476.124 420.1079 475.3809 421.8657 475.3809 c +424.8091 475.3789 426.3442 477.9082 426.3442 479.7285 c +426.3442 483.1836 423.7856 485.6152 419.9458 485.6152 c +414.7036 485.6152 410.606 479.8564 410.606 472.4385 c +410.606 463.2236 419.436 454.7813 428.2642 454.7813 c +437.2856 454.7813 446.9438 462.8408 446.9438 477.8125 c +446.9419 492.5234 436.9653 509.4141 421.0981 509.4141 c +411.8481 509.4141 403.9849 505.2441 397.9556 498.3398 c +397.8755 498.248 397.7427 498.2246 397.6392 498.2852 c +397.5317 498.3477 397.4849 498.4727 397.5239 498.5879 c +401.9575 511.5234 399.4771 523.7344 392.7036 523.7324 c +389.3892 523.7324 387.7017 521.3535 387.7017 518.8154 c +387.7017 516.21 389.6001 514.0566 392.6704 513.6611 c +392.7915 513.6475 392.8833 513.5479 392.8931 513.4268 c +392.8989 513.3047 392.8188 513.1943 392.7017 513.1641 c +385.8872 511.4004 378.8774 515.1133 378.8774 522.2061 c +378.8774 528.4854 384.2544 533.3398 391.2896 533.3398 c +401.9263 533.3379 407.0142 522.0684 404.7485 511.8047 C +410.2075 518.8486 418.3013 524.6396 429.9263 524.6396 c +453.4692 524.6396 465.3677 497.7715 465.3677 479.7285 c +465.3677 463.3525 462.0415 452.8604 455.1313 444.8018 C +463.1938 450.9404 466.52 457.7227 468.0552 467.0645 C +474.1958 475.5078 490.188 475.5078 v +496.8755 475.5078 503.1177 473.0322 507.9614 468.3438 C +507.9634 468.3447 507.9653 468.3477 507.9673 468.3486 C +508.0024 468.3105 508.0396 468.2695 508.0767 468.2314 C +508.397 467.915 508.7114 467.5918 509.02 467.2578 C +514.0806 462.4102 524.2114 457.8633 533.4517 461.6602 c +533.5571 461.7031 533.6782 461.6699 533.7485 461.582 c +533.8188 461.4932 533.8188 461.3672 533.7524 461.2754 c +529.3462 455.252 521.729 453.335 516.0747 454.21 C +517.1177 450.4941 517.6958 446.3281 517.6958 441.7305 c +517.6978 425.3262 508.8989 413.7598 499.2856 408.1289 C +502.438 404.3281 501.7954 398.3535 498.2544 394.2949 c +498.1743 394.2051 498.0435 394.1816 497.938 394.2402 c +497.8345 394.2988 497.7837 394.4238 497.8188 394.5391 c +499.5513 400.0703 494.4282 404.6875 487.6392 404.4395 c +487.5161 404.4355 487.4067 404.5195 487.3813 404.6406 c +487.356 404.7617 487.4185 404.8828 487.5337 404.9277 c +497.6685 409.0918 504.3911 417.9102 504.3892 428.9355 c +504.3911 440.4492 497.481 449.79 486.3501 449.79 c +477.2661 449.79 468.1821 441.4727 468.1821 431.1133 c +468.1821 423.0508 472.6587 418.3184 478.4165 418.3164 c +483.4067 418.3184 487.3735 421.7715 487.3735 425.8672 c +487.3735 431.7188 480.7896 433.8408 477.2778 429.209 c +477.2095 429.1172 477.0864 429.084 476.981 429.127 c +476.8755 429.1689 476.811 429.2773 476.8228 429.3926 c +477.3462 433.7813 480.5767 437.8926 485.5825 437.8926 c +490.188 437.8926 494.9224 434.0518 494.9224 425.8652 c +494.9224 416.1406 485.5845 406.291 470.231 406.2891 c +449.2466 406.2891 437.8599 429.959 448.0942 448.8945 C +442.8501 442.8809 438.1157 436.4844 438.1157 425.0977 c +438.1138 403.5898 459.3794 389.0488 484.4692 397.5977 c +484.5884 397.6367 484.7192 397.584 484.7759 397.4746 c +484.8345 397.3633 484.8013 397.2266 484.6997 397.1523 c +477.6938 392.043 470.356 384.5137 470.356 371.873 c +470.356 358.6934 479.0552 349.3535 492.6196 349.3535 c +503.1099 349.3535 509.7642 355.752 509.7642 363.2988 c +509.7642 369.0566 506.0454 373.6641 499.6567 373.6641 c +490.1431 373.6641 486.9087 363.3203 491.8325 358.6953 c +491.9165 358.6152 491.936 358.4902 491.8813 358.3887 c +491.8247 358.2871 491.7056 358.2344 491.5942 358.2637 c +486.8247 359.5 482.2563 364.332 482.2563 371.6152 c +482.2544 384.1563 493.897 392.4727 506.6919 392.4727 c +512.688 392.4727 518.4907 390.7188 523.1646 387.4297 C +522.6118 383.2773 524.0317 378.6816 526.1313 375.5879 C +524.1821 382.457 526.2915 393.7656 536.8032 393.7676 c +542.6958 393.7656 546.5903 389.2383 546.5903 383.8867 c +546.5903 377.5605 541.2446 374.6094 536.895 375.2148 c +536.7798 375.2305 536.6899 375.3223 536.6763 375.4375 c +536.6646 375.5527 536.731 375.6602 536.8384 375.7031 c +538.4243 376.3105 539.7817 377.9727 539.7817 379.9668 c +539.7817 382.4668 537.8696 383.9492 535.8696 383.9492 c +532.5767 383.9492 530.7466 380.2793 531.8989 376.2305 C +531.8872 376.2285 L +532.9595 373.3926 533.561 370.2246 533.561 366.7363 c +533.561 349.9746 515.3813 334.002 492.4399 334 c +468.229 334 455.3872 351.2734 455.3892 369.0566 c +455.3892 378.5938 458.9692 385.8184 463.5767 390.4258 C +443.6548 388.3066 431.0786 396.8223 424.2974 409.1035 C +428.7759 412.9414 430.438 418.5723 Y +425.0649 411.5352 415.854 405.3945 402.9321 405.3945 c +383.356 405.3945 368.0005 424.5859 368.0005 445.1836 c +368.0005 458.2568 372.8032 470.9648 382.5649 479.4307 C +376.5278 484.459 373.9185 491.8018 376.6938 497.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +240.2622 430.3711 m +240.3872 430.3711 240.4927 430.4629 240.5103 430.585 c +242.8911 446.5996 252.1646 459.9746 264.9028 467.9814 c +265.0063 468.0449 265.0493 468.1758 265.0044 468.29 c +264.9575 468.4023 264.8384 468.4688 264.7173 468.4443 c +254.2466 466.3398 244.9243 460.5811 238.27 452.4141 C +233.644 465.7891 223.0337 474.418 209.9692 478.0654 C +214.7778 483.6582 212.2622 491.5986 204.8501 492.9023 c +204.7368 492.9229 204.6245 492.8643 204.5757 492.7607 c +204.5278 492.6563 204.5542 492.5322 204.6421 492.46 c +208.6157 489.1143 207.1616 481.04 195.3052 481.04 c +187.5103 481.04 182.4849 484.2188 182.4849 488.5254 c +182.4849 491.9102 185.5464 493.7559 188.1255 493.7559 c +192.5415 493.7559 195.0649 489.7949 193.1675 486.2129 c +193.1128 486.1104 193.1353 485.9814 193.2231 485.9033 c +193.311 485.8271 193.4399 485.8184 193.5366 485.8857 c +195.7856 487.4492 197.356 489.5059 197.356 492.6768 c +197.356 498.0635 192.3306 503.8066 184.0239 503.8066 c +175.1021 503.8066 167.0005 496.9355 167.0005 488.5254 c +167.0005 476.71 177.0493 471.0918 187.6138 470.0918 C +183.2485 468.4189 179.98 463.5664 v +179.9146 463.4697 179.9243 463.3418 180.0015 463.2559 c +180.0796 463.1689 180.2056 463.1475 180.3091 463.2012 c +186.1392 466.2822 192.7954 467.9453 199.811 467.9453 c +219.4321 467.9453 236.3579 451.541 240.0103 430.5801 c +240.0317 430.4561 240.1382 430.3691 240.2622 430.3711 c +f +316.9399 482.7773 m +321.5493 490.4551 323.1919 503.627 318.897 513.46 c +318.8481 513.5703 318.8833 513.6992 318.9829 513.7686 c +319.0806 513.8379 319.2153 513.8281 319.3032 513.7461 c +324.1099 509.1914 328.2427 498.5684 326.0083 486.2871 C +329.106 483.8936 331.0532 481.5176 332.522 478.335 c +332.5688 478.2314 332.5415 478.1104 332.4556 478.0352 c +332.3696 477.9629 332.2446 477.9551 332.1489 478.0186 c +327.1528 481.3809 322.686 482.5283 316.9399 482.7773 C +f +306.3306 362.9707 m +306.4009 362.8672 306.3833 362.7266 306.2915 362.6426 c +306.1978 362.5586 306.0571 362.5547 305.9595 362.6348 c +299.145 368.1621 290.0845 371.6895 278.9243 371.6895 c +251.3521 371.6895 233.9517 355.1719 231.2163 337.7637 c +231.1987 337.6523 231.1099 337.5664 230.9985 337.5508 c +230.8862 337.5371 230.7778 337.5977 230.7329 337.7012 c +228.0073 343.959 226.3657 353.0352 234.7817 365.209 c +239.8159 372.4941 245.9106 377.5098 245.9106 384.0273 c +245.9106 388.2852 243.6509 391.1797 240.2231 391.1797 c +236.6177 391.1797 234.2866 388.0918 234.2866 384.625 c +234.2866 382.877 234.7915 381.1465 235.6958 379.5801 c +235.7544 379.4766 235.7358 379.3496 235.6509 379.2676 c +235.5649 379.1875 235.436 379.1758 235.3384 379.2402 c +232.3657 381.1777 229.7114 384.6367 229.7114 389.5117 c +229.7114 396.6836 235.8442 402.6816 244.1802 402.6816 c +253.1548 402.6816 260.5044 395.6328 260.5044 385.4922 c +260.5044 382.0156 259.5142 377.8242 257.0415 374.3613 C +260.4263 377.1875 262.2329 379.1875 263.7192 383.5117 C +274.1196 385.3223 285.2251 383.6602 294.0493 377.8691 C +294.3052 383.9707 296.3013 389.0605 300.3931 393.1875 c +300.4771 393.2715 300.6079 393.2852 300.7075 393.2227 c +300.8091 393.1582 300.8521 393.0332 300.811 392.9219 c +297.9341 384.9199 299.8657 372.7246 306.3306 362.9707 c +f +393.6978 369.6055 m +391.4517 364.8066 386.2388 362.1211 380.2368 362.0117 c +380.1118 362.0098 380.0044 362.0977 379.9829 362.2188 c +379.9595 362.3418 380.0278 362.4609 380.1431 362.5039 c +382.1899 363.2578 383.8052 364.5762 384.6646 366.4141 c +386.8774 371.1426 383.2974 377.5098 376.6509 380.7832 c +376.5728 380.8223 376.52 380.8965 376.5103 380.9824 c +376.5005 381.0684 376.5337 381.1523 376.6001 381.207 c +380.8911 384.7266 386.0122 391.2617 386.0122 404.627 c +386.0122 423.3086 373.8579 441.0898 357.7368 441.0898 c +348.5239 441.0898 341.104 434.6934 337.2661 425.0977 C +341.4868 430.8564 347.2446 435.2051 355.1782 435.2051 c +366.8208 435.2051 376.0337 422.7969 376.0337 404.8828 c +376.0337 387.9941 364.1333 368.2891 348.2681 368.2891 c +339.5669 368.2891 333.0435 375.3281 333.0435 384.4121 c +333.0435 392.4746 338.2896 397.0781 344.1763 397.0781 c +348.6099 397.0781 351.6685 393.9473 352.6196 390.5527 c +352.6509 390.4375 352.6001 390.3164 352.4927 390.2598 c +352.3872 390.2051 352.2583 390.2305 352.1802 390.3223 c +351.4282 391.2168 350.2837 391.9609 348.5259 391.9609 c +345.5825 391.9609 344.0474 389.4316 344.0474 387.6113 c +344.0474 384.1563 346.606 381.7246 350.4458 381.7246 c +355.6899 381.7246 359.7856 387.4824 359.7856 394.9023 c +359.7856 404.1152 350.9556 412.5586 342.1274 412.5586 c +333.106 412.5586 323.4478 404.5 323.4478 389.5293 c +323.4478 374.8164 333.4282 357.9258 349.2935 357.9258 c +358.5435 357.9258 366.4048 362.0957 372.436 369.002 c +372.5161 369.0918 372.6489 369.1152 372.7544 369.0547 c +372.8599 368.9941 372.9067 368.8672 372.8677 368.752 c +368.4341 355.8164 370.9126 343.6074 377.688 343.6074 c +381.0024 343.6074 382.6899 345.9863 382.6899 348.5234 c +382.6899 351.1309 380.7915 353.2852 377.7212 353.6777 c +377.6001 353.6934 377.5063 353.793 377.4985 353.9141 c +377.4927 354.0352 377.5708 354.1465 377.6899 354.1758 c +384.5044 355.9395 391.5142 352.2285 391.5142 345.1328 c +391.5142 338.8555 386.1372 334.002 379.1021 334.002 c +368.4653 334.002 363.3774 345.2715 365.6431 355.5371 C +360.1841 348.4922 352.0903 342.7012 340.4653 342.7012 c +316.9224 342.7012 305.0239 369.5703 305.0239 387.6113 c +305.0239 403.9883 308.3501 414.4785 315.2603 422.5391 C +307.1978 416.3984 303.8716 409.6172 302.3384 400.2773 C +296.1958 391.832 280.2036 391.832 v +273.5161 391.832 267.2739 394.3086 262.4302 398.998 C +262.4282 398.9961 262.4263 398.9941 262.4243 398.9902 C +262.3892 399.0313 262.3501 399.0703 262.3149 399.1094 C +261.9946 399.4238 261.6802 399.748 261.3716 400.082 C +256.3091 404.9316 246.1802 409.4785 236.9399 405.6797 c +236.8345 405.6367 236.7134 405.6699 236.6431 405.7578 c +236.5728 405.8477 236.5708 405.9727 236.6382 406.0645 c +241.0454 412.0898 248.6626 414.0059 254.3169 413.1309 C +253.272 416.8457 252.6938 421.0117 252.6938 425.6094 c +252.6938 442.0137 261.4927 453.5801 271.106 459.2109 C +267.9517 463.0137 268.5962 468.9883 272.1372 473.0449 c +272.2173 473.1357 272.3481 473.1582 272.4536 473.0996 c +272.5571 473.041 272.606 472.918 272.5708 472.8018 c +270.8403 467.2695 275.9634 462.6523 282.7524 462.9004 c +282.8755 462.9033 282.9829 462.8193 283.0103 462.6992 c +283.0356 462.5801 282.9712 462.457 282.8579 462.4111 c +272.7212 458.248 266.0005 449.4316 266.0005 438.4033 c +266.0005 426.8906 272.9087 417.5488 284.0415 417.5488 c +293.1255 417.5488 302.2095 425.8672 302.2095 436.2285 c +302.2095 444.2891 297.731 449.0225 291.9731 449.0225 c +286.9849 449.0225 283.0181 445.5684 283.0181 441.4736 c +283.0181 435.6211 289.6001 433.499 293.1118 438.1309 c +293.1821 438.2227 293.3032 438.2559 293.4087 438.2129 c +293.5161 438.1699 293.5806 438.0625 293.5669 437.9482 c +293.0435 433.5586 289.8149 429.4482 284.8091 429.4482 c +280.2036 429.4482 275.4692 433.2861 275.4692 441.4746 c +275.4692 451.1982 284.8071 461.0508 300.1606 461.0508 c +321.1431 461.0508 332.5317 437.3809 322.2974 418.4453 C +327.5415 424.459 332.2759 430.8555 332.2759 442.2432 c +332.2759 463.75 311.0122 478.291 285.9224 469.7441 c +285.8032 469.7021 285.6724 469.7559 285.6157 469.8672 c +285.5571 469.9785 285.5884 470.1143 285.6899 470.1895 c +292.6958 475.2979 300.0337 482.8262 300.0337 495.4668 c +300.0337 508.6475 291.3345 517.9854 277.772 517.9854 c +267.2798 517.9854 260.6274 511.5879 260.6274 504.04 c +260.6274 498.2822 264.3462 493.6768 270.7349 493.6768 c +280.2466 493.6768 283.481 504.0195 278.5591 508.6445 c +278.4751 508.7236 278.4556 508.8516 278.5103 508.9521 c +278.5669 509.0547 278.6841 509.1055 278.7974 509.0762 c +283.5669 507.8398 288.1353 503.0068 288.1353 495.7236 c +288.1353 483.1855 276.4927 474.8682 263.6978 474.8682 c +257.7017 474.8682 251.8989 476.623 247.2271 479.9102 C +247.7778 484.0635 246.3579 488.6602 244.2603 491.752 C +246.2095 484.8848 244.1021 473.5732 233.5864 473.5732 c +227.6958 473.5732 223.8013 478.1025 223.8013 483.4551 c +223.8013 489.7793 229.147 492.7314 233.4966 492.125 c +233.6118 492.1104 233.7007 492.0186 233.7134 491.9023 c +233.7271 491.7891 233.6606 491.6797 233.5532 491.6367 c +231.9673 491.0293 230.6108 489.3691 230.6108 487.373 c +230.6108 484.873 232.52 483.3906 234.52 483.3906 c +237.8149 483.3906 239.645 487.0605 238.4927 491.1104 C +238.5044 491.1104 L +237.4312 493.9473 236.8286 497.1152 236.8286 500.6055 c +236.8286 517.3672 255.0103 533.3398 277.9497 533.3398 c +302.1626 533.3398 315.0044 516.0664 315.0044 498.2822 c +315.0044 488.7461 311.4224 481.5225 306.8149 476.915 C +326.7368 479.0332 339.313 470.5176 346.0942 458.2354 C +341.6157 454.3975 339.9536 448.7676 Y +345.3267 455.8057 354.5376 461.9453 367.4595 461.9453 c +387.0356 461.9453 402.3911 442.7539 402.3911 422.1563 c +402.3911 409.084 397.5884 396.375 387.8267 387.9102 C +393.8638 382.8809 396.4731 375.5391 393.6978 369.6055 c +f +*U +*u +315.2114 494.9053 m +315.1782 494.7852 315.2388 494.6582 315.3521 494.6094 c +330.1763 488.0957 340.6372 475.6289 345.0063 461.2324 c +345.0415 461.1152 345.1548 461.0391 345.2778 461.0527 c +345.3989 461.0664 345.4946 461.166 345.5024 461.2871 c +346.229 471.9434 343.1274 482.4531 337.0005 491.0234 C +351.1216 491.9648 362.2407 499.9297 369.1997 511.5723 C +373.3286 505.46 381.6509 505.7969 384.8599 512.6035 c +384.9106 512.708 384.8833 512.832 384.7954 512.9063 c +384.7075 512.9805 384.5806 512.9873 384.4868 512.9219 c +380.2134 509.9688 372.8071 513.498 375.9282 524.9355 c +377.981 532.4561 382.3716 536.4668 386.5259 535.333 c +389.7915 534.4414 390.7661 531.002 390.0864 528.5146 c +388.9243 524.2539 384.438 522.8623 381.481 525.6357 c +381.397 525.7158 381.2681 525.7285 381.1704 525.6641 c +381.0728 525.5986 381.0298 525.4775 381.0688 525.3662 c +381.9868 522.7852 383.5571 520.7285 386.6157 519.8936 c +391.811 518.4756 398.6743 521.8115 400.8618 529.8252 c +403.2114 538.4316 398.7153 548.0566 390.604 550.2715 c +379.2036 553.3818 371.1392 545.166 367.3931 535.2383 C +366.9263 539.8896 363.1079 544.3203 v +363.0317 544.4092 362.9048 544.4336 362.8013 544.3818 c +362.6978 544.3291 362.6431 544.2129 362.6665 544.0996 c +364.106 537.6641 363.9575 530.8047 362.1099 524.0361 c +356.9438 505.1074 336.6626 493.0977 315.479 495.0938 c +315.354 495.1055 315.2407 495.0254 315.2114 494.9053 c +f +345.5806 407.1348 m +351.7739 400.666 364.0493 395.6133 374.6646 397.168 c +374.7856 397.1855 374.9009 397.1172 374.9399 397.0039 c +374.981 396.8906 374.936 396.7637 374.8345 396.7012 c +369.1743 393.2617 357.8384 392.0723 346.5786 397.4609 C +343.4536 395.1035 340.6489 393.8496 337.1919 393.2715 c +337.0806 393.2539 336.9692 393.3125 336.9204 393.4141 c +336.8735 393.5156 336.8989 393.6387 336.9849 393.7148 c +341.5454 397.6484 343.8286 401.6563 345.5806 407.1348 C +f +232.7935 448.9121 m +232.6753 448.8711 232.5444 448.9258 232.4878 449.0371 c +232.4312 449.1484 232.4644 449.2852 232.5679 449.3594 c +239.6938 454.4785 245.4829 462.291 248.4204 473.0566 c +255.6802 499.6563 244.3267 520.7921 228.2534 528.0146 c +228.1499 528.0605 228.0903 528.1689 228.105 528.2803 c +228.1216 528.3926 228.2085 528.4814 228.3198 528.4971 c +235.0747 529.4785 244.2622 528.6729 253.7915 517.3486 c +259.4927 510.5732 262.7271 503.373 269.0142 501.6563 c +273.1216 500.5352 276.5103 501.9551 277.4126 505.2617 c +278.3618 508.7393 275.9966 511.8018 272.6528 512.7148 c +270.9653 513.1738 269.1626 513.1436 267.4146 512.6836 c +267.2993 512.6533 267.1821 512.7051 267.1255 512.8086 c +267.0708 512.9121 267.0923 513.04 267.1802 513.1172 c +269.8325 515.4746 273.8677 517.125 278.5708 515.8408 c +285.4907 513.9531 289.6606 506.457 287.4673 498.415 c +285.104 489.7578 276.3696 484.5234 266.5864 487.1934 c +263.2329 488.1084 259.4497 490.168 256.7603 493.4648 C +258.5942 489.4551 260.0493 487.1855 263.8286 484.6133 C +262.8364 474.1035 258.3091 463.8271 250.4009 456.8389 C +256.2192 454.9863 260.604 451.7207 263.5083 446.6855 c +263.5669 446.582 263.5454 446.4531 263.4595 446.373 c +263.3696 446.293 263.2388 446.2832 263.1411 446.3535 c +256.1802 451.2344 243.9048 452.582 232.7935 448.9121 c +f +216.1919 362.8809 m +212.1538 366.3105 210.936 372.0469 212.4106 377.8672 c +212.4419 377.9883 212.5542 378.0684 212.6772 378.0566 c +212.8022 378.0469 212.8989 377.9492 212.9097 377.8281 c +213.0981 375.6543 213.9448 373.748 215.4917 372.4355 c +219.4712 369.0566 226.5562 370.834 231.4634 376.3828 c +231.522 376.4492 231.6079 376.4805 231.6929 376.4668 c +231.7788 376.4531 231.8511 376.3984 231.8862 376.3203 c +234.1519 371.2539 239.1079 364.5938 252.0005 361.0742 c +270.0239 356.1563 290.3794 363.1992 294.6235 378.752 c +297.0493 387.6406 292.8306 396.4824 284.5845 402.7109 C +289.0298 397.123 291.7075 390.4238 289.6177 382.7695 c +286.5532 371.5391 272.1567 365.918 254.8755 370.6348 c +238.5825 375.0801 222.7065 391.748 226.8833 407.0547 c +229.1743 415.4492 237.6821 419.8887 246.4458 417.4961 c +254.2231 415.375 257.2837 409.1016 255.7329 403.4219 c +254.5669 399.1445 250.7407 397.0195 247.2153 396.9941 c +247.0962 396.9941 246.9927 397.0762 246.9653 397.1934 c +246.9419 397.3105 246.9985 397.4277 247.1079 397.4785 c +248.1704 397.9688 249.188 398.877 249.6509 400.5742 c +250.4263 403.4121 248.3911 405.5605 246.6353 406.0391 c +243.3022 406.9492 240.2827 405.1211 239.271 401.416 c +237.8911 396.3574 242.3667 390.8906 249.5239 388.9355 c +258.4126 386.5117 268.8833 392.8066 271.2075 401.3223 c +273.5825 410.0254 268.3501 421.4648 253.9087 425.4063 c +239.7153 429.2813 220.7925 424.0996 216.6157 408.793 c +214.1802 399.8691 216.1333 391.1875 221.2075 383.5508 c +221.2739 383.4512 221.2612 383.3164 221.1753 383.2305 c +221.0884 383.1445 220.9536 383.1328 220.853 383.2012 c +209.5415 390.8828 197.1108 391.707 195.3267 385.1699 c +194.4536 381.9727 196.3042 379.7188 198.7524 379.0508 c +201.2681 378.3652 203.8462 379.6289 205.0327 382.4883 c +205.0796 382.5996 205.2007 382.6641 205.3198 382.6406 c +205.438 382.6133 205.5249 382.5098 205.522 382.3867 c +205.4292 375.3477 200.0034 369.5625 193.1577 371.4316 c +187.1021 373.084 183.8354 379.5488 185.688 386.3359 c +188.4888 396.5977 200.6997 398.5391 210.0063 393.6504 C +204.647 400.7715 201.1919 410.1035 204.2524 421.3184 c +210.4507 444.0313 239.5044 448.4355 256.9087 443.6855 c +272.7075 439.373 281.9517 433.4023 287.9087 424.6152 C +284.1079 434.0098 278.4419 439.0039 269.8345 442.9434 C +263.3052 451.0918 267.5161 466.5195 v +269.2759 472.9707 273.3091 478.3418 279.1079 481.7793 C +279.1079 481.7813 279.106 481.7842 279.1021 481.7871 C +279.1509 481.8105 279.1997 481.8379 279.2466 481.8613 C +279.6333 482.0879 280.0298 482.3057 280.4321 482.5146 C +286.4438 486.1211 293.4966 494.6973 292.2661 504.6113 c +292.2524 504.7236 292.3149 504.832 292.4185 504.877 c +292.5239 504.9219 292.645 504.8896 292.7153 504.8018 c +297.3677 498.9629 297.2114 491.1104 294.8794 485.8857 C +298.7368 485.915 302.9087 485.375 307.3442 484.165 c +323.1685 479.8457 332.0122 468.3135 334.9126 457.5566 C +339.4106 459.5977 345.0063 457.4043 347.9888 452.9199 c +348.0532 452.8184 348.0415 452.6855 347.9575 452.5996 c +347.8735 452.5156 347.7407 452.5 347.6392 452.5645 c +342.7583 455.6914 336.9556 451.9648 335.4048 445.3496 c +335.3774 445.2305 335.2681 445.1484 335.145 445.1543 c +335.022 445.1602 334.9204 445.2539 334.9067 445.377 c +333.5591 456.251 326.8228 465.0566 316.1841 467.96 c +305.0767 470.9922 294.2446 466.7852 291.3149 456.0469 c +288.9224 447.2832 294.5571 436.3301 304.5513 433.6016 c +312.3286 431.4785 318.0747 434.5527 319.5903 440.1074 c +320.9048 444.9199 318.6157 449.6563 314.6665 450.7344 c +309.0181 452.2754 305.2388 446.4844 308.7837 441.877 c +308.8521 441.7852 308.854 441.6602 308.7837 441.5684 c +308.7153 441.4766 308.5923 441.4434 308.4868 441.4863 c +304.3892 443.1465 301.2739 447.3418 302.5923 452.1729 c +303.8052 456.6152 308.7544 460.1729 316.6548 458.0166 c +326.0356 455.457 333.0806 443.8555 329.0376 429.043 c +323.5142 408.7988 297.6802 404.0449 282.1079 418.9043 C +286.5278 412.2617 291.4517 406.0098 302.438 403.0117 c +323.188 397.3496 342.813 414.0332 341.1724 440.4902 c +341.1646 440.6152 341.2505 440.7285 341.3735 440.7539 c +341.4946 440.7813 341.6196 440.7129 341.6646 440.5977 c +344.7466 432.4922 350.0786 423.4316 362.2739 420.1035 c +374.9888 416.6328 386.2876 422.5664 389.8599 435.6504 c +392.6216 445.7734 388.2017 453.875 380.9204 455.8623 c +375.3657 457.3789 369.9419 455.0039 368.2603 448.8398 c +365.7563 439.6641 374.8833 433.8203 380.6411 437.3516 c +380.7388 437.4121 380.8677 437.3965 380.9497 437.3164 c +381.0337 437.2363 381.0513 437.1094 380.9927 437.0078 c +378.5454 432.7324 372.6802 429.5977 365.6548 431.5156 c +353.5571 434.8164 348.6001 448.2383 351.9673 460.5811 c +353.5454 466.3652 356.7681 471.502 361.1685 475.1426 C +365.0298 473.5186 369.8384 473.6777 373.3735 474.8867 C +366.2349 474.8154 355.8794 479.8262 358.647 489.9707 c +360.1978 495.6533 365.5923 498.2188 370.7563 496.8086 c +376.8579 495.1436 378.2974 489.21 376.5688 485.1729 c +376.522 485.0654 376.4106 485.0039 376.2974 485.0225 c +376.1821 485.04 376.0942 485.1318 376.0825 485.2471 c +375.9146 486.9375 374.6685 488.6836 372.7446 489.208 c +370.3325 489.8662 368.3989 488.415 367.8735 486.4854 c +367.0044 483.3066 370.063 480.5752 374.2739 480.6211 C +374.27 480.6094 L +377.2896 480.8984 380.5044 480.6445 383.8716 479.7266 c +400.0415 475.3125 410.6646 453.5674 404.6235 431.4375 c +398.2485 408.0781 378.2056 400.2363 361.0474 404.9199 c +351.8481 407.4297 345.8228 412.7871 342.5903 418.4453 C +339.3892 398.668 327.8618 388.7793 314.229 385.4707 C +311.7056 390.8008 306.7114 393.8867 Y +312.0864 386.8496 315.5845 376.3477 312.1821 363.8809 c +307.0278 344.9961 284.4712 335.2344 264.6001 340.6582 c +251.9888 344.0996 240.9927 352.0801 235.397 363.7266 C +228.9556 359.2266 221.186 358.6406 216.1919 362.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +363.1294 436.9688 m +363.0044 436.9688 362.8989 436.877 362.8794 436.7539 c +360.5005 420.7402 351.2271 407.3652 338.4888 399.3594 c +338.3853 399.2949 338.3403 399.1641 338.3872 399.0508 c +338.4321 398.9375 338.5532 398.8711 338.6724 398.8965 c +349.145 401 358.4653 406.7598 365.1216 414.9277 C +369.7466 401.5508 380.3579 392.9219 393.4224 389.2734 C +388.6138 383.6816 391.1294 375.7402 398.5415 374.4375 c +398.6548 374.416 398.7661 374.4746 398.8149 374.5781 c +398.8638 374.6816 398.8364 374.8066 398.7485 374.8809 c +394.7759 378.2266 396.229 386.3008 408.0864 386.3008 c +415.8794 386.3008 420.9067 383.1211 420.9067 378.8145 c +420.9067 375.4297 417.8442 373.584 415.2642 373.584 c +410.8501 373.584 408.3267 377.5449 410.2231 381.127 c +410.2778 381.2305 410.2563 381.3574 410.1685 381.4355 c +410.0806 381.5137 409.9517 381.5215 409.854 381.4551 c +407.606 379.8906 406.0356 377.834 406.0356 374.6641 c +406.0356 369.2773 411.061 363.5352 419.3677 363.5332 c +428.2896 363.5332 436.3911 370.4043 436.3911 378.8145 c +436.3911 390.6309 426.3423 396.248 415.7778 397.248 C +420.1431 398.9219 423.4106 403.7734 v +423.4771 403.8691 423.4673 403.998 423.3892 404.084 c +423.311 404.1719 423.1841 404.1934 423.0825 404.1387 c +417.2524 401.0566 410.5942 399.3945 403.5806 399.3945 c +383.9575 399.3945 367.0337 415.7988 363.3813 436.7607 c +363.3599 436.8818 363.2524 436.9727 363.1294 436.9688 c +f +286.4517 384.5625 m +281.8442 376.8867 280.1997 363.7129 284.4946 353.8809 c +284.5435 353.7695 284.5083 353.6406 284.4087 353.5703 c +284.3091 353.502 284.1763 353.5117 284.0884 353.5957 c +279.2817 358.1484 275.1489 368.7715 277.3833 381.0527 C +274.2876 383.4473 272.3384 385.8223 270.8696 389.0059 c +270.8228 389.1074 270.8501 389.2305 270.936 389.3047 c +271.022 389.377 271.147 389.3848 271.2427 389.3203 c +276.2388 385.959 280.7056 384.8125 286.4517 384.5625 C +f +297.0591 504.3691 m +296.9907 504.4727 297.0083 504.6133 297.1001 504.6973 c +297.1938 504.7813 297.3345 504.7852 297.4321 504.7061 c +304.2466 499.1797 313.3071 495.6504 324.4673 495.6504 c +352.0376 495.6504 369.4399 512.1689 372.1743 529.5771 c +372.1919 529.6885 372.2817 529.7734 372.3931 529.7891 c +372.5044 529.8047 372.6138 529.7422 372.6587 529.6396 c +375.3833 523.3818 377.0259 514.3057 368.6099 502.1309 c +363.5747 494.8457 357.479 489.8311 357.479 483.3145 c +357.479 479.0566 359.7407 476.1602 363.1685 476.1602 c +366.7739 476.1602 369.106 479.248 369.104 482.7148 c +369.104 484.4629 368.6001 486.1934 367.6958 487.7607 c +367.6372 487.8633 367.6548 487.9902 367.7407 488.0723 c +367.8247 488.1523 367.9556 488.165 368.0532 488.1016 c +371.0259 486.1641 373.6802 482.7021 373.6802 477.8281 c +373.6802 470.6563 367.5474 464.6602 359.2095 464.6602 c +350.2368 464.6602 342.8872 471.709 342.8872 481.8477 c +342.8872 485.3262 343.8755 489.5156 346.3501 492.9805 C +342.9653 490.1523 341.1587 488.1523 339.6724 483.8271 C +329.272 482.0186 318.1665 483.6797 309.3403 489.4727 C +309.0864 483.3711 307.0903 478.2793 302.9985 474.1533 c +302.9146 474.0684 302.7837 474.0547 302.6841 474.1182 c +302.5825 474.1816 302.5415 474.3066 302.5806 474.4189 c +305.4575 482.4199 303.5239 494.6152 297.0591 504.3691 c +f +209.6938 497.7344 m +211.938 502.5352 217.1528 505.2188 223.1548 505.3271 c +223.2798 505.3311 223.3872 505.2432 223.4087 505.1211 c +223.4321 504.998 223.3638 504.8779 223.2485 504.8359 c +221.2017 504.082 219.5864 502.7637 218.7271 500.9258 c +216.5142 496.1973 220.0942 489.8301 226.7407 486.5566 c +226.8188 486.5186 226.8716 486.4434 226.8813 486.3594 c +226.8911 486.2725 226.856 486.1885 226.7915 486.1318 c +222.5005 482.6143 217.3794 476.0781 217.3794 462.7148 c +217.3774 444.0322 229.5337 426.25 245.6548 426.25 c +254.8677 426.25 262.2876 432.6465 266.1255 442.2422 C +261.9028 436.4844 256.145 432.1348 248.2114 432.1348 c +236.5708 432.1348 227.3579 444.5439 227.356 462.459 c +227.356 479.3457 239.2583 499.0518 255.1216 499.0508 c +263.8247 499.0488 270.3481 492.0117 270.3481 482.9277 c +270.3481 474.8672 265.1021 470.2637 259.2173 470.2637 c +254.7798 470.2637 251.7231 473.3936 250.772 476.7871 c +250.7388 476.9023 250.7915 477.0254 250.897 477.0811 c +251.0044 477.1357 251.1333 477.1104 251.2114 477.0186 c +251.9634 476.124 253.1079 475.3809 254.8657 475.3809 c +257.8091 475.3789 259.3442 477.9082 259.3442 479.7285 c +259.3442 483.1836 256.7856 485.6152 252.9458 485.6152 c +247.7036 485.6152 243.606 479.8564 243.606 472.4385 c +243.606 463.2236 252.436 454.7813 261.2642 454.7813 c +270.2856 454.7813 279.9438 462.8408 279.9438 477.8125 c +279.9419 492.5234 269.9653 509.4141 254.0981 509.4141 c +244.8481 509.4141 236.9849 505.2441 230.9556 498.3398 c +230.8755 498.248 230.7427 498.2246 230.6392 498.2852 c +230.5317 498.3477 230.4849 498.4727 230.5239 498.5879 c +234.9575 511.5234 232.4771 523.7344 225.7036 523.7324 c +222.3892 523.7324 220.7017 521.3535 220.7017 518.8154 c +220.7017 516.21 222.6001 514.0566 225.6704 513.6611 c +225.7915 513.6475 225.8833 513.5479 225.8931 513.4268 c +225.8989 513.3047 225.8188 513.1943 225.7017 513.1641 c +218.8872 511.4004 211.8774 515.1133 211.8774 522.2061 c +211.8774 528.4854 217.2544 533.3398 224.2896 533.3398 c +234.9263 533.3379 240.0142 522.0684 237.7485 511.8047 C +243.2075 518.8486 251.3013 524.6396 262.9263 524.6396 c +286.4692 524.6396 298.3677 497.7715 298.3677 479.7285 c +298.3677 463.3525 295.0415 452.8604 288.1313 444.8018 C +296.1938 450.9404 299.52 457.7227 301.0552 467.0645 C +307.1958 475.5078 323.188 475.5078 v +329.8755 475.5078 336.1177 473.0322 340.9614 468.3438 C +340.9634 468.3447 340.9653 468.3477 340.9673 468.3486 C +341.0024 468.3105 341.0396 468.2695 341.0767 468.2314 C +341.397 467.915 341.7114 467.5918 342.02 467.2578 C +347.0806 462.4102 357.2114 457.8633 366.4517 461.6602 c +366.5571 461.7031 366.6782 461.6699 366.7485 461.582 c +366.8188 461.4932 366.8188 461.3672 366.7524 461.2754 c +362.3462 455.252 354.729 453.335 349.0747 454.21 C +350.1177 450.4941 350.6958 446.3281 350.6958 441.7305 c +350.6978 425.3262 341.8989 413.7598 332.2856 408.1289 C +335.438 404.3281 334.7954 398.3535 331.2544 394.2949 c +331.1743 394.2051 331.0435 394.1816 330.938 394.2402 c +330.8345 394.2988 330.7837 394.4238 330.8188 394.5391 c +332.5513 400.0703 327.4282 404.6875 320.6392 404.4395 c +320.5161 404.4355 320.4067 404.5195 320.3813 404.6406 c +320.356 404.7617 320.4185 404.8828 320.5337 404.9277 c +330.6685 409.0918 337.3911 417.9102 337.3892 428.9355 c +337.3911 440.4492 330.481 449.79 319.3501 449.79 c +310.2661 449.79 301.1821 441.4727 301.1821 431.1133 c +301.1821 423.0508 305.6587 418.3184 311.4165 418.3164 c +316.4067 418.3184 320.3735 421.7715 320.3735 425.8672 c +320.3735 431.7188 313.7896 433.8408 310.2778 429.209 c +310.2095 429.1172 310.0864 429.084 309.981 429.127 c +309.8755 429.1689 309.811 429.2773 309.8228 429.3926 c +310.3462 433.7813 313.5767 437.8926 318.5825 437.8926 c +323.188 437.8926 327.9224 434.0518 327.9224 425.8652 c +327.9224 416.1406 318.5845 406.291 303.231 406.2891 c +282.2466 406.2891 270.8599 429.959 281.0942 448.8945 C +275.8501 442.8809 271.1157 436.4844 271.1157 425.0977 c +271.1138 403.5898 292.3794 389.0488 317.4692 397.5977 c +317.5884 397.6367 317.7192 397.584 317.7759 397.4746 c +317.8345 397.3633 317.8013 397.2266 317.6997 397.1523 c +310.6938 392.043 303.356 384.5137 303.356 371.873 c +303.356 358.6934 312.0552 349.3535 325.6196 349.3535 c +336.1099 349.3535 342.7642 355.752 342.7642 363.2988 c +342.7642 369.0566 339.0454 373.6641 332.6567 373.6641 c +323.1431 373.6641 319.9087 363.3203 324.8325 358.6953 c +324.9165 358.6152 324.936 358.4902 324.8813 358.3887 c +324.8247 358.2871 324.7056 358.2344 324.5942 358.2637 c +319.8247 359.5 315.2563 364.332 315.2563 371.6152 c +315.2544 384.1563 326.897 392.4727 339.6919 392.4727 c +345.688 392.4727 351.4907 390.7188 356.1646 387.4297 C +355.6118 383.2773 357.0317 378.6816 359.1313 375.5879 C +357.1821 382.457 359.2915 393.7656 369.8032 393.7676 c +375.6958 393.7656 379.5903 389.2383 379.5903 383.8867 c +379.5903 377.5605 374.2446 374.6094 369.895 375.2148 c +369.7798 375.2305 369.6899 375.3223 369.6763 375.4375 c +369.6646 375.5527 369.731 375.6602 369.8384 375.7031 c +371.4243 376.3105 372.7817 377.9727 372.7817 379.9668 c +372.7817 382.4668 370.8696 383.9492 368.8696 383.9492 c +365.5767 383.9492 363.7466 380.2793 364.8989 376.2305 C +364.8872 376.2285 L +365.9595 373.3926 366.561 370.2246 366.561 366.7363 c +366.561 349.9746 348.3813 334.002 325.4399 334 c +301.229 334 288.3872 351.2734 288.3892 369.0566 c +288.3892 378.5938 291.9692 385.8184 296.5767 390.4258 C +276.6548 388.3066 264.0786 396.8223 257.2974 409.1035 C +261.7759 412.9414 263.438 418.5723 Y +258.0649 411.5352 248.854 405.3945 235.9321 405.3945 c +216.356 405.3945 201.0005 424.5859 201.0005 445.1836 c +201.0005 458.2568 205.8032 470.9648 215.5649 479.4307 C +209.5278 484.459 206.9185 491.8018 209.6938 497.7344 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0.35 0.6 0.8 0.25 k + 0.35 0.6 0.8 0.25 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +73.2617 430.3711 m +73.3867 430.3711 73.4922 430.4629 73.5098 430.585 c +75.8906 446.5996 85.1641 459.9746 97.9023 467.9814 c +98.0059 468.0449 98.0488 468.1758 98.0039 468.29 c +97.957 468.4023 97.8379 468.4688 97.7168 468.4443 c +87.2461 466.3398 77.9238 460.5811 71.2695 452.4141 C +66.6436 465.7891 56.0332 474.418 42.9688 478.0654 C +47.7773 483.6582 45.2617 491.5986 37.8496 492.9023 c +37.7363 492.9229 37.624 492.8643 37.5752 492.7607 c +37.5273 492.6563 37.5537 492.5322 37.6416 492.46 c +41.6152 489.1143 40.1611 481.04 28.3047 481.04 c +20.5098 481.04 15.4844 484.2188 15.4844 488.5254 c +15.4844 491.9102 18.5459 493.7559 21.125 493.7559 c +25.541 493.7559 28.0645 489.7949 26.167 486.2129 c +26.1123 486.1104 26.1348 485.9814 26.2227 485.9033 c +26.3105 485.8271 26.4395 485.8184 26.5361 485.8857 c +28.7852 487.4492 30.3555 489.5059 30.3555 492.6768 c +30.3555 498.0635 25.3301 503.8066 17.0234 503.8066 c +8.10156 503.8066 0 496.9355 0 488.5254 c +0 476.71 10.0488 471.0918 20.6133 470.0918 C +16.248 468.4189 12.9795 463.5664 v +12.9141 463.4697 12.9238 463.3418 13.001 463.2559 c +13.0791 463.1689 13.2051 463.1475 13.3086 463.2012 c +19.1387 466.2822 25.7949 467.9453 32.8105 467.9453 c +52.4316 467.9453 69.3574 451.541 73.0098 430.5801 c +73.0313 430.4561 73.1377 430.3691 73.2617 430.3711 c +f +149.9395 482.7773 m +154.5488 490.4551 156.1914 503.627 151.8965 513.46 c +151.8477 513.5703 151.8828 513.6992 151.9824 513.7686 c +152.0801 513.8379 152.2148 513.8281 152.3027 513.7461 c +157.1094 509.1914 161.2422 498.5684 159.0078 486.2871 C +162.1055 483.8936 164.0527 481.5176 165.5215 478.335 c +165.5684 478.2314 165.541 478.1104 165.4551 478.0352 c +165.3691 477.9629 165.2441 477.9551 165.1484 478.0186 c +160.1523 481.3809 155.6855 482.5283 149.9395 482.7773 C +f +139.3301 362.9707 m +139.4004 362.8672 139.3828 362.7266 139.291 362.6426 c +139.1973 362.5586 139.0566 362.5547 138.959 362.6348 c +132.1445 368.1621 123.084 371.6895 111.9238 371.6895 c +84.3516 371.6895 66.9512 355.1719 64.2158 337.7637 c +64.1982 337.6523 64.1094 337.5664 63.998 337.5508 c +63.8857 337.5371 63.7773 337.5977 63.7324 337.7012 c +61.0068 343.959 59.3652 353.0352 67.7813 365.209 c +72.8154 372.4941 78.9102 377.5098 78.9102 384.0273 c +78.9102 388.2852 76.6504 391.1797 73.2227 391.1797 c +69.6172 391.1797 67.2861 388.0918 67.2861 384.625 c +67.2861 382.877 67.791 381.1465 68.6953 379.5801 c +68.7539 379.4766 68.7354 379.3496 68.6504 379.2676 c +68.5645 379.1875 68.4355 379.1758 68.3379 379.2402 c +65.3652 381.1777 62.7109 384.6367 62.7109 389.5117 c +62.7109 396.6836 68.8438 402.6816 77.1797 402.6816 c +86.1543 402.6816 93.5039 395.6328 93.5039 385.4922 c +93.5039 382.0156 92.5137 377.8242 90.041 374.3613 C +93.4258 377.1875 95.2324 379.1875 96.7188 383.5117 C +107.1191 385.3223 118.2246 383.6602 127.0488 377.8691 C +127.3047 383.9707 129.3008 389.0605 133.3926 393.1875 c +133.4766 393.2715 133.6074 393.2852 133.707 393.2227 c +133.8086 393.1582 133.8516 393.0332 133.8105 392.9219 c +130.9336 384.9199 132.8652 372.7246 139.3301 362.9707 c +f +226.6973 369.6055 m +224.4512 364.8066 219.2383 362.1211 213.2363 362.0117 c +213.1113 362.0098 213.0039 362.0977 212.9824 362.2188 c +212.959 362.3418 213.0273 362.4609 213.1426 362.5039 c +215.1895 363.2578 216.8047 364.5762 217.6641 366.4141 c +219.877 371.1426 216.2969 377.5098 209.6504 380.7832 c +209.5723 380.8223 209.5195 380.8965 209.5098 380.9824 c +209.5 381.0684 209.5332 381.1523 209.5996 381.207 c +213.8906 384.7266 219.0117 391.2617 219.0117 404.627 c +219.0117 423.3086 206.8574 441.0898 190.7363 441.0898 c +181.5234 441.0898 174.1035 434.6934 170.2656 425.0977 C +174.4863 430.8564 180.2441 435.2051 188.1777 435.2051 c +199.8203 435.2051 209.0332 422.7969 209.0332 404.8828 c +209.0332 387.9941 197.1328 368.2891 181.2676 368.2891 c +172.5664 368.2891 166.043 375.3281 166.043 384.4121 c +166.043 392.4746 171.2891 397.0781 177.1758 397.0781 c +181.6094 397.0781 184.668 393.9473 185.6191 390.5527 c +185.6504 390.4375 185.5996 390.3164 185.4922 390.2598 c +185.3867 390.2051 185.2578 390.2305 185.1797 390.3223 c +184.4277 391.2168 183.2832 391.9609 181.5254 391.9609 c +178.582 391.9609 177.0469 389.4316 177.0469 387.6113 c +177.0469 384.1563 179.6055 381.7246 183.4453 381.7246 c +188.6895 381.7246 192.7852 387.4824 192.7852 394.9023 c +192.7852 404.1152 183.9551 412.5586 175.127 412.5586 c +166.1055 412.5586 156.4473 404.5 156.4473 389.5293 c +156.4473 374.8164 166.4277 357.9258 182.293 357.9258 c +191.543 357.9258 199.4043 362.0957 205.4355 369.002 c +205.5156 369.0918 205.6484 369.1152 205.7539 369.0547 c +205.8594 368.9941 205.9063 368.8672 205.8672 368.752 c +201.4336 355.8164 203.9121 343.6074 210.6875 343.6074 c +214.002 343.6074 215.6895 345.9863 215.6895 348.5234 c +215.6895 351.1309 213.791 353.2852 210.7207 353.6777 c +210.5996 353.6934 210.5059 353.793 210.498 353.9141 c +210.4922 354.0352 210.5703 354.1465 210.6895 354.1758 c +217.5039 355.9395 224.5137 352.2285 224.5137 345.1328 c +224.5137 338.8555 219.1367 334.002 212.1016 334.002 c +201.4648 334.002 196.377 345.2715 198.6426 355.5371 C +193.1836 348.4922 185.0898 342.7012 173.4648 342.7012 c +149.9219 342.7012 138.0234 369.5703 138.0234 387.6113 c +138.0234 403.9883 141.3496 414.4785 148.2598 422.5391 C +140.1973 416.3984 136.8711 409.6172 135.3379 400.2773 C +129.1953 391.832 113.2031 391.832 v +106.5156 391.832 100.2734 394.3086 95.4297 398.998 C +95.4277 398.9961 95.4258 398.9941 95.4238 398.9902 C +95.3887 399.0313 95.3496 399.0703 95.3145 399.1094 C +94.9941 399.4238 94.6797 399.748 94.3711 400.082 C +89.3086 404.9316 79.1797 409.4785 69.9395 405.6797 c +69.834 405.6367 69.7129 405.6699 69.6426 405.7578 c +69.5723 405.8477 69.5703 405.9727 69.6377 406.0645 c +74.0449 412.0898 81.6621 414.0059 87.3164 413.1309 C +86.2715 416.8457 85.6934 421.0117 85.6934 425.6094 c +85.6934 442.0137 94.4922 453.5801 104.1055 459.2109 C +100.9512 463.0137 101.5957 468.9883 105.1367 473.0449 c +105.2168 473.1357 105.3477 473.1582 105.4531 473.0996 c +105.5566 473.041 105.6055 472.918 105.5703 472.8018 c +103.8398 467.2695 108.9629 462.6523 115.752 462.9004 c +115.875 462.9033 115.9824 462.8193 116.0098 462.6992 c +116.0352 462.5801 115.9707 462.457 115.8574 462.4111 c +105.7207 458.248 99 449.4316 99 438.4033 c +99 426.8906 105.9082 417.5488 117.041 417.5488 c +126.125 417.5488 135.209 425.8672 135.209 436.2285 c +135.209 444.2891 130.7305 449.0225 124.9727 449.0225 c +119.9844 449.0225 116.0176 445.5684 116.0176 441.4736 c +116.0176 435.6211 122.5996 433.499 126.1113 438.1309 c +126.1816 438.2227 126.3027 438.2559 126.4082 438.2129 c +126.5156 438.1699 126.5801 438.0625 126.5664 437.9482 c +126.043 433.5586 122.8145 429.4482 117.8086 429.4482 c +113.2031 429.4482 108.4688 433.2861 108.4688 441.4746 c +108.4688 451.1982 117.8066 461.0508 133.1602 461.0508 c +154.1426 461.0508 165.5313 437.3809 155.2969 418.4453 C +160.541 424.459 165.2754 430.8555 165.2754 442.2432 c +165.2754 463.75 144.0117 478.291 118.9219 469.7441 c +118.8027 469.7021 118.6719 469.7559 118.6152 469.8672 c +118.5566 469.9785 118.5879 470.1143 118.6895 470.1895 c +125.6953 475.2979 133.0332 482.8262 133.0332 495.4668 c +133.0332 508.6475 124.334 517.9854 110.7715 517.9854 c +100.2793 517.9854 93.627 511.5879 93.627 504.04 c +93.627 498.2822 97.3457 493.6768 103.7344 493.6768 c +113.2461 493.6768 116.4805 504.0195 111.5586 508.6445 c +111.4746 508.7236 111.4551 508.8516 111.5098 508.9521 c +111.5664 509.0547 111.6836 509.1055 111.7969 509.0762 c +116.5664 507.8398 121.1348 503.0068 121.1348 495.7236 c +121.1348 483.1855 109.4922 474.8682 96.6973 474.8682 c +90.7012 474.8682 84.8984 476.623 80.2266 479.9102 C +80.7773 484.0635 79.3574 488.6602 77.2598 491.752 C +79.209 484.8848 77.1016 473.5732 66.5859 473.5732 c +60.6953 473.5732 56.8008 478.1025 56.8008 483.4551 c +56.8008 489.7793 62.1465 492.7314 66.4961 492.125 c +66.6113 492.1104 66.7002 492.0186 66.7129 491.9023 c +66.7266 491.7891 66.6602 491.6797 66.5527 491.6367 c +64.9668 491.0293 63.6104 489.3691 63.6104 487.373 c +63.6104 484.873 65.5195 483.3906 67.5195 483.3906 c +70.8145 483.3906 72.6445 487.0605 71.4922 491.1104 C +71.5039 491.1104 L +70.4307 493.9473 69.8281 497.1152 69.8281 500.6055 c +69.8281 517.3672 88.0098 533.3398 110.9492 533.3398 c +135.1621 533.3398 148.0039 516.0664 148.0039 498.2822 c +148.0039 488.7461 144.4219 481.5225 139.8145 476.915 C +159.7363 479.0332 172.3125 470.5176 179.0938 458.2354 C +174.6152 454.3975 172.9531 448.7676 Y +178.3262 455.8057 187.5371 461.9453 200.459 461.9453 c +220.0352 461.9453 235.3906 442.7539 235.3906 422.1563 c +235.3906 409.084 230.5879 396.375 220.8262 387.9102 C +226.8633 382.8809 229.4727 375.5391 226.6973 369.6055 c +f +*U +*u +148.2109 494.9053 m +148.1777 494.7852 148.2383 494.6582 148.3516 494.6094 c +163.1758 488.0957 173.6367 475.6289 178.0059 461.2324 c +178.041 461.1152 178.1543 461.0391 178.2773 461.0527 c +178.3984 461.0664 178.4941 461.166 178.502 461.2871 c +179.2285 471.9434 176.127 482.4531 170 491.0234 C +184.1211 491.9648 195.2402 499.9297 202.1992 511.5723 C +206.3281 505.46 214.6504 505.7969 217.8594 512.6035 c +217.9102 512.708 217.8828 512.832 217.7949 512.9063 c +217.707 512.9805 217.5801 512.9873 217.4863 512.9219 c +213.2129 509.9688 205.8066 513.498 208.9277 524.9355 c +210.9805 532.4561 215.3711 536.4668 219.5254 535.333 c +222.791 534.4414 223.7656 531.002 223.0859 528.5146 c +221.9238 524.2539 217.4375 522.8623 214.4805 525.6357 c +214.3965 525.7158 214.2676 525.7285 214.1699 525.6641 c +214.0723 525.5986 214.0293 525.4775 214.0684 525.3662 c +214.9863 522.7852 216.5566 520.7285 219.6152 519.8936 c +224.8105 518.4756 231.6738 521.8115 233.8613 529.8252 c +236.2109 538.4316 231.7148 548.0566 223.6035 550.2715 c +212.2031 553.3818 204.1387 545.166 200.3926 535.2383 C +199.9258 539.8896 196.1074 544.3203 v +196.0313 544.4092 195.9043 544.4336 195.8008 544.3818 c +195.6973 544.3291 195.6426 544.2129 195.666 544.0996 c +197.1055 537.6641 196.957 530.8047 195.1094 524.0361 c +189.9434 505.1074 169.6621 493.0977 148.4785 495.0938 c +148.3535 495.1055 148.2402 495.0254 148.2109 494.9053 c +f +178.5801 407.1348 m +184.7734 400.666 197.0488 395.6133 207.6641 397.168 c +207.7852 397.1855 207.9004 397.1172 207.9395 397.0039 c +207.9805 396.8906 207.9355 396.7637 207.834 396.7012 c +202.1738 393.2617 190.8379 392.0723 179.5781 397.4609 C +176.4531 395.1035 173.6484 393.8496 170.1914 393.2715 c +170.0801 393.2539 169.9688 393.3125 169.9199 393.4141 c +169.873 393.5156 169.8984 393.6387 169.9844 393.7148 c +174.5449 397.6484 176.8281 401.6563 178.5801 407.1348 C +f +65.793 448.9121 m +65.6748 448.8711 65.5439 448.9258 65.4873 449.0371 c +65.4307 449.1484 65.4639 449.2852 65.5674 449.3594 c +72.6934 454.4785 78.4824 462.291 81.4199 473.0566 c +88.6797 499.6563 77.3262 520.7921 61.2529 528.0146 c +61.1494 528.0605 61.0898 528.1689 61.1045 528.2803 c +61.1211 528.3926 61.208 528.4814 61.3193 528.4971 c +68.0742 529.4785 77.2617 528.6729 86.791 517.3486 c +92.4922 510.5732 95.7266 503.373 102.0137 501.6563 c +106.1211 500.5352 109.5098 501.9551 110.4121 505.2617 c +111.3613 508.7393 108.9961 511.8018 105.6523 512.7148 c +103.9648 513.1738 102.1621 513.1436 100.4141 512.6836 c +100.2988 512.6533 100.1816 512.7051 100.125 512.8086 c +100.0703 512.9121 100.0918 513.04 100.1797 513.1172 c +102.832 515.4746 106.8672 517.125 111.5703 515.8408 c +118.4902 513.9531 122.6602 506.457 120.4668 498.415 c +118.1035 489.7578 109.3691 484.5234 99.5859 487.1934 c +96.2324 488.1084 92.4492 490.168 89.7598 493.4648 C +91.5938 489.4551 93.0488 487.1855 96.8281 484.6133 C +95.8359 474.1035 91.3086 463.8271 83.4004 456.8389 C +89.2188 454.9863 93.6035 451.7207 96.5078 446.6855 c +96.5664 446.582 96.5449 446.4531 96.459 446.373 c +96.3691 446.293 96.2383 446.2832 96.1406 446.3535 c +89.1797 451.2344 76.9043 452.582 65.793 448.9121 c +f +49.1914 362.8809 m +45.1533 366.3105 43.9355 372.0469 45.4102 377.8672 c +45.4414 377.9883 45.5537 378.0684 45.6768 378.0566 c +45.8018 378.0469 45.8984 377.9492 45.9092 377.8281 c +46.0977 375.6543 46.9443 373.748 48.4912 372.4355 c +52.4707 369.0566 59.5557 370.834 64.4629 376.3828 c +64.5215 376.4492 64.6074 376.4805 64.6924 376.4668 c +64.7783 376.4531 64.8506 376.3984 64.8857 376.3203 c +67.1514 371.2539 72.1074 364.5938 85 361.0742 c +103.0234 356.1563 123.3789 363.1992 127.623 378.752 c +130.0488 387.6406 125.8301 396.4824 117.584 402.7109 C +122.0293 397.123 124.707 390.4238 122.6172 382.7695 c +119.5527 371.5391 105.1563 365.918 87.875 370.6348 c +71.582 375.0801 55.7061 391.748 59.8828 407.0547 c +62.1738 415.4492 70.6816 419.8887 79.4453 417.4961 c +87.2227 415.375 90.2832 409.1016 88.7324 403.4219 c +87.5664 399.1445 83.7402 397.0195 80.2148 396.9941 c +80.0957 396.9941 79.9922 397.0762 79.9648 397.1934 c +79.9414 397.3105 79.998 397.4277 80.1074 397.4785 c +81.1699 397.9688 82.1875 398.877 82.6504 400.5742 c +83.4258 403.4121 81.3906 405.5605 79.6348 406.0391 c +76.3018 406.9492 73.2822 405.1211 72.2705 401.416 c +70.8906 396.3574 75.3662 390.8906 82.5234 388.9355 c +91.4121 386.5117 101.8828 392.8066 104.207 401.3223 c +106.582 410.0254 101.3496 421.4648 86.9082 425.4063 c +72.7148 429.2813 53.792 424.0996 49.6152 408.793 c +47.1797 399.8691 49.1328 391.1875 54.207 383.5508 c +54.2734 383.4512 54.2607 383.3164 54.1748 383.2305 c +54.0879 383.1445 53.9531 383.1328 53.8525 383.2012 c +42.541 390.8828 30.1104 391.707 28.3262 385.1699 c +27.4531 381.9727 29.3037 379.7188 31.752 379.0508 c +34.2676 378.3652 36.8457 379.6289 38.0322 382.4883 c +38.0791 382.5996 38.2002 382.6641 38.3193 382.6406 c +38.4375 382.6133 38.5244 382.5098 38.5215 382.3867 c +38.4287 375.3477 33.0029 369.5625 26.1572 371.4316 c +20.1016 373.084 16.835 379.5488 18.6875 386.3359 c +21.4883 396.5977 33.6992 398.5391 43.0059 393.6504 C +37.6465 400.7715 34.1914 410.1035 37.252 421.3184 c +43.4502 444.0313 72.5039 448.4355 89.9082 443.6855 c +105.707 439.373 114.9512 433.4023 120.9082 424.6152 C +117.1074 434.0098 111.4414 439.0039 102.834 442.9434 C +96.3047 451.0918 100.5156 466.5195 v +102.2754 472.9707 106.3086 478.3418 112.1074 481.7793 C +112.1074 481.7813 112.1055 481.7842 112.1016 481.7871 C +112.1504 481.8105 112.1992 481.8379 112.2461 481.8613 C +112.6328 482.0879 113.0293 482.3057 113.4316 482.5146 C +119.4434 486.1211 126.4961 494.6973 125.2656 504.6113 c +125.252 504.7236 125.3145 504.832 125.418 504.877 c +125.5234 504.9219 125.6445 504.8896 125.7148 504.8018 c +130.3672 498.9629 130.2109 491.1104 127.8789 485.8857 C +131.7363 485.915 135.9082 485.375 140.3438 484.165 c +156.168 479.8457 165.0117 468.3135 167.9121 457.5566 C +172.4102 459.5977 178.0059 457.4043 180.9883 452.9199 c +181.0527 452.8184 181.041 452.6855 180.957 452.5996 c +180.873 452.5156 180.7402 452.5 180.6387 452.5645 c +175.7578 455.6914 169.9551 451.9648 168.4043 445.3496 c +168.377 445.2305 168.2676 445.1484 168.1445 445.1543 c +168.0215 445.1602 167.9199 445.2539 167.9063 445.377 c +166.5586 456.251 159.8223 465.0566 149.1836 467.96 c +138.0762 470.9922 127.2441 466.7852 124.3145 456.0469 c +121.9219 447.2832 127.5566 436.3301 137.5508 433.6016 c +145.3281 431.4785 151.0742 434.5527 152.5898 440.1074 c +153.9043 444.9199 151.6152 449.6563 147.666 450.7344 c +142.0176 452.2754 138.2383 446.4844 141.7832 441.877 c +141.8516 441.7852 141.8535 441.6602 141.7832 441.5684 c +141.7148 441.4766 141.5918 441.4434 141.4863 441.4863 c +137.3887 443.1465 134.2734 447.3418 135.5918 452.1729 c +136.8047 456.6152 141.7539 460.1729 149.6543 458.0166 c +159.0352 455.457 166.0801 443.8555 162.0371 429.043 c +156.5137 408.7988 130.6797 404.0449 115.1074 418.9043 C +119.5273 412.2617 124.4512 406.0098 135.4375 403.0117 c +156.1875 397.3496 175.8125 414.0332 174.1719 440.4902 c +174.1641 440.6152 174.25 440.7285 174.373 440.7539 c +174.4941 440.7813 174.6191 440.7129 174.6641 440.5977 c +177.7461 432.4922 183.0781 423.4316 195.2734 420.1035 c +207.9883 416.6328 219.2871 422.5664 222.8594 435.6504 c +225.6211 445.7734 221.2012 453.875 213.9199 455.8623 c +208.3652 457.3789 202.9414 455.0039 201.2598 448.8398 c +198.7559 439.6641 207.8828 433.8203 213.6406 437.3516 c +213.7383 437.4121 213.8672 437.3965 213.9492 437.3164 c +214.0332 437.2363 214.0508 437.1094 213.9922 437.0078 c +211.5449 432.7324 205.6797 429.5977 198.6543 431.5156 c +186.5566 434.8164 181.5996 448.2383 184.9668 460.5811 c +186.5449 466.3652 189.7676 471.502 194.168 475.1426 C +198.0293 473.5186 202.8379 473.6777 206.373 474.8867 C +199.2344 474.8154 188.8789 479.8262 191.6465 489.9707 c +193.1973 495.6533 198.5918 498.2188 203.7559 496.8086 c +209.8574 495.1436 211.2969 489.21 209.5684 485.1729 c +209.5215 485.0654 209.4102 485.0039 209.2969 485.0225 c +209.1816 485.04 209.0938 485.1318 209.082 485.2471 c +208.9141 486.9375 207.668 488.6836 205.7441 489.208 c +203.332 489.8662 201.3984 488.415 200.873 486.4854 c +200.0039 483.3066 203.0625 480.5752 207.2734 480.6211 C +207.2695 480.6094 L +210.2891 480.8984 213.5039 480.6445 216.8711 479.7266 c +233.041 475.3125 243.6641 453.5674 237.623 431.4375 c +231.248 408.0781 211.2051 400.2363 194.0469 404.9199 c +184.8477 407.4297 178.8223 412.7871 175.5898 418.4453 C +172.3887 398.668 160.8613 388.7793 147.2285 385.4707 C +144.7051 390.8008 139.7109 393.8867 Y +145.0859 386.8496 148.584 376.3477 145.1816 363.8809 c +140.0273 344.9961 117.4707 335.2344 97.5996 340.6582 c +84.9883 344.0996 73.9922 352.0801 68.3965 363.7266 C +61.9551 359.2266 54.1855 358.6406 49.1914 362.8809 c +f +*U +%AI6_EndPatternLayer +) & +(0 O 0 R 0 0 0 0 k + 0 0 0 0 K +) @ +( +%AI6_BeginPatternLayer +*u +0 J 0 j 1 w 10 M []0 d 0 XR +196.1289 436.9688 m +196.0039 436.9688 195.8984 436.877 195.8789 436.7539 c +193.5 420.7402 184.2266 407.3652 171.4883 399.3594 c +171.3848 399.2949 171.3398 399.1641 171.3867 399.0508 c +171.4316 398.9375 171.5527 398.8711 171.6719 398.8965 c +182.1445 401 191.4648 406.7598 198.1211 414.9277 C +202.7461 401.5508 213.3574 392.9219 226.4219 389.2734 C +221.6133 383.6816 224.1289 375.7402 231.541 374.4375 c +231.6543 374.416 231.7656 374.4746 231.8145 374.5781 c +231.8633 374.6816 231.8359 374.8066 231.748 374.8809 c +227.7754 378.2266 229.2285 386.3008 241.0859 386.3008 c +248.8794 386.3008 253.9067 383.1211 253.9067 378.8145 c +253.9067 375.4297 250.8442 373.584 248.2642 373.584 c +243.8501 373.584 241.3262 377.5449 243.2227 381.127 c +243.2773 381.2305 243.2559 381.3574 243.168 381.4355 c +243.0801 381.5137 242.9512 381.5215 242.8535 381.4551 c +240.6055 379.8906 239.0352 377.834 239.0352 374.6641 c +239.0352 369.2773 244.061 363.5352 252.3677 363.5332 c +261.2896 363.5332 269.3911 370.4043 269.3911 378.8145 c +269.3911 390.6309 259.3423 396.248 248.7778 397.248 C +253.1431 398.9219 256.4106 403.7734 v +256.4771 403.8691 256.4673 403.998 256.3892 404.084 c +256.311 404.1719 256.1841 404.1934 256.0825 404.1387 c +250.2524 401.0566 243.5938 399.3945 236.5801 399.3945 c +216.957 399.3945 200.0332 415.7988 196.3809 436.7607 c +196.3594 436.8818 196.252 436.9727 196.1289 436.9688 c +f +119.4512 384.5625 m +114.8438 376.8867 113.1992 363.7129 117.4941 353.8809 c +117.543 353.7695 117.5078 353.6406 117.4082 353.5703 c +117.3086 353.502 117.1758 353.5117 117.0879 353.5957 c +112.2813 358.1484 108.1484 368.7715 110.3828 381.0527 C +107.2871 383.4473 105.3379 385.8223 103.8691 389.0059 c +103.8223 389.1074 103.8496 389.2305 103.9355 389.3047 c +104.0215 389.377 104.1465 389.3848 104.2422 389.3203 c +109.2383 385.959 113.7051 384.8125 119.4512 384.5625 C +f +130.0586 504.3691 m +129.9902 504.4727 130.0078 504.6133 130.0996 504.6973 c +130.1934 504.7813 130.334 504.7852 130.4316 504.7061 c +137.2461 499.1797 146.3066 495.6504 157.4668 495.6504 c +185.0371 495.6504 202.4395 512.1689 205.1738 529.5771 c +205.1914 529.6885 205.2813 529.7734 205.3926 529.7891 c +205.5039 529.8047 205.6133 529.7422 205.6582 529.6396 c +208.3828 523.3818 210.0254 514.3057 201.6094 502.1309 c +196.5742 494.8457 190.4785 489.8311 190.4785 483.3145 c +190.4785 479.0566 192.7402 476.1602 196.168 476.1602 c +199.7734 476.1602 202.1055 479.248 202.1035 482.7148 c +202.1035 484.4629 201.5996 486.1934 200.6953 487.7607 c +200.6367 487.8633 200.6543 487.9902 200.7402 488.0723 c +200.8242 488.1523 200.9551 488.165 201.0527 488.1016 c +204.0254 486.1641 206.6797 482.7021 206.6797 477.8281 c +206.6797 470.6563 200.5469 464.6602 192.209 464.6602 c +183.2363 464.6602 175.8867 471.709 175.8867 481.8477 c +175.8867 485.3262 176.875 489.5156 179.3496 492.9805 C +175.9648 490.1523 174.1582 488.1523 172.6719 483.8271 C +162.2715 482.0186 151.166 483.6797 142.3398 489.4727 C +142.0859 483.3711 140.0898 478.2793 135.998 474.1533 c +135.9141 474.0684 135.7832 474.0547 135.6836 474.1182 c +135.582 474.1816 135.541 474.3066 135.5801 474.4189 c +138.457 482.4199 136.5234 494.6152 130.0586 504.3691 c +f +42.6934 497.7344 m +44.9375 502.5352 50.1523 505.2188 56.1543 505.3271 c +56.2793 505.3311 56.3867 505.2432 56.4082 505.1211 c +56.4316 504.998 56.3633 504.8779 56.248 504.8359 c +54.2012 504.082 52.5859 502.7637 51.7266 500.9258 c +49.5137 496.1973 53.0938 489.8301 59.7402 486.5566 c +59.8184 486.5186 59.8711 486.4434 59.8809 486.3594 c +59.8906 486.2725 59.8555 486.1885 59.791 486.1318 c +55.5 482.6143 50.3789 476.0781 50.3789 462.7148 c +50.377 444.0322 62.5332 426.25 78.6543 426.25 c +87.8672 426.25 95.2871 432.6465 99.125 442.2422 C +94.9023 436.4844 89.1445 432.1348 81.2109 432.1348 c +69.5703 432.1348 60.3574 444.5439 60.3555 462.459 c +60.3555 479.3457 72.2578 499.0518 88.1211 499.0508 c +96.8242 499.0488 103.3477 492.0117 103.3477 482.9277 c +103.3477 474.8672 98.1016 470.2637 92.2168 470.2637 c +87.7793 470.2637 84.7227 473.3936 83.7715 476.7871 c +83.7383 476.9023 83.791 477.0254 83.8965 477.0811 c +84.0039 477.1357 84.1328 477.1104 84.2109 477.0186 c +84.9629 476.124 86.1074 475.3809 87.8652 475.3809 c +90.8086 475.3789 92.3438 477.9082 92.3438 479.7285 c +92.3438 483.1836 89.7852 485.6152 85.9453 485.6152 c +80.7031 485.6152 76.6055 479.8564 76.6055 472.4385 c +76.6055 463.2236 85.4355 454.7813 94.2637 454.7813 c +103.2852 454.7813 112.9434 462.8408 112.9434 477.8125 c +112.9414 492.5234 102.9648 509.4141 87.0977 509.4141 c +77.8477 509.4141 69.9844 505.2441 63.9551 498.3398 c +63.875 498.248 63.7422 498.2246 63.6387 498.2852 c +63.5313 498.3477 63.4844 498.4727 63.5234 498.5879 c +67.957 511.5234 65.4766 523.7344 58.7031 523.7324 c +55.3887 523.7324 53.7012 521.3535 53.7012 518.8154 c +53.7012 516.21 55.5996 514.0566 58.6699 513.6611 c +58.791 513.6475 58.8828 513.5479 58.8926 513.4268 c +58.8984 513.3047 58.8184 513.1943 58.7012 513.1641 c +51.8867 511.4004 44.877 515.1133 44.877 522.2061 c +44.877 528.4854 50.2539 533.3398 57.2891 533.3398 c +67.9258 533.3379 73.0137 522.0684 70.748 511.8047 C +76.207 518.8486 84.3008 524.6396 95.9258 524.6396 c +119.4688 524.6396 131.3672 497.7715 131.3672 479.7285 c +131.3672 463.3525 128.041 452.8604 121.1309 444.8018 C +129.1934 450.9404 132.5195 457.7227 134.0547 467.0645 C +140.1953 475.5078 156.1875 475.5078 v +162.875 475.5078 169.1172 473.0322 173.9609 468.3438 C +173.9629 468.3447 173.9648 468.3477 173.9668 468.3486 C +174.002 468.3105 174.0391 468.2695 174.0762 468.2314 C +174.3965 467.915 174.7109 467.5918 175.0195 467.2578 C +180.0801 462.4102 190.2109 457.8633 199.4512 461.6602 c +199.5566 461.7031 199.6777 461.6699 199.748 461.582 c +199.8184 461.4932 199.8184 461.3672 199.752 461.2754 c +195.3457 455.252 187.7285 453.335 182.0742 454.21 C +183.1172 450.4941 183.6953 446.3281 183.6953 441.7305 c +183.6973 425.3262 174.8984 413.7598 165.2852 408.1289 C +168.4375 404.3281 167.7949 398.3535 164.2539 394.2949 c +164.1738 394.2051 164.043 394.1816 163.9375 394.2402 c +163.834 394.2988 163.7832 394.4238 163.8184 394.5391 c +165.5508 400.0703 160.4277 404.6875 153.6387 404.4395 c +153.5156 404.4355 153.4063 404.5195 153.3809 404.6406 c +153.3555 404.7617 153.418 404.8828 153.5332 404.9277 c +163.668 409.0918 170.3906 417.9102 170.3887 428.9355 c +170.3906 440.4492 163.4805 449.79 152.3496 449.79 c +143.2656 449.79 134.1816 441.4727 134.1816 431.1133 c +134.1816 423.0508 138.6582 418.3184 144.416 418.3164 c +149.4063 418.3184 153.373 421.7715 153.373 425.8672 c +153.373 431.7188 146.7891 433.8408 143.2773 429.209 c +143.209 429.1172 143.0859 429.084 142.9805 429.127 c +142.875 429.1689 142.8105 429.2773 142.8223 429.3926 c +143.3457 433.7813 146.5762 437.8926 151.582 437.8926 c +156.1875 437.8926 160.9219 434.0518 160.9219 425.8652 c +160.9219 416.1406 151.584 406.291 136.2305 406.2891 c +115.2461 406.2891 103.8594 429.959 114.0938 448.8945 C +108.8496 442.8809 104.1152 436.4844 104.1152 425.0977 c +104.1133 403.5898 125.3789 389.0488 150.4688 397.5977 c +150.5879 397.6367 150.7188 397.584 150.7754 397.4746 c +150.834 397.3633 150.8008 397.2266 150.6992 397.1523 c +143.6934 392.043 136.3555 384.5137 136.3555 371.873 c +136.3555 358.6934 145.0547 349.3535 158.6191 349.3535 c +169.1094 349.3535 175.7637 355.752 175.7637 363.2988 c +175.7637 369.0566 172.0449 373.6641 165.6563 373.6641 c +156.1426 373.6641 152.9082 363.3203 157.832 358.6953 c +157.916 358.6152 157.9355 358.4902 157.8809 358.3887 c +157.8242 358.2871 157.7051 358.2344 157.5938 358.2637 c +152.8242 359.5 148.2559 364.332 148.2559 371.6152 c +148.2539 384.1563 159.8965 392.4727 172.6914 392.4727 c +178.6875 392.4727 184.4902 390.7188 189.1641 387.4297 C +188.6113 383.2773 190.0313 378.6816 192.1309 375.5879 C +190.1816 382.457 192.291 393.7656 202.8027 393.7676 c +208.6953 393.7656 212.5898 389.2383 212.5898 383.8867 c +212.5898 377.5605 207.2441 374.6094 202.8945 375.2148 c +202.7793 375.2305 202.6895 375.3223 202.6758 375.4375 c +202.6641 375.5527 202.7305 375.6602 202.8379 375.7031 c +204.4238 376.3105 205.7813 377.9727 205.7813 379.9668 c +205.7813 382.4668 203.8691 383.9492 201.8691 383.9492 c +198.5762 383.9492 196.7461 380.2793 197.8984 376.2305 C +197.8867 376.2285 L +198.959 373.3926 199.5605 370.2246 199.5605 366.7363 c +199.5605 349.9746 181.3809 334.002 158.4395 334 c +134.2285 334 121.3867 351.2734 121.3887 369.0566 c +121.3887 378.5938 124.9688 385.8184 129.5762 390.4258 C +109.6543 388.3066 97.0781 396.8223 90.2969 409.1035 C +94.7754 412.9414 96.4375 418.5723 Y +91.0645 411.5352 81.8535 405.3945 68.9316 405.3945 c +49.3555 405.3945 34 424.5859 34 445.1836 c +34 458.2568 38.8027 470.9648 48.5645 479.4307 C +42.5273 484.459 39.918 491.8018 42.6934 497.7344 c +f +*U +%AI6_EndPatternLayer +) & +] E +%AI3_EndPattern +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI8_BeginBrushPattern +(New Pattern 11) 0 A +u +0 J 0 j 1 w 4 M []0 d 0 XR +-7844.6191 7768.6997 m +-7844.6191 7721.3188 L +-7892 7721.3188 L +-7892 7768.6997 L +-7844.6191 7768.6997 L +n +u +0 O +0 0 0 1 k +-7867.4058 7764.4551 m +-7869.1816 7764.4551 L +-7869.1816 7769 L +-7867.4058 7769 L +-7867.4058 7764.4551 L +f +-7867.4058 7757.6855 m +-7869.1816 7757.6855 L +-7869.1816 7762.23 L +-7867.4058 7762.23 L +-7867.4058 7757.6855 L +f +-7867.4058 7750.9185 m +-7869.1816 7750.9185 L +-7869.1816 7755.4629 L +-7867.4058 7755.4629 L +-7867.4058 7750.9185 L +f +-7867.4058 7744.1494 m +-7869.1816 7744.1494 L +-7869.1816 7748.6934 L +-7867.4058 7748.6934 L +-7867.4058 7744.1494 L +f +U +u +-7860.3809 7745.9238 m +-7860.3809 7744.146 L +-7864.9258 7744.146 L +-7864.9258 7745.9238 L +-7860.3809 7745.9238 L +f +-7846.8442 7745.9238 m +-7846.8442 7744.146 L +-7851.3882 7744.146 L +-7851.3882 7745.9238 L +-7846.8442 7745.9238 L +f +U +*u +1 D +-7855.4922 7744.146 m +-7853.6118 7744.146 L +-7853.6118 7745.9238 L +-7858.1558 7745.9238 L +-7858.1558 7744.146 L +-7857.3306 7744.146 L +-7858.4585 7741.2109 L +-7861.8838 7740.1733 L +-7862.3145 7740.0127 -7862.3818 7740.2061 -7862.4609 7740.5845 c +-7862.7915 7742.1582 -7864.0337 7742.5825 -7865.0703 7742.1934 c +-7866.1855 7741.7749 -7866.9023 7740.4141 -7866.4785 7739.2788 c +-7866.0825 7738.2236 -7865.0215 7737.9512 -7864.0439 7738.3184 c +-7863.2817 7738.6021 -7862.6255 7739.2949 -7861.8623 7739.5791 c +-7860.9824 7739.9102 -7859.7529 7739.7222 -7858.9312 7739.3164 C +-7858.9658 7738.8135 -7859.1592 7738.3164 -7859.3945 7737.8735 c +-7859.9458 7736.8408 -7860.4375 7736.3672 -7861.3984 7735.7168 c +-7861.7842 7735.439 -7862.2246 7735.1855 -7862.5625 7734.8359 c +-7863.1738 7734.2036 -7863.5186 7733.3398 -7863.1978 7732.478 c +-7862.8374 7731.5215 -7861.8345 7731.1597 -7860.9146 7731.5039 c +-7859.8184 7731.9165 -7859.0513 7733.3184 -7859.4746 7734.4512 c +-7859.7007 7735.0581 -7860.2271 7735.3301 -7860.3008 7735.5254 c +-7860.4395 7735.8984 -7859.4858 7736.5664 -7859.2671 7736.7598 c +-7858.6074 7737.3184 -7858.0845 7738.3628 -7857.6978 7739.1768 C +-7851.4033 7741.1309 L +-7850.0137 7741.6504 -7848.8535 7742.5967 -7848.0103 7743.8047 C +-7856.5176 7741.8037 L +-7855.4922 7744.146 L +f +0 D +-7860.0366 7734.1069 m +-7859.7524 7733.3452 -7860.3882 7732.3047 -7861.1113 7732.0332 c +-7861.8359 7731.7612 -7862.4214 7732.0781 -7862.6934 7732.8008 c +-7862.9863 7733.5845 -7862.1455 7734.6133 -7861.4199 7734.8838 c +-7860.7954 7735.1182 -7860.25 7734.6758 -7860.0366 7734.1069 c +f +-7864.2695 7738.8584 m +-7864.9146 7738.6172 -7865.6689 7738.8452 -7865.9185 7739.5117 c +-7866.2319 7740.3535 -7865.6685 7741.3452 -7864.8657 7741.6455 c +-7864.2002 7741.894 -7863.4302 7741.6255 -7863.1675 7740.9199 c +-7862.8232 7740.0024 -7863.4082 7739.1797 -7864.2695 7738.8584 c +f +*U +U +%AI8_EndBrushPattern +%AI8_BeginBrushPattern +(New Pattern 4) 0 A +u +1 Ap +0 J 0 j 1 w 4 M []0 d 0 XR +-7845.6191 7770 m +-7845.6191 7722.6191 L +-7893 7722.6191 L +-7893 7770 L +-7845.6191 7770 L +n +u +0 O +0 0 0 1 k +-7888.4551 7747.2222 m +-7888.4551 7745.4453 L +-7893 7745.4453 L +-7893 7747.2222 L +-7888.4551 7747.2222 L +f +-7881.6865 7747.2222 m +-7881.6865 7745.4453 L +-7886.2314 7745.4453 L +-7886.2314 7747.2222 L +-7881.6865 7747.2222 L +f +-7874.9185 7747.2222 m +-7874.9185 7745.4453 L +-7879.4634 7745.4453 L +-7879.4634 7747.2222 L +-7874.9185 7747.2222 L +f +-7868.1494 7747.2222 m +-7868.1494 7745.4453 L +-7872.6934 7745.4453 L +-7872.6934 7747.2222 L +-7868.1494 7747.2222 L +f +-7861.3809 7747.2222 m +-7861.3809 7745.4453 L +-7865.9258 7745.4453 L +-7865.9258 7747.2222 L +-7861.3809 7747.2222 L +f +-7854.6113 7747.2222 m +-7854.6113 7745.4453 L +-7859.1558 7745.4453 L +-7859.1558 7747.2222 L +-7854.6113 7747.2222 L +f +-7847.8442 7747.2222 m +-7847.8442 7745.4453 L +-7852.3882 7745.4453 L +-7852.3882 7747.2222 L +-7847.8442 7747.2222 L +f +U +U +%AI8_EndBrushPattern +%AI8_BeginBrushPattern +(Unnamed 6) 0 A +u +u +0 Ap +0 J 0 j 1 w 4 M []0 d 0 XR +-4020.5 3897.5 m +-3919.1816 3897.5 L +-3919.1816 3889.7832 L +-4020.5 3889.7832 L +-4020.5 3897.5 L +n +u +0 O +0 0 0 1 k +-3919.3 3891.2073 m +-3919.1504 3891.2434 -3919.2041 3890.8247 -3919.1816 3890.7495 C +-3919.4319 3890.8423 -3919.2937 3891.3159 -3919.3 3891.2073 C +f +-3921.7693 3892.1582 m +-3921.7256 3891.9871 L +-3922.0896 3892.4063 L +-3921.7693 3892.1582 L +f +-3924.0784 3892.1504 m +-3923.8601 3892.8643 -3923.2417 3892.0352 -3922.8303 3892.2891 C +-3922.7625 3892.4514 L +-3922.5769 3891.8774 L +-3923.0769 3891.9683 -3923.7263 3892.3496 -3924.0784 3892.1504 C +f +-3925.3096 3890.6062 m +-3925.2336 3890.8843 -3925.5759 3890.8455 -3925.0225 3890.6936 C +-3925.0503 3890.6631 -3925.0583 3890.6455 -3925.0745 3890.6233 C +-3925.1243 3890.6272 -3925.1929 3890.6262 -3925.3096 3890.6062 C +f +-3925.0745 3890.6233 m +-3924.8313 3890.6033 -3925.2336 3890.3894 -3925.0745 3890.6233 C +-3925.0745 3890.6233 L +f +-3926.1975 3890.7822 m +-3925.8772 3890.5342 L +-3925.9441 3890.3699 -3926.2292 3890.3333 -3926.1233 3890.2139 C +-3926.4519 3890.3496 -3926.3843 3890.5127 -3926.1975 3890.7822 C +f +-3926.5012 3891.3032 m +-3926.3352 3891.1982 L +-3926.3643 3891.1294 -3926.4082 3891.1055 -3926.5012 3891.3032 C +f +-3925.9832 3890.9768 m +-3926.3352 3891.1982 L +-3926.2888 3891.3135 -3926.2839 3891.5447 -3926.1736 3891.1184 C +-3926.2024 3891.3296 -3926.1328 3891.1262 -3925.9832 3890.9768 C +f +-3925.7839 3891.0854 m +-3925.6042 3891.2407 -3925.3721 3891.3384 -3925.6936 3891.5854 C +-3925.0808 3891.4871 -3925.1711 3890.9856 -3925.7839 3891.0854 C +f +-3924.1963 3892.8887 m +-3923.9561 3893.0974 L +-3923.7483 3892.8584 L +-3923.8521 3892.9771 -3924.2112 3892.6653 -3924.1963 3892.8887 C +f +-3928.1929 3890.4126 m +-3928.2129 3890.5642 -3928.0852 3890.8174 -3928.0613 3891.0115 C +-3927.8247 3890.8374 L +-3927.9463 3890.7334 -3928.1768 3890.6375 -3928.1929 3890.4126 C +f +-3928.0613 3891.0115 m +-3928.4153 3891.2722 L +-3928.0991 3891.3032 -3928.0413 3891.1792 -3928.0613 3891.0115 C +f +-3926.5583 3892.0955 m +-3925.9768 3891.5479 L +-3926.6704 3892.1033 L +-3926.5583 3892.0955 L +f +-3929.5449 3890.3936 m +-3929.3442 3890.0422 L +-3929.7017 3890.573 L +-3929.5449 3890.3936 L +f +-3930.4417 3890.4551 m +-3930.2932 3890.1638 -3930.6453 3889.9624 -3930.4883 3889.7832 C +-3930.7319 3889.8352 -3930.9399 3890.0854 -3931.1272 3890.3098 C +-3930.9282 3890.1848 -3930.7161 3890.2168 -3930.4417 3890.4551 C +f +-3931.4417 3890.6375 m +-3931.3423 3890.5679 -3931.2393 3890.4426 -3931.1272 3890.3098 C +-3931.2329 3890.3774 -3931.3369 3890.4739 -3931.4417 3890.6375 C +f +-3929.0183 3891.197 m +-3929.0457 3891.1055 -3929.0984 3890.865 -3929.2969 3890.7634 C +-3929.1577 3891.1907 L +-3929.1152 3891.1936 -3929.0671 3891.1951 -3929.0183 3891.197 C +f +-3929.1528 3891.2046 m +-3929.1577 3891.1907 L +-3929.3088 3891.1814 -3929.4136 3891.1719 -3929.4585 3891.1672 c +-3929.4199 3891.1707 -3929.3279 3891.1814 -3929.1528 3891.2046 C +f +-3928.9832 3891.1992 m +-3928.9961 3891.1982 -3929.0056 3891.197 -3929.0183 3891.197 C +-3929.0049 3891.239 -3928.9968 3891.2534 -3928.9832 3891.1992 C +f +-3927.4863 3891.7092 m +-3927.6943 3891.948 -3928.1279 3892.2039 -3927.7083 3892.5684 C +-3927.5591 3892.2759 -3927.7993 3892.0684 -3927.4863 3891.7092 c +f +-3928.8103 3891.7334 m +-3928.4343 3891.8311 L +-3928.4417 3891.7183 -3928.5095 3891.5535 -3928.4065 3891.4351 C +-3928.8103 3891.7334 L +f +-3928.9944 3891.8691 m +-3928.8103 3891.7334 L +-3928.9497 3891.697 L +-3928.9944 3891.8691 L +f +-3930.7976 3891.0376 m +-3930.96 3891.2234 -3931.1377 3891.239 -3931.3384 3891.2693 C +-3931.1233 3891.3533 -3930.9009 3891.3982 -3930.6897 3891.3975 C +-3930.6599 3891.2632 -3930.5671 3891.0222 -3930.7976 3891.0376 C +f +-3929.9983 3891.1563 m +-3930.0095 3891.1663 -3930.0239 3891.1707 -3930.0344 3891.1807 C +-3930.0122 3891.2168 -3929.9944 3891.2283 -3929.9983 3891.1563 C +f +-3933.3142 3891.2659 m +-3933.3032 3891.2896 -3933.2937 3891.3186 -3933.2825 3891.344 C +-3933.28 3891.3186 -3933.2783 3891.2947 -3933.2751 3891.27 C +-3933.3142 3891.2659 L +f +-3930.6536 3891.4771 m +-3930.4919 3891.5596 -3930.3953 3891.4551 -3930.3032 3891.323 C +-3930.4241 3891.3662 -3930.5522 3891.3943 -3930.6897 3891.3975 C +-3930.7031 3891.4583 -3930.7056 3891.4983 -3930.6536 3891.4771 C +f +-3931.9929 3890.8374 m +-3931.9087 3890.9268 -3931.8132 3891.0022 -3931.7129 3891.0723 C +-3931.7952 3890.9373 -3931.9631 3890.7258 -3931.9929 3890.8374 C +f +-3930.0889 3891.0623 m +-3930.0808 3891.0554 -3930.0735 3891.0479 -3930.0647 3891.0435 C +-3930.1177 3890.9514 -3930.1111 3890.9966 -3930.0889 3891.0623 C +f +-3930.0889 3891.0623 m +-3930.1721 3891.1243 -3930.2375 3891.2295 -3930.3032 3891.323 C +-3930.2048 3891.2896 -3930.1135 3891.2434 -3930.0344 3891.1807 C +-3930.0544 3891.1504 -3930.0745 3891.1042 -3930.0889 3891.0623 C +f +-3933.9128 3894.009 m +-3933.8843 3893.613 -3933.4592 3893.2471 -3933.0923 3893.6719 C +-3932.7312 3893.3752 -3932.9673 3892.0723 -3933.2825 3891.344 C +-3933.2937 3891.5166 -3933.2937 3891.6763 -3933.6653 3891.9104 C +-3933.5352 3892.1262 -3932.8408 3892.4163 -3933.1543 3892.7744 C +-3933.6465 3892.9783 -3933.5576 3892.6343 -3933.7969 3892.4248 C +-3933.5935 3892.9182 -3934.4231 3893.1431 -3934.3159 3893.8687 C +-3933.8843 3893.613 L +-3933.8762 3893.7258 -3934.0327 3893.9063 -3933.9128 3894.009 C +f +-3932.5745 3891.3843 m +-3932.4216 3891.3352 L +-3932.5959 3891.2659 -3932.7207 3891.1079 -3932.9504 3890.7979 C +-3933.2048 3890.9912 -3933.2576 3891.1382 -3933.2751 3891.27 C +-3932.5222 3891.3252 L +-3932.5745 3891.3843 L +f +-3931.7351 3891.3335 m +-3931.8545 3891.7646 -3932.2217 3891.948 -3931.9968 3892.4138 C +-3931.5481 3892.3843 -3931.6824 3892.0542 -3931.4143 3891.8672 C +-3932.1384 3891.9739 -3931.2063 3891.6272 -3931.7295 3891.3828 C +-3931.5872 3891.3096 -3931.4592 3891.2871 -3931.3384 3891.2693 C +-3931.4688 3891.2168 -3931.5945 3891.1519 -3931.7129 3891.0723 C +-3931.7063 3891.0823 -3931.7017 3891.0896 -3931.6963 3891.0991 C +-3931.6929 3891.0974 L +-3931.6929 3891.1006 -3931.6936 3891.1016 -3931.6936 3891.1042 C +-3931.6624 3891.1582 -3931.6521 3891.1907 -3931.6873 3891.1594 C +-3931.6897 3891.1653 -3931.6985 3891.1672 -3931.7024 3891.1682 C +-3931.7073 3891.2283 -3931.7207 3891.2808 -3931.7351 3891.3311 C +-3931.9448 3891.2422 -3931.7681 3891.219 -3931.7024 3891.1682 C +-3931.7 3891.1475 -3931.6943 3891.1272 -3931.6936 3891.1042 C +-3931.6943 3891.1018 -3931.6953 3891.1006 -3931.6963 3891.0991 C +-3932.4216 3891.3352 L +-3932.2681 3891.3953 -3932.0759 3891.3828 -3931.7351 3891.3335 C +f +-3928.0952 3893.4951 m +-3928.1177 3893.4573 -3928.1167 3893.4263 -3928.1184 3893.3953 C +-3928.1653 3893.448 -3928.1831 3893.4839 -3928.0952 3893.4951 C +f +-3928.3936 3893.2346 m +-3928.3408 3893.1748 -3928.2969 3893.0022 -3928.1255 3893.0466 C +-3927.9768 3893.1763 -3928.1262 3893.2534 -3928.1184 3893.3953 C +-3928.0151 3893.2808 -3927.7568 3893.0859 -3928.0808 3892.8762 C +-3928.1321 3892.9351 L +-3928.4241 3892.7871 -3928.7993 3892.2495 -3928.7483 3892.1902 C +-3928.6631 3892.5779 -3928.5879 3892.8542 -3928.3936 3893.2346 C +f +-3930.0852 3892.3943 m +-3930.6892 3892.6055 L +-3930.3816 3892.9783 L +-3930.3972 3892.7544 L +-3930.0537 3892.8423 -3930.1279 3892.5664 -3930.0852 3892.3943 C +f +-3933.3833 3891.052 m +-3933.3032 3890.5967 L +-3933.6521 3891.239 L +-3933.3833 3891.052 L +f +-3934.1682 3891.1062 m +-3934.1392 3890.7102 L +-3934.3464 3890.9492 L +-3934.1682 3891.1062 L +f +-3978.4617 3896.0166 m +-3978.6392 3896.1287 L +-3978.5552 3896.0942 -3978.5012 3896.0566 -3978.4617 3896.0166 C +f +-3977.1768 3896.0435 m +-3977.1453 3895.8486 L +-3977.2048 3895.9558 -3977.2292 3896.0352 -3977.1768 3896.0435 C +f +-3953.4456 3891.1506 m +-3953.7041 3890.781 -3953.9929 3890.2083 -3953.9617 3890.6531 C +-3953.8823 3891.0867 L +-3953.7017 3891.009 -3953.5632 3891.0576 -3953.4456 3891.1506 C +f +-3966.6479 3893.7412 m +-3966.6233 3893.7832 -3966.5977 3893.8286 -3966.5723 3893.8733 C +-3966.5095 3893.7246 -3966.4504 3893.5867 -3966.3977 3893.4583 C +-3966.4729 3893.5466 -3966.5583 3893.6416 -3966.6479 3893.7412 C +f +-3966.8303 3895.5366 m +-3967.1711 3895.2566 L +-3967.0945 3895.3542 -3966.9849 3895.448 -3966.8303 3895.5366 C +f +-3985.4792 3896.4768 m +-3985.6863 3896.9182 L +-3985.3623 3896.9163 -3985.5049 3896.6936 -3985.4792 3896.4768 C +f +-3942.2073 3891.2659 m +-3942.4304 3891.0967 -3942.6079 3891.0254 -3942.7639 3891.0044 C +-3942.4951 3891.2534 -3942.2783 3891.6272 -3942.2073 3891.2659 C +f +-3977.9561 3891.4126 m +-3978.0647 3891.4912 -3978.1111 3891.5796 -3978.1079 3891.6763 C +-3977.9961 3891.6018 -3977.9329 3891.5193 -3977.9561 3891.4126 C +f +-3943.4082 3891.0059 m +-3943.3689 3891.0491 -3943.3303 3891.071 -3943.2903 3891.1079 C +-3943.1272 3891.0352 -3942.9631 3890.9768 -3942.7639 3891.0044 C +-3942.9624 3890.8186 -3943.1897 3890.7046 -3943.4082 3891.0059 C +f +-4010.9297 3896.1172 m +-4010.9482 3896.0974 -4010.9705 3896.0884 -4010.9873 3896.0654 C +-4010.9929 3896.1243 -4010.9673 3896.1272 -4010.9297 3896.1172 C +f +-4018.3442 3891.739 m +-4018.2712 3891.7124 -4018.1521 3891.7119 -4018.0398 3891.7058 C +-4018.0945 3891.6763 -4018.1863 3891.6792 -4018.3442 3891.739 c +f +-3937.3264 3890.9172 m +-3937.1599 3890.8887 -3937.3 3890.8691 -3937.3264 3890.9172 C +-3937.3264 3890.9172 L +f +-3936.5168 3892.6328 m +-3936.5522 3892.6814 -3936.5791 3892.7434 -3936.5833 3892.844 C +-3936.5696 3892.739 -3936.5464 3892.6726 -3936.5168 3892.6328 c +f +-3945.0664 3893.7058 m +-3945.0713 3893.7058 -3945.0752 3893.7046 -3945.0808 3893.7046 C +-3945.0313 3893.7896 -3945.0398 3893.7734 -3945.0664 3893.7058 C +f +-3937.0759 3891.1143 m +-3937.1384 3891.0613 -3937.2104 3891.0166 -3937.2888 3890.9856 C +-3937.2544 3891.0193 -3937.1897 3891.0613 -3937.0759 3891.1143 C +f +-3937.1096 3890.9092 m +-3937.0522 3890.9287 -3937.0071 3890.9395 -3936.9641 3890.9512 C +-3936.9431 3890.8787 -3936.9617 3890.8335 -3937.1096 3890.9092 C +f +-3937.5583 3890.9402 m +-3937.4631 3890.9336 -3937.3743 3890.9539 -3937.2888 3890.9856 C +-3937.3215 3890.9558 -3937.3352 3890.9314 -3937.3264 3890.9172 C +-3937.3752 3890.9238 -3937.4441 3890.9326 -3937.5583 3890.9402 c +f +-3997.2932 3894.9558 m +-3997.3042 3894.9424 -3997.3169 3894.9336 -3997.3289 3894.9153 C +-3997.4968 3895.0952 -3997.4231 3895.0664 -3997.2932 3894.9558 C +f +-3957.7783 3895.6563 m +-3957.7705 3895.6519 -3957.7664 3895.6406 -3957.7593 3895.635 C +-3957.7671 3895.6306 -3957.7769 3895.6252 -3957.7839 3895.6199 C +-3957.7783 3895.6563 L +f +-3958.3762 3895.9795 m +-3958.1216 3895.4395 -3957.9768 3895.5059 -3957.7839 3895.6199 C +-3957.9817 3894.3691 L +-3958.3762 3895.9795 L +f +*u +-3981.5383 3896.1416 m +-3981.1184 3896.531 L +-3981.6252 3897.1726 -3981.9919 3896.9514 -3981.5977 3897.5 C +-3981.5383 3896.1416 -3979.9656 3897.3606 -3979.9072 3896.0039 C +-3979.6304 3896.2896 L +-3979.7097 3896.2764 -3979.7224 3896.3562 -3979.8008 3896.3428 C +-3979.2625 3896.9932 -3979.4009 3895.3606 -3978.7073 3895.5542 C +-3978.4656 3895.6582 -3978.2969 3895.8555 -3978.4617 3896.0166 C +-3977.9231 3895.6807 L +-3977.7664 3895.7073 -3977.8047 3895.9426 -3977.9607 3895.9172 C +-3977.1392 3895.8086 L +-3977.1453 3895.8486 L +-3977.0281 3895.635 -3976.7625 3895.3064 -3976.6328 3895.1663 C +-3976.4241 3895.3606 -3976.7375 3895.3098 -3976.6841 3895.4795 C +-3976.2292 3895.1504 L +-3976.0439 3895.5022 -3976.4209 3895.844 -3976.7351 3895.7935 C +-3976.3103 3897.1494 -3976.3577 3895.4514 -3975.4409 3896.2434 C +-3975.8704 3896.4163 L +-3975.5935 3897.1863 -3975.2583 3896.907 -3974.7727 3897.3875 C +-3974.8879 3897.1367 -3975.7449 3896.177 -3975.2512 3895.8386 C +-3975.1121 3895.9414 -3974.9287 3895.9902 -3974.6624 3895.7168 C +-3974.6599 3896.1995 -3974.3999 3896.0811 -3974.0745 3896.0535 C +-3974.0967 3896.6936 L +-3973.7449 3896.5088 -3973.7727 3896.1831 -3973.5657 3895.8953 C +-3973.1736 3895.9583 -3973.0923 3896.4536 -3973 3896.8711 C +-3972.3721 3896.9727 -3973.4336 3896.0767 -3972.6904 3895.9558 C +-3972.1682 3896.2007 -3971.8015 3895.9395 -3971.1768 3895.5566 C +-3970.8113 3895.7766 -3971.2407 3895.948 -3971.1096 3896.1306 C +-3970.7856 3895.6206 L +-3970.7063 3895.6328 -3970.7319 3895.7896 -3970.7449 3895.8687 C +-3970.4719 3895.6707 -3970.7224 3895.2295 -3970.2932 3895.0554 C +-3970.1775 3894.3511 -3969.4121 3896.0854 -3968.8809 3895.2852 C +-3968.75 3895.4668 -3968.9441 3895.677 -3968.9041 3895.9248 C +-3968.1753 3895.3999 -3968.2793 3895.5435 -3967.6809 3894.8367 C +-3967.1711 3895.2566 L +-3967.5457 3894.7764 -3967.0671 3894.2083 -3966.6479 3893.7412 C +-3966.7808 3893.509 -3966.8943 3893.3064 -3966.9705 3893.2095 C +-3966.3015 3892.8662 L +-3966.2207 3892.9712 -3966.2881 3893.1907 -3966.3977 3893.4583 C +-3966.3521 3893.405 -3966.3088 3893.3533 -3966.2751 3893.3047 C +-3966.0359 3893.5413 -3966.1599 3893.9104 -3966.3313 3894.2676 C +-3966.4128 3894.1416 -3966.4937 3894.0066 -3966.5723 3893.8733 C +-3966.7375 3894.2615 -3966.8921 3894.6919 -3966.8577 3895.0664 C +-3966.8142 3894.9927 -3966.7305 3894.9292 -3966.6384 3894.8936 C +-3966.6816 3894.9993 -3966.7092 3895.093 -3966.6892 3895.157 c +-3966.6665 3895.2246 -3966.5967 3895.0833 -3966.4873 3894.9199 C +-3966.3352 3895.6328 L +-3966.2983 3895.3496 L +-3965.4231 3895.7959 L +-3964.7969 3895.0779 -3964.2522 3894.0215 -3963.2583 3893.7271 C +-3963.5049 3894.25 -3963.3113 3894.5811 -3963.3247 3895.2007 C +-3963.5959 3894.5447 -3964.0945 3895.4795 -3964.6096 3895.3462 c +-3964.3408 3895.4153 -3964.3999 3895.7102 -3964.4683 3895.8135 C +-3963.5496 3895.2168 L +-3963.5703 3895.7234 -3963.3545 3895.5967 -3963.1145 3895.8064 C +-3963.2959 3894.8047 -3962.4297 3895.1392 -3962.0559 3894.8323 C +-3962.0327 3895.1682 -3962.1223 3895.5115 -3962.5784 3895.4307 C +-3962.0752 3896.1848 -3961.9282 3894.2544 -3961.4343 3894.8953 C +-3961.5457 3894.9031 -3961.6057 3894.8516 -3961.6497 3895.0222 C +-3961.3896 3894.7234 -3960.7537 3894.9602 -3960.9033 3895.2534 C +-3961.0144 3895.2603 L +-3960.2751 3895.3787 -3958.7639 3895.2676 -3958.6536 3894.4172 C +-3958.6462 3894.5266 -3958.7505 3895.4424 -3958.7952 3895.6143 C +-3957.4761 3892.7522 L +-3957.5923 3893.4827 -3957.1462 3895.2227 -3957.7593 3895.635 C +-3957.5833 3895.739 -3957.3655 3895.8606 -3956.9944 3895.6033 C +-3957.1145 3895.4993 -3957.2937 3894.5466 -3957.1296 3894.48 C +-3956.6792 3895.2935 -3956.8169 3894.9153 -3956.2617 3895.6084 C +-3956.4417 3895.4514 -3956.2417 3894.3064 -3955.9573 3894.3428 C +-3956.0017 3894.5144 -3955.9336 3895.4734 -3956.0376 3895.5928 C +-3955.3296 3894.4683 L +-3955.5063 3894.6707 -3955.3608 3895.4214 -3955.2024 3895.739 C +-3955.2759 3895.5193 -3954.5903 3895.76 -3954.4016 3895.6482 C +-3954.7017 3895.3875 L +-3953.9023 3895.5576 -3953.9121 3893.8064 -3953.1191 3893.865 C +-3953.2151 3894.0974 -3953.3562 3895.2947 -3952.9529 3895.4363 C +-3952.7681 3894.8604 -3952.1345 3892.6663 -3951.4329 3892.2227 C +-3951.2983 3892.552 L +-3950.76 3892.1768 L +-3951.0952 3893.0435 -3952.0359 3894.8672 -3952.5496 3895.5767 C +-3952.2505 3895.8374 -3952.4663 3895.9646 -3952.0183 3895.9351 C +-3951.8601 3896.2434 -3952.2625 3896.4031 -3952.3943 3896.4214 C +-3951.3513 3896.6206 L +-3951.3977 3895.948 -3950.5537 3895.9463 -3950.5935 3895.3862 C +-3951.7263 3896.0833 L +-3951.7722 3895.4119 -3951.0713 3894.1748 -3950.3323 3894.2935 C +-3950.1443 3894.5613 -3950.4729 3895.4902 -3950.4575 3895.7144 C +-3950.3616 3895.4827 -3949.7561 3895.2722 -3949.6882 3895.4363 C +-3950.0017 3895.7959 L +-3949.5903 3896.0486 -3949.3303 3894.9048 -3948.8359 3895.5464 C +-3948.6653 3895.5896 -3948.3264 3896.4119 -3948.2969 3896.0144 C +-3948.5752 3895.2471 -3948.6296 3892.8743 -3948.4441 3892.2979 C +-3948.3843 3892.3496 -3947.5481 3893.031 -3947.3533 3893.4104 C +-3947.0723 3894.0115 -3947.7751 3894.844 -3947.5359 3895.3604 C +-3947.5256 3895.1768 -3947.3704 3894.9502 -3947.3057 3894.8774 C +-3947.1265 3895.0342 -3947.3799 3895.4463 -3946.9905 3895.363 C +-3946.9255 3894.6814 -3946.1985 3895.4207 -3946.8064 3894.7871 C +-3946.4255 3894.5923 -3946.4016 3894.927 -3945.9543 3894.8975 C +-3946.0967 3894.4573 -3945.5527 3893.3982 -3945.1711 3893.2039 C +-3945.1936 3893.3774 -3945.1079 3893.6033 -3945.0664 3893.7058 C +-3944.2856 3893.7676 -3943.8665 3894.0771 -3943.1384 3894.0833 C +-3943.0713 3894.2483 -3942.72 3894.448 -3942.8696 3894.7412 C +-3942.7649 3894.6206 -3942.6687 3894.3894 -3942.4441 3894.3733 C +-3942.0095 3894.9624 -3942.9448 3894.4646 -3942.6135 3895.1726 C +-3942.5852 3894.7766 -3942.0327 3894.6262 -3941.7129 3894.3787 C +-3941.8113 3893.7671 -3942.4519 3894.2615 -3942.7722 3894.5088 C +-3942.7737 3893.6653 -3942.2161 3892.781 -3941.4551 3892.3911 C +-3940.8503 3892.1814 -3941.1929 3892.9363 -3941.0879 3892.8164 C +-3939.9519 3892.9639 -3940.1201 3891.3428 -3939.1768 3891.9514 C +-3938.8025 3892.489 -3939.1599 3893.0215 -3939.0769 3893.4092 C +-3939.5696 3893.6128 -3939.8333 3893.0679 -3940.1672 3893.0896 C +-3939.7561 3893.344 L +-3939.9128 3893.5222 -3940.2417 3893.6582 -3940.4209 3893.5022 C +-3940.1072 3893.9856 -3938.5017 3893.5952 -3937.6252 3894.0413 C +-3937.4695 3893.8606 -3937.2007 3893.6743 -3937.3279 3893.4583 C +-3937.6052 3893.5332 L +-3937.8601 3893.0996 -3937.0833 3892.9336 -3937.4343 3892.7312 C +-3937.0623 3892.4263 -3936.6453 3891.947 -3936.1216 3892.1924 C +-3936.0232 3892.8054 L +-3936.0344 3892.6262 -3936.3655 3892.4402 -3936.5127 3892.6272 c +-3936.2944 3892.3555 -3935.7097 3893.4573 -3935.4705 3892.6543 C +-3935.8376 3892.2295 L +-3935.4641 3891.9214 -3935.0024 3891.2703 -3934.5383 3891.4639 C +-3934.7495 3890.8584 -3934.6453 3891.5332 -3934.9751 3890.8247 C +-3934.6892 3891.7058 -3936.1624 3890.7876 -3935.7031 3891.7139 C +-3936.0415 3890.8916 -3936.2888 3891.365 -3936.7312 3890.6638 C +-3936.7175 3890.8662 -3936.5745 3891.0508 -3936.9641 3890.9512 C +-3936.9817 3891.0103 -3937.0232 3891.0854 -3937.0496 3891.1294 C +-3937.0615 3891.1243 -3937.0657 3891.1206 -3937.0759 3891.1143 C +-3937.0681 3891.1218 -3937.0623 3891.1306 -3937.0544 3891.1382 C +-3937.0713 3891.1682 -3937.0728 3891.1748 -3937.0464 3891.1462 C +-3936.9536 3891.2346 -3936.8784 3891.3411 -3936.8479 3891.4539 C +-3937.0413 3891.9182 -3937.6609 3891.9038 -3937.8704 3892.1443 C +-3938.1016 3892.0479 -3937.7737 3891.9119 -3937.8999 3891.6963 C +-3938.2129 3892.0554 L +-3938.2439 3891.6062 -3938.8271 3891.3096 -3938.2825 3891.0464 C +-3938.7727 3891.0264 L +-3939.0613 3890.7744 -3939.4583 3890.6743 -3939.7031 3890.863 C +-3939.9343 3890.7659 -3940.2871 3891.3604 -3940.0857 3891.0088 C +-3940.8545 3891.2871 L +-3940.8616 3891.1748 L +-3941.6201 3891.1184 -3942.4231 3891.9182 -3943.2903 3891.1079 C +-3943.5457 3891.2212 -3943.8096 3891.3599 -3944.2368 3891.2324 C +-3944.3201 3890.844 L +-3944.6479 3890.9795 -3945.3047 3890.4551 -3945.4456 3890.8599 C +-3945.7993 3889.8142 -3947.0369 3890.6318 -3947.6135 3890.4463 C +-3947.6353 3890.9536 L +-3948.0322 3890.9248 -3948.4128 3891.0686 -3948.9055 3891.2722 C +-3948.8752 3891.7207 L +-3949.3 3892.0886 -3949.9673 3891.4019 -3950.6392 3891.448 C +-3950.5935 3891.2764 -3950.4231 3891.321 -3950.3025 3891.4248 C +-3951.1052 3890.4119 -3951.9961 3892.1616 -3952.7241 3891.4238 C +-3952.9055 3891.5867 -3953.0369 3891.531 -3953.1641 3891.4182 C +-3953.1472 3891.4175 -3953.1321 3891.4092 -3953.1191 3891.3953 C +-3953.1377 3891.3894 -3953.1653 3891.3887 -3953.1936 3891.3894 C +-3953.2737 3891.3123 -3953.3562 3891.2227 -3953.4456 3891.1506 C +-3953.3696 3891.26 -3953.2969 3891.3496 -3953.2336 3891.3911 C +-3953.3735 3891.4004 -3953.5857 3891.4558 -3953.7937 3891.5684 C +-3953.8823 3891.0867 L +-3953.8992 3891.093 -3953.9128 3891.0923 -3953.9304 3891.1006 C +-3954.1345 3890.9226 -3954.0945 3891.3286 -3953.9856 3891.6907 C +-3954.0903 3891.77 -3954.1863 3891.865 -3954.2607 3891.9814 C +-3954.4265 3891.2039 -3954.8064 3892.2432 -3955.0327 3891.4138 C +-3955.1729 3891.8184 -3956.0784 3891.7183 -3956.1892 3892.5686 C +-3956.1963 3892.4583 -3956.2576 3892.405 -3956.1453 3892.3982 C +-3956.3772 3892.301 -3956.6089 3892.2046 -3956.8169 3892.4443 C +-3956.9153 3891.8323 L +-3957.4216 3892.655 L +-3957.7292 3892.2822 -3957.8567 3892.0654 -3957.5513 3891.5942 C +-3958.2888 3892.3186 -3958.1497 3891.8672 -3958.7769 3892.5854 C +-3958.7463 3892.1895 L +-3958.9705 3892.2046 -3959.3289 3892.7346 -3959.4641 3892.4075 C +-3959.9656 3891.655 -3961.9456 3892.3035 -3963.2329 3891.6042 C +-3962.9832 3892.77 -3963.8313 3891.0823 -3963.8823 3891.9856 C +-3963.9573 3891.71 -3964.1367 3891.5542 -3963.9282 3891.3142 C +-3964.5852 3891.5854 -3964.9153 3890.8774 -3965.3689 3891.6392 C +-3965.4441 3891.3623 -3965.2283 3891.2346 -3965.2952 3891.071 C +-3965.3479 3891.1306 -3965.5039 3891.3113 -3965.5723 3891.1462 c +-3965.6392 3890.9824 -3965.4761 3890.9153 -3965.3721 3890.7947 C +-3966.0432 3890.8411 -3966.1111 3891.6907 -3966.1599 3892.4883 C +-3966.5 3892.1106 -3966.6697 3892.1638 -3966.9153 3892.6873 C +-3967.0337 3892.4263 -3967.2312 3892.1531 -3966.8142 3892.0596 C +-3967.0488 3892.0215 -3968.2473 3891.677 -3968.2712 3892.3164 C +-3968.3447 3892.1543 -3968.5991 3892.2693 -3968.6609 3892.3428 C +-3969.1873 3892.3047 -3969.2336 3892.2471 -3969.7505 3892.3076 C +-3969.6072 3892.4119 L +-3969.8113 3893.1831 -3970.0369 3892.5842 -3970.4536 3892.6768 C +-3970.4417 3892.5974 L +-3971.3972 3892.0415 -3970.8542 3892.8643 -3971.7969 3892.2295 C +-3971.7456 3892.7092 L +-3971.8335 3893.7407 -3972.5808 3892.1006 -3973.1279 3892.4951 C +-3972.9304 3892.7693 L +-3973.2292 3893.1218 -3973.7656 3891.3662 -3974.0657 3891.2371 C +-3974.1311 3891.1475 -3973.9624 3891.093 -3973.8711 3891.0266 C +-3974.6567 3890.4182 -3973.9729 3891.655 -3974.5583 3891.801 C +-3974.6663 3891.4624 -3974.4192 3890.9395 -3974.8132 3890.8762 C +-3975.0095 3890.6018 -3975.9561 3891.9768 -3976.4937 3891.3267 C +-3976.3752 3891.5879 -3976.2576 3891.8486 -3976.5295 3892.0447 C +-3976.9463 3892.1382 -3977.6563 3891.0576 -3978.0327 3891.8806 C +-3978.0857 3891.8096 -3978.1057 3891.7412 -3978.1079 3891.6763 C +-3978.4265 3891.8887 -3979.1433 3892.0291 -3979.3352 3892.4756 C +-3979.6296 3890.8186 -3981.3159 3893.281 -3981.3088 3891.7534 C +-3982.2888 3891.8352 L +-3982.2632 3891.6792 L +-3982.8896 3891.5779 -3983.1111 3891.9443 -3983.3313 3892.3113 C +-3983.4761 3892.2073 -3983.3704 3892.0642 -3983.3584 3891.9844 C +-3984.2737 3891.6763 -3984.3647 3891.7412 -3985.1321 3892.5022 C +-3985.2119 3892.0066 L +-3985.4199 3892.2947 -3986.5352 3891.2295 -3987.4329 3891.8076 C +-3987.4241 3891.7515 -3987.4055 3891.655 -3987.3342 3891.5854 C +-3988.3442 3892.1672 -3989.7522 3890.2102 -3990.1223 3892.0154 C +-3990.7888 3892.4602 L +-3989.9265 3892.6006 -3990.9172 3893.2434 -3990.5625 3893.5435 C +-3990.9016 3893.6494 -3991.4392 3892.9993 -3991.0225 3892.9063 C +-3990.9573 3892.9966 L +-3990.8042 3892.0554 -3992.0288 3892.6631 -3992.0056 3892.0222 C +-3993.7024 3892.0686 -3995.3562 3891.5479 -3996.9456 3891.5078 C +-3996.7625 3892.239 L +-3997.3169 3892.197 L +-3997.4624 3892.0266 -3997.5122 3891.6252 -3997.1167 3891.655 C +-3997.3247 3891.2407 -3997.78 3892.0022 -3997.7913 3892.1616 C +-3998.5657 3891.865 -3997.4888 3891.3086 -3997.7263 3891.2913 C +-3998.0488 3891.3455 L +-3997.9761 3891.4312 L +-3998.2375 3891.73 -3998.2607 3892.0466 -3998.7361 3892.0107 C +-3999.0369 3891.8643 -3998.8904 3891.5596 -3999.0088 3891.531 C +-3999.0081 3891.4795 -3999.0481 3891.4551 -3999.1904 3891.5103 C +-3999.8889 3891.448 L +-3999.6096 3892.0254 L +-3999.9192 3892.3098 -4000.2664 3891.9951 -3999.9441 3892.6494 c +-4000.4172 3891.6406 -4002.5496 3892.2871 -4002.8401 3891.9739 C +-4003.2737 3892.3953 -4003.7017 3892.3875 -4004.2319 3892.3367 C +-4004.1001 3892.4573 -4004.0212 3893.1062 -4004.4785 3893.0266 C +-4004.3113 3891.6873 -4005.3159 3892.4451 -4005.6855 3891.4814 C +-4005.3552 3892.1206 -4006.9856 3891.6392 -4006.4673 3892.5466 C +-4006.8489 3892.4382 -4006.4905 3892.0454 -4006.78 3891.73 C +-4007.6882 3892.2493 -4008.7815 3891.3928 -4009.9041 3891.5679 C +-4009.9216 3891.7434 -4009.7336 3892.0127 -4009.9744 3892.2744 C +-4010.5671 3891.3953 L +-4010.7888 3891.4814 -4010.7712 3892.4104 -4011.1763 3891.7998 C +-4011.1191 3891.948 -4011.0337 3892.1707 -4011.1824 3892.2271 C +-4013.3816 3891.3699 -4015.6763 3892.9292 -4017.9097 3891.3186 C +-4017.6072 3891.6594 -4017.8088 3891.6936 -4018.0398 3891.7058 C +-4017.8896 3891.7876 -4018.0432 3892.1406 -4018.0137 3892.3787 C +-4018.9487 3891.7168 L +-4019.1191 3892.3784 -4019.9512 3891.7615 -4020.0488 3892.3943 C +-4019.7527 3892.2803 L +-4020.1465 3893.0266 -4019.2017 3893.9395 -4019.2593 3894.8975 C +-4018.8184 3894.0486 -4018.0967 3896.1543 -4017.3733 3894.9395 C +-4017.2136 3895.1348 -4017.5095 3895.2483 -4017.4241 3895.4702 C +-4017.2407 3895.0596 -4017.0193 3894.9739 -4016.6089 3895.1582 C +-4016.6553 3895.26 L +-4015.5024 3895.1594 -4015.0081 3895.5642 -4013.7129 3895.8342 C +-4013.8088 3895.3604 L +-4013.5305 3895.4238 -4013.4719 3895.5723 -4013.3416 3895.6907 C +-4013.0222 3894.9727 -4014.1233 3895.6504 -4013.8323 3894.8584 C +-4013.4631 3895.8223 -4011.8696 3894.8733 -4011.6201 3895.9683 C +-4011.1919 3895.9739 -4011.7456 3895.4199 -4011.3176 3895.4263 C +-4011.2041 3895.7227 L +-4011.0959 3895.3408 L +-4010.8152 3895.4038 -4010.6736 3895.7744 -4010.6631 3896.0254 C +-4010.7312 3895.9956 -4010.8567 3896.0955 -4010.9297 3896.1172 C +-4010.5657 3896.4663 -4009.9033 3895.9983 -4009.7783 3896.1118 C +-4010.1897 3895.9292 L +-4009.0212 3895.6519 -4007.5945 3896.0413 -4006.4656 3895.4382 C +-4006.5513 3895.2146 L +-4005.6892 3894.801 -4005.8608 3895.4602 -4004.9143 3895.2693 C +-4004.9487 3895.3223 L +-4004.7593 3895.0996 -4004.5063 3894.9871 -4004.2473 3895.0127 C +-4004.4863 3895.2744 -4003.7976 3895.5215 -4004.1111 3895.8113 C +-4003.1763 3895.3672 -4003.6487 3895.4624 -4003.0313 3894.6318 C +-4002.8889 3895.0022 L +-4002.6785 3894.6672 -4002.6609 3894.4902 -4002.1882 3894.3943 C +-4002.5759 3894.7124 -4001.8865 3894.9592 -4002.3208 3895.3799 C +-4001.3289 3896.1907 -4000.8479 3894.5613 -4000.3928 3895.7471 C +-3999.9373 3894.7207 -4001.2512 3895.177 -4000.9961 3894.9575 C +-4001.2097 3894.6218 -4000.6201 3894.1902 -4000.3088 3894.2935 C +-3999.9919 3894.3164 -3999.77 3895.6062 -3998.9729 3895.5867 C +-3999.0522 3895.5823 -3999.0576 3895.6594 -3999.1367 3895.655 C +-3998.8384 3895.9172 -3998.5522 3895.3008 -3998.1863 3895.7258 C +-3997.9812 3895.1055 -3997.7112 3895.7615 -3997.6521 3894.9702 C +-3998.3833 3895.1531 L +-3997.9688 3894.9463 -3997.5801 3894.02 -3996.8972 3894.469 C +-3996.9504 3894.6287 -3997.1536 3894.8386 -3997.2932 3894.9558 C +-3997.0935 3895.1895 -3996.9087 3894.801 -3996.7017 3895.0413 C +-3996.7607 3895.8335 -3997.5903 3895.2136 -3998.0344 3895.8174 C +-3997.8201 3896.1519 -3997.1943 3895.2434 -3997.4175 3896.1016 c +-3997.0967 3895.0107 -3996.6321 3896.239 -3996.0923 3895.4063 C +-3996.1279 3895.8806 L +-3996.0425 3895.8064 -3995.8655 3895.5823 -3995.7083 3895.5942 C +-3995.9929 3896.2095 L +-3995.5559 3895.6848 -3995.1504 3896.6682 -3994.7312 3896.3828 C +-3995.6089 3896.3975 -3994.9282 3895.8113 -3995.2993 3895.4646 C +-3994.2168 3894.8296 -3994.6768 3896.7058 -3993.4648 3896.4783 C +-3993.6289 3896.5454 -3994.0808 3896.1936 -3993.8242 3895.9734 C +-3993.5935 3896.071 -3993.2888 3896.2534 -3993.1472 3896.5022 C +-3992.3442 3896.4038 -3993.2705 3896.0144 -3992.9287 3895.7227 C +-3992.6553 3896.3008 -3992.5344 3895.4871 -3992.1824 3895.3022 C +-3992.1799 3895.7847 L +-3991.2649 3896.0942 -3991.9373 3894.7791 -3991.1135 3895.1531 C +-3991.4617 3895.8223 L +-3991.0322 3895.6494 L +-3991.1208 3896.1982 L +-3990.6536 3895.7913 -3990.5081 3895.8962 -3990.0503 3896.0503 C +-3990.1567 3895.7102 -3989.9905 3895.1748 -3989.5852 3895.1594 C +-3989.3088 3895.4463 -3989.74 3895.6184 -3989.1655 3895.5491 C +-3989.2952 3895.8511 -3989.4373 3896.23 -3989.6873 3895.7854 C +-3989.7129 3895.9426 -3989.8152 3896.0884 -3989.8416 3896.2434 C +-3989.5439 3896.573 -3989.0935 3896.3186 -3988.8855 3896.3142 C +-3988.9656 3896.2964 -3989.0613 3896.2703 -3989.1104 3896.2014 C +-3988.2776 3895.5332 L +-3988.1465 3895.7144 -3988.2505 3895.8599 -3988.3535 3896.0022 C +-3988.1848 3895.9502 -3988.0681 3895.7283 -3987.8201 3895.6873 C +-3987.8843 3896.0791 -3987.8689 3896.4839 -3988.22 3896.6682 C +-3987.4265 3896.2334 L +-3987.3735 3896.4038 -3987.0193 3896.7014 -3987.1223 3896.8462 C +-3986.6824 3897.0767 -3986.0432 3896.0854 -3985.46 3896.3894 C +-3985.4297 3896.3135 -3985.3689 3896.2407 -3985.2449 3896.1848 C +-3984.6968 3896.2734 -3984.2112 3896.7544 -3983.5615 3896.2168 C +-3983.1929 3896.9199 L +-3982.6841 3896.7603 -3983.6919 3896.0342 -3982.8447 3895.7693 C +-3982.2449 3895.5447 -3982.6208 3896.3687 -3982.4104 3896.5642 C +-3982.1121 3896.21 -3981.5935 3895.4888 -3981.0425 3896.0613 C +-3981.2249 3896.1936 -3981.3679 3896.0896 -3981.5383 3896.1416 C +f +1 D +-3975.2632 3895.8298 m +-3975.3848 3895.9312 -3975.6272 3896.2434 -3975.7161 3895.9592 C +-3975.5776 3895.4063 -3975.4705 3895.6707 -3975.2632 3895.8298 C +f +-3965.7241 3894.6682 m +-3965.8145 3894.8279 -3965.9543 3894.7493 -3966.1121 3894.5664 C +-3965.9976 3894.5266 -3965.8679 3894.5447 -3965.7241 3894.6682 C +f +-3939.1511 3891.3096 m +-3939.1563 3891.3174 -3939.1599 3891.323 -3939.1641 3891.3333 C +-3939.4353 3891.1453 -3939.3391 3891.219 -3939.1511 3891.3096 C +f +0 D +-3938.5879 3891.5193 m +-3938.5313 3891.4514 -3938.5352 3891.3848 -3938.5591 3891.3174 C +-3938.5984 3891.4395 -3938.7249 3891.448 -3938.8689 3891.4136 C +-3938.8289 3891.5398 -3938.7561 3891.6272 -3938.5879 3891.5193 C +f +1 D +-3999.0713 3891.7092 m +-3998.9617 3891.8352 L +-3999.2092 3891.9739 -3999.1399 3891.8486 -3999.0713 3891.7092 C +f +*U +0 D +-3966.8057 3895.3286 m +-3966.8401 3895.2471 -3966.8496 3895.157 -3966.8577 3895.0664 C +-3966.9055 3895.1475 -3966.9065 3895.2412 -3966.8057 3895.3286 C +f +-3985.4409 3896.3953 m +-3985.4473 3896.3911 -3985.4536 3896.3928 -3985.46 3896.3894 C +-3985.4705 3896.4182 -3985.4761 3896.448 -3985.4792 3896.4768 C +-3985.4409 3896.3953 L +f +-3947.3123 3895.6096 m +-3947.4282 3895.5398 -3947.4929 3895.4514 -3947.5359 3895.3604 C +-3947.5422 3895.4783 -3947.4895 3895.5779 -3947.3123 3895.6096 C +f +-3935.6033 3890.6992 m +-3935.9641 3890.8247 L +-3935.7896 3890.8008 -3935.7273 3890.9063 -3935.6392 3890.9827 C +-3935.6472 3890.8699 -3935.7161 3890.7073 -3935.6033 3890.6992 C +f +-3932.4719 3893.6848 m +-3932.4192 3893.6255 -3932.3601 3893.6782 -3932.3081 3893.6184 C +-3932.3225 3893.3943 L +-3932.5471 3893.4087 -3932.7041 3893.5896 -3932.4719 3893.6848 C +f +-3935.2693 3892.3022 m +-3935.2407 3892.7083 -3935.0144 3892.5703 -3934.7617 3892.4951 C +-3934.7769 3892.4966 -3934.7913 3892.5 -3934.8064 3892.4951 C +-3934.7319 3891.927 -3935.0012 3892.115 -3935.2693 3892.3022 C +f +-3934.7031 3892.4814 m +-3934.6252 3892.4624 -3934.5457 3892.4514 -3934.4695 3892.4712 C +-3934.4399 3892.2434 -3934.5642 3892.4238 -3934.7031 3892.4814 C +f +-3937.8735 3891.25 m +-3937.7537 3891.3542 -3937.7983 3890.7312 -3937.7305 3890.8962 C +-3937.5967 3890.3799 -3938.5295 3891.5215 -3937.8735 3891.25 C +f +-3935.0647 3893.6392 m +-3935.1553 3893.1382 L +-3935.2969 3893.5422 L +-3935.0647 3893.6392 L +f +-3937.0601 3893.2715 m +-3936.6563 3893.4104 L +-3936.6624 3893.3264 -3936.6111 3893.2766 -3936.5481 3893.239 C +-3936.7969 3893.2227 -3937.0696 3893.1233 -3937.0601 3893.2715 C +f +-3936.5481 3893.239 m +-3936.4185 3893.2493 -3936.2952 3893.2383 -3936.2231 3893.1563 C +-3936.2932 3893.1616 -3936.4441 3893.1782 -3936.5481 3893.239 C +f +-3935.6167 3893.7896 m +-3935.7361 3893.6851 L +-3936.0212 3893.6482 L +-3935.6167 3893.7896 L +f +-3941.4009 3893.1748 m +-3941.8416 3893.3184 L +-3941.8865 3893.4902 -3941.7664 3893.5952 -3941.6023 3893.5266 C +-3941.4968 3893.407 -3941.3333 3893.3408 -3941.4009 3893.1748 C +f +-3940.0681 3894.5466 m +-3940.1873 3894.4426 -3940.1953 3894.3311 -3940.2625 3894.1663 C +-3940.2759 3894.7871 L +-3940.0681 3894.5466 L +f +-3941.3533 3894.6919 m +-3941.3972 3894.8643 -3941.9929 3895.1863 -3941.4343 3895.1475 C +-3941.3896 3894.9768 -3940.9482 3894.8335 -3941.3533 3894.6919 C +f +-3947.9937 3893.9063 m +-3947.8816 3893.8982 L +-3947.8977 3892.8799 L +-3947.9937 3893.9063 L +f +-3953.8464 3896.3428 m +-3953.3242 3896.5867 -3953.7224 3895.7144 -3953.2505 3896.0193 C +-3953.1279 3895.7783 -3953.6362 3895.7703 -3953.5105 3895.5623 C +-3953.8257 3895.8164 -3953.9912 3895.6726 -3953.8464 3896.3428 C +f +-3953.5105 3895.5623 m +-3953.46 3895.5222 -3953.4065 3895.4734 -3953.3496 3895.4075 C +-3953.4409 3895.4712 -3953.4839 3895.52 -3953.5105 3895.5623 C +f +-4019.5745 3891.1924 m +-4019.9104 3890.98 L +-4019.6936 3891.3223 L +-4019.5745 3891.1924 L +f +-4020.2192 3891.948 m +-4020.2983 3891.2986 L +-4020.5 3891.8862 L +-4020.4241 3891.8574 -4020.2769 3891.801 -4020.2192 3891.948 C +f +-3974.3303 3897.1375 m +-3974.3047 3896.9814 L +-3974.3567 3896.8123 -3974.4353 3896.7998 -3974.5928 3896.7734 C +-3974.3303 3897.1375 L +f +-3978.8848 3896.6519 m +-3978.8064 3896.6653 L +-3978.9529 3896.0779 L +-3978.8848 3896.6519 L +f +-3982.7073 3897.4004 m +-3982.5513 3897.4248 -3982.3679 3897.2939 -3982.2112 3897.3186 C +-3982.5513 3897.4248 -3982.7495 3896.6682 -3982.7073 3897.4004 C +f +U +U +U +%AI8_EndBrushPattern +%AI8_BeginBrushPattern +(Unnamed Brush Pat 1) 0 A +u +0 J 0 j 1 w 10 M []0 d 0 XR +-7892.75 7764.8213 m +-7813.1685 7764.8213 L +-7813.1685 7747.2422 L +-7892.75 7747.2422 L +-7892.75 7764.8213 L +n +0 R +0.1098 0.7333 0.9725 0.0196 K +1 J 1 j 0.25 w 4 M -7828.8325 7750.1836 m +-7877.0845 7750.1836 L +S +u +u +0.3333 0.5765 0.9882 0.2549 K +0.5 w -7813.8823 7752.6284 m +-7892.0356 7752.6284 l +S +u +0 O +0.3333 0.5765 0.9882 0.2549 k +0 J 0 j 1 w 10 M -7813.9199 7751.8774 m +-7813.5049 7751.8774 -7813.1685 7752.2134 -7813.1685 7752.6284 c +-7813.1685 7753.0439 -7813.5049 7753.3804 -7813.9199 7753.3804 c +-7814.3354 7753.3804 -7814.6719 7753.0439 -7814.6719 7752.6284 c +-7814.6719 7752.2134 -7814.3354 7751.8774 -7813.9199 7751.8774 c +f +U +u +-7891.9985 7751.8774 m +-7892.4131 7751.8774 -7892.75 7752.2134 -7892.75 7752.6284 c +-7892.75 7753.0439 -7892.4131 7753.3804 -7891.9985 7753.3804 c +-7891.5835 7753.3804 -7891.2461 7753.0439 -7891.2461 7752.6284 c +-7891.2461 7752.2134 -7891.5835 7751.8774 -7891.9985 7751.8774 c +f +U +U +U +u +u +0 R +0.1098 0.7333 0.9725 0.0196 K +0.5 w 4 M -7821.3242 7749.0078 m +-7821.7363 7749.4492 l +-7828.5879 7756.7886 -7813.9067 7770 -7817.0879 7762.1719 c +-7819.9434 7755.1445 -7828.8325 7755.0757 Y +-7877.0845 7755.0757 L +-7885.9746 7755.1445 -7888.8296 7762.1719 v +-7892.0103 7770 -7877.3281 7756.7886 -7884.1807 7749.4492 C +-7884.5928 7749.0078 l +S +u +0 O +0.1098 0.7333 0.9725 0.0196 k +1 w 10 M -7819.6777 7747.2422 m +-7820.7607 7747.7856 -7822.2485 7748.3237 -7823.4009 7748.4429 c +-7821.5405 7749.2388 l +-7820.6191 7751.04 l +-7820.5801 7749.8804 -7820.1445 7748.3589 -7819.6777 7747.2422 c +f +U +u +-7886.2397 7747.2422 m +-7885.1567 7747.7856 -7883.6694 7748.3237 -7882.5166 7748.4429 c +-7884.3774 7749.2388 l +-7885.2983 7751.0391 l +-7885.3369 7749.8804 -7885.7729 7748.3589 -7886.2397 7747.2422 c +f +U +U +U +U +%AI8_EndBrushPattern +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI8_BeginPluginObject +(Adobe Brush Manager Order) +(Adobe Brush Manager Order) +( Adobe Calligraphic Brush Tool/ Rund - 5 Pt./ Adobe Calligraph) - +(ic Brush Tool/ Rund - 15 Pt./ Adobe Calligraphic Brush Tool/ O) - +(val - 3 Pt./ Adobe Calligraphic Brush Tool/ Oval - 5 Pt./ Adob) - +(e Calligraphic Brush Tool/ Flach - 5 Pt./ Adobe ArtOnPath Brus) - +(h Tool/ Kohle - Feder/ Adobe ArtOnPath Brush Tool/ Trennlinie/) - +( Adobe PatternOnPath Brush Tool/ Hier schneiden/) . +%AI8_EndPluginObject +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI8_BeginPluginObject +(Adobe Calligraphic Brush Tool) +(Flach - 5 Pt.) +(1 5 5 0 0 90 90 0 0 0 0) . +%AI8_EndPluginObject +%AI8_BeginPluginObject +(Adobe Calligraphic Brush Tool) +(Oval - 3 Pt.) +(1 3 3 26 74 15 15 0 1 0 0) . +%AI8_EndPluginObject +%AI8_BeginPluginObject +(Adobe Calligraphic Brush Tool) +(Oval - 5 Pt.) +(1 5 5 10 90 -65 35 0 1 1 0) . +%AI8_EndPluginObject +%AI8_BeginPluginObject +(Adobe Calligraphic Brush Tool) +(Rund - 15 Pt.) +(1 15 15 100 100 0 0 1 0 1 0) . +%AI8_EndPluginObject +%AI8_BeginPluginObject +(Adobe Calligraphic Brush Tool) +(Rund - 5 Pt.) +(1 5 5 100 100 0 0 0 0 0 0) . +%AI8_EndPluginObject +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI8_BeginPluginObject +(Adobe ArtOnPath Brush Tool) +(Kohle - Feder) +(1 / Unnamed 6/ / / / / 0 1 / 1 1 1 0 1 0 0 0) . +%AI8_EndPluginObject +%AI8_BeginPluginObject +(Adobe ArtOnPath Brush Tool) +(Trennlinie) +(1 / Unnamed Brush Pat 1/ / / / / 5 0.85098 0.396078 0.168627 /) - +( 1 1 1 0 1 0 0 0) . +%AI8_EndPluginObject +%AI5_End_NonPrinting-- +%AI5_Begin_NonPrinting +Np +%AI8_BeginPluginObject +(Adobe PatternOnPath Brush Tool) +(Hier schneiden) +(1 / New Pattern 4/ New Pattern 11/ New Pattern 11/ / / 0 0 / ) - +(1 1 1 0 1 0 0 0) . +%AI8_EndPluginObject +%AI5_End_NonPrinting-- +%AI5_BeginPalette +0 0 Pb +1 1 1 1 ([Passermarken]) 0 Xs +([Passermarken]) +Pc +0 0 0 0 k +(Wei\737) +Pc +0 0 0 1 k +(Schwarz) +Pc +0 1 1 0 k +(CMYK Rot) +Pc +0 0 1 0 k +(CMYK Gelb) +Pc +1 0 1 0 k +(CMYK Gr\774n) +Pc +1 0 0 0 k +(CMYK Cyan) +Pc +1 1 0 0 k +(CMYK Blau) +Pc +0 1 0 0 k +(CMYK Magenta) +Pc +0.15 1 0.9 0.1 k +(C=15 M=100 Y=90 K=10) +Pc +0 0.9 0.85 0 k +(C=0 M=90 Y=85 K=0) +Pc +0 0.8 0.95 0 k +(C=0 M=80 Y=95 K=0) +Pc +0 0.5 1 0 k +(C=0 M=50 Y=100 K=0) +Pc +0 0.35 0.85 0 k +(C=0 M=35 Y=85 K=0) +Pc +0.05 0 0.9 0 k +(C=5 M=0 Y=90 K=0) +Pc +0.2 0 1 0 k +(C=20 M=0 Y=100 K=0) +Pc +0.5 0 1 0 k +(C=50 M=0 Y=100 K=0) +Pc +0.75 0 1 0 k +(C=75 M=0 Y=100 K=0) +Pc +0.85 0.1 1 0.1 k +(C=85 M=10 Y=100 K=10) +Pc +0.9 0.3 0.95 0.3 k +(C=90 M=30 Y=95 K=30) +Pc +0.75 0 0.75 0 k +(C=75 M=0 Y=75 K=0) +Pc +0.8 0.1 0.45 0 k +(C=80 M=10 Y=45 K=0) +Pc +0.7 0.15 0 0 k +(C=70 M=15 Y=0 K=0) +Pc +0.85 0.5 0 0 k +(C=85 M=50 Y=0 K=0) +Pc +1 0.95 0.05 0 k +(C=100 M=95 Y=5 K=0) +Pc +1 1 0.25 0.25 k +(C=100 M=100 Y=25 K=25) +Pc +0.75 1 0 0 k +(C=75 M=100 Y=0 K=0) +Pc +0.5 1 0 0 k +(C=50 M=100 Y=0 K=0) +Pc +0.35 1 0.35 0.1 k +(C=35 M=100 Y=35 K=10) +Pc +0.1 1 0.5 0 k +(C=10 M=100 Y=50 K=0) +Pc +0 0.95 0.2 0 k +(C=0 M=95 Y=20 K=0) +Pc +0.25 0.25 0.4 0 k +(C=25 M=25 Y=40 K=0) +Pc +0.4 0.45 0.5 0.05 k +(C=40 M=45 Y=50 K=5) +Pc +0.5 0.5 0.6 0.25 k +(C=50 M=50 Y=60 K=25) +Pc +0.55 0.6 0.65 0.4 k +(C=55 M=60 Y=65 K=40) +Pc +0.25 0.4 0.65 0 k +(C=25 M=40 Y=65 K=0) +Pc +0.3 0.5 0.75 0.1 k +(C=30 M=50 Y=75 K=10) +Pc +0.35 0.6 0.8 0.25 k +(C=35 M=60 Y=80 K=25) +Pc +0.4 0.65 0.9 0.35 k +(C=40 M=65 Y=90 K=35) +Pc +0.4 0.7 1 0.5 k +(C=40 M=70 Y=100 K=50) +Pc +0.5 0.7 0.8 0.7 k +(C=50 M=70 Y=80 K=70) +Pc +Bb +2 (Wei\737, Schwarz) 0 0 0 1 1 0 0 1 0 0 Bg +0 BB +(Wei\737, Schwarz) +Pc +Bb +2 (Orange, Gelb) 0 0 0 1 1 0 0 1 0 0 Bg +0 BB +(Orange, Gelb) +Pc +Bb +2 (Verblassender Himmel) 0 0 0 1 1 0 0 1 0 0 Bg +0 BB +(Verblassender Himmel) +Pc +Bb +0 0 0 0 Bh +2 (Sehr weiche schwarze Vignette) 0 0 0 1 1 0 0 1 0 0 Bg +0 BB +(Sehr weiche schwarze Vignette) +Pc +(Pompadour) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p +(Pompadour) +Pc +0 0 0 1 k +(C=0 M=0 Y=0 K=100) +Pc +0 0 0 0.899994 k +(C=0 M=0 Y=0 K=90) +Pc +0 0 0 0.799988 k +(C=0 M=0 Y=0 K=80) +Pc +0 0 0 0.699997 k +(C=0 M=0 Y=0 K=70) +Pc +0 0 0 0.599991 k +(C=0 M=0 Y=0 K=60) +Pc +0 0 0 0.5 k +(C=0 M=0 Y=0 K=50) +Pc +0 0 0 0.399994 k +(C=0 M=0 Y=0 K=40) +Pc +0 0 0 0.299988 k +(C=0 M=0 Y=0 K=30) +Pc +0 0 0 0.199997 k +(C=0 M=0 Y=0 K=20) +Pc +0 0 0 0.099991 k +(C=0 M=0 Y=0 K=10) +Pc +0 0 0 0.049988 k +(C=0 M=0 Y=0 K=5) +Pc +0 1 1 0 k +(C=0 M=100 Y=100 K=0) +Pc +0 0.75 1 0 k +(C=0 M=75 Y=100 K=0) +Pc +0 0.1 0.95 0 k +(C=0 M=10 Y=95 K=0) +Pc +0.85 0.1 1 0 k +(C=85 M=10 Y=100 K=0) +Pc +1 0.9 0 0 k +(C=100 M=90 Y=0 K=0) +Pc +0.6 0.9 0.000031 0.000031 k +(C=60 M=90 Y=0 K=0) +Pc +PB +%AI5_EndPalette +%%EndSetup +%AI5_BeginLayer +1 1 1 1 0 0 1 0 79 128 255 0 50 Lb +(Ebene 1) Ln +0 A +u +u +*u +0 O +0 0 0 0 k +0 J 0 j 1 w 10 M []0 d 0 XR +360.4355 -411.79 m +361.0537 -411.79 361.7305 -411.6777 362.208 -411.959 c +362.208 -412.0996 362.292 -412.0996 362.292 -412.1836 c +361.9268 -412.0996 362.377 -412.5781 362.292 -412.1836 c +362.377 -412.1836 362.4619 -412.1836 362.5459 -412.1836 c +362.6025 -412.3247 362.6309 -412.1836 362.5459 -412.1836 c +362.5176 -412.043 362.3213 -412.043 362.208 -411.959 c +362.292 -411.6494 362.6865 -411.79 362.8545 -411.79 c +367.0771 -411.6211 371.5508 -411.8745 375.5459 -411.8745 c +375.4619 -413.5347 375.6592 -416.0391 375.4619 -417.8398 c +375.04 -417.6714 375.1523 -417.3618 375.04 -416.9678 c +374.8994 -416.7988 374.3369 -416.0674 374.6455 -416.6304 c +374.3643 -416.7144 374.4219 -416.855 374.4775 -417.0522 c +374.8711 -416.8833 374.6738 -417.1362 374.8145 -417.2773 c +374.9551 -417.6431 375.1523 -417.8965 375.5459 -418.0933 c +375.3779 -419.2754 375.7715 -421.02 375.3779 -422.2871 c +375.6592 -422.8496 375.5459 -423.7207 375.5459 -424.5371 c +375.5459 -425.3818 375.6592 -426.3379 375.3779 -426.9004 c +375.1523 -427.0977 375.4902 -426.957 375.5459 -427.127 c +375.6309 -427.4355 375.3496 -427.3516 375.3779 -427.6045 c +375.6865 -428.4492 375.5459 -430.1377 375.4619 -431.0664 c +373.9707 -431.0381 372.2822 -431.1787 370.9316 -431.0098 c +370.9316 -429.8848 370.9316 -428.6172 370.9316 -427.4639 c +370.9316 -426.2822 370.8193 -425.1289 371.1846 -424.5371 c +370.5938 -424.3398 371.3818 -423.6934 370.8467 -423.75 c +370.96 -423.3555 371.5225 -423.6367 371.748 -423.2422 c +371.3262 -423.1582 371.0156 -423.4395 370.7627 -423.2422 c +370.5654 -423.4395 370.6504 -423.8906 370.1992 -423.834 c +370.0586 -423.6094 370.3125 -423.2422 369.8906 -423.1016 c +369.8623 -423.5527 369.5254 -423.2148 369.4961 -423.5801 c +369.4404 -423.5801 369.3838 -423.5801 369.3281 -423.5801 c +369.2705 -423.4688 369.2148 -423.5801 369.3281 -423.5801 c +369.2705 -423.834 369.4688 -423.6934 369.4961 -423.5801 c +370.0879 -424.002 367.8916 -423.8057 367.6396 -423.75 c +367.6104 -423.6367 367.5547 -423.6934 367.5547 -423.75 c +367.4424 -423.7773 366.8516 -423.918 366.5703 -423.75 c +366.6543 -423.75 366.6543 -423.7207 366.6543 -423.665 c +366.6826 -423.665 366.7109 -423.665 366.7383 -423.665 c +366.7383 -423.75 366.8232 -423.7207 366.9072 -423.75 c +366.9072 -423.665 366.7949 -423.665 366.7383 -423.665 c +366.7109 -423.5801 366.6543 -423.6094 366.6543 -423.665 c +366.5977 -423.6367 366.5703 -423.6934 366.5703 -423.75 c +366.457 -423.7207 366.4297 -423.6094 366.3447 -423.5801 c +366.4297 -423.9746 365.9229 -423.8057 365.7813 -423.834 c +363.8965 -423.9746 361.6738 -423.7773 360.041 -423.75 c +360.1543 -423.6934 360.041 -423.6367 360.041 -423.75 c +359.9287 -423.8613 359.6191 -423.8057 359.3936 -423.834 c +359.3936 -426.2539 359.3936 -428.6738 359.3936 -431.0664 c +357.875 -431.0664 356.3828 -431.0664 354.8633 -431.0664 c +354.8633 -424.6504 354.8633 -418.2339 354.8633 -411.79 c +356.6934 -411.79 358.6904 -411.79 360.4355 -411.79 c +f +356.2422 -419.1343 m +F +356.7207 -417.1929 m +F +1 D +357.6211 -416.1519 m +357.6211 -416.0952 357.6211 -416.0391 357.6211 -415.9829 c +357.5371 -415.9829 357.4521 -415.9829 357.3682 -415.9829 c +357.3682 -416.0391 357.3682 -416.0952 357.3682 -416.1519 c +357.4521 -416.1519 357.5371 -416.1519 357.6211 -416.1519 c +f +0 D +357.4521 -420.0347 m +F +357.7061 -420.1196 m +F +1 D +358.0156 -419.5566 m +358.0723 -419.5288 358.1836 -419.5288 358.1836 -419.4722 c +358.1279 -419.4722 358.0156 -419.4722 358.0156 -419.5566 c +f +358.2686 -416.2358 m +358.3242 -416.208 358.4092 -416.2358 358.4375 -416.1519 c +358.3535 -416.1802 358.2686 -416.1519 358.2686 -416.2358 c +f +360.5205 -421.8076 m +360.2949 -421.5547 360.7725 -421.4702 360.5205 -421.2451 c +360.5205 -421.3296 360.4355 -421.3013 360.3506 -421.3296 c +360.3506 -421.4702 360.4355 -421.7236 360.21 -421.6387 c +360.2666 -421.583 360.3232 -421.4141 360.21 -421.4141 c +359.9854 -421.4419 359.6475 -421.5547 359.2256 -421.3296 c +359.3379 -420.9639 358.8311 -421.4702 358.7461 -421.1606 c +358.8867 -421.1328 358.9434 -421.02 358.916 -420.8232 c +358.6348 -420.7666 358.6055 -420.9639 358.5781 -421.1606 c +358.6621 -421.3296 358.9717 -421.3013 358.916 -421.6387 c +358.5781 -421.7798 358.4092 -421.7798 358.2686 -421.9766 c +358.5498 -422.0605 358.9434 -421.9204 359.1416 -421.6387 c +359.3096 -421.7798 359.2529 -421.6387 359.4785 -421.6387 c +359.6191 -422.0889 359.7598 -421.6108 360.126 -421.8076 c +360.0977 -421.7236 360.126 -421.667 360.21 -421.6387 c +360.2666 -421.9204 360.3789 -421.6387 360.5205 -421.8076 c +f +0 D +358.3535 -421.3296 m +F +1 D +358.4375 -415.251 m +358.4375 -415.5889 358.9717 -415.73 359.0566 -415.5044 c +358.8027 -415.4766 358.7754 -415.1948 358.4375 -415.251 c +f +358.4941 -414.041 m +358.4375 -414.3506 358.8867 -414.3789 358.916 -414.126 c +358.7197 -414.1821 358.7461 -413.9849 358.4941 -414.041 c +f +358.7461 -422.2871 m +358.7197 -422.0332 359.1416 -422.2578 359.0566 -421.9766 c +358.8027 -421.9766 358.6348 -422.0605 358.5781 -422.2871 c +358.6348 -422.2871 358.6904 -422.2871 358.7461 -422.2871 c +358.6621 -422.624 359.001 -422.3145 358.7461 -422.2871 c +f +0 D +358.6621 -423.9746 m +F +359.001 -421.3296 m +359.0566 -421.3296 359.1416 -421.3296 359.2256 -421.3296 c +359.3379 -421.667 358.9717 -421.5547 359.001 -421.3296 c +f +1 D +359.001 -419.5566 m +359.0566 -419.5288 359.1416 -419.5288 359.1416 -419.4722 c +359.084 -419.4722 359.001 -419.4722 359.001 -419.5566 c +f +359.1416 -421.8921 m +359.1973 -422.0605 359.0566 -422.4277 359.2256 -422.4551 c +359.4229 -422.2012 359.3662 -422.0605 359.1416 -421.8921 c +f +359.1416 -415.7578 m +359.2256 -415.73 359.3096 -415.7578 359.3096 -415.6733 c +359.2529 -415.6733 359.1416 -415.6733 359.1416 -415.7578 c +f +359.6475 -419.8662 m +361.6738 -419.5566 363.8682 -419.7817 366.0068 -419.6973 c +366.0908 -419.8101 366.0908 -420.0068 366.2607 -420.0347 c +366.373 -419.8379 366.0352 -419.7256 366.2607 -419.6973 c +366.9072 -419.6694 367.4424 -419.894 368.2021 -419.6973 c +368.2305 -419.8101 368.3428 -419.8379 368.3428 -419.9507 c +368.1465 -419.894 368.0615 -419.979 368.1172 -420.1758 c +368.0332 -420.1758 368.0332 -420.2319 368.0332 -420.2603 c +367.667 -420.4009 367.4697 -420.1758 367.2178 -420.3442 c +367.5264 -420.2881 367.3857 -420.6538 367.6396 -420.6826 c +367.6104 -420.4292 368.0059 -420.6538 368.0332 -420.2603 c +368.0889 -420.2881 368.1172 -420.2319 368.1172 -420.1758 c +368.624 -419.894 369.1025 -419.894 369.5518 -420.0347 c +369.6094 -420.1475 369.666 -420.0068 369.5518 -420.0347 c +369.918 -419.894 370.1436 -419.9507 370.1992 -419.6973 c +370.1992 -420.1758 370.4531 -419.5566 370.5371 -420.0347 c +370.6504 -419.5288 371.0156 -420.2319 371.1846 -419.7817 c +370.8193 -419.6128 371.0156 -419.416 371.2695 -419.0498 c +371.2695 -418.9375 371.0156 -418.8252 370.9316 -418.5718 c +370.791 -417.5864 371.2695 -416.8271 370.8467 -416.3208 c +370.5654 -416.4331 370.2285 -416.3208 369.8906 -416.3208 c +367.7803 -416.2925 364.7402 -416.6021 362.7715 -416.2358 c +362.6309 -416.3486 362.3486 -416.3486 362.124 -416.4048 c +362.1797 -416.1235 361.8418 -416.2925 362.0674 -416.0674 c +361.6455 -416.4614 360.8574 -416.377 360.2949 -416.2358 c +360.2666 -416.1519 359.9854 -415.9546 359.957 -416.1519 c +360.21 -416.3486 359.5635 -416.3486 359.3936 -416.4048 c +359.2822 -417.3618 359.6475 -418.8252 359.1416 -419.3877 c +359.4229 -419.3877 359.2822 -419.6128 359.1416 -419.6973 c +359.1973 -419.8662 359.5908 -419.6973 359.6475 -419.8662 c +359.5068 -419.9224 359.6475 -419.9507 359.6475 -419.8662 c +f +0 D +359.1416 -418.9092 m +F +1 D +359.5635 -420.1758 m +359.5068 -420.1758 359.4502 -420.1758 359.3936 -420.1758 c +359.2529 -420.4009 359.6758 -420.4292 359.6475 -420.2603 c +359.9854 -420.2881 359.6475 -419.9507 359.6475 -420.2603 c +359.5635 -420.2881 359.5635 -420.2319 359.5635 -420.1758 c +f +359.3936 -420.8232 m +359.2822 -420.9639 359.873 -420.7944 359.7041 -420.7666 c +359.5908 -420.7104 359.4502 -420.7666 359.3936 -420.8232 c +f +360.6045 -415.1104 m +360.5479 -414.8574 360.0137 -414.8291 359.873 -414.9414 c +359.8164 -414.7729 359.7314 -414.6602 359.5635 -414.6318 c +359.4785 -414.6885 359.4785 -414.8008 359.4785 -414.9414 c +359.6191 -414.9414 359.7314 -414.9414 359.873 -414.9414 c +360.1543 -415.4766 360.1816 -414.8291 360.6045 -415.1104 c +f +0 D +359.4785 -420.5132 m +F +359.4785 -423.2422 m +F +1 D +359.5635 -422.2871 m +359.5635 -422.4834 359.6475 -422.4277 359.6475 -422.2871 c +359.6758 -422.2871 359.6758 -422.2871 359.7041 -422.2871 c +359.7598 -422.3984 359.8164 -422.2871 359.7041 -422.2871 c +359.7314 -422.2305 359.7881 -422.2012 359.7881 -422.1172 c +360.2383 -422.2012 359.9004 -421.8921 359.7881 -422.1172 c +359.7041 -422.1172 359.7314 -421.9766 359.6475 -421.9766 c +359.6475 -422.0889 359.5635 -422.1172 359.5635 -422.2012 c +359.4502 -422.2305 359.5068 -422.2871 359.5635 -422.2871 c +f +359.5635 -415.8418 m +359.5342 -416.0674 359.957 -416.1519 359.957 -415.8984 c +359.7598 -415.814 359.8164 -415.9268 359.5635 -415.8418 c +f +0 D +359.5635 -422.2012 m +359.5908 -422.2012 359.6475 -422.2305 359.6475 -422.2871 c +359.6191 -422.2871 359.5908 -422.2871 359.5635 -422.2871 c +359.5635 -422.2578 359.5635 -422.2305 359.5635 -422.2012 c +f +359.6475 -423.3281 m +F +359.7041 -423.1875 m +F +359.7881 -413.9849 m +F +359.7881 -420.0347 m +F +359.7881 -420.4292 m +F +1 D +360.041 -422.9336 m +360.1543 -422.9053 360.0693 -422.6797 360.21 -422.6797 c +360.1816 -422.793 360.21 -422.8496 360.2949 -422.8496 c +360.2949 -423.1016 360.6045 -422.7646 360.2949 -422.8496 c +360.2949 -422.7646 360.2666 -422.709 360.21 -422.6797 c +360.21 -422.6523 360.21 -422.624 y +359.8164 -422.5684 360.0693 -422.6797 360.041 -422.9336 c +359.7041 -422.8496 360.0137 -423.1875 360.041 -422.9336 c +f +359.957 -413.1689 m +360.0137 -413.1406 360.126 -413.1689 360.126 -413.0845 c +360.0693 -413.1128 359.957 -413.0845 359.957 -413.1689 c +f +0 D +359.957 -413.9849 m +F +359.957 -420.1196 m +F +359.957 -420.4292 m +F +360.041 -422.5391 m +F +1 D +360.2949 -423.1016 m +360.4072 -423.0459 360.2666 -422.9902 360.2949 -423.1016 c +359.8447 -423.0176 360.1816 -423.3281 360.2949 -423.1016 c +f +360.5205 -412.6904 m +360.5205 -412.4653 360.5205 -412.2686 360.2949 -412.2686 c +360.2666 -412.4092 360.0693 -412.3525 360.126 -412.522 c +360.1816 -412.6338 360.3789 -412.6338 360.5205 -412.6904 c +f +360.4355 -415.8984 m +360.4639 -415.645 360.0693 -415.5889 360.126 -415.8984 c +360.2383 -415.8984 360.3232 -415.8984 360.4355 -415.8984 c +f +360.126 -420.4292 m +360.126 -420.5132 360.2666 -420.5415 360.2949 -420.4292 c +360.1816 -420.4292 360.1543 -420.3164 360.126 -420.4292 c +f +0 D +360.21 -416.2358 m +360.2383 -416.2358 360.2666 -416.2358 360.2949 -416.2358 c +360.2949 -416.2925 360.21 -416.3208 360.21 -416.2358 c +f +1 D +360.21 -419.9507 m +360.21 -420.0347 360.3506 -420.0347 360.3506 -419.9507 c +360.2666 -419.9507 360.2383 -419.8379 360.21 -419.9507 c +f +360.2949 -420.6826 m +360.3506 -420.6538 360.4355 -420.6826 360.4355 -420.5977 c +360.3789 -420.5977 360.2949 -420.5977 360.2949 -420.6826 c +f +0 D +360.2949 -423.3281 m +F +360.3506 -414.7729 m +F +360.3506 -423.4961 m +F +1 D +360.4355 -421.9766 m +360.5479 -421.9204 360.4355 -421.8643 360.4355 -421.9766 c +360.21 -421.9766 360.5205 -422.2871 360.4355 -421.9766 c +f +0 D +360.4355 -415.6733 m +F +1 D +360.4355 -422.6797 m +360.5479 -422.793 360.7451 -422.793 360.7725 -422.624 c +360.6318 -422.624 360.4639 -422.5957 360.4355 -422.6797 c +f +0 D +360.6045 -413.1689 m +F +360.6045 -413.9004 m +F +360.6045 -414.126 m +F +360.6045 -421.8076 m +F +360.6045 -422.5391 m +F +360.6045 -423.3281 m +F +1 D +360.6885 -414.6318 m +360.6318 -414.4912 360.5762 -414.6318 360.6885 -414.6318 c +360.7451 -414.7446 360.7725 -414.604 360.6885 -414.6318 c +f +360.6885 -414.2944 m +360.8018 -414.2666 360.8291 -414.3789 360.9131 -414.3789 c +361.0537 -414.1821 360.6611 -414.1538 360.6885 -414.2944 c +360.5762 -414.3506 360.6885 -414.4072 360.6885 -414.2944 c +f +0 D +360.6885 -415.0264 m +F +360.6885 -421.0762 m +F +1 D +360.7725 -420.2603 m +360.7168 -420.1475 360.6611 -420.2881 360.7725 -420.2603 c +360.8018 -420.4009 360.8574 -420.2603 360.7725 -420.2603 c +f +360.9131 -412.7749 m +360.8018 -412.4653 360.6611 -413.0283 360.9131 -412.7749 c +360.9697 -412.8872 361.0273 -412.7466 360.9131 -412.7749 c +f +0 D +360.7725 -421.8076 m +F +1 D +360.7725 -422.5391 m +360.9697 -422.5957 361.2236 -422.6797 361.335 -422.4551 c +361.168 -422.4834 360.8018 -422.3418 360.7725 -422.5391 c +f +360.8574 -416.1519 m +360.8857 -416.1519 360.9424 -416.1519 360.998 -416.1519 c +361.0273 -416.0952 361.083 -416.0674 361.083 -415.9829 c +361.1104 -415.9829 361.1387 -415.9829 361.168 -415.9829 c +360.9697 -416.377 361.5322 -416.208 361.7305 -416.1519 c +361.5605 -416.1802 361.4766 -416.1235 361.5049 -415.9829 c +361.5322 -415.9829 361.5605 -415.9829 v +361.5049 -415.645 361.0537 -415.8984 361.5049 -415.9829 c +361.3916 -415.9829 361.2793 -415.9829 361.168 -415.9829 c +361.168 -415.7856 361.083 -415.8418 361.083 -415.9829 c +360.9697 -416.0112 360.9424 -415.9268 360.8574 -415.8984 c +360.8018 -415.7856 360.7451 -415.9268 360.8574 -415.8984 c +360.8574 -415.9829 360.8574 -416.0674 360.8574 -416.1519 c +f +361.251 -415.1948 m +361.1387 -415.2231 360.8291 -415.0825 360.8574 -415.251 c +360.9424 -415.3076 360.998 -415.4482 360.998 -415.5889 c +360.8857 -415.645 361.0273 -415.6733 360.998 -415.5889 c +361.1104 -415.5889 361.1387 -415.5605 361.168 -415.5044 c +361.3916 -415.4199 361.0537 -415.2793 361.251 -415.1948 c +361.4492 -415.1948 361.5898 -415.1387 361.6455 -415.0264 c +361.7578 -414.9697 361.6455 -414.9136 361.6455 -415.0264 c +361.4492 -414.998 361.251 -414.998 361.251 -415.1948 c +f +360.9131 -414.9414 m +360.8857 -414.8291 360.8291 -414.9414 360.9131 -414.9414 c +360.8291 -415.3076 361.3086 -414.8574 360.9131 -414.9414 c +f +360.9131 -420.4292 m +360.9424 -420.5415 361.0273 -420.4854 361.083 -420.4292 c +361.083 -420.3442 360.9424 -420.3164 360.9131 -420.4292 c +f +362.0674 -413.2534 m +362.1514 -412.8311 361.7305 -413.0562 361.5605 -413.0845 c +361.4492 -412.9722 361.083 -412.6904 360.998 -413 c +361.3643 -413.0845 361.5605 -413.3096 362.0674 -413.2534 c +362.0957 -413.3657 362.1514 -413.2251 362.0674 -413.2534 c +f +360.998 -414.7729 m +361.1104 -414.8853 361.3916 -414.9136 361.4199 -414.6885 c +361.2793 -414.7446 360.998 -414.604 360.998 -414.7729 c +f +0 D +361.083 -414.041 m +F +361.083 -421.8076 m +F +361.168 -415.5044 m +F +1 D +361.335 -414.5479 m +361.3086 -414.2944 360.998 -414.604 361.335 -414.5479 c +361.3916 -414.6602 361.4199 -414.5195 361.335 -414.5479 c +f +0 D +361.335 -414.21 m +F +1 D +361.8145 -421.7236 m +361.6172 -421.667 361.4766 -421.6387 361.335 -421.8076 c +361.5049 -421.8359 361.7578 -421.9766 361.8145 -421.7236 c +f +0 D +361.4199 -414.4634 m +F +361.5605 -415.251 m +F +361.6455 -415.8418 m +F +1 D +361.7305 -412.8311 m +361.7861 -412.8311 361.8984 -412.8311 361.8984 -412.7749 c +361.8418 -412.7749 361.7305 -412.7749 361.7305 -412.8311 c +f +361.8145 -414.126 m +361.7305 -414.2666 362.124 -414.0972 362.0674 -414.041 c +361.9824 -413.9849 361.8145 -414.126 y +f +0 D +361.8145 -414.6885 m +F +361.8145 -415.9829 m +F +361.8984 -414.4634 m +F +1 D +361.9824 -422.624 m +362.0957 -422.5684 361.9551 -422.5117 361.9824 -422.624 c +361.8711 -422.6523 361.9824 -422.709 361.9824 -422.624 c +f +0 D +361.9824 -415.8984 m +F +1 D +362.208 -420.8232 m +362.0674 -420.8232 362.0107 -420.9072 361.9824 -420.9917 c +362.124 -420.9917 362.1797 -420.9351 362.208 -420.8232 c +f +0 D +362.124 -413.1689 m +F +1 D +362.124 -415.1104 m +362.1514 -415.1948 362.2363 -415.167 362.292 -415.1104 c +362.292 -415.0264 362.1514 -414.998 362.124 -415.1104 c +f +362.208 -413.647 m +362.3486 -413.6753 362.1797 -413.7598 362.208 -413.9004 c +362.6025 -413.8726 362.6865 -413.8726 362.8545 -413.8159 c +362.9121 -413.9287 362.9688 -413.8159 362.8545 -413.8159 c +362.7715 -413.563 363.0244 -413.4502 362.7715 -413.1689 c +362.9121 -413.1128 362.7715 -413.0562 362.7715 -413.1689 c +362.3213 -413.2251 362.4053 -413.4224 362.208 -413.647 c +f +0 D +362.208 -416.2358 m +F +362.292 -414.8574 m +F +362.6309 -414.4634 m +F +1 D +362.7139 -420.4292 m +362.7715 -420.4009 362.8545 -420.4292 362.8545 -420.3442 c +362.7988 -420.3726 362.7139 -420.3442 362.7139 -420.4292 c +f +0 D +362.8545 -420.0347 m +F +363.1094 -421.2451 m +F +363.1934 -420.7666 m +F +1 D +363.502 -414.6885 m +363.4463 -414.9697 363.8125 -415.0264 363.8398 -414.7729 c +363.6719 -414.8008 363.6426 -414.6885 363.502 -414.6885 c +f +0 D +364.7969 -420.5132 m +F +1 D +364.9658 -422.8496 m +364.9658 -422.9609 365.0508 -422.9053 365.1348 -422.8496 c +365.1348 -422.7646 364.9941 -422.7646 364.9658 -422.8496 c +f +0 D +365.1914 -420.2603 m +F +365.6133 -422.2871 m +F +1 D +366.0068 -422.7646 m +366.0352 -423.1016 366.373 -422.7646 366.0068 -422.7646 c +366.0352 -422.6523 365.9229 -422.624 365.9229 -422.5391 c +366.0352 -422.4834 365.9229 -422.4277 365.9229 -422.5391 c +365.7813 -422.5117 365.8096 -422.9053 366.0068 -422.7646 c +f +0 D +365.8389 -421.9766 m +F +366.0068 -412.437 m +F +1 D +366.2607 -421.8076 m +366.2041 -422.0332 366.4297 -421.9482 366.4854 -422.0332 c +366.5137 -421.8643 366.4297 -421.7798 366.2607 -421.8076 c +f +0 D +366.3447 -420.9072 m +F +1 D +366.4854 -423.3281 m +366.4854 -423.4121 366.626 -423.4395 366.6543 -423.3281 c +366.5703 -423.3555 366.542 -423.2148 366.4854 -423.3281 c +f +0 D +366.4854 -423.5801 m +F +1 D +366.6543 -422.4551 m +366.542 -422.6523 366.9355 -422.6797 366.9072 -422.5391 c +366.7949 -422.5391 366.7949 -422.4277 366.6543 -422.4551 c +f +366.9922 -423.4961 m +366.9639 -423.3838 366.9922 -423.2148 366.8232 -423.2422 c +366.8232 -423.3555 366.7666 -423.4395 366.7383 -423.4961 c +366.8232 -423.4961 366.9072 -423.4961 366.9922 -423.4961 c +f +366.9072 -422.6797 m +366.9072 -422.8496 366.9639 -422.9609 367.0479 -423.0176 c +367.0771 -422.8203 367.0479 -422.709 366.9072 -422.6797 c +f +367.1328 -423.4121 m +367.2451 -423.3555 367.1328 -423.3281 367.1328 -423.4121 c +367.0205 -423.4688 367.1611 -423.5244 367.1328 -423.4121 c +f +367.3857 -423.0176 m +367.499 -422.8203 367.1045 -422.7646 367.1328 -422.9336 c +367.1885 -422.9336 367.2451 -422.9336 367.2178 -423.0176 c +367.2734 -423.0176 367.3291 -423.0176 367.3857 -423.0176 c +f +0 D +367.1328 -422.0332 m +F +367.3018 -420.9917 m +F +1 D +367.6396 -423.3281 m +367.6396 -423.3838 367.6396 -423.4395 367.6953 -423.4121 c +367.6953 -423.2988 367.6104 -422.8203 367.4697 -423.1016 c +367.6953 -423.1582 367.3857 -423.3838 367.3857 -423.4961 c +367.5547 -423.5244 367.5547 -423.3838 367.6396 -423.3281 c +f +368.1172 -423.2422 m +368.1172 -423.2148 368.6523 -423.1875 368.3428 -422.9336 c +368.2871 -423.0459 368.2305 -422.9053 368.0332 -423.0176 c +368.0332 -422.9902 368.0332 -422.9609 368.0332 -422.9336 c +368.1465 -422.877 368.0332 -422.8496 368.0332 -422.9336 c +367.7803 -422.9053 367.7246 -422.6523 367.5547 -422.9336 c +367.8652 -422.8496 367.8359 -423.2148 368.0332 -423.0176 c +368.0332 -423.1309 368.0059 -423.2422 368.1172 -423.2422 c +f +0 D +367.6396 -423.75 m +367.6396 -423.7773 367.5547 -423.834 367.5547 -423.75 c +367.583 -423.75 367.6104 -423.75 367.6396 -423.75 c +f +1 D +367.6396 -422.5391 m +367.6953 -422.5117 367.7803 -422.5391 367.7803 -422.4551 c +367.7246 -422.4551 367.6396 -422.4551 367.6396 -422.5391 c +f +367.6953 -421.2451 m +367.751 -421.2734 368.0059 -421.4419 368.0332 -421.2451 c +367.9482 -421.2451 367.9766 -421.1328 367.9482 -421.0762 c +367.8916 -421.0762 367.8359 -421.0762 367.7803 -421.0762 c +367.7803 -421.1328 367.6953 -421.1606 367.6953 -421.2451 c +367.583 -421.3013 367.7246 -421.3296 367.6953 -421.2451 c +f +0 D +367.6953 -422.2871 m +F +1 D +367.7803 -423.2422 m +367.8359 -423.2422 367.9482 -423.2422 367.9482 -423.1875 c +367.8916 -423.1875 367.7803 -423.1875 367.7803 -423.2422 c +f +367.9482 -420.8232 m +367.5547 -420.8794 368.1738 -421.0762 368.2578 -421.1606 c +368.2578 -421.02 368.3428 -421.02 368.3428 -420.9072 c +368.2871 -420.9072 368.2578 -420.8232 368.2021 -420.8232 c +368.3711 -420.5698 368.6807 -420.5698 368.9053 -420.9072 c +368.9336 -420.8511 368.9893 -420.8232 368.9893 -420.7666 c +369.3281 -420.6538 369.3838 -420.7104 369.4961 -420.9917 c +369.3838 -421.02 369.4404 -421.0762 369.4961 -421.0762 c +369.5254 -421.1885 369.5811 -421.0762 369.4961 -421.0762 c +369.4961 -421.0479 369.4961 -421.02 369.4961 -420.9917 c +369.8623 -420.8232 369.7217 -420.626 369.9746 -420.3442 c +369.7773 -420.2881 369.6924 -420.3442 369.4111 -420.2603 c +369.4111 -420.3726 369.3838 -420.4009 369.3281 -420.4292 c +369.2705 -420.3164 369.2148 -420.4292 369.3281 -420.4292 c +369.2432 -420.5132 369.1592 -420.5977 369.0742 -420.6826 c +368.9893 -420.5698 368.9336 -420.4292 368.8486 -420.3442 c +368.8213 -420.2603 368.7646 -420.3164 368.7646 -420.3442 c +368.624 -420.5132 368.5117 -420.3164 368.3428 -420.2603 c +368.3428 -420.5132 368.1172 -420.5132 368.0332 -420.6826 c +367.8359 -420.6826 367.9209 -420.7383 367.9482 -420.8232 c +f +367.8652 -422.5391 m +367.9482 -422.5117 368.0059 -422.6523 368.0332 -422.5391 c +368.0332 -422.4551 367.8916 -422.4277 367.8652 -422.5391 c +f +0 D +368.2021 -420.8232 m +368.2021 -420.9351 367.9766 -420.9351 367.9482 -420.8232 c +368.0332 -420.8232 368.1172 -420.8232 368.2021 -420.8232 c +f +1 D +368.1172 -423.665 m +367.7803 -423.5801 368.0889 -423.8906 368.1172 -423.665 c +368.1738 -423.665 368.1738 -423.6367 368.2021 -423.5801 c +368.3145 -423.5244 368.1738 -423.4688 368.2021 -423.5801 c +368.1172 -423.5527 368.1172 -423.6094 368.1172 -423.665 c +f +0 D +368.0332 -420.6826 m +F +368.0332 -421.4141 m +F +368.1172 -421.3296 m +F +1 D +368.9053 -421.8921 m +368.8486 -421.9766 368.7646 -421.9204 368.5117 -421.9766 c +368.4277 -421.8921 368.4834 -421.667 368.2578 -421.7236 c +368.2305 -421.6108 368.1738 -421.7236 368.2578 -421.7236 c +368.1465 -422.1455 369.1592 -422.2871 368.9053 -421.8921 c +f +368.3428 -422.624 m +368.4277 -422.5957 368.5117 -422.5957 368.5117 -422.5391 c +368.4551 -422.5391 368.3428 -422.5391 368.3428 -422.624 c +f +0 D +368.5117 -420.8232 m +F +368.5957 -422.9336 m +F +368.6807 -420.9917 m +F +368.6807 -423.5801 m +F +368.8486 -420.3442 m +368.8486 -420.4009 368.7646 -420.4292 368.7646 -420.3442 c +368.793 -420.3442 368.8213 -420.3442 368.8486 -420.3442 c +f +1 D +368.7646 -422.6797 m +369.0186 -422.5957 369.1865 -423.0176 369.3281 -422.7646 c +369.1592 -422.793 369.2705 -422.4834 369.2432 -422.3711 c +369.2998 -422.3418 369.4111 -422.3711 369.4111 -422.2871 c +369.0742 -422.2305 369.1592 -422.2305 368.8486 -422.2871 c +368.8486 -422.4834 368.8213 -422.5957 368.7646 -422.6797 c +f +368.7646 -423.2422 m +368.8213 -423.2422 368.9053 -423.2422 368.9053 -423.1875 c +368.8486 -423.1875 368.7646 -423.1875 368.7646 -423.2422 c +f +0 D +368.9053 -421.8076 m +F +368.9893 -413.3374 m +F +368.9893 -420.7666 m +F +368.9893 -421.0762 m +F +1 D +369.0742 -421.4702 m +369.0186 -421.3574 368.9893 -421.498 369.0742 -421.4702 c +369.0459 -421.6387 369.1865 -421.6387 369.3281 -421.6387 c +369.3838 -421.7515 369.4111 -421.6387 369.3281 -421.6387 c +369.4111 -421.5264 369.4111 -421.4419 369.2432 -421.4141 c +369.2432 -421.0479 368.9336 -421.3857 369.2432 -421.4141 c +369.2432 -421.4702 369.1299 -421.4702 369.0742 -421.4702 c +f +0 D +369.0742 -423.5801 m +F +1 D +369.2432 -416.1519 m +369.3555 -416.0952 369.2432 -416.0674 369.2432 -416.1519 c +369.1299 -416.208 369.2432 -416.2642 369.2432 -416.1519 c +f +369.3281 -422.0332 m +369.666 -422.0605 369.3555 -421.7236 369.3281 -422.0332 c +369.2148 -422.0889 369.3281 -422.1455 369.3281 -422.0332 c +f +369.3281 -421.3296 m +369.3838 -421.3013 369.4688 -421.3296 369.4961 -421.2451 c +369.4111 -421.2451 369.3281 -421.2451 369.3281 -421.3296 c +f +0 D +369.6367 -421.7236 m +F +369.6367 -422.1172 m +F +369.7217 -420.5132 m +F +1 D +369.8906 -420.9917 m +369.8066 -421.2451 370.1436 -421.1045 370.1152 -421.3296 c +370.1152 -421.4702 369.918 -421.4141 369.9746 -421.6387 c +369.9473 -421.6387 369.918 -421.6387 369.8906 -421.6387 c +369.8906 -421.583 369.8623 -421.5547 369.8066 -421.5547 c +369.75 -421.4419 369.7217 -421.583 369.8066 -421.5547 c +369.7773 -421.6387 369.834 -421.6387 369.8906 -421.6387 c +369.8906 -421.667 369.8906 -421.6953 369.8906 -421.7236 c +369.8066 -421.6953 369.8066 -421.7515 369.8066 -421.8076 c +369.6924 -421.8643 369.8066 -421.8921 369.8066 -421.8076 c +369.8623 -421.8076 369.8906 -421.7798 369.8906 -421.7236 c +369.9473 -421.7515 369.9746 -421.6953 369.9746 -421.6387 c +370.0313 -421.6387 370.0586 -421.5547 370.1152 -421.5547 c +370.1719 -421.667 370.2285 -421.5547 370.1152 -421.5547 c +370.1719 -421.3857 370.3691 -421.1606 370.1992 -420.9917 c +370.3125 -420.9351 370.1992 -420.9072 370.1992 -420.9917 c +370.0029 -420.9917 370.0586 -421.1328 369.8906 -420.9917 c +f +0 D +369.8066 -412.606 m +F +1 D +370.0586 -415.1104 m +370.0586 -414.9136 369.918 -414.8574 369.8066 -414.7729 c +369.8066 -414.8853 369.8066 -414.998 369.8066 -415.1104 c +369.8906 -415.1104 369.9746 -415.1104 370.0586 -415.1104 c +f +369.8066 -422.4551 m +369.8623 -422.4277 369.9746 -422.4551 369.9746 -422.3711 c +369.8906 -422.3984 369.8066 -422.3711 369.8066 -422.4551 c +f +0 D +369.8906 -422.2012 m +F +1 D +370.1152 -422.5391 m +370.1992 -422.6797 369.8906 -422.793 370.1152 -422.8496 c +370.1436 -422.793 370.3398 -422.5391 370.1152 -422.5391 c +f +0 D +370.0586 -420.1758 m +F +370.0586 -420.8232 m +F +370.0586 -423.0176 m +F +370.1152 -422.2871 m +F +1 D +370.2842 -421.8076 m +370.5098 -421.8076 370.7061 -421.7798 370.7061 -421.5547 c +370.4814 -421.583 370.2842 -421.583 370.2842 -421.8076 c +370.1719 -421.8643 370.2842 -421.8921 370.2842 -421.8076 c +f +370.2842 -423.5801 m +370.3398 -423.5527 370.4531 -423.5801 370.4531 -423.4961 c +370.3965 -423.5244 370.2842 -423.4961 370.2842 -423.5801 c +f +0 D +370.3691 -412.1836 m +F +1 D +370.3691 -420.5977 m +370.4248 -420.5698 370.5371 -420.5977 370.5371 -420.5132 c +370.4814 -420.5415 370.3691 -420.5132 370.3691 -420.5977 c +f +0 D +370.3691 -421.2451 m +F +370.3691 -421.9766 m +F +370.3691 -422.9336 m +F +1 D +370.4531 -421.4141 m +370.4814 -421.4141 370.5098 -421.4141 370.5371 -421.4141 c +370.5371 -421.6387 370.875 -421.3296 370.5371 -421.4141 c +370.5098 -421.3013 370.4531 -421.3574 370.4531 -421.4141 c +370.3398 -421.4419 370.4531 -421.498 370.4531 -421.4141 c +f +0 D +370.4531 -415.8984 m +F +1 D +370.4531 -420.3442 m +370.5938 -420.3442 370.7061 -420.3726 370.7627 -420.4292 c +370.791 -420.2319 370.791 -420.0347 370.6221 -420.0347 c +370.5938 -420.0913 370.5371 -420.1196 370.4531 -420.1196 c +370.4531 -420.1758 370.4531 -420.2603 370.4531 -420.3442 c +f +0 D +370.5371 -423.3281 m +F +370.6221 -415.7578 m +F +1 D +372.5635 -420.5132 m +372.3955 -420.5132 372.3662 -420.4009 372.2256 -420.4292 c +372.1406 -420.5132 372.0566 -420.5977 371.9736 -420.6826 c +371.833 -420.3726 371.4941 -420.7944 371.0156 -420.6826 c +371.0156 -420.8232 371.1289 -420.8511 371.1006 -420.9917 c +370.9316 -420.8511 370.7061 -421.0762 370.6221 -421.2451 c +370.7344 -421.2451 370.875 -421.2451 371.0156 -421.2451 c +370.9873 -421.1045 371.1006 -421.1045 371.1006 -420.9917 c +371.6631 -420.9351 372.4795 -420.3726 372.958 -421.2451 c +372.6201 -421.2168 372.958 -421.583 372.958 -421.7236 c +373.042 -421.7236 373.127 -421.7236 373.1826 -421.7236 c +373.2393 -421.8359 373.2949 -421.7236 373.1826 -421.7236 c +373.4082 -421.4419 373.4639 -421.9766 373.7744 -421.8921 c +373.8857 -422.1738 373.8857 -421.6953 374.083 -421.8076 c +374.252 -421.9204 374.252 -422.2012 374.6455 -422.1172 c +374.5889 -421.8921 374.4219 -421.7515 374.083 -421.8076 c +374.083 -421.7798 374.083 -421.7515 374.083 -421.7236 c +373.8857 -421.7236 373.8301 -421.5547 373.7744 -421.8076 c +373.6045 -421.7515 373.7451 -421.667 373.7744 -421.5547 c +373.3516 -421.4419 373.2676 -420.9917 373.127 -420.5977 c +372.7607 -420.5698 372.6768 -420.7383 372.5635 -420.5977 c +372.5635 -420.5698 372.5635 -420.5415 372.5635 -420.5132 c +372.6768 -420.5415 372.6768 -420.4292 372.7881 -420.4292 c +372.8447 -420.5415 372.9014 -420.4292 372.7881 -420.4292 c +372.7324 -420.3726 372.7324 -420.2036 372.6201 -420.1758 c +372.7881 -420.0347 372.5361 -420.0068 372.4795 -419.8662 c +372.4512 -420.063 372.4795 -420.1758 372.6201 -420.1758 c +372.6475 -420.3442 372.5361 -420.3726 372.5635 -420.5132 c +f +0 D +370.6221 -423.834 m +F +1 D +370.7061 -414.8574 m +370.8193 -414.8008 370.6787 -414.7729 370.7061 -414.8574 c +370.5654 -414.9136 370.7061 -414.9697 370.7061 -414.8574 c +f +370.9316 -422.2871 m +371.0723 -422.0889 370.6504 -422.0605 370.7061 -422.2012 c +370.7344 -422.2012 370.791 -422.2305 370.7627 -422.2871 c +370.8193 -422.2871 370.875 -422.2871 370.9316 -422.2871 c +f +0 D +370.7627 -414.3789 m +F +1 D +370.8467 -421.8921 m +370.96 -421.8921 370.9316 -422.0332 371.0156 -422.0332 c +371.2129 -421.9482 370.9316 -421.667 370.8467 -421.8921 c +f +0 D +370.8467 -423.75 m +F +370.9316 -415.8984 m +F +1 D +370.9316 -420.4292 m +370.9873 -420.4009 371.1006 -420.4292 371.1006 -420.3442 c +371.0439 -420.3726 370.9316 -420.3442 370.9316 -420.4292 c +f +0 D +370.9316 -422.6797 m +F +370.9316 -423.0176 m +F +371.0156 -415.7578 m +F +1 D +371.1846 -416.2358 m +371.2969 -416.1802 371.1563 -416.1235 371.1846 -416.2358 c +370.9033 -416.377 371.4375 -416.4893 371.1846 -416.2358 c +f +0 D +371.1006 -422.2871 m +F +371.1846 -418.3184 m +F +371.1846 -424.3125 m +F +1 D +371.2695 -415.1104 m +371.3262 -415.0825 371.4102 -415.1104 371.4102 -415.0264 c +371.3535 -415.0542 371.2695 -415.0264 371.2695 -415.1104 c +f +0 D +371.2695 -415.5044 m +F +371.2695 -425.3535 m +F +1 D +371.3262 -416.1519 m +371.4102 -416.1235 371.4941 -416.1519 371.4941 -416.0674 c +371.4375 -416.0952 371.3535 -416.0674 371.3262 -416.1519 c +f +0 D +371.3262 -422.2871 m +F +371.4102 -416.8833 m +F +371.4102 -425.4375 m +F +1 D +371.4941 -415.5044 m +371.6074 -415.4482 371.4941 -415.4199 371.4941 -415.5044 c +371.3818 -415.5605 371.5225 -415.6172 371.4941 -415.5044 c +f +371.4941 -419.7817 m +371.5508 -419.7534 371.6631 -419.7817 371.6631 -419.6973 c +371.6074 -419.7256 371.4941 -419.6973 371.4941 -419.7817 c +f +371.748 -417.0522 m +371.748 -416.9956 371.748 -416.9395 371.748 -416.8833 c +371.6914 -416.8833 371.6348 -416.8833 371.5781 -416.8833 c +371.5781 -416.9395 371.5781 -416.9956 371.5781 -417.0522 c +371.6348 -417.0522 371.6914 -417.0522 371.748 -417.0522 c +f +372.5635 -419.4722 m +372.3105 -419.3877 372.3379 -419.585 372.1406 -419.5566 c +372.085 -419.3599 372.085 -419.0786 371.6631 -419.0498 c +371.6914 -419.3877 372.085 -419.3877 371.833 -419.7817 c +372.1406 -419.6411 372.5361 -419.979 372.5635 -419.4722 c +f +0 D +371.6631 -423.5801 m +F +1 D +371.748 -416.3208 m +372.085 -416.208 372.1143 -416.8271 372.3105 -416.4048 c +372.1143 -416.3208 372.1406 -416.208 371.916 -416.0674 c +371.8887 -416.1802 371.7754 -416.208 371.748 -416.3208 c +371.6348 -416.377 371.748 -416.4048 371.748 -416.3208 c +f +0 D +371.748 -414.041 m +F +371.748 -415.4199 m +F +371.748 -415.8984 m +F +371.833 -416.6304 m +F +371.833 -418.5718 m +F +1 D +371.833 -421.8076 m +371.916 -421.8076 371.9443 -421.9204 371.9736 -421.8076 c +371.9736 -421.7236 371.833 -421.6953 371.833 -421.8076 c +f +0 D +371.833 -423.1875 m +F +1 D +372.6201 -415.7578 m +372.5635 -415.814 372.4229 -415.7856 372.3955 -415.8984 c +372.2549 -415.9268 371.9736 -415.6733 371.916 -415.8984 c +372.0566 -415.8984 372.3105 -416.1519 372.3955 -415.8984 c +372.6475 -415.814 372.4512 -416.1802 372.7041 -416.0674 c +372.7041 -415.9829 372.7041 -415.8984 372.7041 -415.8418 c +372.7881 -415.8418 372.7881 -415.8984 372.873 -415.8984 c +372.873 -415.814 372.873 -415.7012 372.873 -415.5889 c +372.9854 -415.5322 372.873 -415.5044 372.873 -415.5889 c +372.7607 -415.7578 372.4512 -415.4482 372.6201 -415.7578 c +f +372.0566 -417.1084 m +372.0566 -417.0522 372.1406 -417.0239 372.1406 -416.9678 c +372.0566 -416.9678 372.0566 -416.8833 371.9736 -416.8833 c +371.9736 -416.9678 371.916 -416.9678 371.916 -417.0522 c +371.9736 -417.0522 372 -417.1084 372.0566 -417.1084 c +f +0 D +371.916 -424.3965 m +F +371.9736 -412.3525 m +F +1 D +372.0566 -413.9004 m +372 -414.0693 372.3955 -414.0693 372.3105 -413.9004 c +372.2822 -413.8159 372.085 -413.7876 372.0566 -413.9004 c +f +0 D +372.0566 -418.7402 m +F +372.0566 -421.7236 m +F +372.1406 -415.6733 m +F +372.1406 -425.5225 m +F +1 D +372.2256 -415.4199 m +372.3379 -415.3638 372.2256 -415.3354 372.2256 -415.4199 c +372.1143 -415.4766 372.2256 -415.5322 372.2256 -415.4199 c +f +372.6201 -423.4961 m +372.7324 -423.2988 372.6201 -423.3555 372.7041 -423.1016 c +372.5635 -423.1016 372.4512 -423.0742 372.3955 -423.0176 c +372.4512 -423.2715 372.1143 -423.1016 372.2256 -423.4121 c +372.4229 -423.3838 372.5361 -423.4395 372.6201 -423.4961 c +f +0 D +372.2256 -414.3789 m +F +372.2256 -427.5488 m +F +1 D +372.5635 -418.1777 m +372.5635 -418.0933 372.5635 -418.0088 372.5635 -417.9248 c +372.5068 -417.9248 372.4512 -417.9248 372.3955 -417.9248 c +372.3379 -417.9248 372.2822 -417.9526 372.3105 -418.0088 c +372.3955 -418.0371 372.3662 -418.0933 372.3105 -418.1777 c +372.3955 -418.1777 372.4795 -418.1777 372.5635 -418.1777 c +f +0 D +372.3105 -414.7729 m +F +1 D +372.3105 -422.5391 m +372.3662 -422.5117 372.4795 -422.5391 372.4795 -422.4551 c +372.3955 -422.4551 372.3105 -422.4551 372.3105 -422.5391 c +f +372.3955 -413.563 m +372.4229 -413.563 372.4512 -413.563 372.4795 -413.563 c +372.4512 -413.8442 372.6475 -413.9287 372.7881 -414.041 c +372.7041 -414.2378 372.5361 -414.3228 372.4795 -414.5479 c +372.7041 -414.4351 372.7324 -414.604 372.958 -414.4634 c +373.0137 -414.5762 373.042 -414.4634 372.958 -414.4634 c +373.0137 -414.3789 373.042 -414.2666 373.042 -414.126 c +373.127 -414.1538 373.1826 -414.126 373.1826 -414.041 c +373.0986 -414.0132 373.0703 -413.9004 372.958 -413.9004 c +372.9297 -413.647 372.6768 -413.647 372.4795 -413.563 c +372.4512 -413.4785 372.3955 -413.5347 372.3955 -413.563 c +372.2822 -413.6191 372.3955 -413.6753 372.3955 -413.563 c +f +372.4795 -412.8311 m +372.4795 -412.9722 372.3955 -412.9722 372.3955 -413.0845 c +372.6475 -413.0562 372.3955 -413.4785 372.873 -413.4224 c +372.958 -413.0283 372.6201 -413.0562 372.7041 -412.6904 c +372.5635 -412.6626 372.5635 -412.7466 372.5635 -412.8311 c +372.5361 -412.8311 372.5068 -412.8311 372.4795 -412.8311 c +f +372.7041 -415.4199 m +372.6201 -415.4199 372.6475 -415.3354 372.7041 -415.251 c +372.5918 -415.251 372.5068 -415.251 372.3955 -415.251 c +372.3955 -415.3354 372.3955 -415.4199 372.3955 -415.5044 c +372.5068 -415.5044 372.6768 -415.5322 372.7041 -415.4199 c +f +372.4795 -416.1519 m +372.3379 -416.3208 372.5361 -416.3208 372.3955 -416.4893 c +372.6201 -416.6021 372.6201 -416.1235 372.4795 -416.1519 c +f +0 D +372.5635 -412.3525 m +F +372.5635 -412.606 m +F +372.5635 -412.9155 m +372.5635 -412.8872 372.5635 -412.8594 372.5635 -412.8311 c +372.5918 -412.8311 372.6475 -412.9155 372.5635 -412.9155 c +f +1 D +372.5635 -415.1104 m +372.7041 -415.1387 372.7607 -415.2793 372.958 -415.251 c +372.958 -415.2231 372.958 -415.167 372.958 -415.1104 c +373.2109 -415.2793 373.0986 -415.0825 373.1826 -415.0264 c +373.3799 -414.998 373.1543 -415.3916 373.4365 -415.251 c +373.4365 -415.0542 373.2949 -415.0264 373.4365 -414.8574 c +372.958 -414.998 373.0986 -414.5479 372.7041 -414.6318 c +372.6475 -414.8574 372.9854 -414.7168 372.873 -415.0264 c +372.7607 -414.9136 372.5635 -414.9136 372.5635 -415.1104 c +f +0 D +372.7041 -415.8418 m +372.6768 -415.814 372.6201 -415.814 372.6201 -415.7578 c +372.6768 -415.7578 372.7324 -415.7578 372.7041 -415.8418 c +f +372.6201 -418.0088 m +F +1 D +373.1826 -416.5454 m +372.958 -416.5454 373.0137 -416.2358 372.7041 -416.3208 c +372.6475 -416.208 372.6201 -416.3208 372.7041 -416.3208 c +372.8447 -416.4048 372.9297 -416.9395 373.1826 -416.5454 c +f +373.2676 -419.4722 m +373.2676 -419.3599 373.2949 -419.3315 373.3516 -419.3032 c +373.3516 -419.3315 373.3516 -419.3599 373.3516 -419.3877 c +373.6045 -419.4722 373.6611 -419.416 373.7744 -419.2192 c +373.5771 -419.1904 373.4639 -419.2471 373.3516 -419.3032 c +373.3516 -419.2754 373.3516 -419.2471 373.3516 -419.2192 c +373.2393 -419.1904 373.1543 -419.1064 373.042 -419.0498 c +373.0137 -418.9375 373.0703 -418.7402 372.958 -418.7402 c +372.958 -418.8813 372.6768 -418.7969 372.7041 -418.9658 c +372.7881 -419.0498 372.9014 -419.0786 373.042 -419.0498 c +372.9854 -419.3032 373.127 -419.3877 373.2676 -419.4722 c +f +373.042 -418.3184 m +373.0137 -418.2061 372.8447 -418.2622 372.7041 -418.2622 c +372.7041 -418.5996 372.9014 -418.3467 373.042 -418.4873 c +373.042 -418.4312 373.042 -418.375 373.042 -418.3184 c +f +372.7881 -412.522 m +372.9014 -412.4653 372.7881 -412.437 372.7881 -412.522 c +372.6768 -412.5781 372.7881 -412.606 372.7881 -412.522 c +f +0 D +372.958 -414.041 m +372.9014 -414.041 372.8447 -414.041 372.7881 -414.041 c +372.7881 -413.9565 372.8174 -413.8726 372.958 -413.9004 c +372.958 -413.9565 372.958 -414.0132 372.958 -414.041 c +f +372.7881 -418.7402 m +F +1 D +373.127 -419.8662 m +372.873 -419.8379 372.9014 -420.063 372.7881 -420.1758 c +373.042 -420.2319 373.1543 -420.1196 373.127 -419.8662 c +f +0 D +372.958 -415.1104 m +372.9014 -415.1104 372.8447 -415.0825 372.873 -415.0264 c +372.9297 -415.0264 372.958 -415.0264 372.958 -415.1104 c +f +372.873 -417.0522 m +F +372.873 -418.0933 m +F +373.042 -414.126 m +372.9854 -414.126 372.9297 -414.126 372.958 -414.041 c +373.0137 -414.0693 373.042 -414.0693 373.042 -414.126 c +f +372.958 -413 m +F +372.958 -417.9248 m +F +372.958 -422.1172 m +F +1 D +373.3516 -413.3374 m +373.2109 -413.3096 373.1826 -413.4224 373.042 -413.4224 c +372.9854 -413.2817 372.9297 -413.4224 373.042 -413.4224 c +372.9854 -413.7598 373.4365 -413.647 373.3516 -413.3374 c +f +0 D +373.127 -414.5479 m +F +373.127 -421.9766 m +F +373.127 -424.3965 m +F +1 D +373.4365 -417.4458 m +373.4365 -417.3052 373.7178 -417.3896 373.7744 -417.2773 c +373.8301 -416.9678 373.5771 -416.9678 373.4365 -416.8833 c +373.4365 -416.7988 373.4639 -416.7988 373.5205 -416.7988 c +373.3799 -416.5737 373.4922 -416.4331 373.2676 -416.4048 c +373.2949 -416.6021 373.2949 -416.771 373.1826 -416.8833 c +373.2676 -416.8833 373.3516 -416.8833 373.4365 -416.8833 c +373.4922 -417.0806 373.1826 -417.3335 373.4365 -417.4458 c +f +0 D +373.1826 -418.4028 m +F +1 D +373.6045 -412.437 m +373.4082 -412.437 373.3516 -412.2964 373.2676 -412.522 c +373.3799 -412.6338 373.5771 -412.6338 373.6045 -412.437 c +f +373.2676 -415.7578 m +373.2676 -415.8418 373.4082 -415.8418 373.4365 -415.7578 c +373.3516 -415.7578 373.3232 -415.645 373.2676 -415.7578 c +f +373.2676 -420.0347 m +373.3516 -420.0068 373.4365 -420.0347 373.4365 -419.9507 c +373.3799 -419.979 373.2676 -419.9507 373.2676 -420.0347 c +f +0 D +373.2676 -424.2285 m +F +1 D +373.3516 -420.5132 m +373.4082 -420.4854 373.5205 -420.5132 373.5205 -420.4292 c +373.4639 -420.457 373.3516 -420.4292 373.3516 -420.5132 c +f +373.6045 -414.6318 m +373.915 -414.604 373.7451 -415.0542 373.999 -415.1104 c +373.9707 -415.2793 374.0264 -415.3638 374.167 -415.3354 c +374.0557 -415.4482 374.0557 -415.645 374.252 -415.6733 c +374.3076 -415.2793 374.5332 -415.5605 374.8994 -415.5044 c +374.8145 -415.0825 375.0957 -415.5044 375.125 -415.1948 c +374.7861 -415.1387 374.8711 -415.167 374.5625 -415.1104 c +374.4219 -414.7446 374.083 -414.7168 374.3369 -414.2944 c +374.0264 -414.4634 374.1396 -414.126 373.915 -414.2944 c +373.9707 -413.7876 373.7178 -413.5908 373.4365 -413.4224 c +373.2393 -413.9565 373.915 -414.1821 373.6045 -414.6318 c +373.4922 -414.6602 373.6045 -414.7168 373.6045 -414.6318 c +f +0 D +373.4365 -417.8398 m +F +373.4365 -420.2603 m +F +373.4365 -422.1172 m +F +1 D +373.4365 -422.3711 m +373.4922 -422.3418 373.6045 -422.3711 373.6045 -422.2871 c +373.5488 -422.3145 373.4365 -422.2871 373.4365 -422.3711 c +f +373.6045 -420.5977 m +373.6611 -420.626 373.7178 -420.6826 373.8301 -420.6826 c +373.8584 -420.7666 373.9707 -420.7944 373.999 -420.9072 c +373.8584 -420.9351 373.9424 -421.1885 373.8301 -421.2451 c +373.9707 -421.2168 373.9707 -421.3013 374.083 -421.3296 c +374.083 -421.3857 374.083 -421.4141 374.083 -421.4702 c +373.9707 -421.5264 374.083 -421.583 374.083 -421.4702 c +374.1963 -421.583 374.4775 -421.6108 374.4775 -421.4141 c +374.5625 -421.3857 374.5625 -421.3296 374.6455 -421.3296 c +374.6738 -421.2168 374.6182 -421.1885 374.5625 -421.1606 c +374.5625 -421.2451 374.4219 -421.2168 374.3926 -421.3296 c +374.252 -421.1885 374.3076 -421.3296 374.083 -421.3296 c +374.0557 -421.0762 374.252 -421.0762 374.252 -420.8232 c +373.999 -420.9072 374.083 -420.626 373.8301 -420.6826 c +373.7744 -420.5132 374.083 -420.4009 373.8301 -420.3442 c +373.8301 -420.457 373.6895 -420.4292 373.6045 -420.4292 c +373.6045 -420.4854 373.6045 -420.5415 373.6045 -420.5977 c +373.2676 -420.5132 373.5771 -420.8232 373.6045 -420.5977 c +f +0 D +373.5205 -417.6152 m +F +1 D +374.083 -418.2622 m +373.8857 -418.29 373.999 -418.0088 373.8301 -418.0088 c +373.8018 -418.1494 373.6045 -417.9248 373.5205 -418.1777 c +373.7178 -418.2061 373.9424 -418.6563 374.083 -418.2622 c +f +0 D +373.5205 -424.959 m +F +1 D +373.915 -415.5889 m +373.8301 -415.5889 373.7744 -415.5889 373.6895 -415.5889 c +373.5771 -415.6733 373.6611 -415.9546 373.7744 -416.0674 c +373.8857 -415.9829 373.9707 -415.8418 373.915 -415.5889 c +f +373.915 -412.9155 m +373.8301 -412.9155 373.8018 -412.8311 373.6895 -412.8311 c +373.6611 -413.0283 373.6895 -413.1406 373.8301 -413.1689 c +373.8301 -413.0562 373.8857 -413 373.915 -412.9155 c +f +373.6895 -420.1196 m +373.7451 -420.0913 373.8301 -420.1196 373.8301 -420.0347 c +373.7744 -420.0347 373.6895 -420.0347 373.6895 -420.1196 c +f +0 D +373.6895 -420.8232 m +F +373.6895 -426.8164 m +F +1 D +373.7744 -419.8662 m +373.8301 -419.9224 373.9707 -419.979 373.999 -419.8662 c +373.8857 -419.8379 373.999 -419.7817 373.999 -419.6973 c +373.8584 -419.6973 373.8018 -419.7534 373.7744 -419.8662 c +373.6338 -419.9224 373.7744 -419.9507 373.7744 -419.8662 c +f +373.8301 -422.624 m +373.8018 -422.6523 373.7451 -422.5957 373.7744 -422.6797 c +373.8018 -423.0459 374.2236 -422.2305 373.8301 -422.624 c +f +374.167 -419.2192 m +374.1396 -419.1064 373.999 -419.1343 373.999 -419.2192 c +373.9424 -419.2192 373.915 -419.2471 373.915 -419.3032 c +373.8857 -419.3032 373.8584 -419.3032 373.8301 -419.3032 c +373.8301 -419.3599 373.7744 -419.3877 373.7744 -419.4722 c +373.8301 -419.5005 373.8857 -419.5566 373.999 -419.5566 c +374.0264 -419.416 373.915 -419.416 373.915 -419.3032 c +373.999 -419.3032 373.999 -419.2754 373.999 -419.2192 c +374.0557 -419.2192 374.1113 -419.2192 374.167 -419.2192 c +374.083 -419.5005 374.6182 -419.3877 374.5625 -419.2192 c +374.8145 -419.1904 374.4775 -418.8813 374.5625 -419.2192 c +374.3076 -419.2754 374.4219 -419.2754 374.167 -419.2192 c +f +0 D +373.7744 -421.8076 m +373.8018 -421.8076 373.8584 -421.8643 373.7744 -421.8921 c +373.7744 -421.8643 373.7744 -421.8359 373.7744 -421.8076 c +f +373.8301 -412.606 m +F +1 D +373.999 -413.4785 m +373.9424 -413.6753 374.3076 -413.6753 374.252 -413.4785 c +374.2236 -413.4224 374.0264 -413.394 373.999 -413.4785 c +f +0 D +374.252 -415.1104 m +374.1396 -415.167 374.252 -415.1948 374.252 -415.1104 c +374.3643 -415.1104 374.4482 -415.1104 374.5625 -415.1104 c +374.5625 -415.3076 374.2813 -415.2231 374.167 -415.3354 c +374.083 -415.2793 374.1113 -415.1387 373.999 -415.1104 c +373.999 -414.998 374.2236 -414.998 374.252 -415.1104 c +f +373.999 -420.5132 m +F +1 D +374.4775 -416.0674 m +374.3076 -416.0391 374.4775 -415.7012 374.252 -415.7578 c +374.2236 -415.8706 374.1113 -415.8984 374.083 -415.9829 c +374.1963 -415.9829 374.4219 -416.2925 374.4775 -416.0674 c +f +374.3369 -418.6563 m +374.1963 -418.6563 374.1113 -418.7124 374.083 -418.8252 c +374.2236 -418.8252 374.2813 -418.7686 374.3369 -418.6563 c +f +0 D +374.167 -418.3184 m +F +374.252 -415.9829 m +F +374.252 -419.9507 m +F +374.252 -420.1196 m +F +1 D +374.3369 -419.0498 m +374.3926 -419.0498 374.4775 -419.0498 374.4775 -418.9658 c +374.4219 -418.9937 374.3369 -418.9937 374.3369 -419.0498 c +f +0 D +374.3369 -420.9917 m +F +374.3926 -420.3442 m +F +374.4775 -421.4141 m +374.4482 -421.3857 374.3926 -421.3857 374.3926 -421.3296 c +374.4482 -421.3296 374.5049 -421.3296 374.4775 -421.4141 c +f +1 D +374.4775 -418.6563 m +374.6182 -418.5996 374.4775 -418.5718 374.4775 -418.6563 c +374.252 -418.6846 374.5625 -418.9937 374.4775 -418.6563 c +f +0 D +374.4775 -415.6733 m +F +374.4775 -419.6128 m +F +374.4775 -425.916 m +F +374.5625 -415.8418 m +F +374.5625 -421.6387 m +F +1 D +374.5625 -427.2109 m +374.6182 -427.1826 374.7305 -427.2109 374.7305 -427.127 c +374.6738 -427.1543 374.5625 -427.127 374.5625 -427.2109 c +f +0 D +374.6455 -424.7061 m +F +374.6455 -424.875 m +F +374.7305 -412.3525 m +F +374.7305 -413.563 m +F +374.8145 -414.21 m +F +374.8145 -424.6221 m +F +1 D +374.8994 -421.0762 m +375.0117 -421.02 374.8711 -420.9917 374.8994 -421.0762 c +374.7861 -421.1328 374.8994 -421.1606 374.8994 -421.0762 c +f +0 D +374.8994 -413.0845 m +F +1 D +374.8994 -426.957 m +374.9551 -426.957 375.04 -426.957 375.04 -426.9004 c +374.9844 -426.9004 374.8994 -426.9004 374.8994 -426.957 c +f +375.209 -427.4639 m +374.9844 -427.4355 375.04 -427.5762 374.8994 -427.4639 c +374.8994 -427.5488 374.8994 -427.6045 374.8994 -427.6895 c +375.0957 -427.7168 375.1523 -427.5762 375.209 -427.4639 c +f +375.209 -418.8252 m +375.0684 -418.8252 375.0117 -418.8813 374.9844 -418.9658 c +375.125 -418.9937 375.1807 -418.9092 375.209 -418.8252 c +f +0 D +374.9844 -419.3032 m +F +375.04 -420.1758 m +F +1 D +375.209 -412.437 m +375.209 -412.522 375.3496 -412.5498 375.3779 -412.437 c +375.293 -412.437 375.2373 -412.3247 375.209 -412.437 c +f +375.209 -427.2109 m +375.2656 -427.1826 375.3779 -427.2109 375.3779 -427.127 c +375.3213 -427.1543 375.209 -427.127 375.209 -427.2109 c +f +0 D +375.209 -427.3799 m +F +375.293 -426.6484 m +F +375.3779 -423.5801 m +F +*U +*u +387.5293 -415.8418 m +387.416 -415.8418 387.3604 -415.814 387.3047 -415.7578 c +386.9658 -415.73 387.332 -416.0112 387.3887 -416.0952 c +386.7422 -416.1519 385.9248 -416.208 385.0244 -416.0952 c +384.8838 -415.9546 384.6865 -415.5889 384.4619 -415.7578 c +384.3779 -415.5322 384.124 -415.4766 384.1533 -415.1104 c +383.7871 -415.4482 383.7871 -415.7578 383.9834 -416.0952 c +383.3926 -416.0674 382.1543 -416.3208 381.2256 -416.0952 c +381.2256 -416.5176 381.2256 -417.0522 381.2256 -417.5308 c +381.2256 -418.0088 381.3662 -418.5996 381.085 -418.8252 c +381.3662 -419.3315 381.2256 -420.0068 381.2256 -420.5977 c +381.2256 -422.5684 381.2256 -424.5654 381.2256 -426.4229 c +383.5059 -426.4229 386.1221 -426.4229 388.0918 -426.4229 c +388.9082 -426.4229 389.6963 -426.3379 390.3711 -426.4229 c +390.625 -426.4512 390.6533 -426.3379 390.7656 -426.6758 c +390.6533 -426.7041 390.7656 -426.7598 390.7656 -426.6758 c +391.1025 -426.2822 392.5947 -426.4512 393.5234 -426.5078 c +393.3828 -426.5635 393.5234 -426.5918 393.5234 -426.5078 c +394.2266 -426.3105 395.2676 -426.4785 396.084 -426.4229 c +396.084 -427.9424 396.084 -429.4902 396.084 -431.0098 c +389.6396 -431.0098 383.167 -431.0098 376.7236 -431.0098 c +376.7793 -430.4746 376.5264 -429.4902 377.0332 -429.6582 c +377.1172 -429.209 376.667 -429.6582 376.7236 -429.3213 c +376.7236 -423.5801 376.7236 -417.5308 376.7236 -411.5649 c +383.167 -411.5649 389.6396 -411.5649 396.084 -411.5649 c +396.084 -413.2534 396.168 -414.5479 396.084 -416.1802 c +393.0439 -416.1519 389.2461 -416.208 387.6133 -416.0952 c +387.6133 -415.9829 387.501 -415.9829 387.5293 -415.8418 c +387.6416 -415.7856 387.5293 -415.7578 387.5293 -415.8418 c +f +1 D +376.9492 -418.0933 m +376.9492 -418.2061 376.8643 -418.1494 376.8076 -418.0933 c +376.8076 -418.1777 376.8076 -418.2622 376.8076 -418.3467 c +376.9766 -418.4312 377.1738 -418.1494 376.9492 -418.0933 c +f +0 D +376.8076 -418.7402 m +F +376.8076 -418.9937 m +F +1 D +376.8926 -417.6152 m +376.9492 -417.6152 376.9766 -417.6152 377.0332 -417.6152 c +377.0605 -417.4746 376.9766 -417.4746 376.8926 -417.4746 c +376.8359 -417.3335 376.7793 -417.4746 376.8926 -417.4746 c +376.8926 -417.5024 376.8926 -417.5586 376.8926 -417.6152 c +f +0 D +377.0332 -418.5996 m +F +377.1172 -418.2622 m +F +1 D +377.2861 -418.4312 m +377.3711 -418.459 377.3418 -418.5996 377.4561 -418.5996 c +377.4561 -418.5156 377.54 -418.5156 377.54 -418.4312 c +377.7637 -418.4028 377.4561 -418.0933 377.54 -418.4312 c +377.4561 -418.375 377.3145 -418.3184 377.2861 -418.4312 c +f +0 D +377.3711 -418.7402 m +F +1 D +377.54 -424.8184 m +377.5117 -424.6777 377.54 -424.5371 377.3711 -424.5654 c +377.3711 -424.6221 377.3711 -424.6777 377.3711 -424.7344 c +377.4561 -424.7344 377.4561 -424.791 377.54 -424.8184 c +f +0 D +377.4561 -417.6992 m +F +1 D +377.6807 -418.8252 m +377.7373 -418.5718 377.4824 -418.5435 377.4561 -418.7402 c +377.5674 -418.7402 377.623 -418.7969 377.6807 -418.8252 c +f +0 D +377.7637 -418.5996 m +F +377.7637 -421.4141 m +F +377.8486 -418.1777 m +F +377.8486 -421.2451 m +F +377.8486 -421.667 m +F +378.0186 -417.2212 m +F +378.1025 -420.3726 m +F +378.2432 -423.5244 m +F +378.4961 -421.8921 m +F +1 D +379.0596 -428.1953 m +379.0596 -428.083 379.0596 -427.9707 379.0596 -427.8867 c +378.8623 -427.8574 378.7217 -427.9141 378.665 -428.0273 c +378.8057 -428.083 378.8057 -428.2803 379.0596 -428.1953 c +f +379.96 -415.8418 m +379.96 -415.7578 380.0156 -415.7578 380.0156 -415.6733 c +379.9307 -415.7012 379.8467 -415.645 379.79 -415.6172 c +379.79 -415.6733 379.79 -415.7578 379.79 -415.8418 c +379.8467 -415.8418 379.9043 -415.8418 379.96 -415.8418 c +f +0 D +381.873 -415.2793 m +F +1 D +382.2109 -415.6172 m +382.2109 -415.5044 382.3232 -415.5044 382.2949 -415.3638 c +382.2109 -415.3638 382.127 -415.3638 382.042 -415.3638 c +382.042 -415.4482 382.042 -415.5322 382.042 -415.6172 c +382.0977 -415.6172 382.1543 -415.6172 382.2109 -415.6172 c +f +0 D +382.5195 -415.8418 m +F +382.6895 -415.4482 m +F +1 D +382.8584 -415.6172 m +383.1396 -415.5605 383.6465 -415.73 383.5898 -415.3638 c +383.5332 -415.3638 383.4766 -415.3638 383.4209 -415.3638 c +383.5059 -414.998 383.0547 -415.4482 383.4209 -415.3638 c +383.5059 -415.6733 382.6045 -415.4199 382.8584 -415.6172 c +f +0 D +383.167 -414.1538 m +F +383.252 -414.4072 m +F +383.252 -414.5479 m +F +1 D +383.4209 -414.7168 m +383.6738 -414.6885 383.3359 -414.3789 383.4209 -414.7168 c +383.3086 -414.7729 383.4209 -414.8008 383.4209 -414.7168 c +f +0 D +383.6738 -414.6318 m +F +384.7158 -416.1802 m +384.4619 -416.1235 384.4619 -415.8418 384.1533 -415.8418 c +384.1533 -415.73 384.3496 -415.7856 384.4619 -415.7578 c +384.5459 -415.9268 384.9121 -415.9546 384.7158 -416.1802 c +f +384.2939 -416.0952 m +384.2646 -416.208 384.2373 -416.0674 384.1533 -416.0952 c +384.1533 -415.9829 384.2939 -416.0112 384.2939 -416.0952 c +f +384.5459 -415.2793 m +F +384.8838 -415.8418 m +F +385.3623 -415.8418 m +F +386.1504 -415.6733 m +F +1 D +386.4043 -415.0264 m +386.4609 -415.0264 386.5723 -415.0264 386.5723 -414.9697 c +386.5166 -414.9697 386.4043 -414.9697 386.4043 -415.0264 c +f +0 D +386.5723 -415.9268 m +F +386.6572 -415.0264 m +F +386.8828 -429.4063 m +F +388.1768 -415.6172 m +F +1 D +390.5957 -426.5918 m +390.5127 -426.5918 390.4551 -426.5918 390.3711 -426.5918 c +390.3711 -426.6758 390.3711 -426.7324 390.3711 -426.8164 c +390.5684 -426.873 390.5127 -426.6484 390.5957 -426.5918 c +f +0 D +390.9346 -426.7324 m +F +1 D +391.8066 -427.7168 m +391.8633 -427.6895 391.9756 -427.7168 391.9756 -427.6328 c +391.9189 -427.6611 391.8066 -427.6328 391.8066 -427.7168 c +f +393.0166 -427.4639 m +393.0166 -427.2676 392.876 -427.1826 392.792 -427.0703 c +392.707 -427.0977 392.4814 -427.3799 392.707 -427.4639 c +392.7354 -427.2676 392.8477 -427.5762 393.0166 -427.4639 c +f +393.2695 -427.1543 m +393.2695 -427.0137 393.2695 -426.873 393.2695 -426.7324 c +393.6074 -426.8164 393.2695 -426.5078 393.2695 -426.7324 c +393.1582 -426.8447 393.0166 -427.127 393.2695 -427.1543 c +f +393.832 -427.4639 m +393.9453 -427.4082 393.832 -427.3799 393.832 -427.4639 c +393.8047 -427.4639 393.7764 -427.4639 393.748 -427.4639 c +393.832 -427.127 393.5234 -427.4639 393.748 -427.4639 c +393.7764 -427.5488 393.832 -427.5205 393.832 -427.4639 c +f +0 D +394.1426 -427.6328 m +F +395.5215 -415.1104 m +F +*U +*u +407.0537 -416.3208 m +407.0537 -416.4048 406.9688 -416.4048 406.9688 -416.4893 c +405.2529 -416.4614 404.042 -416.4614 402.3545 -416.4893 c +402.1846 -417.2212 402.3262 -418.3184 402.2695 -419.2192 c +404.0146 -419.3877 406.125 -419.3315 407.3633 -419.3877 c +407.6162 -419.3877 407.8975 -419.5288 408.0098 -419.3032 c +408.208 -419.4438 407.9268 -419.585 408.0938 -419.7817 c +408.2637 -419.8101 408.123 -419.5005 408.1787 -419.3877 c +411.3867 -419.1904 414.2012 -419.3599 417.3809 -419.3032 c +417.4648 -419.9224 417.4092 -420.2319 417.3809 -420.9917 c +417.2686 -420.9917 417.2686 -420.8794 417.1279 -420.9072 c +417.1553 -420.8511 417.0986 -420.8511 417.043 -420.8232 c +417.043 -420.9072 417.0723 -420.9072 417.1279 -420.9072 c +417.0986 -421.1045 417.2686 -421.1045 417.2129 -421.3296 c +417.0986 -421.3574 417.2129 -421.4141 417.2129 -421.3296 c +417.5498 -421.583 417.2129 -421.7515 417.3809 -422.1172 c +417.3809 -422.5684 417.4365 -423.3838 417.3809 -423.8906 c +416.7334 -423.8057 416.2549 -424.002 415.6924 -423.834 c +415.6357 -423.6934 415.5801 -423.834 415.6924 -423.834 c +411.4717 -424.0313 406.9131 -423.8057 403.3379 -423.8906 c +402.9453 -423.918 403.4785 -423.5244 403.0859 -423.4961 c +402.6641 -423.665 402.6074 -423.75 402.2139 -423.9746 c +402.6357 -424.3965 401.8193 -425.3252 402.2695 -425.2695 c +402.2695 -425.3535 402.2139 -425.3818 402.2139 -425.4375 c +402.0166 -425.2402 401.9326 -425.4941 401.792 -425.6064 c +401.96 -425.6631 402.0439 -425.7754 402.2695 -425.6064 c +402.3262 -426.2266 402.2139 -426.5635 402.2139 -426.8164 c +402.6641 -427.0977 403.3115 -426.957 403.9014 -426.957 c +405.7861 -426.957 407.6719 -426.957 409.4736 -426.957 c +409.4453 -427.0977 409.333 -427.0977 409.3047 -427.2109 c +409.4453 -427.4082 409.5303 -426.9004 409.7832 -426.957 c +411.4434 -427.127 413.7793 -426.7598 415.4385 -426.957 c +415.5518 -426.9863 415.7207 -426.957 415.6924 -427.127 c +416.002 -426.7891 416.9023 -427.041 417.4648 -426.957 c +417.3809 -427.998 417.4648 -429.377 417.4648 -431.0098 c +415.0459 -431.1221 412.5684 -431.1221 410.5156 -430.9258 c +410.9082 -430.9814 410.458 -430.5313 410.5156 -430.9258 c +406.1816 -431.0664 401.9033 -430.9531 397.3447 -431.0098 c +397.4023 -425.8887 397.2617 -420.5698 397.4287 -415.5889 c +397.5703 -415.6172 397.5137 -415.8418 397.7676 -415.7578 c +397.9922 -415.5605 397.626 -415.251 397.8516 -415.0264 c +397.9082 -415.0825 398.1045 -415.3638 398.0762 -415.0264 c +398.415 -414.8574 398.3857 -414.6885 398.5557 -414.4634 c +398.6113 -414.5195 398.6396 -414.604 398.7246 -414.6318 c +398.752 -414.3789 398.7246 -414.3506 398.5557 -414.4634 c +398.3857 -414.2944 398.667 -414.21 398.6396 -413.9849 c +398.7803 -413.9287 398.6396 -413.8726 398.6396 -413.9849 c +398.3857 -413.8442 398.1045 -413.9287 397.9922 -414.3789 c +398.2734 -414.604 398.0488 -414.041 398.415 -414.2944 c +398.5264 -414.604 398.1611 -414.4634 398.0762 -414.5479 c +397.9355 -414.6318 397.8799 -414.8291 397.7676 -414.9414 c +397.626 -415.0825 397.4023 -414.9414 397.4287 -415.1948 c +397.2041 -414.998 397.5137 -414.7168 397.3447 -414.5479 c +397.5703 -414.5479 397.8799 -414.5762 397.6836 -414.3789 c +398.1895 -414.3228 397.373 -414.041 397.6836 -414.3789 c +397.5703 -414.3789 397.458 -414.3789 397.3447 -414.3789 c +397.3447 -414.1538 397.3447 -413.9565 397.3447 -413.7314 c +397.4854 -413.9287 397.4854 -413.7876 397.6836 -413.9004 c +397.7109 -413.7036 397.543 -413.7036 397.5986 -413.4785 c +397.5986 -413.3096 397.373 -413.5063 397.4287 -413.647 c +397.2617 -413.1968 397.4023 -412.3813 397.3447 -411.79 c +404.0703 -411.79 410.7676 -411.79 417.4648 -411.79 c +417.3809 -413.4502 417.5498 -414.8853 417.3809 -416.4893 c +414.3984 -416.4893 411.415 -416.4893 408.4043 -416.4893 c +408.1504 -416.5454 408.291 -416.208 408.0938 -416.2358 c +408.1504 -416.6021 407.2783 -416.4893 407.0537 -416.3208 c +406.9971 -416.208 406.9404 -416.3208 407.0537 -416.3208 c +f +397.5137 -414.041 m +F +397.5986 -415.3354 m +F +397.5986 -415.3354 m +F +397.6836 -413.647 m +F +397.8516 -414.126 m +F +1 D +398.3301 -424.875 m +398.3301 -424.3965 397.7676 -424.791 398.1611 -424.959 c +398.1895 -424.875 398.2451 -424.8467 398.3301 -424.875 c +f +0 D +398.0762 -415.0264 m +F +1 D +398.3301 -425.5225 m +397.9922 -425.4375 398.3018 -425.7471 398.3301 -425.5225 c +398.3857 -425.5225 398.4424 -425.5225 398.499 -425.5225 c +398.499 -425.6348 398.415 -425.6631 398.415 -425.7471 c +398.667 -425.7754 399.1465 -425.5781 398.8926 -425.3535 c +398.8369 -425.4375 398.6396 -425.3535 398.499 -425.5225 c +398.4707 -425.4102 398.3301 -425.4375 398.3301 -425.5225 c +f +0 D +398.2451 -422.8496 m +F +398.3301 -415.8984 m +F +1 D +399.2031 -413.9004 m +399.2031 -413.6753 399.2031 -413.4502 399.2031 -413.2534 c +398.8652 -413.2534 398.7246 -413.1406 398.499 -413.3374 c +398.499 -413.5347 398.8369 -413.8442 399.2031 -413.9004 c +f +398.7246 -421.4141 m +398.752 -421.2168 398.7246 -421.1045 398.5557 -421.0762 c +398.583 -421.1885 398.5264 -421.2451 398.499 -421.3296 c +398.6113 -421.3296 398.667 -421.3574 398.7246 -421.4141 c +f +0 D +398.499 -421.4702 m +F +1 D +398.499 -425.2695 m +398.5557 -425.2695 398.6396 -425.2695 398.6396 -425.1846 c +398.583 -425.2129 398.499 -425.1846 398.499 -425.2695 c +f +398.9775 -424.4814 m +398.6963 -424.4814 398.583 -424.2842 398.5557 -424.6221 c +398.7803 -424.6504 398.8926 -424.5938 398.9775 -424.4814 c +f +0 D +398.6396 -412.3525 m +F +398.8076 -428.0273 m +F +398.8926 -420.8232 m +F +398.8926 -423.4961 m +F +1 D +398.9775 -414.8574 m +399.0332 -414.8574 399.1182 -414.8574 399.1465 -414.7729 c +399.0625 -414.8008 398.9775 -414.7729 398.9775 -414.8574 c +f +398.9775 -425.0439 m +399.1182 -425.0996 398.9775 -425.1846 398.9775 -425.2695 c +399.1182 -425.2969 399.1465 -425.1846 399.2871 -425.1846 c +399.3145 -425.0723 399.2295 -425.0439 399.2031 -424.959 c +399.54 -425.0156 399.5957 -424.6777 399.9336 -424.6221 c +400.3838 -424.9033 400.4971 -424.5371 v +400.5527 -424.791 400.666 -424.4814 400.834 -424.5371 c +400.7227 -424.3125 400.9189 -424.2285 401.0039 -423.9746 c +401.0879 -424.0586 401.1445 -424.1992 401.2285 -424.3125 c +400.8066 -424.2285 401.1445 -424.5371 401.2285 -424.3125 c +401.6221 -424.2842 401.1719 -424.0313 401.1445 -423.8906 c +401.5938 -424.002 401.3125 -423.4395 401.1445 -423.4121 c +401.1152 -423.5527 401.2285 -423.5527 401.2285 -423.665 c +400.7783 -423.665 400.4971 -424.5098 400.1025 -424.0586 c +400.1875 -424.7061 399.0059 -424.3125 399.2031 -424.959 c +399.0889 -424.9316 398.9775 -424.9316 398.9775 -425.0439 c +f +399.1465 -425.832 m +399.1465 -425.8594 399.1465 -425.8887 399.1465 -425.916 c +399.0059 -425.9727 399.1465 -426.0293 399.1465 -425.916 c +399.2031 -425.9443 399.2031 -425.8887 399.2031 -425.832 c +399.2871 -425.9727 399.3994 -426.3672 399.54 -426 c +399.0332 -425.9727 399.9902 -425.2695 399.7656 -425.7471 c +399.9336 -425.7471 400.2432 -425.4941 400.0186 -425.3535 c +399.9619 -425.5508 399.8496 -425.0996 399.625 -425.1846 c +399.625 -425.3252 399.6523 -425.4941 399.54 -425.5225 c +399.5117 -425.1563 399.0625 -425.5225 399.1465 -425.7471 c +399.0332 -425.7754 399.0889 -425.832 399.1465 -425.832 c +f +399.1465 -415.3354 m +399.2588 -415.3076 399.1182 -415.251 399.1465 -415.3354 c +399.0059 -415.3916 399.1465 -415.4482 399.1465 -415.3354 c +f +399.4551 -417.1929 m +399.3438 -417.1646 399.3145 -417.0806 399.1465 -417.1084 c +399.0625 -417.3896 399.2588 -417.3618 399.3711 -417.4458 c +399.3711 -417.3335 399.4277 -417.2773 399.4551 -417.1929 c +f +0 D +399.1465 -425.7471 m +399.1738 -425.7754 399.2295 -425.7754 399.2031 -425.832 c +399.1738 -425.832 399.1738 -425.832 399.1465 -425.832 c +399.1465 -425.8037 399.1465 -425.7754 399.1465 -425.7471 c +f +1 D +399.3711 -424.3125 m +399.3711 -424.2559 399.3711 -424.1992 399.3711 -424.1426 c +399.3145 -424.1426 399.2588 -424.1426 399.2031 -424.1426 c +399.2031 -424.1992 399.2031 -424.2559 399.2031 -424.3125 c +399.2588 -424.3125 399.3145 -424.3125 399.3711 -424.3125 c +f +0 D +399.2031 -430.1094 m +F +1 D +399.54 -414.8574 m +399.3994 -414.8574 399.3438 -414.9136 399.2871 -415.0264 c +399.4277 -415.0264 399.5117 -414.9697 399.54 -414.8574 c +f +399.3711 -426.3105 m +399.3145 -426.1973 399.2871 -426.3379 399.3711 -426.3105 c +399.4277 -426.4512 399.4844 -426.3105 399.3711 -426.3105 c +f +0 D +399.3711 -414.126 m +F +399.3711 -414.6885 m +F +399.3711 -423.5801 m +F +1 D +399.54 -415.3354 m +399.54 -415.251 399.6807 -415.2793 399.709 -415.1948 c +399.5957 -415.167 399.5684 -415.0825 399.4551 -415.1948 c +399.4844 -415.251 399.4551 -415.3354 399.54 -415.3354 c +f +0 D +399.4551 -421.7236 m +F +399.54 -412.7749 m +F +399.54 -416.5454 m +F +399.54 -416.7144 m +F +1 D +399.625 -414.6318 m +399.6807 -414.604 399.7656 -414.604 399.7656 -414.5479 c +399.709 -414.5479 399.625 -414.5479 399.625 -414.6318 c +f +399.7656 -415.0264 m +399.8213 -415.1387 399.877 -415.0264 399.7656 -415.0264 c +399.793 -414.9136 399.793 -414.8008 399.709 -414.7729 c +399.6523 -414.6602 399.5957 -414.8008 399.709 -414.7729 c +399.6807 -414.8853 399.6807 -414.998 399.7656 -415.0264 c +f +0 D +399.709 -413.563 m +F +399.709 -414.21 m +F +1 D +400.1025 -415.4199 m +400.1592 -415.5605 399.9902 -415.8984 400.1875 -415.8984 c +400.1309 -416.0674 399.9336 -416.0674 400.1025 -416.2358 c +399.9063 -416.2358 399.8213 -416.377 399.709 -416.4893 c +399.8496 -416.4893 399.7656 -416.7427 399.9336 -416.7144 c +399.9336 -416.6304 400.0469 -416.6582 400.1025 -416.6304 c +400.1025 -416.4893 400.1025 -416.377 400.1025 -416.2358 c +400.3838 -416.2358 400.4971 -415.6733 400.1875 -415.8984 c +400.2158 -415.73 400.3281 -415.5889 400.1875 -415.4199 c +400.2998 -415.3638 400.1875 -415.3354 400.1875 -415.4199 c +400.1592 -415.4199 400.1309 -415.4199 400.1025 -415.4199 c +f +399.8496 -415.4199 m +399.9902 -415.3638 399.8496 -415.3354 399.8496 -415.4199 c +399.7363 -415.4766 399.877 -415.5322 399.8496 -415.4199 c +f +399.8496 -428.168 m +399.793 -428.4766 400.2432 -428.4766 400.1875 -428.168 c +400.0742 -428.168 399.9619 -428.168 399.8496 -428.168 c +f +0 D +399.8496 -419.0498 m +F +1 D +400.1875 -414.7729 m +400.0186 -414.8008 400.0186 -414.6602 399.9336 -414.6318 c +399.9902 -414.7729 399.8496 -415.0825 400.0186 -415.1104 c +400.1309 -414.9136 399.9902 -414.9136 400.1875 -414.7729 c +f +0 D +399.9336 -415.7578 m +F +400.0186 -425.1846 m +F +400.0186 -425.7471 m +F +400.0186 -428.8984 m +F +1 D +400.1875 -415.1948 m +400.4404 -415.2793 400.666 -415.2793 400.834 -415.1104 c +400.4121 -415.2231 400.75 -414.9414 y +400.6094 -414.8008 400.3564 -414.9414 400.2715 -414.6318 c +400.2158 -414.8853 400.3838 -414.9414 400.4121 -415.1104 c +400.2998 -415.1104 400.1875 -415.0825 400.1875 -415.1948 c +399.8496 -415.1104 400.1592 -415.4199 400.1875 -415.1948 c +f +400.3564 -412.437 m +400.1309 -412.3525 399.9902 -412.7188 400.1875 -412.7749 c +400.1875 -412.606 400.4121 -412.6626 400.3564 -412.437 c +f +0 D +400.1025 -413 m +F +400.1025 -413.9004 m +F +400.1025 -423.5801 m +F +1 D +400.4971 -425.6064 m +400.4971 -425.6348 400.4971 -425.6631 400.4971 -425.6914 c +401.0596 -425.6064 400.3838 -425.0723 400.9189 -425.0439 c +400.7783 -424.9033 400.4404 -425.0439 400.4971 -425.3535 c +400.2998 -425.2695 400.0469 -425.5225 400.2715 -425.6064 c +400.2432 -425.4941 400.4971 -425.3252 400.4971 -425.5225 c +400.4121 -425.5225 400.4688 -425.6064 400.4971 -425.6064 c +f +0 D +400.2715 -414.4634 m +F +400.2715 -425.1846 m +F +400.2715 -425.916 m +F +1 D +400.75 -417.0522 m +400.6934 -417.0522 400.6377 -417.0522 400.5811 -417.0522 c +400.5254 -417.249 399.9902 -417.6152 400.4971 -417.6992 c +400.5254 -417.3618 400.5811 -417.3335 400.75 -417.0522 c +f +0 D +400.3564 -413.9849 m +F +400.3564 -415.5889 m +F +400.3564 -426.957 m +F +400.4121 -424.3965 m +F +1 D +400.4971 -414.6318 m +400.4688 -414.4912 400.4121 -414.6318 400.4971 -414.6318 c +400.4404 -414.9414 400.75 -414.6318 400.4971 -414.6318 c +f +0 D +400.4971 -425.5225 m +400.5254 -425.5225 400.5527 -425.5225 400.5811 -425.5225 c +400.5811 -425.5781 400.5811 -425.6064 400.4971 -425.6064 c +400.4971 -425.5781 400.4971 -425.5508 400.4971 -425.5225 c +f +400.4971 -426.1699 m +F +400.5811 -413.7314 m +F +400.666 -425.5225 m +400.6377 -425.5225 400.6094 -425.5225 400.5811 -425.5225 c +400.5811 -425.4658 400.666 -425.4375 400.666 -425.5225 c +f +400.666 -426.6484 m +F +400.666 -428.6738 m +F +1 D +400.75 -426.957 m +400.8633 -426.9297 400.75 -426.873 400.75 -426.957 c +400.6377 -427.0137 400.75 -427.0703 400.75 -426.957 c +f +400.75 -415.6733 m +400.9473 -415.7856 400.9746 -415.3916 400.834 -415.4199 c +400.834 -415.4766 400.8066 -415.5322 400.75 -415.5044 c +400.75 -415.5605 400.75 -415.6172 400.75 -415.6733 c +f +401.1445 -416.0674 m +401.1719 -415.9268 401.0596 -415.8984 401.0596 -415.7578 c +400.9189 -415.7578 400.8066 -415.814 400.75 -415.8984 c +400.8633 -415.9829 401.0313 -415.9829 401.1445 -416.0674 c +f +0 D +400.75 -416.8833 m +F +400.834 -425.2695 m +F +1 D +400.9189 -414.3789 m +401.0313 -414.3228 400.8906 -414.2666 400.9189 -414.3789 c +400.7783 -414.4351 400.9189 -414.4634 400.9189 -414.3789 c +f +401.1445 -418.6563 m +401.1445 -418.5156 401.0879 -418.459 401.0039 -418.4028 c +401.0039 -418.4873 400.9189 -418.5156 400.9189 -418.5718 c +401.0039 -418.5718 401.0313 -418.6846 401.1445 -418.6563 c +f +0 D +400.9189 -424.791 m +F +1 D +401.0039 -416.1519 m +400.9189 -416.3486 400.8633 -416.5176 401.0596 -416.6304 c +401.1152 -416.4614 401.2559 -416.208 401.0039 -416.1519 c +f +401.0039 -427.2949 m +400.9473 -427.1826 400.8906 -427.2949 401.0039 -427.2949 c +401.0313 -427.4082 401.0879 -427.2949 401.0039 -427.2949 c +f +401.3965 -415.1104 m +401.3965 -414.8574 401.5664 -414.7446 401.3965 -414.5479 c +401.4531 -414.9697 401.0596 -414.604 401.0039 -414.7729 c +401.1445 -414.8574 401.1152 -415.1387 401.3965 -415.1104 c +f +0 D +401.0039 -427.8574 m +F +1 D +401.0596 -426.2539 m +401.2002 -426.1973 401.0596 -426.1406 401.0596 -426.2539 c +400.9473 -426.2822 401.0879 -426.3379 401.0596 -426.2539 c +f +401.2285 -425.6914 m +401.1719 -425.7188 401.0879 -425.7471 401.0596 -425.832 c +401.1719 -425.832 401.3125 -425.832 401.3125 -425.916 c +401.3965 -426.1133 401.0596 -426.3105 401.3125 -426.3945 c +401.3408 -426.3379 401.3965 -426.2539 401.4814 -426.2539 c +401.5107 -426.3672 401.5664 -426.2266 401.4814 -426.2539 c +401.4814 -426.2266 401.4814 -426.1973 401.4814 -426.1699 c +401.5938 -426.1133 401.4531 -426.0566 401.4814 -426.1699 c +401.2852 -426.1406 401.4814 -425.8594 401.5664 -425.832 c +401.5664 -425.8594 401.5664 -425.8887 401.5664 -425.916 c +401.6514 -425.9443 401.6221 -426.0859 401.707 -426.0859 c +401.8193 -425.9727 401.7344 -425.9443 401.707 -425.832 c +401.8477 -425.8037 401.707 -425.7471 401.707 -425.832 c +401.6514 -425.832 401.6221 -425.832 401.5664 -425.832 c +401.6514 -425.7188 401.6514 -425.6348 401.4814 -425.6064 c +401.5938 -425.8037 401.2002 -425.832 401.2285 -425.6914 c +401.4258 -425.6914 401.3701 -425.5781 401.2285 -425.6064 c +401.2285 -425.5781 401.2285 -425.5508 401.2285 -425.5225 c +401.3408 -425.4658 401.2285 -425.4102 401.2285 -425.5225 c +401.0879 -425.2969 400.9473 -425.6348 401.2285 -425.6064 c +401.2285 -425.6348 401.2285 -425.6631 401.2285 -425.6914 c +f +0 D +401.0596 -426.6484 m +F +401.1445 -414.3789 m +F +401.1445 -414.5479 m +F +401.1445 -417.8398 m +F +401.2285 -415.3354 m +F +1 D +401.3965 -415.8984 m +401.3701 -415.8984 401.3408 -415.8984 401.3125 -415.8984 c +401.1445 -416.0391 401.3125 -416.3486 401.4814 -416.1519 c +401.4814 -416.208 401.4814 -416.2642 401.4814 -416.3208 c +401.4814 -416.4048 401.4814 -416.4893 401.4814 -416.5454 c +401.7344 -416.4614 401.6777 -416.686 401.792 -416.7144 c +401.7344 -416.1802 401.8193 -416.1519 401.875 -415.6733 c +401.9883 -415.5605 402.2695 -415.645 402.2695 -415.4199 c +401.9326 -415.251 402.5791 -414.8008 402.6074 -414.4634 c +402.1846 -414.4072 402.1572 -414.7168 402.1289 -415.0264 c +401.6777 -415.0825 401.5938 -415.4766 401.4814 -415.8418 c +401.3965 -415.814 401.3965 -415.8706 401.3965 -415.8984 c +f +401.3965 -425.0996 m +401.5107 -425.0723 401.3965 -425.0156 401.3965 -425.0996 c +401.3701 -425.0996 401.3408 -425.0996 401.3125 -425.0996 c +401.2559 -424.9883 401.2285 -425.1289 401.3125 -425.0996 c +401.3408 -425.2129 401.3965 -425.1563 401.3965 -425.0996 c +f +0 D +401.3125 -416.4048 m +F +1 D +401.707 -424.791 m +401.6514 -424.7344 401.4531 -424.3691 401.3125 -424.6221 c +401.3965 -424.6504 401.3701 -424.7061 401.3125 -424.791 c +401.4531 -424.8184 401.5938 -424.9316 401.707 -424.791 c +f +0 D +401.3125 -426.957 m +F +401.3125 -428.0273 m +F +1 D +401.3965 -428.3359 m +401.6514 -428.3086 401.2002 -428.5615 401.4814 -428.5898 c +401.5938 -428.5898 401.9326 -428.9277 402.0439 -429.0684 c +402.2979 -428.4766 402.1289 -428.3086 401.792 -427.8574 c +401.792 -427.9141 401.7344 -427.9424 401.6221 -427.9424 c +401.7344 -428.252 401.4814 -428.2236 401.3965 -428.3359 c +f +0 D +401.4814 -416.1519 m +401.5107 -416.0112 401.3965 -416.0112 401.3965 -415.8984 c +401.4531 -415.8984 401.4814 -415.8984 401.4814 -415.8418 c +401.7344 -415.814 401.792 -416.208 401.4814 -416.1519 c +f +401.4814 -413.563 m +F +1 D +401.875 -414.21 m +401.8477 -414.21 401.8193 -414.21 401.792 -414.21 c +401.7627 -414.4912 401.5107 -414.0132 401.4814 -414.2944 c +401.5664 -414.3228 401.5371 -414.4351 401.5664 -414.5479 c +401.7344 -414.5195 401.875 -414.5479 401.96 -414.6318 c +401.96 -414.5479 401.96 -414.4634 401.96 -414.3789 c +402.1572 -414.2944 402.1006 -414.0972 402.0439 -413.9004 c +402.1572 -413.8442 402.0439 -413.7876 402.0439 -413.9004 c +401.9883 -413.9004 401.9326 -413.9004 401.875 -413.9004 c +401.6514 -413.6753 401.9883 -413.8159 402.0439 -413.647 c +401.9326 -413.647 401.8193 -413.647 401.707 -413.647 c +401.7344 -413.7876 401.6514 -413.7876 401.6221 -413.9004 c +401.707 -413.9004 401.792 -413.9004 401.875 -413.9004 c +401.875 -414.126 401.7344 -414.0693 401.875 -414.21 c +f +0 D +401.4814 -427.2109 m +F +1 D +401.6221 -426.6484 m +401.7344 -426.4229 401.9033 -426.2539 402.1289 -426.1699 c +401.7627 -426.0859 401.4258 -426.4229 401.6221 -426.6484 c +401.6777 -426.7598 401.7344 -426.6484 401.6221 -426.6484 c +f +401.6221 -424.3965 m +401.6514 -424.2559 401.8193 -424.3398 401.875 -424.3965 c +401.96 -424.1152 401.7627 -424.1152 401.5664 -424.1426 c +401.5664 -424.1992 401.5664 -424.2559 401.5664 -424.3125 c +401.5664 -424.3691 401.5664 -424.3965 401.6221 -424.3965 c +f +0 D +401.6221 -414.8574 m +F +1 D +401.792 -427.3799 m +401.792 -427.4639 401.6514 -427.5488 401.792 -427.6045 c +401.8193 -427.5205 401.9326 -427.4355 401.792 -427.3799 c +f +0 D +401.96 -414.3789 m +401.9033 -414.3506 401.875 -414.3228 401.875 -414.21 c +401.9326 -414.2378 401.96 -414.2944 401.96 -414.3789 c +f +401.875 -426 m +F +401.875 -426.5635 m +F +401.96 -413.563 m +F +1 D +401.96 -418.7402 m +402.0166 -418.7124 402.1289 -418.7402 402.1289 -418.6563 c +402.0439 -418.6846 401.96 -418.6563 401.96 -418.7402 c +f +0 D +402.0439 -426.0859 m +F +402.1289 -413.7314 m +F +402.2139 -425.4375 m +F +1 D +402.7764 -413.4785 m +402.4668 -413.3096 402.3262 -413.5908 402.2695 -413.9004 c +402.5508 -413.8442 402.6074 -413.6191 402.7764 -413.4785 c +f +402.5234 -414.3789 m +402.5234 -414.3228 402.5234 -414.2666 402.5234 -414.21 c +402.4385 -414.21 402.3545 -414.21 402.2695 -414.21 c +402.2695 -414.2666 402.2695 -414.3228 402.2695 -414.3789 c +402.3545 -414.3789 402.4385 -414.3789 402.5234 -414.3789 c +f +0 D +402.3545 -414.041 m +F +1 D +402.4385 -422.8496 m +402.6914 -422.8496 402.3545 -422.5117 402.4385 -422.8496 c +402.3262 -422.9053 402.4385 -422.9609 402.4385 -422.8496 c +f +0 D +402.4385 -415.8984 m +F +1 D +402.5234 -428.4209 m +402.4102 -428.4766 402.5234 -428.5332 402.5234 -428.4209 c +402.6641 -428.4492 402.6641 -428.3359 402.7764 -428.3359 c +402.748 -428.4209 402.8047 -428.4209 402.832 -428.4209 c +402.8604 -428.5332 403.001 -428.5049 403.001 -428.4209 c +403.1143 -428.3643 403.001 -428.3359 403.001 -428.4209 c +402.9453 -428.4209 402.8887 -428.4209 402.832 -428.4209 c +402.8604 -428.3643 402.8047 -428.3359 402.7764 -428.3359 c +402.8604 -427.8301 403.3115 -428.1387 403.4785 -427.7734 c +404.0703 -427.8867 403.5361 -427.4355 403.4785 -427.7734 c +403.0859 -427.7168 402.6074 -427.8301 402.5234 -428.4209 c +f +402.7764 -415.0264 m +402.748 -414.9136 402.748 -414.8291 402.6074 -414.8574 c +402.6074 -414.9697 402.5791 -415.0825 402.6914 -415.1104 c +402.6914 -415.0542 402.6914 -414.998 402.7764 -415.0264 c +f +402.6914 -413.8159 m +402.8047 -413.7598 402.6641 -413.7036 402.6914 -413.8159 c +402.5791 -413.8726 402.6914 -413.9004 402.6914 -413.8159 c +f +402.832 -420.8232 m +402.832 -420.5132 402.4951 -420.8511 402.832 -420.8232 c +402.8887 -420.9639 402.9453 -420.8232 402.832 -420.8232 c +f +0 D +402.7764 -413.4224 m +F +1 D +402.832 -414.5479 m +402.7197 -414.5762 402.8604 -414.6318 402.832 -414.5479 c +402.917 -414.5479 402.917 -414.5195 402.917 -414.4634 c +403.0576 -414.4072 402.917 -414.3506 402.917 -414.4634 c +402.8604 -414.4351 402.8604 -414.4912 402.832 -414.5479 c +f +0 D +402.832 -415.5044 m +F +402.832 -423.8906 m +F +402.917 -413.2534 m +F +1 D +403.3379 -429.377 m +403.1982 -429.4063 402.917 -429.3213 403.001 -429.5469 c +403.1982 -429.5742 403.3115 -429.5469 403.3379 -429.377 c +f +403.3379 -422.2012 m +403.1143 -422.1738 403.0293 -422.0605 403.001 -422.3711 c +403.1709 -422.3711 403.2822 -422.3145 403.3379 -422.2012 c +f +403.0859 -414.041 m +403.2822 -414.1821 403.3379 -413.7876 403.1709 -413.8159 c +403.1709 -413.8726 403.1709 -413.9004 403.0859 -413.9004 c +403.0859 -413.9565 403.0859 -414.0132 403.0859 -414.041 c +f +0 D +403.0859 -427.127 m +F +1 D +403.0859 -429.2363 m +403.1709 -429.209 403.2266 -429.3496 403.2549 -429.2363 c +403.2549 -429.1523 403.1143 -429.125 403.0859 -429.2363 c +f +403.1709 -414.6885 m +403.2266 -414.6885 403.3379 -414.6885 403.3379 -414.6318 c +403.2549 -414.6318 403.1709 -414.6318 403.1709 -414.6885 c +f +0 D +403.3379 -420.3442 m +F +403.4785 -427.2949 m +F +403.4785 -429.5469 m +F +1 D +403.5635 -420.2603 m +403.6768 -420.2319 403.5635 -420.1758 403.5635 -420.2603 c +403.4521 -420.3164 403.5928 -420.3726 403.5635 -420.2603 c +f +0 D +403.5635 -414.2944 m +F +1 D +403.5635 -420.5977 m +403.6484 -420.5698 403.7334 -420.5977 403.7334 -420.5132 c +403.6768 -420.5415 403.5635 -420.5132 403.5635 -420.5977 c +f +0 D +403.6484 -429.9688 m +F +403.8184 -415.3354 m +F +403.8184 -430.0254 m +F +403.9014 -421.8076 m +F +1 D +404.127 -416.2358 m +404.2109 -415.8984 403.9014 -416.208 404.127 -416.2358 c +404.1826 -416.3486 404.2402 -416.2358 404.127 -416.2358 c +f +0 D +404.0703 -415.4199 m +F +404.0703 -415.8984 m +F +1 D +404.5488 -427.4639 m +404.3809 -427.4639 404.3809 -427.3516 404.2959 -427.2949 c +404.2676 -427.4082 404.127 -427.3799 404.0703 -427.4639 c +404.0996 -427.9141 404.4365 -427.7451 404.5488 -427.4639 c +f +404.3809 -421.0762 m +404.2109 -421.2168 404.042 -421.6108 404.2959 -421.7236 c +404.3809 -421.667 404.3516 -421.498 404.4648 -421.4702 c +404.5215 -421.6108 404.5488 -421.4702 404.4648 -421.4702 c +404.4648 -421.3574 404.4648 -421.2168 404.4648 -421.0762 c +404.5771 -421.02 404.4648 -420.9917 404.4648 -421.0762 c +404.4365 -421.0762 404.4082 -421.0762 404.3809 -421.0762 c +f +0 D +404.2109 -420.0347 m +F +404.2959 -420.3442 m +F +404.3809 -420.1196 m +F +1 D +404.5488 -413.8159 m +404.6621 -413.7598 404.5215 -413.7036 404.5488 -413.8159 c +404.4365 -413.8726 404.5488 -413.9004 404.5488 -413.8159 c +f +0 D +404.5488 -419.9507 m +F +404.5488 -422.2871 m +F +1 D +404.6895 -422.624 m +404.6895 -422.4834 404.7178 -422.3418 404.5488 -422.3711 c +404.5488 -422.4277 404.5488 -422.4834 404.5488 -422.5391 c +404.6328 -422.5391 404.6328 -422.5957 404.6895 -422.624 c +f +0 D +404.5488 -427.7734 m +F +1 D +404.5488 -429.9688 m +404.6055 -429.9395 404.6895 -429.9395 404.6895 -429.8848 c +404.6328 -429.8848 404.5488 -429.8848 404.5488 -429.9688 c +f +404.7744 -420.9072 m +404.6621 -420.9639 404.8018 -421.02 404.7744 -420.9072 c +404.8867 -420.9072 404.8301 -420.8232 404.7744 -420.8232 c +404.7744 -420.5977 404.4365 -420.9072 404.7744 -420.8232 c +404.7744 -420.8511 404.7744 -420.8794 404.7744 -420.9072 c +f +0 D +404.6328 -414.21 m +F +404.6328 -416.0674 m +F +1 D +405.3369 -421.5547 m +405.083 -421.4419 404.6621 -421.3013 404.6328 -421.7236 c +404.915 -421.5547 405.1123 -421.667 405.3369 -421.5547 c +f +404.6895 -420.0347 m +404.8584 -420.0068 405.1123 -420.1196 405.0273 -419.8662 c +405.3369 -419.8662 405.083 -419.3315 404.9424 -419.6128 c +405.0273 -419.6411 404.999 -419.7817 405.0273 -419.8662 c +404.8867 -419.8662 404.7461 -419.9224 404.6895 -420.0347 c +f +0 D +404.6895 -422.9336 m +F +404.7744 -416.2358 m +F +1 D +404.8584 -413.9849 m +404.8584 -414.041 404.999 -414.0693 405.0273 -413.9849 c +404.9424 -413.9849 404.8867 -413.8442 404.8584 -413.9849 c +f +404.9424 -423.2422 m +404.9424 -423.3281 405.083 -423.3555 405.1123 -423.2422 c +405.0273 -423.2715 404.9717 -423.1309 404.9424 -423.2422 c +f +0 D +405.0273 -419.4722 m +F +1 D +405.0273 -420.1758 m +405.083 -420.1758 405.1963 -420.1758 405.1963 -420.1196 c +405.1123 -420.1196 405.0273 -420.1196 405.0273 -420.1758 c +f +0 D +405.1123 -413.8159 m +F +405.1123 -420.6826 m +F +405.1963 -419.5566 m +F +405.1963 -420.0347 m +F +405.2803 -416.3208 m +F +1 D +405.2803 -420.5132 m +405.3369 -420.4854 405.4219 -420.5132 405.4219 -420.4292 c +405.3643 -420.457 405.2803 -420.4292 405.2803 -420.5132 c +f +0 D +405.2803 -422.7646 m +F +1 D +405.3369 -419.6973 m +405.3086 -420.0913 405.7305 -419.9224 405.8438 -419.7817 c +405.8711 -419.8379 405.9277 -419.9224 405.9004 -420.0347 c +405.9561 -420.0347 406.0117 -420.0347 406.0684 -420.0347 c +406.0967 -419.9507 406.1523 -419.9507 406.1523 -419.8662 c +406.0967 -419.8101 405.9844 -419.7817 405.8438 -419.7817 c +405.7861 -419.7256 405.7598 -419.6411 405.6748 -419.6128 c +405.6191 -419.5005 405.5625 -419.6411 405.6748 -419.6128 c +405.7031 -419.9507 405.5625 -419.6128 405.3369 -419.6973 c +f +405.4219 -422.0332 m +405.5049 -422.0889 405.6455 -422.1738 405.6748 -422.0332 c +405.6191 -422.0049 405.5342 -421.9482 405.4219 -421.9766 c +405.3936 -421.8359 405.3369 -421.9766 405.4219 -421.9766 c +405.4219 -422.0049 405.4219 -422.0049 405.4219 -422.0332 c +f +0 D +405.4219 -413.647 m +F +1 D +406.4063 -420.2603 m +406.209 -420.1758 405.9277 -420.1475 405.6748 -420.1196 c +405.6191 -420.5698 405.5342 -420.5977 405.4219 -420.9072 c +405.8711 -420.9351 406.1523 -420.7666 406.4063 -420.2603 c +f +405.5898 -421.8076 m +405.5898 -421.8359 405.5898 -421.8643 405.5898 -421.8921 c +405.8154 -421.8643 405.6455 -422.2012 405.9004 -422.1172 c +405.9844 -421.8921 405.7861 -421.8921 405.8438 -421.6387 c +405.6455 -421.6108 405.7305 -421.8076 405.5898 -421.8076 c +405.6191 -421.7236 405.5625 -421.7236 405.5049 -421.7236 c +405.4492 -421.6108 405.4219 -421.7236 405.5049 -421.7236 c +405.5049 -421.7798 405.5342 -421.8076 405.5898 -421.8076 c +f +0 D +405.5049 -413.9849 m +F +405.5049 -416.1519 m +F +405.5049 -420.1196 m +F +1 D +405.5898 -422.3711 m +405.5898 -422.4551 405.7305 -422.4834 405.7598 -422.3711 c +405.6748 -422.3711 405.6191 -422.2578 405.5898 -422.3711 c +f +0 D +405.5898 -427.4639 m +F +405.6748 -412.437 m +F +405.6748 -427.7734 m +F +1 D +405.7598 -423.4961 m +405.7031 -423.3838 405.6455 -423.4961 405.7598 -423.4961 c +405.8154 -423.6094 405.8438 -423.4961 405.7598 -423.4961 c +f +0 D +405.7598 -416.0674 m +F +405.9004 -427.2949 m +F +406.1523 -419.6128 m +F +1 D +406.4063 -421.5547 m +406.4336 -421.667 406.4902 -421.5547 406.4063 -421.5547 c +406.4063 -421.498 406.4063 -421.4419 406.4063 -421.4141 c +406.6035 -421.4419 406.5752 -421.2451 406.7998 -421.3296 c +406.8564 -421.583 406.9688 -421.8076 407.2783 -421.8076 c +407.0811 -421.4702 406.6875 -420.9072 406.1523 -421.1606 c +406.2656 -421.2168 406.3496 -421.2734 406.4063 -421.4141 c +406.125 -421.3296 406.2656 -421.5547 406.4063 -421.5547 c +f +0 D +406.2373 -430.1934 m +F +1 D +406.9688 -420.1196 m +406.6592 -420.063 406.6035 -420.0068 406.4902 -420.2603 c +406.7158 -420.2881 406.8848 -420.2603 406.9688 -420.1196 c +f +0 D +406.7158 -416.0674 m +F +406.7998 -419.9507 m +F +1 D +406.8848 -419.6973 m +406.8281 -419.585 406.7725 -419.7256 406.8848 -419.6973 c +406.9404 -419.8101 406.9688 -419.6973 406.8848 -419.6973 c +f +0 D +406.9688 -419.6128 m +F +407.0537 -422.0332 m +F +1 D +407.1943 -421.9766 m +407.3066 -421.9482 407.335 -422.0889 407.3633 -421.9766 c +407.3633 -421.8921 407.2227 -421.8643 407.1943 -421.9766 c +f +0 D +407.1943 -422.5391 m +F +407.3633 -420.2603 m +F +1 D +407.9268 -419.6973 m +407.9268 -419.6694 407.9268 -419.6411 407.9268 -419.6128 c +407.7285 -419.6411 407.5313 -419.6411 407.4473 -419.5566 c +407.4199 -419.7817 407.7012 -419.6973 407.8418 -419.7817 c +407.8418 -420.063 408.208 -419.6973 407.9268 -419.6973 c +f +0 D +407.4473 -429.8848 m +F +1 D +407.5313 -420.5132 m +407.4756 -420.4009 407.4199 -420.5132 407.5313 -420.5132 c +407.5879 -420.626 407.6162 -420.5132 407.5313 -420.5132 c +f +407.8418 -415.8984 m +407.7568 -415.814 407.5605 -415.814 407.5313 -415.9829 c +407.6445 -416.0952 407.8418 -416.0952 407.8418 -415.8984 c +f +407.7012 -422.0332 m +407.7012 -421.9766 407.7568 -421.9482 407.7568 -421.8921 c +407.7012 -421.8921 407.6719 -421.8076 407.6162 -421.8076 c +407.6162 -421.8921 407.5313 -421.8921 407.5313 -421.9766 c +407.6162 -421.9766 407.6162 -422.0332 407.7012 -422.0332 c +f +407.9268 -422.624 m +408.0674 -422.1738 407.5605 -422.0889 407.5313 -422.4551 c +407.5879 -422.5684 407.7285 -422.624 407.9268 -422.624 c +f +0 D +407.5313 -428.7578 m +F +1 D +407.7012 -429.5469 m +408.0381 -429.6309 407.7012 -429.3213 407.7012 -429.5469 c +407.3633 -429.4619 407.6719 -429.7988 407.7012 -429.5469 c +f +0 D +407.6162 -420.0347 m +F +407.6162 -420.1758 m +F +407.7012 -421.7236 m +F +407.7568 -429.1523 m +F +407.7568 -430.6152 m +F +407.9268 -419.6973 m +407.9531 -419.7817 407.8975 -419.7817 407.8418 -419.7817 c +407.8691 -419.7256 407.8691 -419.6973 407.9268 -419.6973 c +f +407.8418 -420.0347 m +F +1 D +407.8418 -420.1758 m +407.8691 -420.3442 407.8975 -420.457 408.0098 -420.5132 c +407.9824 -420.3726 408.0938 -420.1196 407.8418 -420.1758 c +f +0 D +407.9268 -414.4634 m +F +407.9268 -420.9072 m +F +1 D +408.0098 -429.5469 m +408.0674 -429.5469 408.123 -429.5469 408.1787 -429.5469 c +408.123 -429.8281 408.46 -429.6875 408.2637 -429.5469 c +408.3486 -428.8145 409.0791 -428.7305 408.6572 -428.1113 c +408.6855 -428.1113 408.7139 -428.1113 408.7412 -428.1113 c +408.7705 -427.8301 408.6572 -427.6045 408.4893 -427.7734 c +408.5732 -427.4355 408.2637 -427.7734 408.4893 -427.7734 c +408.5166 -428.7021 408.1504 -428.7871 408.0098 -429.5469 c +f +408.2637 -429.8848 m +408.2637 -430.1094 407.9268 -430.334 408.2637 -430.4473 c +408.3193 -430.3623 408.4316 -429.9121 408.2637 -429.8848 c +f +0 D +408.1787 -415.5889 m +F +408.2637 -429.5469 m +408.2344 -429.5469 408.208 -429.5469 408.1787 -429.5469 c +408.1787 -429.5176 408.2344 -429.4619 408.2637 -429.5469 c +f +408.2637 -419.5566 m +F +408.2637 -421.8076 m +F +1 D +408.3486 -419.6973 m +408.4043 -419.8379 408.5449 -419.8662 408.7412 -419.8662 c +408.7412 -419.7256 408.6299 -419.6973 408.6572 -419.5566 c +408.4316 -419.4722 408.4893 -419.6973 408.3486 -419.6973 c +408.291 -419.585 408.2344 -419.7256 408.3486 -419.6973 c +f +0 D +408.3486 -414.041 m +F +408.4043 -413.3374 m +F +408.4043 -420.9072 m +F +1 D +409.1357 -429.4619 m +408.8818 -429.293 408.8818 -429.3213 408.5732 -429.377 c +408.6006 -429.6309 408.3486 -429.8848 408.6572 -429.9688 c +408.7139 -429.8848 408.7412 -429.7715 408.7412 -429.6309 c +408.9668 -429.5176 409.0518 -429.7148 409.1357 -429.4619 c +f +0 D +408.5732 -430.1094 m +F +408.6572 -428.0273 m +408.6572 -428.0547 408.6572 -428.083 408.6572 -428.1113 c +408.6006 -428.1113 408.5732 -428.0273 408.6572 -428.0273 c +f +408.6572 -429.1523 m +F +408.7412 -429.4619 m +408.7412 -429.5176 408.7412 -429.5742 408.7412 -429.6309 c +408.6572 -429.6309 408.6299 -429.4902 408.7412 -429.4619 c +f +1 D +408.8262 -428.1113 m +408.9111 -428.083 408.9385 -428.2236 408.9668 -428.1113 c +408.9668 -428.0273 408.8262 -427.998 408.8262 -428.1113 c +f +408.9668 -430.1934 m +408.9668 -430.0811 408.9951 -429.9121 408.8262 -429.9688 c +408.8262 -429.9961 408.8262 -430.0527 408.8262 -430.1094 c +408.9111 -430.1094 408.9111 -430.1934 408.9668 -430.1934 c +f +0 D +408.8262 -430.6152 m +F +1 D +408.9111 -419.8662 m +408.8818 -419.9507 408.9111 -420.0068 408.9668 -420.0347 c +408.9951 -419.9507 409.0791 -419.979 409.1357 -419.9507 c +409.1924 -420.063 409.248 -419.9507 409.1357 -419.9507 c +409.1641 -419.894 409.2207 -419.8662 409.2207 -419.7817 c +409.0234 -419.7817 408.7412 -419.4438 408.9111 -419.7817 c +408.7979 -419.8101 408.8545 -419.8662 408.9111 -419.8662 c +f +408.9668 -428.9844 m +408.9111 -428.9844 408.9111 -429.0117 408.9111 -429.0684 c +408.7705 -429.125 408.9111 -429.1523 408.9111 -429.0684 c +408.9668 -429.0957 408.9668 -429.0391 408.9668 -428.9844 c +409.1074 -429.0117 408.9951 -429.2363 409.1357 -429.2363 c +409.1924 -429.0684 409.2764 -429.0684 409.3887 -429.1523 c +409.4736 -428.8428 409.0234 -429.0684 409.0518 -428.8145 c +409.1924 -428.7871 409.0518 -428.7305 409.0518 -428.8145 c +408.9951 -428.8145 408.9951 -428.9277 408.9668 -428.9844 c +f +0 D +408.9111 -419.7817 m +408.9385 -419.7817 408.9951 -419.8379 408.9111 -419.8662 c +408.9111 -419.8379 408.9111 -419.8101 408.9111 -419.7817 c +f +408.9668 -420.9072 m +F +1 D +409.2207 -427.9424 m +409.3047 -427.8301 409.3047 -427.7451 409.1357 -427.6895 c +409.1357 -427.8018 409.1074 -427.8867 409.0518 -427.9424 c +409.1074 -427.9424 409.1641 -427.9424 409.2207 -427.9424 c +f +0 D +409.0518 -430.2783 m +F +1 D +409.3887 -428.1113 m +409.2764 -428.1113 409.1641 -428.083 409.1357 -428.168 c +409.248 -428.1953 409.1924 -428.2803 409.1357 -428.3359 c +409.3047 -428.3643 409.3887 -428.2803 409.3887 -428.1113 c +f +409.5576 -420.4292 m +409.5576 -420.2036 409.5576 -419.979 409.3047 -420.0347 c +409.2764 -420.1475 409.1924 -420.1758 409.2207 -420.3442 c +409.3613 -420.3442 409.4736 -420.3726 409.5576 -420.4292 c +f +409.2207 -428.8145 m +409.2764 -428.8145 409.3887 -428.8145 409.3887 -428.7578 c +409.333 -428.7578 409.2207 -428.7578 409.2207 -428.8145 c +f +0 D +409.4736 -415.4199 m +F +1 D +409.6982 -428.8984 m +409.7275 -429.0117 409.7832 -428.9551 409.7832 -428.8984 c +409.8389 -428.8984 409.8945 -428.8984 409.9521 -428.8984 c +410.0088 -429.0117 410.0352 -428.8984 409.9521 -428.8984 c +410.0645 -428.7021 409.6709 -428.6738 409.6982 -428.8145 c +409.6143 -428.8428 409.6709 -428.8984 409.6982 -428.8984 c +f +0 D +409.6982 -428.8145 m +409.7549 -428.8428 409.8115 -428.8428 409.7832 -428.8984 c +409.7549 -428.8984 409.7275 -428.8984 409.6982 -428.8984 c +409.6982 -428.8711 409.6982 -428.8428 409.6982 -428.8145 c +f +1 D +409.8682 -421.1606 m +410.0088 -421.1885 409.9521 -421.4141 410.2051 -421.3296 c +410.2607 -421.02 410.0088 -420.9072 409.8682 -421.0762 c +409.8115 -420.9639 409.7832 -421.0762 409.8682 -421.0762 c +409.8682 -421.1045 409.8682 -421.1328 409.8682 -421.1606 c +f +0 D +409.8682 -414.4634 m +F +1 D +410.0352 -427.8574 m +409.9795 -427.9141 409.9521 -427.998 409.9521 -428.1113 c +409.8389 -428.1387 409.9521 -428.1953 409.9521 -428.1113 c +410.0352 -428.0547 410.1201 -427.998 410.1201 -427.8574 c +410.1494 -427.8574 410.1768 -427.8574 410.2051 -427.8574 c +410.375 -427.6895 410.3457 -427.5488 410.1201 -427.4639 c +410.0928 -427.6611 409.9521 -427.7168 410.1201 -427.8574 c +410.0928 -427.8574 410.0645 -427.8574 410.0352 -427.8574 c +f +410.1201 -428.4209 m +410.2051 -428.3086 410.2051 -428.2236 410.0352 -428.168 c +410.0352 -428.2803 409.9795 -428.3643 409.9521 -428.4209 c +410.0088 -428.4209 410.0645 -428.4209 410.1201 -428.4209 c +f +410.0352 -419.4722 m +410.0928 -419.4438 410.1768 -419.4722 410.2051 -419.3877 c +410.1201 -419.3877 410.0352 -419.3877 410.0352 -419.4722 c +f +410.2051 -428.7578 m +410.2334 -428.7578 410.29 -428.7578 410.3457 -428.7578 c +410.3457 -428.8428 410.3457 -428.9551 410.3457 -429.0684 c +410.3174 -429.0684 410.29 -429.0684 410.2607 -429.0684 c +410.2607 -428.9844 410.2051 -429.0117 410.2051 -429.0684 c +409.8115 -428.9844 410.29 -429.4336 410.2051 -429.0684 c +410.2334 -429.0684 410.2607 -429.0684 v +410.29 -429.1523 410.3457 -429.125 410.3457 -429.0684 c +410.5156 -429.0684 410.4014 -428.7871 410.4307 -428.6738 c +410.3174 -428.6455 410.2051 -428.6455 410.2051 -428.7578 c +410.0645 -428.7871 410.2051 -428.8428 410.2051 -428.7578 c +f +0 D +410.1201 -429.7988 m +F +1 D +410.7676 -420.1758 m +411.0215 -419.7534 410.4307 -419.979 410.5156 -419.6128 c +410.3174 -419.6128 410.2051 -419.6411 410.2051 -419.7817 c +410.5713 -419.7534 410.4014 -420.2036 410.7676 -420.1758 c +f +410.3457 -415.0264 m +410.4014 -414.998 410.5156 -415.0264 410.5156 -414.9414 c +410.458 -414.9697 410.3457 -414.9414 410.3457 -415.0264 c +f +0 D +410.4307 -429.8848 m +F +410.6826 -429.6309 m +F +1 D +410.8242 -428.8984 m +410.9648 -428.9277 410.9932 -428.8428 410.9932 -428.7578 c +411.1055 -428.7021 410.9932 -428.6455 410.9932 -428.7578 c +410.9375 -428.7578 410.8799 -428.7578 410.8242 -428.7578 c +410.8525 -428.3926 410.5156 -428.7305 410.8242 -428.7578 c +410.8242 -428.7871 410.8242 -428.8428 410.8242 -428.8984 c +f +411.1621 -415.251 m +411.1621 -415.2231 411.1621 -415.167 411.1621 -415.1104 c +411.0781 -415.1104 410.9932 -415.1104 410.9082 -415.1104 c +410.9082 -415.167 410.9082 -415.2231 410.9082 -415.251 c +410.9932 -415.251 411.0781 -415.251 411.1621 -415.251 c +f +0 D +410.9932 -429.4619 m +F +411.3311 -415.1948 m +F +1 D +411.9785 -430.1934 m +412.0059 -429.7988 411.6396 -429.8281 411.3311 -429.7988 c +411.415 -430.0527 411.2461 -430.1094 411.4717 -430.2783 c +411.5557 -430.0811 411.8369 -430.4473 411.9785 -430.1934 c +412.0059 -430.3066 412.0615 -430.1934 411.9785 -430.1934 c +f +0 D +411.415 -415.4199 m +F +411.4717 -419.7817 m +F +1 D +411.6396 -415.251 m +411.584 -415.1387 411.5557 -415.2793 411.6396 -415.251 c +411.6963 -415.3916 411.7529 -415.251 411.6396 -415.251 c +f +0 D +411.6396 -420.0347 m +F +1 D +411.8096 -419.8662 m +411.8369 -419.9507 411.8652 -420.0068 411.9785 -420.0347 c +412.0059 -420.1475 412.0615 -420.0068 411.9785 -420.0347 c +412.0059 -419.894 411.8936 -419.8662 411.8096 -419.8662 c +411.8096 -419.8101 411.8096 -419.7534 411.8096 -419.6973 c +411.9785 -419.7817 412.2871 -419.7534 412.457 -419.8662 c +412.4004 -419.6128 412.1191 -419.5566 411.8096 -419.5566 c +411.8096 -419.585 411.8096 -419.6411 411.8096 -419.6973 c +411.5283 -419.6411 411.6963 -419.8662 411.8096 -419.8662 c +f +0 D +411.7246 -415.8984 m +F +1 D +412.2021 -429.4619 m +412.2021 -429.5176 412.2314 -429.5742 412.2871 -429.5469 c +412.0908 -429.293 411.8652 -429.2656 412.1191 -428.8984 c +411.7246 -428.8711 411.9502 -429.4336 411.8096 -429.6309 c +412.1191 -429.7432 411.9502 -429.4063 412.2021 -429.4619 c +f +411.9785 -421.2451 m +411.8369 -421.3574 411.9209 -421.5547 412.0615 -421.6387 c +412.0059 -421.5264 412.1465 -421.2168 411.9785 -421.2451 c +f +0 D +411.9785 -420.5977 m +F +1 D +412.0615 -428.6738 m +412.1191 -428.6455 412.2021 -428.6738 412.2021 -428.5898 c +412.1465 -428.5898 412.0615 -428.5898 412.0615 -428.6738 c +f +0 D +412.1191 -420.1196 m +F +412.1191 -422.1172 m +F +412.1191 -428.8145 m +F +412.2021 -421.5547 m +F +1 D +412.457 -428.4209 m +412.4834 -428.3086 412.5977 -428.2803 412.625 -428.168 c +412.5127 -428.083 412.2314 -428.0547 412.2021 -428.252 c +412.3721 -428.2236 412.3721 -428.3643 412.457 -428.4209 c +f +0 D +412.2871 -420.1196 m +F +412.2871 -420.4292 m +F +412.2871 -420.6826 m +F +412.3721 -421.5547 m +F +1 D +412.625 -419.6973 m +412.7383 -419.6411 412.5977 -419.6128 412.625 -419.6973 c +412.3721 -419.7256 412.6816 -420.0347 412.625 -419.6973 c +f +0 D +412.541 -420.0347 m +F +1 D +412.541 -420.5132 m +412.5977 -420.4854 412.6816 -420.5132 412.6816 -420.4292 c +412.625 -420.457 412.541 -420.4292 412.541 -420.5132 c +f +0 D +412.7656 -413.1689 m +F +412.8496 -420.4292 m +F +412.8496 -421.6387 m +F +1 D +412.8496 -429.9688 m +412.9063 -429.9395 413.0195 -429.9395 413.0195 -429.8848 c +412.9629 -429.8848 412.8496 -429.8848 412.8496 -429.9688 c +f +0 D +412.9346 -429.7148 m +F +1 D +413.1875 -420.5977 m +413.2725 -420.5977 413.3008 -420.7104 413.3291 -420.5977 c +413.3291 -420.5132 413.1875 -420.4854 413.1875 -420.5977 c +f +413.666 -429.7148 m +414.0039 -429.7988 413.666 -429.4619 413.666 -429.7148 c +413.5537 -429.7715 413.666 -429.7988 413.666 -429.7148 c +f +0 D +413.751 -422.9336 m +F +413.751 -423.1016 m +F +413.835 -413.4224 m +F +413.9766 -421.6387 m +F +414.3984 -421.1606 m +F +414.4824 -421.8921 m +F +414.791 -421.8921 m +F +414.791 -429.3213 m +F +415.0459 -421.4702 m +F +415.0459 -422.5391 m +F +415.1299 -419.8662 m +F +415.1865 -420.6826 m +F +1 D +415.2705 -427.4639 m +415.3545 -427.0137 415.0459 -427.3516 415.2705 -427.4639 c +415.3271 -427.5762 415.3828 -427.4355 415.2705 -427.4639 c +f +0 D +415.3545 -423.4121 m +F +415.4385 -423.1875 m +F +415.5234 -430.1094 m +F +415.6084 -420.1758 m +F +415.6084 -428.168 m +F +1 D +415.6924 -422.8496 m +415.6357 -423.1016 415.749 -423.2148 416.002 -423.1875 c +416.002 -422.9609 415.8896 -422.8496 415.6924 -422.8496 c +f +0 D +416.002 -423.834 m +F +1 D +416.1709 -423.4961 m +416.1426 -423.7207 416.2832 -423.75 416.4805 -423.75 c +416.5088 -423.5244 416.3682 -423.4688 416.1709 -423.4961 c +f +0 D +416.3398 -415.4199 m +F +416.5654 -420.7666 m +F +416.6494 -421.8076 m +F +416.6494 -422.8496 m +F +416.7334 -423.665 m +F +416.9023 -420.7666 m +F +416.958 -429.377 m +F +417.043 -422.1172 m +F +417.1279 -423.3281 m +F +417.2129 -423.5801 m +F +417.3809 -422.1172 m +F +*U +U +u +*u +0.187533 0.952972 0.991791 0.093599 k +436.6563 -423.8242 m +422.2119 -423.8242 L +422.2119 -421.4131 L +434.2451 -421.4131 L +434.2451 -419.022 L +422.2119 -419.022 L +422.2119 -416.6113 L +434.2451 -416.6113 L +434.2451 -414.2007 L +422.2119 -414.2007 L +422.2119 -411.79 L +436.6563 -411.79 l +436.6563 -423.8242 L +f +*U +U +U +LB +%AI5_EndLayer-- +%%PageTrailer +gsave annotatepage grestore showpage +%%Trailer +Adobe_Illustrator_AI5 /terminate get exec +Adobe_shading_AI8 /terminate get exec +Adobe_ColorImage_AI6 /terminate get exec +Adobe_pattern_AI5 /terminate get exec +AGM_Gradient /terminate get exec +Adobe_screens_AI5 /terminate get exec +Adobe_cshow /terminate get exec +Adobe_level2_AI5 /terminate get exec +%%EOF diff --git a/extras/assets/logo/white/ACE3-Logo.jpg b/extras/assets/logo/white/ACE3-Logo.jpg new file mode 100644 index 0000000000..21dc24bb60 Binary files /dev/null and b/extras/assets/logo/white/ACE3-Logo.jpg differ diff --git a/extras/assets/logo/white/ACE3-Logo.png b/extras/assets/logo/white/ACE3-Logo.png new file mode 100644 index 0000000000..a2522124fa Binary files /dev/null and b/extras/assets/logo/white/ACE3-Logo.png differ diff --git a/extras/logo.png b/extras/logo.png deleted file mode 100644 index bb2bb1e90c..0000000000 Binary files a/extras/logo.png and /dev/null differ diff --git a/logo_ace3_ca.paa b/logo_ace3_ca.paa new file mode 100644 index 0000000000..dbfe1ce323 Binary files /dev/null and b/logo_ace3_ca.paa differ diff --git a/mod.cpp b/mod.cpp new file mode 100644 index 0000000000..e266c8b710 --- /dev/null +++ b/mod.cpp @@ -0,0 +1,12 @@ +name = "ACE3"; +picture = "logo_ace3_ca.paa"; +actionName = "Github"; +action = "https://github.com/KoffeinFlummi/ACE3"; +description = "ACE3 - Version 3.0.0"; +logo = "logo_ace3_ca.paa"; +logoOver = "logo_ace3_ca.paa"; +tooltip = "ACE3"; +tooltipOwned = "ACE3 Owned"; +overview = "ACE3 is a joint effort by the teams behind ACE2, AGM and CSE to improve the realism and authenticity of Arma3."; +author = "ACE3 Team"; +overviewPicture = "logo_ace3_ca.paa"; \ No newline at end of file