diff options
| author | Selene ToyKeeper | 2019-04-08 11:59:18 -0600 |
|---|---|---|
| committer | Selene ToyKeeper | 2019-04-08 11:59:18 -0600 |
| commit | 942dee30adce308ea9177712cfaaea4a26603aaa (patch) | |
| tree | b1319ee6ac6eec1fbdb7f0d5027656c0035aa18f | |
| parent | configured lantern stepped ramp and button LED mode, set default tint to 128 ... (diff) | |
| parent | level_calc.py: Combined log_2 and log_e into just log, because all logs have ... (diff) | |
| download | anduril-942dee30adce308ea9177712cfaaea4a26603aaa.tar.gz anduril-942dee30adce308ea9177712cfaaea4a26603aaa.tar.bz2 anduril-942dee30adce308ea9177712cfaaea4a26603aaa.zip | |
merged trunk
| -rw-r--r-- | README | 11 | ||||
| -rwxr-xr-x | bin/level_calc.py | 9 | ||||
| -rw-r--r-- | spaghetti-monster/anduril/anduril-manual.txt | 358 | ||||
| -rw-r--r-- | spaghetti-monster/anduril/anduril.c | 23 | ||||
| -rw-r--r-- | spaghetti-monster/anduril/anduril.svg | 906 | ||||
| -rw-r--r-- | spaghetti-monster/darkhorse/darkhorse.c | 1 | ||||
| -rw-r--r-- | spaghetti-monster/fsm-adc.c | 2 | ||||
| -rw-r--r-- | spaghetti-monster/rampingios/rampingiosv3.c | 13 |
8 files changed, 986 insertions, 337 deletions
@@ -84,7 +84,7 @@ To test if you can flash firmware correctly, or to restore a light to something like a default state, try flashing the NLITE driver from DrJones. It's similar to the default nanjg / qlite firmware, but better. - ./bin/flash.sh DrJones/NLITE/nlite.hex + ./bin/flash-tiny13.sh DrJones/NLITE/nlite.hex For a quick test to make sure your tool chain works and your flashing tools are working, try the 'hello world' program: @@ -95,3 +95,12 @@ are working, try the 'hello world' program: If that works, you should be ready to start making changes to the code, or flashing any of the pre-built firmwares. + +Most projects can be compiled with the bin/build.sh script. For example, to +build Crescendo for an attiny25-based driver and then flash it: + + cd ToyKeeper/crescendo + ../../bin/build.sh 25 crescendo + ../../bin/flash-tiny25.sh crescendo.hex + +Other useful tools are in bin/ too, so they might be worth a look. diff --git a/bin/level_calc.py b/bin/level_calc.py index c903800..2edd5fd 100755 --- a/bin/level_calc.py +++ b/bin/level_calc.py @@ -5,7 +5,7 @@ from __future__ import print_function import math interactive = False -# supported shapes: ninth, fifth, cube, square, log_e, log_2 +# supported shapes: ninth, fifth, cube, square, log #ramp_shape = 'cube' @@ -14,7 +14,7 @@ def main(args): """ # Get parameters from the user questions_main = [ - (str, 'ramp_shape', 'cube', 'Ramp shape? [cube, square, fifth, ninth, log_e, log_2]'), + (str, 'ramp_shape', 'cube', 'Ramp shape? [cube, square, fifth, ninth, log]'), (int, 'num_channels', 1, 'How many power channels?'), (int, 'num_levels', 4, 'How many total levels do you want?'), ] @@ -172,8 +172,9 @@ shapes = dict( fifth = (lambda x: x**5, lambda x: math.pow(x, 1/5.0)), cube = (lambda x: x**3, lambda x: math.pow(x, 1/3.0)), square = (lambda x: x**2, lambda x: math.pow(x, 1/2.0)), - log_e = (lambda x: math.e**x, lambda x: math.log(x, math.e)), - log_2 = (lambda x: 2.0**x, lambda x: math.log(x, 2.0)), + log = (lambda x: math.e**x, lambda x: math.log(x, math.e)), + # makes no difference; all logs have the same curve + #log_2 = (lambda x: 2.0**x, lambda x: math.log(x, 2.0)), ) def power(x): diff --git a/spaghetti-monster/anduril/anduril-manual.txt b/spaghetti-monster/anduril/anduril-manual.txt new file mode 100644 index 0000000..cd4fe3e --- /dev/null +++ b/spaghetti-monster/anduril/anduril-manual.txt @@ -0,0 +1,358 @@ +Anduril User Manual +------------------- + +Anduril is an open-source firmware for flashlights, distributed under +the terms of the GPL v3. The sources can be obtained here: + + http://tiny.cc/TKAnduril + https://bazaar.launchpad.net/~toykeeper/flashlight-firmware/trunk/files/head:/ToyKeeper/spaghetti-monster/anduril/ + + +Quick Start +----------- + +After putting a battery in the light and tightening the parts together, +the light should quickly blink once to confirm it has power and is now +operational. After that, basic usage is simple: + + - Click to turn the light on or off. + - Hold the button to change brightness. + - Release and hold again to change brightness the other way. + +That is all the user needs to know for basic use, but there are many +more modes and features available for people who want more. + +Before reading the rest of this manual, it is recommended that users +look at the Anduril UI diagram, which should be provided along with the +flashlight. + + +Ramping / Stepped Ramping Modes +------------------------------- + +Anduril's normal operation mode uses a smooth ramp or a stepped ramp, +depending on which style the user prefers. + +Each ramp has its own settings -- floor (lowest level), ceiling (highest +level), and the stepped ramp can also have a configurable number of +steps. + +There are four ways to access this mode when the light is off: + + - Click: Turn on at the memorized brightness. + - Hold: Turn on at the floor level. The light should give a very + subtle dark blink when the user can let go of the button to stay at + the floor, or keep holding the button to ramp up. + - 2 clicks: Turn on at the ceiling level. + - Click, hold: Turn on at the ceiling level, then ramp down. + +While the light is on, a few basic actions are available: + + - Click: Turn off. + - 2 clicks: Go to or from turbo (full power). + - Hold: Change brightness (up). If the button was released less than + a second ago, or if it's already at the ceiling, it goes down + instead. + - Click, hold: Change brightness (down). + - 3 clicks: Switch to the other ramp. + - 4 clicks: Go to ramp config mode. + + +Other Modes +----------- + +Anduril has several other modes too. To access these, press the button +more than 2 times when the light is off: + + - 3 clicks: Access the blinky / utility modes. + - Click, click, hold: Access the strobe modes. + - 4 clicks: Lockout mode. + - 5 clicks: Momentary mode. + - 6 clicks: Muggle mode. + + +Blinky / Utility Modes +---------------------- + +Click 3 times from Off to access Anduril's blinky / utility modes. This +always starts at battery check and the user can proceed to other blinky +modes from there. The sequence is: + + 1. Battery check. + 2. Sunset mode. + 3. Beacon mode. + 4. Temperature check. + +In all of these modes, some basic actions are available: + + - Click: Turn off. + - 2 clicks: Next blinky mode. + +Additionally, in beacon and temperature check modes: + + - 4 clicks: Go to the beacon config mode or thermal config mode. + +In more detail, this is what each blinky / utility mode does: + + 1. Battery check. + + Blinks out the battery voltage per cell. Full is 4.2V, empty is + about 3.0V. The light blinks the whole-number digit first, pauses, + then blinks out the "tenths" digit. Then a longer pause, and it + repeats. + So for 4.2V, it would be "blink-blink-blink-blink .. blink-blink". + + A "zero" digit is represented by a very quick blink. + + 2. Sunset mode. + + This starts at a low level, then dims gradually for an hour, and + then shuts off. It is intended for use when going to bed. + + 3. Beacon mode. + + Blinks at a slow speed. The light stays on for half a second, and + then stays off until the next blink. The brightness and the number + of seconds between pulses are configurable: + + - Brightness is the user's last-ramped level, so set this in + ramping mode before starting beacon mode. + + - Speed is configured in beacon config mode. Click 4 times to + enter beacon config mode, wait for the light to stutter, then + click to enter the number of seconds per blink. For example, + to do a 10-second alpine beacon, click 10 times. + + 4. Temperature check. + + Blinks out the current temperature in degrees C. This number + should be pretty close to what a real thermometer says. If not, it + would be a good idea to click 4 times to enter thermal config mode, + and calibrate the sensor. + + Thermal config mode has two settings: + + - Current temperature. Click once per degree C to calibrate the + sensor. For example, if the ambient temperature is 21 C, then + click 21 times. + + - Temperature limit. This sets the maximum temperature the light + can reach before it will start doing thermal regulation to keep + itself from overheating. Click once per degree C above 30. For + example, to set the limit to 50 C, click 20 times. The default + is 45 C. + + +Strobe / Mood Modes +------------------- + +Anduril includes a few extra modes for a variety of purposes: + + - Candle mode + - Bike flasher + - Party strobe + - Tactical strobe + - Lightning storm mode + +Click 3 times from Off to access these, but hold the third click for a +moment. Click, click, hold. The last-used strobe mode is remembered, +so it will return to whichever one you used last. + +In all of these modes, a few actions are available: + + - Click: Turn off. + - 2 Clicks: Next strobe / mood mode. + - Hold: Increase brightness, or strobe faster. (except lightning) + - Click, hold: Decrease brightness, or strobe slower. (except lightning) + +Additionally, candle mode has one more action: + + - 3 clicks: Add 30 minutes to the timer. + +In more detail, here is what each mode does: + + - Candle mode + + Brightness changes randomly in a pattern resembling a candle flame. + If a timer is set, it will run until the timer expires, then get + dimmer for one minute, then sputter and turn itself off. Without a + timer, candle mode runs until the user turns it off. Brightness is + configurable. + + - Bike flasher + + Runs at a medium level, but stutters to a brighter level once per + second. Designed to be more visible than a normal ramping mode, but + otherwise works mostly the same. Brightness is configurable. + + - Party strobe + + Motion-freezing strobe light. Can be used to freeze spinning fans + and falling water. Speed is configurable. + + - Tactical strobe + + Disorienting strobe light. Can be used to irritate people. Speed + is configurable, and the duty cycle is always 33%. + + - Lightning storm mode + + Flashes at random brightness and random speed to simulate lightning + strikes during a busy lightning storm. Do not look directly at the + flashlight when this mode is running, because it may suddenly go to + full power without warning. + + +Lockout Mode +------------ + +Click 4 times from Off to enter Lockout mode. This makes the light safe +to carry in a pocket or a bag or anywhere else the button might be +pressed by accident. + +To exit lockout mode, click 4 times. The light should blink briefly and +then return to the regular "off" mode. + +Lockout mode also doubles as a momentary moon mode, so the user can do +quick tasks without having to unlock the light. The brightness in +lockout mode is determined by the floor setting of the current ramp. + + +Momentary Mode +-------------- + +Click 5 times from Off to enter Momentary mode. This locks the +flashlight into a single-mode interface where the LEDs are only on when +the button is held down. It is intended for Morse code and other +signalling tasks. + +Brightness is the last-ramped level, so adjust that before entering +momentary mode. + +To exit this mode, physically disconnect power by unscrewing the tailcap +or battery tube. + + +Muggle Mode +----------- + +Click 6 times from Off to enter Muggle mode. This is a simpler and +less-bright interface which makes the light relatively safe to lend to +children or other people who could use the light unsafely. + +In Muggle mode, there are only a few available actions: + + - Click: Turn the light on or off. + - Hold: Change brightness. + - 6 clicks: Exit Muggle mode. + +The brightness in this mode usually goes from about 10 lm to 300 lm. + +Muggle mode is remembered even after changing the battery. This helps +prevent children from exiting the mode by unscrewing the tailcap. +However, be sure to supervise children whenever they are using any +powerful tools, including a bright flashlight. + + +Configuration Modes +------------------- + +Every config mode has the same interface. The menu has one or more +options the user can configure, and it will go through them in order. +For each menu item, the light will follow the same pattern: + + - Blink one or more times, corresponding to the item number. + + - Stutter or "buzz" quickly between two brightness levels for a few + seconds. This indicates that the user can click one or more times + to enter a number. It will keep buzzing until the user stops + clicking, so there is no need to hurry. + + - Pause, and then go to the next option. + +After the light has gone through all of the menu options, it should +return to whatever mode the light was in before entering the config +mode. + +If the user doesn't press a button during a menu item's "buzz" phase, +that item remains unchanged from its previous value. + + +Ramp Config Mode +---------------- + +While the light is on in a ramping mode, click 4 times to enter the +config mode for the current ramp. + +For smooth ramping mode, there are two menu options: + + 1. Floor. (default = 1/150) + 2. Ceiling. (default = 120/150) + +For the stepped ramping mode, there are three menu options: + + 1. Floor. (default = 20/150) + 2. Ceiling. (default = 120/150) + 3. Number of steps. (default = 7) + +To configure the floor level, click the button equal to the number of +ramp levels (out of 150) at which the floor should be. To set the +lowest possible level, click once. + +To configure the ceiling level, each click goes one level lower. So 1 +click sets the highest possible level, 2 clicks is the 2nd-highest, 3 +clicks is the 3rd-highest level, etc. To set the default of 120/150, +click 31 times. + +When configuring the number of steps, the value can be anything from 2 +to 150. + + +Protection Features +------------------- + +Anduril includes low voltage protection (LVP) and thermal regulation. + +LVP makes the light step down to a lower level when the battery is low, +and if the light is already at the lowest level, it shuts itself off. +This activates at 2.8V. LVP adjustments happen suddenly, in large +steps. + +Thermal regulation attempts to keep the light from overheating, and +otherwise adjusts output to stay as close as possible to the +user-configured temperature limit. Thermal adjustments happen +gradually, in steps so small they are difficult for humans to perceive. + + +Aux LEDs / Button LEDs +---------------------- + +Some lights have aux LEDs or button LEDs. These can be configured to do +different things while the main emitters are off. There is one aux LED +mode for the regular "off" mode, and another aux LED mode for "lockout" +mode. This allows the user to see at a glance whether the light is +locked. + +Aux LED modes typically include: + + - Off + - Low + - High + - Blinking + +To configure the aux LEDs, go to the mode you want to configure and then +click the button a few times: + + - Off mode: 7 clicks. + - Lockout mode: 3 clicks. + +This should change the aux LEDs to the next mode supported on this +light. + +For lights with a button LED, the button LED typically stays on while +the main emitters are on. Its brightness level is set in a way which +mirrors the main LED -- off, low, or high. + +For lights with front-facing aux LEDs, the aux LEDs typically stay off +when the main emitters are on, and when the light is otherwise awake. +The aux LEDs on most lights only turn on when the light is asleep. diff --git a/spaghetti-monster/anduril/anduril.c b/spaghetti-monster/anduril/anduril.c index c99ea82..0d35fb0 100644 --- a/spaghetti-monster/anduril/anduril.c +++ b/spaghetti-monster/anduril/anduril.c @@ -199,6 +199,8 @@ uint8_t beacon_state(Event event, uint16_t arg); uint8_t beacon_config_state(Event event, uint16_t arg); // soft lockout #define MOON_DURING_LOCKOUT_MODE +// if enabled, 2nd lockout click goes to the other ramp's floor level +//#define LOCKOUT_MOON_FANCY uint8_t lockout_state(Event event, uint16_t arg); // momentary / signalling mode uint8_t momentary_state(Event event, uint16_t arg); @@ -401,11 +403,6 @@ uint8_t off_state(Event event, uint16_t arg) { set_state(steady_state, memorized_level); return MISCHIEF_MANAGED; } - // 2 clicks (initial press): off, to prep for later events - else if (event == EV_click2_press) { - set_level(0); - return MISCHIEF_MANAGED; - } // click, hold: go to highest level (ceiling) (for ramping down) else if (event == EV_click2_hold) { set_state(steady_state, MAX_LEVEL); @@ -416,6 +413,11 @@ uint8_t off_state(Event event, uint16_t arg) { set_state(steady_state, MAX_LEVEL); return MISCHIEF_MANAGED; } + // 3 clicks (initial press): off, to prep for later events + else if (event == EV_click3_press) { + set_level(0); + return MISCHIEF_MANAGED; + } #ifdef USE_BATTCHECK // 3 clicks: battcheck mode / blinky mode group 1 else if (event == EV_3clicks) { @@ -1151,6 +1153,13 @@ uint8_t lockout_state(Event event, uint16_t arg) { uint8_t lvl = ramp_smooth_floor; if (ramp_discrete_floor < lvl) lvl = ramp_discrete_floor; set_level(lvl); + #elif defined(LOCKOUT_MOON_FANCY) + uint8_t levels[] = { ramp_smooth_floor, ramp_discrete_floor }; + if ((event & 0x0f) == 2) { + set_level(levels[ramp_style^1]); + } else { + set_level(levels[ramp_style]); + } #else // Use moon from current ramp set_level(nearest_level(1)); @@ -1868,9 +1877,6 @@ void loop() { StatePtr state = current_state; - #ifdef USE_DYNAMIC_UNDERCLOCKING - auto_clock_speed(); - #endif if (0) {} #ifdef USE_STROBE_STATE @@ -1889,7 +1895,6 @@ void loop() { uint8_t del = strobe_delays[st]; // TODO: make tac strobe brightness configurable? set_level(STROBE_BRIGHTNESS); - CLKPR = 1<<CLKPCE; CLKPR = 0; // run at full speed if (st == party_strobe_e) { // party strobe if (del < 42) delay_zero(); else nice_delay_ms(1); diff --git a/spaghetti-monster/anduril/anduril.svg b/spaghetti-monster/anduril/anduril.svg index 9fbb7d1..ab2926d 100644 --- a/spaghetti-monster/anduril/anduril.svg +++ b/spaghetti-monster/anduril/anduril.svg @@ -18,8 +18,8 @@ inkscape:version="0.92.1 r15371" sodipodi:docname="anduril.svg" inkscape:export-filename="/tmp/anduril-ui.png" - inkscape:export-xdpi="114.26005" - inkscape:export-ydpi="114.26005"> + inkscape:export-xdpi="342.78015" + inkscape:export-ydpi="342.78015"> <defs id="defs4"> <linearGradient @@ -2469,6 +2469,188 @@ x2="1314.9019" y2="761.10052" gradientUnits="userSpaceOnUse" /> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-367-9-6" + style="overflow:visible"> + <path + id="path3856-53-2-1" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-367-9-2" + style="overflow:visible"> + <path + id="path3856-53-2-99" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-367-6-0-0" + style="overflow:visible"> + <path + id="path3856-53-1-2-2" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-79-0-6" + style="overflow:visible"> + <path + id="path3856-20-7-1" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-367-9-8-2" + style="overflow:visible"> + <path + id="path3856-53-2-9-1" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-62-70-9" + style="overflow:visible"> + <path + id="path3856-91-4-9" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-31-1-0-9-9-9" + style="overflow:visible"> + <path + id="path3856-103-9-0-1-7-1" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-367-3-5-7-0" + style="overflow:visible"> + <path + id="path3856-53-8-86-9-4" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-367-3-5-6-0" + style="overflow:visible"> + <path + id="path3856-53-8-86-1-4" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-367-3-8-4-9" + style="overflow:visible"> + <path + id="path3856-53-8-8-0-6" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-367-3-5-2-0" + style="overflow:visible"> + <path + id="path3856-53-8-86-3-4" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-367-3-5-2-2" + style="overflow:visible"> + <path + id="path3856-53-8-86-3-2" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-367-3-5-2-5" + style="overflow:visible"> + <path + id="path3856-53-8-86-3-5" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Mend-367-3-5-0-0" + style="overflow:visible"> + <path + id="path3856-53-8-86-6-2" + d="M -4.2666667,0 -6.4,2.1333333 1.0666667,0 -6.4,-2.1333333 Z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:0.42666668pt" + inkscape:connector-curvature="0" /> + </marker> </defs> <sodipodi:namedview id="base" @@ -2477,7 +2659,7 @@ borderopacity="1.0" inkscape:pageopacity="1" inkscape:pageshadow="2" - inkscape:zoom="1.2050864" + inkscape:zoom="1.2021109" inkscape:cx="341.22418" inkscape:cy="504.11322" inkscape:document-units="px" @@ -2485,7 +2667,7 @@ showgrid="false" showguides="true" gridtolerance="1" - inkscape:window-width="2459" + inkscape:window-width="2548" inkscape:window-height="1415" inkscape:window-x="0" inkscape:window-y="0" @@ -2495,7 +2677,7 @@ fit-margin-right="0.5" fit-margin-bottom="0.5" units="cm" - inkscape:snap-global="false" + inkscape:snap-global="true" inkscape:snap-bbox="true" inkscape:bbox-paths="true" inkscape:bbox-nodes="true" @@ -2607,6 +2789,32 @@ height="310.40146" x="1058.2677" y="758.40918" /> + <path + style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-02)" + d="m 1597.9772,563.34418 c 0.4636,-0.36597 -0.021,1.8809 -0.045,6.26246" + id="path5213-6-8-4-9-9-56-6-0" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-51)" + d="m 1577.5842,684.90662 c 0.4636,-0.36597 -1.5747,0.4784 -6.1098,2.54774" + id="path5213-6-8-4-9-9-56-6-8" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-50)" + d="m 1405.234,654.99099 c 0.4636,-0.36597 0.5015,-1.74928 0.3311,-4.86628" + id="path5213-6-8-4-9-9-56-6-6" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <rect + style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect14693-4" + width="192.66586" + height="169.39575" + x="1405.2867" + y="520.16724" + rx="37" /> <g id="g14799" transform="translate(-1.0079016)"> @@ -3017,10 +3225,11 @@ style="opacity:1;fill:#c0c0c0;fill-opacity:1;stroke:#040000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> </g> <path - style="opacity:1;fill:#c0c0c0;fill-opacity:1;stroke:#040000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1" - d="m 1319.7047,180.764 h 37.7525" + style="opacity:1;fill:#c0c0c0;fill-opacity:1;stroke:#040000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4,4;stroke-dashoffset:6.1;stroke-opacity:1" + d="m 1319.7047,180.764 69.7795,0" id="path15687-2-6" - inkscape:connector-curvature="0" /> + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> <path style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:12.8, 2.13333333;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-6-0)" d="m 1131.0344,258.42719 c 48.1809,-3.99296 64.2076,-2.68523 79.9712,-42.47521 42.8072,-108.05255 133.489,-146.16407 131.2384,-34.5044" @@ -3028,10 +3237,11 @@ inkscape:connector-curvature="0" sodipodi:nodetypes="csc" /> <path - style="opacity:1;fill:#c0c0c0;fill-opacity:1;stroke:#040000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;stroke-opacity:1" - d="m 1319.7047,381.98134 h 37.7525" + style="opacity:1;fill:#c0c0c0;fill-opacity:1;stroke:#040000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4,4;stroke-dashoffset:3.5;stroke-opacity:1" + d="m 1319.7047,381.98134 64.5803,0" id="path15687-9-5" - inkscape:connector-curvature="0" /> + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> <text xml:space="preserve" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" @@ -3387,28 +3597,6 @@ inkscape:connector-curvature="0" sodipodi:nodetypes="cc" /> <g - transform="translate(980.51459,-148.00986)" - id="g23629-5-4"> - <ellipse - style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:4.26666689;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path3639-2-0-8" - cx="140.59442" - cy="435.21741" - rx="48.48732" - ry="29.092394" /> - <text - xml:space="preserve" - style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.06666672" - x="112.51038" - y="444.62402" - id="text3021-8-9-7"><tspan - sodipodi:role="line" - id="tspan3023-4-6-0" - x="112.51038" - y="444.62402" - style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672">OFF</tspan></text> - </g> - <g transform="translate(969.27179,76.164687)" id="g23629-5-4-8"> <ellipse @@ -3592,198 +3780,6 @@ inkscape:connector-curvature="0" sodipodi:nodetypes="cc" /> <g - id="g14659" - transform="translate(0,-45.458105)"> - <path - sodipodi:nodetypes="cc" - inkscape:connector-curvature="0" - id="path5213-6-8-4-9-9-56-6-28-20" - d="m 1293.1165,914.73803 c 22.9934,5.0006 51.8174,18.31502 72.3787,39.21347" - style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-7)" /> - <path - sodipodi:nodetypes="cc" - inkscape:connector-curvature="0" - id="path5213-6-8-4-9-9-56-6-28-2" - d="m 1094.1498,960.95909 c 17.8272,-22.80331 42.9724,-34.59893 64.3085,-42.39665" - style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-0)" /> - <path - sodipodi:nodetypes="cc" - inkscape:connector-curvature="0" - id="path5213-6-8-4-9-9-56-6-28-7" - d="m 1099.1838,1048.3297 c -10.8263,-13.3296 -17.2825,-22.994 -19.3174,-41.9076" - style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-2)" /> - <path - sodipodi:nodetypes="cc" - inkscape:connector-curvature="0" - id="path5213-6-8-4-9-9-56-6-28-8" - d="m 1386.1562,998.74948 c -0.01,16.47992 -3.5377,27.95532 -16.4966,45.71352" - style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-6)" /> - <path - sodipodi:nodetypes="cc" - inkscape:connector-curvature="0" - id="path5213-6-8-4-9-9-56-6-9-6" - d="m 1286.1122,1090.3622 c -32.6374,7.6868 -68.0318,7.3275 -98.7961,1.9808" - style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-8-4)" /> - <g - transform="translate(0.00410028,9.005851)" - id="g7243"> - <g - id="g28835" - transform="translate(81.09879,-12.221496)"> - <text - id="text3021-8-4-1-8-8-2-7" - y="981.17542" - x="1222.7643" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" - xml:space="preserve"><tspan - style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" - y="981.17542" - x="1222.7643" - id="tspan3023-4-0-1-9-63-8-7" - sodipodi:role="line">Bike</tspan></text> - <ellipse - ry="29.092394" - rx="67.643234" - cy="986.1272" - cx="1248.0287" - id="path3639-4-4-9-5" - style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <text - id="text3021-8-4-1-8-8-2-7-4" - y="1005.0751" - x="1202.3188" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" - xml:space="preserve"><tspan - style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" - y="1005.0751" - x="1202.3188" - id="tspan3023-4-0-1-9-63-8-7-8" - sodipodi:role="line">Flasher</tspan></text> - </g> - <g - id="g28877" - transform="translate(-82.541209,-37.878365)"> - <text - id="text3021-8-4-1-8-8-2-7-2" - y="1087.1008" - x="1357.3134" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" - xml:space="preserve"><tspan - style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" - y="1087.1008" - x="1357.3134" - id="tspan3023-4-0-1-9-63-8-7-89" - sodipodi:role="line">Party</tspan></text> - <ellipse - ry="29.092394" - rx="67.643234" - cy="1091.3002" - cx="1388.598" - id="path3639-4-4-9-5-3" - style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <text - id="text3021-8-4-1-8-8-2-7-4-6" - y="1111.7531" - x="1345.8983" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" - xml:space="preserve"><tspan - style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" - y="1111.7531" - x="1345.8983" - id="tspan3023-4-0-1-9-63-8-7-8-8" - sodipodi:role="line">Strobe</tspan></text> - </g> - <g - id="g28919" - transform="translate(-88.581451,-166.13611)"> - <text - id="text3021-8-4-1-8-8-2-7-2-2" - y="1219.2247" - x="1200.4392" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" - xml:space="preserve"><tspan - style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" - y="1219.2247" - x="1200.4392" - id="tspan3023-4-0-1-9-63-8-7-89-1" - sodipodi:role="line">Tactical</tspan></text> - <ellipse - ry="29.092394" - rx="67.643234" - cy="1218.9089" - cx="1247.527" - id="path3639-4-4-9-5-3-0" - style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <text - id="text3021-8-4-1-8-8-2-7-4-6-5" - y="1239.3618" - x="1204.8273" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" - xml:space="preserve"><tspan - style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" - y="1239.3618" - x="1204.8273" - id="tspan3023-4-0-1-9-63-8-7-8-8-1" - sodipodi:role="line">Strobe</tspan></text> - </g> - <g - id="g28961" - transform="translate(-2.2028768,-134.13011)"> - <text - id="text3021-8-4-1-8-8-2-7-2-2-0" - y="1109.4977" - x="1088.8826" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.33333397px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" - xml:space="preserve"><tspan - style="font-size:21.33333397px;line-height:1.25;stroke-width:1.06666672" - y="1109.4977" - x="1088.8826" - id="tspan3023-4-0-1-9-63-8-7-89-1-8" - sodipodi:role="line">Lightning</tspan></text> - <ellipse - ry="29.092394" - rx="67.643234" - cy="1109.5366" - cx="1139.1631" - id="path3639-4-4-9-5-3-0-5" - style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <text - id="text3021-8-4-1-8-8-2-7-4-6-5-0" - y="1131.0537" - x="1106.3962" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.33333397px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" - xml:space="preserve"><tspan - style="font-size:21.33333397px;line-height:1.25;stroke-width:1.06666672" - y="1131.0537" - x="1106.3962" - id="tspan3023-4-0-1-9-63-8-7-8-8-1-6" - sodipodi:role="line">Storm</tspan></text> - </g> - <g - id="g5944" - transform="translate(2.1928969,2.1881554)"> - <text - id="text3021-8-4-1-8-8-2-7-2-2-0-6" - y="923.39539" - x="1182.9138" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" - xml:space="preserve"><tspan - style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" - y="923.39539" - x="1182.9138" - id="tspan3023-4-0-1-9-63-8-7-89-1-8-7" - sodipodi:role="line">Candle</tspan></text> - <ellipse - ry="29.092394" - rx="67.643234" - cy="913.85162" - cx="1227.4263" - id="path3639-4-4-9-5-3-0-5-5" - style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - </g> - </g> - </g> - <g id="g14617" transform="translate(-13.294351,-32.815344)"> <path @@ -3837,24 +3833,6 @@ d="m 1298.1704,855.8694 c 75.92,10.10449 72.6994,-54.50393 12.2633,-55.89492 -51.6628,-1.18906 -74.3675,75.06672 15.6104,66.18339" style="fill:none;stroke:#009d00;stroke-width:2.1329999;stroke-miterlimit:4;stroke-dasharray:12.798, 2.133;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-31-1-0-9-9)" /> </g> - <path - style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-02)" - d="m 1597.9772,563.34418 c 0.4636,-0.36597 -0.021,1.8809 -0.045,6.26246" - id="path5213-6-8-4-9-9-56-6-0" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" /> - <path - style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-51)" - d="m 1577.5842,684.90662 c 0.4636,-0.36597 -1.5747,0.4784 -6.1098,2.54774" - id="path5213-6-8-4-9-9-56-6-8" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" /> - <path - style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-50)" - d="m 1405.234,654.99099 c 0.4636,-0.36597 0.5015,-1.74928 0.3311,-4.86628" - id="path5213-6-8-4-9-9-56-6-6" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" /> <text xml:space="preserve" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" @@ -4038,94 +4016,394 @@ id="path5213-6-8-4-9-9-1-3-0-0-3-0" inkscape:connector-curvature="0" sodipodi:nodetypes="cc" /> - <path - style="fill:none;stroke:#000000;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:4.26666689, 4.26666689;stroke-dashoffset:2.13333344;stroke-opacity:1;marker-end:url(#Arrow1Mend-88-1)" - d="m 1262.9626,853.74322 c 45.3646,10.29118 76.432,-7.96445 88.9489,-15.20313" - id="path5213-6-8-4-9-9-8-3-5" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" /> - <text - xml:space="preserve" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.66666698px;line-height:110.00000238%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - x="1342.4323" - y="857.24713" - id="text39623-3"><tspan - sodipodi:role="line" - x="1342.4323" - y="857.24713" - id="tspan39625-1">+30 min</tspan></text> <g - id="g7705"> - <circle - r="22.470001" - cy="821.88452" - cx="1375.8579" - id="path7491" - style="opacity:1;fill:url(#linearGradient7569);fill-opacity:1;stroke:url(#linearGradient7692);stroke-width:1.715;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <ellipse - ry="20.7346" - rx="20.29092" - cy="821.88452" - cx="1375.8579" - id="path7491-8" - style="opacity:1;fill:#fcfcfd;fill-opacity:1;stroke:none;stroke-width:1.83983243;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - <path - transform="rotate(-90)" - d="m -801.14121,1375.8579 a 20.743311,20.29092 0 0 1 -10.37166,17.5725 20.743311,20.29092 0 0 1 -20.74331,0 20.743311,20.29092 0 0 1 -10.37165,-17.5725" - sodipodi:open="true" - sodipodi:end="3.1415927" - sodipodi:start="0" - sodipodi:ry="20.29092" - sodipodi:rx="20.743311" - sodipodi:cy="1375.8579" - sodipodi:cx="-821.88452" - sodipodi:type="arc" - id="path7491-5" - style="opacity:1;fill:url(#linearGradient7538);fill-opacity:1;stroke:none;stroke-width:1.84021866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + id="g25629"> <path + sodipodi:nodetypes="cc" inkscape:connector-curvature="0" - id="path7493" - d="m 1355.307,821.88451 h 3.8436" - style="opacity:1;fill:none;fill-opacity:1;stroke:#7b7b7b;stroke-width:1.3436662;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + id="path5213-6-8-4-9-9-56-6-28-20" + d="m 1293.1165,869.27992 c 22.9934,5.0006 51.8174,18.31502 72.3787,39.21347" + style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-7)" /> <path + sodipodi:nodetypes="cc" inkscape:connector-curvature="0" - id="path7495" - d="m 1396.1468,821.88451 h -3.3507" - style="opacity:1;fill:none;fill-opacity:1;stroke:#7b7b7b;stroke-width:1.3436662;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + id="path5213-6-8-4-9-9-56-6-28-2" + d="m 1094.1498,915.50098 c 17.8272,-22.80331 42.9724,-34.59893 64.3085,-42.39665" + style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-0)" /> <path + style="fill:none;stroke:#ffffff;stroke-width:1.00000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-0-0)" + d="m 1094.1498,915.50098 c 17.8272,-22.80331 42.9724,-34.59893 64.3085,-42.39665" + id="path5213-6-8-4-9-9-56-6-28-2-8" inkscape:connector-curvature="0" - id="path7497" - d="m 1375.8579,801.14199 v 3.54788" - style="opacity:1;fill:none;fill-opacity:1;stroke:#7b7b7b;stroke-width:1.3436662;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + sodipodi:nodetypes="cc" /> <path + sodipodi:nodetypes="cc" inkscape:connector-curvature="0" - id="path7499" - d="m 1375.8579,842.61913 v -3.64646" - style="opacity:1;fill:none;fill-opacity:1;stroke:#7b7b7b;stroke-width:1.3436662;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + id="path5213-6-8-4-9-9-56-6-28-7" + d="m 1099.1838,1002.8716 c -10.8263,-13.32961 -17.2825,-22.994 -19.3174,-41.90761" + style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-2)" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5213-6-8-4-9-9-56-6-28-8" + d="m 1386.1562,953.29137 c -0.01,16.47992 -3.5377,27.95532 -16.4966,45.71352" + style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-6)" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5213-6-8-4-9-9-56-6-9-6" + d="m 1286.1122,1044.9041 c -32.6374,7.6868 -68.0318,7.3275 -98.7961,1.9808" + style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-8-4)" /> <path - sodipodi:nodetypes="ccccc" + style="fill:none;stroke:#ffffff;stroke-width:1.00000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-7-0)" + d="m 1293.1165,869.27993 c 22.9934,5.0006 51.8174,18.31502 72.3787,39.21347" + id="path5213-6-8-4-9-9-56-6-28-20-8" inkscape:connector-curvature="0" - id="path7505" - d="m 1374.5713,821.88451 1.1658,17.72796 h 0.34 l 1.0673,-17.72796 z" - style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#010109;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.01549935;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + sodipodi:nodetypes="cc" /> <path - sodipodi:nodetypes="ccccc" + style="fill:none;stroke:#ffffff;stroke-width:1.00000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-6-0)" + d="m 1386.1562,953.29137 c -0.01,16.47992 -3.5377,27.95532 -16.4966,45.71352" + id="path5213-6-8-4-9-9-56-6-28-8-2" inkscape:connector-curvature="0" - id="path7594" - d="m 1392.31,822.12981 c 0,7.79405 -7.5434,14.85118 -14.018,14.85118 v 1.34367 c 7.4212,0 14.1074,-7.62913 14.1074,-16.19485 z" - style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#0b0b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.3436662;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + sodipodi:nodetypes="cc" /> <path - sodipodi:nodetypes="ccccc" + style="fill:none;stroke:#ffffff;stroke-width:1.00000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-8-4-9)" + d="m 1286.1122,1044.9041 c -32.6374,7.6868 -68.0318,7.3275 -98.7961,1.9808" + id="path5213-6-8-4-9-9-56-6-9-6-1" inkscape:connector-curvature="0" - id="path7594-3" - d="m 1388.7657,822.05276 c 0,5.76689 -5.5816,10.98852 -10.3722,10.98852 v 0.9942 c 5.4909,0 10.4382,-5.64487 10.4382,-11.98272 z" - style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#0b0b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99419165;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + sodipodi:nodetypes="cc" /> <path - sodipodi:nodetypes="ccccc" + style="fill:none;stroke:#f6fcf6;stroke-width:1.00000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-2-0)" + d="m 1099.1838,1002.8716 c -10.8263,-13.3296 -17.2825,-22.994 -19.3174,-41.9076" + id="path5213-6-8-4-9-9-56-6-28-7-2" inkscape:connector-curvature="0" - id="path7594-36" - d="m 1385.327,822.06555 c 0,3.80652 -3.6842,7.25313 -6.8462,7.25313 v 0.65624 c 3.6244,0 6.8899,-3.72599 6.8899,-7.90937 z" - style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#0b0b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.65623033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + sodipodi:nodetypes="cc" /> + <g + transform="translate(0.00410028,-36.452254)" + id="g7243"> + <g + id="g28835" + transform="translate(81.09879,-12.221496)"> + <text + id="text3021-8-4-1-8-8-2-7" + y="981.17542" + x="1222.7643" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" + y="981.17542" + x="1222.7643" + id="tspan3023-4-0-1-9-63-8-7" + sodipodi:role="line">Bike</tspan></text> + <ellipse + ry="29.092394" + rx="67.643234" + cy="986.1272" + cx="1248.0287" + id="path3639-4-4-9-5" + style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + id="text3021-8-4-1-8-8-2-7-4" + y="1005.0751" + x="1202.3188" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" + y="1005.0751" + x="1202.3188" + id="tspan3023-4-0-1-9-63-8-7-8" + sodipodi:role="line">Flasher</tspan></text> + </g> + <g + id="g28877" + transform="translate(-82.541209,-37.878365)"> + <text + id="text3021-8-4-1-8-8-2-7-2" + y="1087.1008" + x="1357.3134" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" + y="1087.1008" + x="1357.3134" + id="tspan3023-4-0-1-9-63-8-7-89" + sodipodi:role="line">Party</tspan></text> + <ellipse + ry="29.092394" + rx="67.643234" + cy="1091.3002" + cx="1388.598" + id="path3639-4-4-9-5-3" + style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + id="text3021-8-4-1-8-8-2-7-4-6" + y="1111.7531" + x="1345.8983" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" + y="1111.7531" + x="1345.8983" + id="tspan3023-4-0-1-9-63-8-7-8-8" + sodipodi:role="line">Strobe</tspan></text> + </g> + <g + id="g28919" + transform="translate(-88.581451,-166.13611)"> + <text + id="text3021-8-4-1-8-8-2-7-2-2" + y="1219.2247" + x="1200.4392" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" + y="1219.2247" + x="1200.4392" + id="tspan3023-4-0-1-9-63-8-7-89-1" + sodipodi:role="line">Tactical</tspan></text> + <ellipse + ry="29.092394" + rx="67.643234" + cy="1218.9089" + cx="1247.527" + id="path3639-4-4-9-5-3-0" + style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + id="text3021-8-4-1-8-8-2-7-4-6-5" + y="1239.3618" + x="1204.8273" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" + y="1239.3618" + x="1204.8273" + id="tspan3023-4-0-1-9-63-8-7-8-8-1" + sodipodi:role="line">Strobe</tspan></text> + </g> + <g + id="g28961" + transform="translate(-2.2028768,-134.13011)"> + <text + id="text3021-8-4-1-8-8-2-7-2-2-0" + y="1109.4977" + x="1088.8826" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.33333397px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:21.33333397px;line-height:1.25;stroke-width:1.06666672" + y="1109.4977" + x="1088.8826" + id="tspan3023-4-0-1-9-63-8-7-89-1-8" + sodipodi:role="line">Lightning</tspan></text> + <ellipse + ry="29.092394" + rx="67.643234" + cy="1109.5366" + cx="1139.1631" + id="path3639-4-4-9-5-3-0-5" + style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <text + id="text3021-8-4-1-8-8-2-7-4-6-5-0" + y="1131.0537" + x="1106.3962" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.33333397px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:21.33333397px;line-height:1.25;stroke-width:1.06666672" + y="1131.0537" + x="1106.3962" + id="tspan3023-4-0-1-9-63-8-7-8-8-1-6" + sodipodi:role="line">Storm</tspan></text> + </g> + <g + id="g5944" + transform="translate(2.1928969,2.1881554)"> + <text + id="text3021-8-4-1-8-8-2-7-2-2-0-6" + y="923.39539" + x="1182.9138" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672" + y="923.39539" + x="1182.9138" + id="tspan3023-4-0-1-9-63-8-7-89-1-8-7" + sodipodi:role="line">Candle</tspan></text> + <ellipse + ry="29.092394" + rx="67.643234" + cy="913.85162" + cx="1227.4263" + id="path3639-4-4-9-5-3-0-5-5" + style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5213-6-8-4-9-9-8-3-5" + d="m 1262.9626,853.74322 c 45.3646,10.29118 76.432,-7.96445 88.9489,-15.20313" + style="fill:none;stroke:#000000;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:4.26666689, 4.26666689;stroke-dashoffset:2.13333344;stroke-opacity:1;marker-end:url(#Arrow1Mend-88-1)" /> + <text + id="text39623-3" + y="857.24713" + x="1342.4323" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.66666698px;line-height:110.00000238%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + id="tspan39625-1" + y="857.24713" + x="1342.4323" + sodipodi:role="line">+30 min</tspan></text> + <g + id="g7705"> + <circle + style="opacity:1;fill:url(#linearGradient7569);fill-opacity:1;stroke:url(#linearGradient7692);stroke-width:1.715;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path7491" + cx="1375.8579" + cy="821.88452" + r="22.470001" /> + <ellipse + style="opacity:1;fill:#fcfcfd;fill-opacity:1;stroke:none;stroke-width:1.83983243;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path7491-8" + cx="1375.8579" + cy="821.88452" + rx="20.29092" + ry="20.7346" /> + <path + style="opacity:1;fill:url(#linearGradient7538);fill-opacity:1;stroke:none;stroke-width:1.84021866;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path7491-5" + sodipodi:type="arc" + sodipodi:cx="-821.88452" + sodipodi:cy="1375.8579" + sodipodi:rx="20.743311" + sodipodi:ry="20.29092" + sodipodi:start="0" + sodipodi:end="3.1415927" + sodipodi:open="true" + d="m -801.14121,1375.8579 a 20.743311,20.29092 0 0 1 -10.37166,17.5725 20.743311,20.29092 0 0 1 -20.74331,0 20.743311,20.29092 0 0 1 -10.37165,-17.5725" + transform="rotate(-90)" /> + <path + style="opacity:1;fill:none;fill-opacity:1;stroke:#7b7b7b;stroke-width:1.3436662;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 1355.307,821.88451 h 3.8436" + id="path7493" + inkscape:connector-curvature="0" /> + <path + style="opacity:1;fill:none;fill-opacity:1;stroke:#7b7b7b;stroke-width:1.3436662;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 1396.1468,821.88451 h -3.3507" + id="path7495" + inkscape:connector-curvature="0" /> + <path + style="opacity:1;fill:none;fill-opacity:1;stroke:#7b7b7b;stroke-width:1.3436662;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 1375.8579,801.14199 v 3.54788" + id="path7497" + inkscape:connector-curvature="0" /> + <path + style="opacity:1;fill:none;fill-opacity:1;stroke:#7b7b7b;stroke-width:1.3436662;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 1375.8579,842.61913 v -3.64646" + id="path7499" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#010109;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.01549935;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 1374.5713,821.88451 1.1658,17.72796 h 0.34 l 1.0673,-17.72796 z" + id="path7505" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /> + <path + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#0b0b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.3436662;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 1392.31,822.12981 c 0,7.79405 -7.5434,14.85118 -14.018,14.85118 v 1.34367 c 7.4212,0 14.1074,-7.62913 14.1074,-16.19485 z" + id="path7594" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /> + <path + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#0b0b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99419165;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 1388.7657,822.05276 c 0,5.76689 -5.5816,10.98852 -10.3722,10.98852 v 0.9942 c 5.4909,0 10.4382,-5.64487 10.4382,-11.98272 z" + id="path7594-3" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /> + <path + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#0b0b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.65623033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 1385.327,822.06555 c 0,3.80652 -3.6842,7.25313 -6.8462,7.25313 v 0.65624 c 3.6244,0 6.8899,-3.72599 6.8899,-7.90937 z" + id="path7594-36" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /> + </g> </g> + <path + style="fill:none;stroke:#ffffff;stroke-width:1.00000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-9-6)" + d="m 1499.2534,277.65781 c 49.5295,21.01119 54.6565,-32.82142 113.6548,0" + id="path5213-6-8-4-9-9-56-7-15" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#fcfffc;stroke-width:1.00000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.9862002;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-9-2)" + d="m 1498.1078,321.38191 c 49.5295,21.0112 54.6565,-32.82141 113.6548,0" + id="path5213-6-8-4-9-9-9-29-90-6" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:1.00000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-6-0-0)" + d="m 1131.0344,258.42719 c 48.1809,-3.99296 64.2076,-2.68523 79.9712,-42.47521 42.8072,-108.05255 133.489,-146.164071 131.2384,-34.5044" + id="path5213-6-8-4-9-9-9-29-5-2-7" + inkscape:connector-curvature="0" + sodipodi:nodetypes="csc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:1.00000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-79-0-6)" + d="m 1159.4045,270.23739 c 108.4581,4.22547 23.1574,-88.17063 154.3238,-89.5992" + id="path5213-6-8-4-9-9-8-2-0-3" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <g + transform="translate(980.51459,-148.00986)" + id="g23629-5-4"> + <ellipse + style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:4.26666689;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path3639-2-0-8" + cx="140.59442" + cy="435.21741" + rx="48.48732" + ry="29.092394" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="112.51038" + y="444.62402" + id="text3021-8-9-7"><tspan + sodipodi:role="line" + id="tspan3023-4-6-0" + x="112.51038" + y="444.62402" + style="font-size:25.60000038px;line-height:1.25;stroke-width:1.06666672">OFF</tspan></text> + </g> + <path + style="fill:none;stroke:#ffffff;stroke-width:1.00000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-9-8-2)" + d="m 1364.0175,147.54301 c 29.3791,49.77199 28.7391,140.19451 -0.7576,180.57634" + id="path5213-6-8-4-9-9-56-7-1-5" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:1.00000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-62-70-9)" + d="M 1419.75,188.60753 V 372.1669" + id="path5213-6-8-2-4-1" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <g + id="g25632"> + <path + sodipodi:nodetypes="csc" + inkscape:connector-curvature="0" + id="path5213-6-8-4-9-9-9-4-6-4-2-3-7" + d="m 1284.876,826.56171 c 75.92,10.10449 72.6994,-54.50393 12.2633,-55.89492 -51.6628,-1.18906 -74.3675,75.06672 15.6104,66.18339" + style="fill:none;stroke:#ffffff;stroke-width:1.00000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-31-1-0-9-9-9)" /> + </g> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5213-6-8-4-9-9-56-6-28-7-0" + d="M 23.378604,46.366264 C 12.552304,33.036664 6.0961038,23.372264 4.0612038,4.458664" + style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-2-2)" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path5213-6-8-4-9-9-56-6-28-7-29" + d="M 23.378604,46.366264 C 12.552304,33.036664 6.0961038,23.372264 4.0612038,4.458664" + style="fill:none;stroke:#009d00;stroke-width:2.13333344;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-367-3-5-2-5)" /> </g> </svg> diff --git a/spaghetti-monster/darkhorse/darkhorse.c b/spaghetti-monster/darkhorse/darkhorse.c index ce1db2b..e613f55 100644 --- a/spaghetti-monster/darkhorse/darkhorse.c +++ b/spaghetti-monster/darkhorse/darkhorse.c @@ -263,6 +263,7 @@ uint8_t strobe_beacon_state(Event event, uint16_t arg) { return MISCHIEF_MANAGED; } // 1 click (initially): cancel current blink + // FIXME: this is no longer necessary; FSM does this automatically now if (event == EV_click1_release) { interrupt_nice_delays(); return MISCHIEF_MANAGED; diff --git a/spaghetti-monster/fsm-adc.c b/spaghetti-monster/fsm-adc.c index 2ec630c..8decd9d 100644 --- a/spaghetti-monster/fsm-adc.c +++ b/spaghetti-monster/fsm-adc.c @@ -51,7 +51,7 @@ inline void ADC_off() { static inline uint8_t calc_voltage_divider(uint16_t value) { // use 9.7 fixed-point to get sufficient precision uint16_t adc_per_volt = ((ADC_44<<7) - (ADC_22<<7)) / (44-22); - // incoming value is 14.2 fixed-point, so shift it 2 bits less + // incoming value is 8.2 fixed-point, so shift it 2 bits less uint8_t result = ((value<<5) / adc_per_volt) + VOLTAGE_FUDGE_FACTOR; return result; } diff --git a/spaghetti-monster/rampingios/rampingiosv3.c b/spaghetti-monster/rampingios/rampingiosv3.c index ff81f61..399bcf0 100644 --- a/spaghetti-monster/rampingios/rampingiosv3.c +++ b/spaghetti-monster/rampingios/rampingiosv3.c @@ -274,11 +274,6 @@ uint8_t off_state(Event event, uint16_t arg) { set_state(steady_state, memorized_level); return MISCHIEF_MANAGED; } - // 2 clicks (initial press): off, to prep for later events - else if (event == EV_click2_press) { - set_level(0); - return MISCHIEF_MANAGED; - } // click, hold: go to highest level (ceiling) (for ramping down) else if (event == EV_click2_hold) { set_state(steady_state, MAX_LEVEL); @@ -289,6 +284,11 @@ uint8_t off_state(Event event, uint16_t arg) { set_state(steady_state, MAX_LEVEL); return MISCHIEF_MANAGED; } + // 3 clicks (initial press): off, to prep for later events + else if (event == EV_click3_press) { + set_level(0); + return MISCHIEF_MANAGED; + } #ifdef USE_BATTCHECK // 3 clicks: battcheck mode / blinky mode group 1 else if (event == EV_3clicks) { @@ -1154,9 +1154,6 @@ void loop() { StatePtr state = current_state; - #ifdef USE_DYNAMIC_UNDERCLOCKING - auto_clock_speed(); - #endif if (0) {} #ifdef USE_BATTCHECK |
