{ "version": 1, "settings": { "hold_ms": 500, "type_delay": 15, "orientation": 0, "resume_delay": 0, "combo_pre_ms": 500, "combo_post_ms": 500, "probe_timeout_ms": 300, "media_hold_ms": 100, "type_shift_extra_ms": 25, "type_settle_ms": 150, "pause_margin_left": 4, "pause_margin_right": 4, "pause_margin_top": 16, "pause_margin_bottom": 12 }, "macros": [ { "name": "Example", "label_color": "red", "image_path": "", "nodes": [ { "id": "fba20d14", "type": "start", "x": 100, "y": 1800, "data": {}, "flipped": false }, { "id": "36d4e2de", "type": "note", "x": -242.60315312873973, "y": 1601.0958832220958, "data": { "text": "This Example routine demonstrates every available node type. The Branch below fans out to one demo of each - pick an option on the device to try it. Open the Settings dialog (top-right) for device tuning, RS232 Terminal, and Backups.", "font_size": 14, "color": "white", "width": 380 }, "flipped": false }, { "id": "e19ca4b8", "type": "note", "x": 146.00089515469722, "y": 1626.0209419763205, "data": { "text": "Tips: zoom with the scroll wheel, pan by dragging on empty canvas, press F to flip a node, Ctrl+C / Ctrl+V to copy nodes.", "font_size": 12, "color": "white", "width": 180 }, "flipped": false }, { "id": "da1b3c38", "type": "branch", "x": 374, "y": 1632, "data": { "choices": [ { "label": "Type Text", "next": -1 }, { "label": "Key Combo", "next": -1 }, { "label": "Pause", "next": -1 }, { "label": "Branch", "next": -1 }, { "label": "Loop (Repeat)", "next": -1 }, { "label": "Loop Selector", "next": -1 }, { "label": "Mouse Click", "next": -1 }, { "label": "Media Key", "next": -1 }, { "label": "Variables", "next": -1 }, { "label": "RS232 Send", "next": -1 }, { "label": "Sub-Routine", "next": -1 }, { "label": "PC Alive Check", "next": -1 }, { "label": "Macro Replay", "next": -1 } ] }, "flipped": false }, { "id": "0b0b0001", "type": "note", "x": 1084.720813913096, "y": -132.37918889877432, "data": { "text": "Type Text - sends the string via USB HID. Insert (VAR{name}) tokens to interpolate variables at runtime.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "2851ffd9", "type": "text", "x": 1087.4367678003716, "y": 6.173681454207928, "data": { "text": "Hello from your routine!", "language": "none" }, "flipped": false }, { "id": "0b0b0002", "type": "note", "x": 1082.872558116675, "y": 150.5927612052953, "data": { "text": "Key Combo - press a modifier+key shortcut (Ctrl+C here). Custom Timings let you tune pre/post and per-key hold delays.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "8556445d", "type": "combo", "x": 1080.1957986188659, "y": 280.8801867280503, "data": { "mods": [ "ctrl" ], "key": "c", "custom_timings": false, "custom_pre_ms": 167, "custom_post_ms": 167, "custom_key_pre_ms": 3, "custom_key_post_ms": 8 }, "flipped": false }, { "id": "0b0b0003", "type": "note", "x": 1080.1957986188659, "y": 497.5536355853536, "data": { "text": "Pause - halt until the user clicks the device or a timer fires. Adjustable font size, text color, and an on-device preview in the properties panel.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "49719853", "type": "pause", "x": 1080.1957986188659, "y": 630.8836349076065, "data": { "wait": "click", "text": "Click to continue", "font_size": 12 }, "flipped": false }, { "id": "0b0b0004", "type": "note", "x": 1074.8422796232478, "y": 787.0164399484735, "data": { "text": "Branch - present an on-device menu. Each choice gets its own output port. Switch it to Variable mode to route on the value of a variable instead of asking the user.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "ca82e599", "type": "branch", "x": 1078.8443540734725, "y": 932.2350794529999, "data": { "choices": [ { "label": "Yes", "next": -1, "match_value": "", "color": "white" }, { "label": "No", "next": -1, "match_value": "", "color": "white" } ], "mode": "manual", "var_name": "", "var_scope": "auto" }, "flipped": false }, { "id": "0b0b0005", "type": "note", "x": 1491.0800009663621, "y": 778.9861614550454, "data": { "text": "Delay - wait N ms before continuing.", "font_size": 12, "color": "white", "width": 200 }, "flipped": false }, { "id": "0a0a1111", "type": "delay", "x": 1505.8021782043122, "y": 859.4661107455778, "data": { "ms": 500 }, "flipped": false }, { "id": "0b0b0006", "type": "note", "x": 1789.8930136845931, "y": 765.1320312924012, "data": { "text": "Aggregator - merge multiple incoming paths into one output. Adjustable input count in the properties panel.", "font_size": 12, "color": "white", "width": 200 }, "flipped": false }, { "id": "0a0a2222", "type": "aggregator", "x": 1792.5697731824027, "y": 903.6326424594274, "data": { "input_count": 2 }, "flipped": false }, { "id": "0b0b0007", "type": "note", "x": 1080.2088634153547, "y": 1087.2908006747389, "data": { "text": "Loop - execute the body N times. Wire the body's tail back to Loop Back. The Done output fires once when N iterations finish.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "dcfb234b", "type": "repeat", "x": 1116.3320518392882, "y": 1220.0328841549924, "data": { "count": 3, "start_idx": 0, "use_selector": false }, "flipped": false }, { "id": "0b0b0008", "type": "note", "x": 1515.5946804413281, "y": 1095.4778567260325, "data": { "text": "Iteration Branch - pick a different path on a specific iteration of the linked Loop. Optional 'skip on final iteration' for cleanup-style flows.", "font_size": 12, "color": "white", "width": 200 }, "flipped": false }, { "id": "0a0a3333", "type": "iteration_branch", "x": 1508.478937702121, "y": 1184.8953259747636, "data": { "loop_node_id": "dcfb234b", "choices": [ { "label": "Other iterations" }, { "label": "First iteration" } ], "skip_final_iteration": false }, "flipped": false }, { "id": "0b0b0009", "type": "note", "x": 1071.2849013945813, "y": 1374.517086297065, "data": { "text": "Loop Selector - prompt the user on-device for the loop count. Feed it into a Loop with 'use selector' enabled.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "96651684", "type": "loop_selector", "x": 1080.1957986188659, "y": 1480.8801867280501, "data": { "min": 1, "max": 10, "step": 1, "default": 1, "prompt": "Loop count?", "ask_start": false }, "flipped": false }, { "id": "0b0b000a", "type": "note", "x": 1072.0871313465057, "y": 1646.9821646722855, "data": { "text": "Mouse Click - send a left / right / middle button click via USB HID. Position is not controlled; clicks land wherever the host cursor is.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "3524d897", "type": "mouse", "x": 1096.4131331635867, "y": 1772.7715194556897, "data": { "button": "left", "action": "click" }, "flipped": false }, { "id": "0b0b000b", "type": "note", "x": 1046.394457347465, "y": 1882.7396458221874, "data": { "text": "Media Key - Play/Pause, Vol +/-, Mute, Next, Prev, etc. via USB HID", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "f5706152", "type": "media", "x": 1070.7204591645461, "y": 1966.7905312788116, "data": { "action": "play_pause" }, "flipped": false }, { "id": "0b0b000c", "type": "note", "x": 1002.1178471503137, "y": 2496.1623880030493, "data": { "text": "Variables - unified node with 5 modes. The sub-branch below fans out to one demo of each mode. Define names in the Variables window (toolbar); scope is per-device by MAC or Universal.", "font_size": 12, "color": "white", "width": 260 }, "flipped": false }, { "id": "785a3445", "type": "bluetooth", "x": 1500, "y": 2200, "data": { "mode": "pull_ble", "scope": "universal", "names": [], "play_sound": true, "assignments": [], "script": "", "script_language": "powershell", "var_name": "", "pre_listen_ms": 500, "listen_window_ms": 5000, "outcomes": [], "script_mode": "manual", "elevated_launch": { "enabled": false, "command": "powershell -Command \"Start-Process wt -Verb RunAs\"", "win_r_wait_ms": 5000, "post_type_wait_ms": 15000 }, "sequence": [] }, "flipped": false }, { "id": "0b0b000d", "type": "note", "x": 904.9025895878517, "y": 3090.9637316989774, "data": { "text": "RS232 Send - emit a serial message at the configured baud through the Atomic RS232 base. Supports (VAR{name}) expansion and an optional 'wait for response' check.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "6fcd57ee", "type": "rs232", "x": 905.5639025191554, "y": 3275.1216205180726, "data": { "baud": 9600, "data_bits": 8, "stop_bits": "1", "parity": "none", "message": "Hello from RS232", "line_ending": "crlf", "wait_response": false, "expected_response": "", "timeout_ms": 5000, "post_send_delay_ms": 0 }, "flipped": false }, { "id": "0b0b000e", "type": "note", "x": 902.8610134283688, "y": 3413.327029541044, "data": { "text": "Sub-Routine - call a reusable routine defined in the Sub-Routines profile. Edit that profile to manage your shared blocks.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "650c012a", "type": "subroutine", "x": 899.4968114062781, "y": 3544.7861649536885, "data": { "name": "Open Run Box" }, "flipped": false }, { "id": "0b0b000f", "type": "note", "x": 902.5015382799311, "y": 3680.8134882671293, "data": { "text": "PC Alive Check - toggle Num Lock and watch the LED state to confirm the host PC is responding. Modes: PC Response (any change), Num Lock ON, Num Lock OFF. Optional polling loop.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "e5303f37", "type": "pc_alive_check", "x": 905.5639025191554, "y": 3875.1216205180726, "data": { "condition": "pc_response", "loop": true, "poll_delay_ms": 500 }, "flipped": false }, { "id": "0b0b0010", "type": "note", "x": 904.047129740936, "y": 4023.8868016230053, "data": { "text": "Macro - record and replay an exact HID key sequence, including chord timings and per-key hold durations. Mouse input is never captured.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "75a52e31", "type": "macro", "x": 905.5639025191554, "y": 4175.121620518077, "data": { "events": [], "name": "" }, "flipped": false }, { "id": "ac46db7a", "type": "note", "x": 1082.0141276583024, "y": 346.0823132565328, "data": { "text": "Tip: inside Custom Timings, use Record to capture the timings of a real key combo on your keyboard.", "font_size": 11, "color": "white", "width": 220 }, "flipped": false }, { "id": "0c0c0001", "type": "text", "x": 1860.7356868011127, "y": 1084.3911840024282, "data": { "text": "...continuing", "language": "none" }, "flipped": false }, { "id": "0d0d0001", "type": "note", "x": 1856.6813531649325, "y": 1013.4489658181644, "data": { "text": "Runs every iteration except the first.", "font_size": 12, "color": "white", "width": 200 }, "flipped": false }, { "id": "0c0c0002", "type": "text", "x": 1858.032797710326, "y": 1240.601622188037, "data": { "text": "First iteration!", "language": "none" }, "flipped": false }, { "id": "0d0d0002", "type": "note", "x": 1844.5183522563918, "y": 1158.847847640626, "data": { "text": "Runs only on the first iteration.", "font_size": 12, "color": "white", "width": 200 }, "flipped": false }, { "id": "0c0c0003", "type": "aggregator", "x": 2130.195798618866, "y": 1240.8801867280501, "data": { "input_count": 2 }, "flipped": false }, { "id": "0d0d0003", "type": "note", "x": 2126.1414649826856, "y": 1180.7495249069336, "data": { "text": "Merge both branches before looping back.", "font_size": 12, "color": "white", "width": 200 }, "flipped": false }, { "id": "0c0c0004", "type": "repeat", "x": 1610.1957986188665, "y": 1480.8801867280501, "data": { "count": 1, "start_idx": 0, "use_selector": true }, "flipped": false }, { "id": "0d0d0004", "type": "note", "x": 1599.3842422557193, "y": 1371.1518549089512, "data": { "text": "When 'Use selector value' is enabled, the Loop takes its count from the upstream Loop Selector instead of the static count field.", "font_size": 12, "color": "white", "width": 220 }, "flipped": false }, { "id": "0c0c0005", "type": "text", "x": 1612.4168499422856, "y": 1608.518718262276, "data": { "text": "Looping!", "language": "none" }, "flipped": true }, { "id": "0d0d0005", "type": "note", "x": 2130.195798618866, "y": 1350.8801867280501, "data": { "text": "Body of the loop, runs N times where N is what the user picked.", "font_size": 12, "color": "white", "width": 200 }, "flipped": false }, { "id": "0c0c0006", "type": "text", "x": 2150, "y": 2200, "data": { "text": "Hello (VAR{example})!", "language": "none" }, "flipped": false }, { "id": "0d0d0006", "type": "note", "x": 2150, "y": 2080, "data": { "text": "Type Text with (VAR{name}) interpolates the variable at runtime. Define names in the Variables window - host edits are pushed over BLE.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "4b1c882b", "type": "note", "x": 1598.1544277194112, "y": 1685.96021111963, "data": { "text": "Tip: select a node and press F to flip its input/output side. Useful for wires that would otherwise cross.", "font_size": 11, "color": "white", "width": 160 }, "flipped": false }, { "id": "0e0e0000", "type": "branch", "x": 1050, "y": 2700, "data": { "choices": [ { "label": "Pull BLE", "next": -1, "match_value": "", "color": "white" }, { "label": "Push BLE", "next": -1, "match_value": "", "color": "white" }, { "label": "Request BLE", "next": -1, "match_value": "", "color": "white" }, { "label": "Set Local", "next": -1, "match_value": "", "color": "white" }, { "label": "Get Local", "next": -1, "match_value": "", "color": "white" } ], "mode": "manual", "var_name": "", "var_scope": "auto" }, "flipped": false }, { "id": "0e0e1001", "type": "note", "x": 1495.4316519295037, "y": 2110.9263613055678, "data": { "text": "Pull BLE - the M5Stack queries the Python app for updated variables.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "0e0e0002", "type": "bluetooth", "x": 1500, "y": 2450, "data": { "mode": "push_ble", "scope": "universal", "names": [], "play_sound": true, "assignments": [], "script": "", "script_language": "powershell", "var_name": "", "pre_listen_ms": 500, "listen_window_ms": 5000, "outcomes": [], "script_mode": "manual", "elevated_launch": { "enabled": false, "command": "powershell -Command \"Start-Process wt -Verb RunAs\"", "win_r_wait_ms": 5000, "post_type_wait_ms": 15000 }, "sequence": [] }, "flipped": false }, { "id": "0e0e1002", "type": "note", "x": 1483.5408309068825, "y": 2354.87886549474, "data": { "text": "Push BLE - the M5Stack pushes its variables back to the host via its per-device BLE profile.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "0e0e0003", "type": "bluetooth", "x": 1500.0, "y": 2741.796494031168, "data": { "mode": "request_ble", "scope": "universal", "names": [], "play_sound": true, "assignments": [], "script": "", "script_language": "powershell", "var_name": "", "pre_listen_ms": 500, "listen_window_ms": 5000, "outcomes": [], "script_mode": "manual", "elevated_launch": { "enabled": false, "command": "powershell -Command \"Start-Process wt -Verb RunAs\"", "win_r_wait_ms": 5000, "post_type_wait_ms": 15000 }, "sequence": [] }, "flipped": false }, { "id": "0e0e1003", "type": "note", "x": 1482.5456762870904, "y": 2570.0484538021, "data": { "text": "Request BLE - device prompts the technician (via a dialog in the Python app) to edit one or more variables. Blocks until the tech submits or cancels. Great for one-off inputs like 'enter ticket number'.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "0e0e0004", "type": "bluetooth", "x": 1512.9370100572658, "y": 2964.927319296846, "data": { "mode": "set_local", "scope": "universal", "names": [], "play_sound": true, "assignments": [ { "name": "example", "value": "hello" } ], "script": "", "script_language": "powershell", "var_name": "", "pre_listen_ms": 500, "listen_window_ms": 5000, "outcomes": [], "script_mode": "manual", "elevated_launch": { "enabled": false, "command": "powershell -Command \"Start-Process wt -Verb RunAs\"", "win_r_wait_ms": 5000, "post_type_wait_ms": 15000 }, "sequence": [] }, "flipped": false }, { "id": "0e0e1004", "type": "note", "x": 1471.5989754694026, "y": 2855.8740201145306, "data": { "text": "Set Variables - assign one or more variables on the M5Stack directly. This mode doesn't pull / push over BLE.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "0e0e0005", "type": "bluetooth", "x": 1502.985463859369, "y": 3271.65113262486, "data": { "mode": "get_local", "scope": "universal", "names": [], "play_sound": true, "assignments": [], "script": "", "script_language": "powershell", "var_name": "", "pre_listen_ms": 500, "listen_window_ms": 5000, "outcomes": [], "script_mode": "manual", "elevated_launch": { "enabled": false, "command": "powershell -Command \"Start-Process wt -Verb RunAs\"", "win_r_wait_ms": 5000, "post_type_wait_ms": 15000 }, "sequence": [] }, "flipped": false }, { "id": "0e0e1005", "type": "note", "x": 1470.6038208496143, "y": 3094.927319296842, "data": { "text": "Get Variables - the M5Stack types a host-side script over USB (typically PowerShell) and decodes the answer by counting Scroll Lock toggles the script fires back. This mode doesn't pull / push over BLE.", "font_size": 12, "color": "white", "width": 240 }, "flipped": false }, { "id": "0ef8de98", "type": "note", "x": 1460.1938152084126, "y": 3378.2035059688315, "data": { "text": "Note: you could use this for something like \"Is the C:\\Users\\admin directory present?\" or \"Is application x y and z installed?\"", "font_size": 11, "color": "white", "width": 220 }, "flipped": false } ], "connections": [ { "from": "fba20d14", "from_port": "out", "to": "da1b3c38", "to_port": "in" }, { "from": "da1b3c38", "from_port": "out_0", "to": "2851ffd9", "to_port": "in" }, { "from": "da1b3c38", "from_port": "out_1", "to": "8556445d", "to_port": "in" }, { "from": "da1b3c38", "from_port": "out_2", "to": "49719853", "to_port": "in" }, { "from": "da1b3c38", "from_port": "out_3", "to": "ca82e599", "to_port": "in" }, { "from": "da1b3c38", "from_port": "out_4", "to": "dcfb234b", "to_port": "in" }, { "from": "da1b3c38", "from_port": "out_5", "to": "96651684", "to_port": "in" }, { "from": "da1b3c38", "from_port": "out_6", "to": "3524d897", "to_port": "in" }, { "from": "da1b3c38", "from_port": "out_7", "to": "f5706152", "to_port": "in" }, { "from": "da1b3c38", "from_port": "out_9", "to": "6fcd57ee", "to_port": "in" }, { "from": "da1b3c38", "from_port": "out_10", "to": "650c012a", "to_port": "in" }, { "from": "da1b3c38", "from_port": "out_11", "to": "e5303f37", "to_port": "in" }, { "from": "da1b3c38", "from_port": "out_12", "to": "75a52e31", "to_port": "in" }, { "from": "ca82e599", "from_port": "out_0", "to": "0a0a1111", "to_port": "in" }, { "from": "0a0a1111", "from_port": "out", "to": "0a0a2222", "to_port": "in_0" }, { "from": "ca82e599", "from_port": "out_1", "to": "0a0a2222", "to_port": "in_1" }, { "from": "dcfb234b", "from_port": "loop_body", "to": "0a0a3333", "to_port": "in" }, { "from": "0a0a3333", "from_port": "out_0", "to": "0c0c0001", "to_port": "in" }, { "from": "0a0a3333", "from_port": "out_1", "to": "0c0c0002", "to_port": "in" }, { "from": "0c0c0001", "from_port": "out", "to": "0c0c0003", "to_port": "in_0" }, { "from": "0c0c0002", "from_port": "out", "to": "0c0c0003", "to_port": "in_1" }, { "from": "0c0c0003", "from_port": "out", "to": "dcfb234b", "to_port": "loop_back" }, { "from": "96651684", "from_port": "out", "to": "0c0c0004", "to_port": "in" }, { "from": "0c0c0004", "from_port": "loop_body", "to": "0c0c0005", "to_port": "in" }, { "from": "0c0c0005", "from_port": "out", "to": "0c0c0004", "to_port": "loop_back" }, { "from": "785a3445", "from_port": "out", "to": "0c0c0006", "to_port": "in" }, { "from": "da1b3c38", "from_port": "out_8", "to": "0e0e0000", "to_port": "in" }, { "from": "0e0e0000", "from_port": "out_0", "to": "785a3445", "to_port": "in" }, { "from": "0e0e0000", "from_port": "out_1", "to": "0e0e0002", "to_port": "in" }, { "from": "0e0e0000", "from_port": "out_2", "to": "0e0e0003", "to_port": "in" }, { "from": "0e0e0000", "from_port": "out_3", "to": "0e0e0004", "to_port": "in" }, { "from": "0e0e0000", "from_port": "out_4", "to": "0e0e0005", "to_port": "in" } ] }, { "name": "Test", "label_color": "white", "image_path": "", "nodes": [ { "id": "ac45fd48", "type": "start", "x": 100, "y": 100, "data": {}, "flipped": false }, { "id": "53a6df6b", "type": "macro", "x": 339.42111444989905, "y": 85.49173666913251, "data": { "events": [ [ 703, 0, 227 ], [ 962, 0, 21 ], [ 1078, 1, 21 ], [ 1228, 1, 227 ], [ 2175, 0, 26 ], [ 2272, 1, 26 ], [ 2373, 0, 23 ], [ 2460, 1, 23 ], [ 2580, 0, 225 ], [ 2964, 0, 224 ], [ 3154, 0, 40 ], [ 3256, 1, 40 ], [ 3331, 1, 225 ], [ 3340, 1, 224 ], [ 4481, 0, 80 ], [ 4582, 1, 80 ], [ 4609, 0, 40 ], [ 4714, 1, 40 ], [ 6670, 0, 26 ], [ 6752, 0, 11 ], [ 6773, 1, 26 ], [ 6830, 1, 11 ], [ 6892, 0, 18 ], [ 6997, 1, 18 ], [ 7087, 0, 4 ], [ 7186, 1, 4 ], [ 7197, 0, 16 ], [ 7294, 1, 16 ], [ 7371, 0, 12 ], [ 7468, 1, 12 ], [ 7608, 0, 40 ], [ 7685, 1, 40 ], [ 7981, 0, 11 ], [ 8102, 1, 11 ], [ 8184, 0, 18 ], [ 8277, 1, 18 ], [ 8291, 0, 22 ], [ 8360, 0, 23 ], [ 8402, 1, 22 ], [ 8460, 1, 23 ], [ 8544, 0, 17 ], [ 8641, 0, 4 ], [ 8648, 1, 17 ], [ 8747, 1, 4 ], [ 8764, 0, 16 ], [ 8831, 0, 8 ], [ 8862, 1, 16 ], [ 8919, 1, 8 ], [ 9008, 0, 40 ], [ 9085, 1, 40 ], [ 9508, 0, 23 ], [ 9594, 0, 22 ], [ 9639, 1, 23 ], [ 9729, 1, 22 ], [ 10037, 0, 42 ], [ 10115, 1, 42 ], [ 10162, 0, 42 ], [ 10278, 1, 42 ], [ 10377, 0, 42 ], [ 10498, 1, 42 ], [ 10610, 0, 8 ], [ 10696, 1, 8 ], [ 10837, 0, 11 ], [ 10934, 1, 11 ], [ 11109, 0, 42 ], [ 11202, 1, 42 ], [ 11423, 0, 11 ], [ 11519, 1, 11 ], [ 11714, 0, 18 ], [ 11839, 1, 18 ], [ 11851, 0, 44 ], [ 11993, 1, 44 ], [ 12299, 0, 42 ], [ 12361, 1, 42 ], [ 12416, 0, 42 ], [ 12490, 1, 42 ], [ 12524, 0, 42 ], [ 12658, 1, 42 ], [ 13471, 0, 6 ], [ 13543, 0, 11 ], [ 13564, 1, 6 ], [ 13627, 1, 11 ], [ 13700, 0, 18 ], [ 13749, 0, 44 ], [ 13821, 1, 18 ], [ 13865, 0, 225 ], [ 13885, 1, 44 ], [ 13947, 0, 12 ], [ 13973, 0, 44 ], [ 14031, 1, 225 ], [ 14074, 1, 12 ], [ 14110, 1, 44 ], [ 14145, 0, 4 ], [ 14249, 1, 4 ], [ 14265, 0, 16 ], [ 14309, 0, 44 ], [ 14369, 1, 16 ], [ 14435, 0, 23 ], [ 14447, 1, 44 ], [ 14494, 0, 8 ], [ 14513, 0, 22 ], [ 14562, 1, 23 ], [ 14631, 0, 23 ], [ 14676, 1, 22 ], [ 14709, 1, 8 ], [ 14767, 1, 23 ], [ 14801, 0, 12 ], [ 14892, 1, 12 ], [ 14963, 0, 17 ], [ 15007, 0, 10 ], [ 15051, 1, 17 ], [ 15085, 1, 10 ], [ 15094, 0, 44 ], [ 15187, 0, 23 ], [ 15196, 1, 44 ], [ 15236, 0, 11 ], [ 15289, 0, 8 ], [ 15314, 0, 44 ], [ 15364, 1, 11 ], [ 15389, 1, 23 ], [ 15428, 1, 8 ], [ 15442, 1, 44 ], [ 15614, 0, 21 ], [ 15704, 1, 21 ], [ 15855, 0, 42 ], [ 15950, 0, 9 ], [ 15959, 1, 42 ], [ 16043, 1, 9 ], [ 16063, 0, 24 ], [ 16146, 1, 24 ], [ 16201, 0, 17 ], [ 16258, 0, 6 ], [ 16299, 1, 17 ], [ 16356, 1, 6 ], [ 16431, 0, 23 ], [ 16476, 0, 12 ], [ 16509, 1, 23 ], [ 16530, 0, 18 ], [ 16578, 1, 12 ], [ 16627, 1, 18 ], [ 16660, 0, 17 ], [ 16757, 1, 17 ], [ 16768, 0, 4 ], [ 16829, 0, 15 ], [ 16853, 1, 4 ], [ 16913, 1, 15 ], [ 16956, 0, 12 ], [ 17012, 0, 23 ], [ 17053, 1, 12 ], [ 17090, 1, 23 ], [ 17151, 0, 28 ], [ 17205, 0, 44 ], [ 17216, 1, 28 ], [ 17307, 1, 44 ], [ 17330, 0, 18 ], [ 17425, 1, 18 ], [ 17438, 0, 9 ], [ 17494, 0, 44 ], [ 17521, 1, 9 ], [ 17576, 1, 44 ], [ 17587, 0, 23 ], [ 17600, 0, 11 ], [ 17655, 0, 8 ], [ 17671, 0, 44 ], [ 17728, 1, 23 ], [ 17738, 1, 11 ], [ 17768, 1, 8 ], [ 17779, 1, 44 ], [ 17910, 0, 225 ], [ 18005, 0, 5 ], [ 18090, 1, 5 ], [ 18165, 0, 15 ], [ 18235, 0, 8 ], [ 18261, 1, 15 ], [ 18279, 0, 44 ], [ 18325, 1, 8 ], [ 18426, 1, 225 ], [ 18446, 1, 44 ], [ 20235, 0, 14 ], [ 20302, 0, 8 ], [ 20327, 1, 14 ], [ 20424, 1, 8 ], [ 20433, 0, 28 ], [ 20527, 1, 28 ], [ 20602, 0, 5 ], [ 20685, 1, 5 ], [ 20764, 0, 19 ], [ 20808, 0, 4 ], [ 20839, 1, 19 ], [ 20850, 0, 21 ], [ 20926, 1, 4 ], [ 20936, 1, 21 ], [ 21010, 0, 7 ], [ 21097, 1, 7 ], [ 21205, 0, 42 ], [ 21272, 1, 42 ], [ 21334, 0, 42 ], [ 21412, 1, 42 ], [ 21455, 0, 42 ], [ 21527, 1, 42 ], [ 21569, 0, 42 ], [ 21652, 1, 42 ], [ 21708, 0, 42 ], [ 21813, 1, 42 ], [ 21966, 0, 18 ], [ 22048, 0, 4 ], [ 22063, 1, 18 ], [ 22087, 0, 21 ], [ 22140, 1, 4 ], [ 22179, 1, 21 ], [ 22248, 0, 7 ], [ 22353, 1, 7 ], [ 22364, 0, 44 ], [ 22509, 1, 44 ], [ 22767, 0, 42 ], [ 22834, 1, 42 ], [ 22888, 0, 42 ], [ 22967, 1, 42 ], [ 23003, 0, 42 ], [ 23085, 1, 42 ], [ 23146, 0, 42 ], [ 23214, 1, 42 ], [ 23278, 0, 42 ], [ 23361, 1, 42 ], [ 23569, 0, 5 ], [ 23656, 1, 5 ], [ 23824, 0, 18 ], [ 23939, 1, 18 ], [ 23991, 0, 4 ], [ 24048, 0, 21 ], [ 24126, 1, 4 ], [ 24155, 1, 21 ], [ 24225, 0, 7 ], [ 24302, 0, 44 ], [ 24318, 1, 7 ], [ 24432, 1, 44 ], [ 25567, 0, 12 ], [ 25684, 1, 12 ], [ 25743, 0, 17 ], [ 25835, 1, 17 ], [ 25912, 0, 19 ], [ 25992, 1, 19 ], [ 26046, 0, 24 ], [ 26137, 0, 23 ], [ 26158, 1, 24 ], [ 26263, 1, 23 ], [ 26864, 0, 55 ], [ 26970, 1, 55 ], [ 27034, 0, 55 ], [ 27096, 1, 55 ], [ 27141, 0, 55 ], [ 27228, 1, 55 ], [ 27331, 0, 40 ], [ 27409, 1, 40 ] ], "name": "" }, "flipped": false } ], "connections": [ { "from": "ac45fd48", "from_port": "out", "to": "53a6df6b", "to_port": "in" } ] } ] }