{
 "firmware": "SLOOP DX7 Banks",
 "slug": "sloopbanks",
 "author": "majnikool; based on SLOOP by isod89 (3dSam) and Felucca by Leo Kuroshita",
 "repo": "https://github.com/majnikool/sloop-fm1",
 "licence": "GPL-3.0-only",
 "closed_source": false,
 "mapped_release": "v2.5-b28-test",
 "mapped_commit": "c741193ba46b20994d70526f92cf160006be513b",
 "release_date": "2026-10-09",
 "date_mapped": "2026-10-17",
 "status": "Independently checked: zero errors in round 4 (2026-10-17). No device testing.",
 "turns_it_into": "A four-track groovebox with three synth parts, drums, live loops, samples and twelve banks for DX7 voices.",
 "docs": [
  {
   "title": "User guide",
   "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/GUIDE.md",
   "words": 17339,
   "read_at": "c741193ba46b20994d70526f92cf160006be513b"
  },
  {
   "title": "Release overview",
   "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/README.md",
   "words": 7353,
   "read_at": "c741193ba46b20994d70526f92cf160006be513b"
  },
  {
   "title": "Detailed reference",
   "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/SLOOP.md",
   "words": 13243,
   "read_at": "c741193ba46b20994d70526f92cf160006be513b"
  },
  {
   "title": "Editor protocol",
   "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/EDITOR_PROTOCOL.md",
   "words": 6678,
   "read_at": "c741193ba46b20994d70526f92cf160006be513b"
  },
  {
   "title": "Code licence",
   "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/LICENSE",
   "words": 5644,
   "read_at": "c741193ba46b20994d70526f92cf160006be513b"
  }
 ],
 "install": {
  "official": "https://github.com/majnikool/sloop-fm1/releases/tag/v2.5-b28-test",
  "hub": "https://thefirmwarehub.com/"
 },
 "part_id_notes": "SEL is B_SCL in the source; ALGORITHM selects a track; keys use F3–G5; button LEDs use button part ids and groups.key_lights names all 27 key LEDs, matching the checked maps; PLAY has no separately driven green LED in this firmware.",
 "modes": [
  {
   "id": "synth_play",
   "name": "Playing a synth track",
   "how_to_get_there": "Turn ALGORITHM to track 1, 2 or 3 and hold no function button.",
   "what_it_is": "The keys play the selected synth track. Its KEYS setting can round notes into the scale (SNAP) or lay the scale over the white keys starting at C4, leaving the black keys silent (WHITE).",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "146-190",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "1427-1458",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
    }
   ]
  },
  {
   "id": "chord_mode",
   "name": "Chord mode on a synth track",
   "how_to_get_there": "Hold SEL and turn KNOB 1 to a chord type (or set CHORD on the SEL page).",
   "what_it_is": "Each white key plays a chord built from the track's scale, with C4 as the first degree; held black keys alter the chords. On the chromatic scale (CHR) the chords are taken from natural minor.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "166-240",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L240"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "264-329",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L264-L329"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "1320-1350",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
    }
   ]
  },
  {
   "id": "drum_play",
   "name": "Playing the drum track",
   "how_to_get_there": "Turn ALGORITHM to track 4.",
   "what_it_is": "The 16 white keys play the 16 drum sounds; each black key doubles the white key just left of it. OCT- and OCT+ held make hits ghost or hard.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/drums.c",
     "lines": "65-95",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L95"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "1304-1309",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1304-L1309"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "1412-1425",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
    }
   ]
  },
  {
   "id": "tracks",
   "name": "TRACKS screen",
   "how_to_get_there": "Tap HOME.",
   "what_it_is": "The performance view: tempo, transport, the four tracks with their steps and levels, and four dials (swing, level, steps, pan).",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui.c",
     "lines": "233-245",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L233-L245"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_studio.c",
     "lines": "205-222",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L205-L222"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "263-294",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L263-L294"
    }
   ]
  },
  {
   "id": "visualiser",
   "name": "Visualiser",
   "how_to_get_there": "Tap HOME while the TRACKS screen is showing.",
   "what_it_is": "A full-screen picture of the sound in one of twelve styles. Keys, PLAY, REC and the layers keep working.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "940-946",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L940-L946"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_vis.c",
     "lines": "1-13",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_vis.c#L1-L13"
    }
   ]
  },
  {
   "id": "pages",
   "name": "A button's pages",
   "how_to_get_there": "Tap a page button; tap it again or turn SELECT to move within that family.",
   "what_it_is": "Four knobs follow the displayed page; ENV has two pages, LFO two, FX six, SEL two, EDIT four, ARP two, SEQ STEP and PATTERN plus SONG, and GLO four.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "302-334",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L302-L334"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui.c",
     "lines": "188-230",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L188-L230"
    }
   ]
  },
  {
   "id": "step_page",
   "name": "SEQ STEP page (synth tracks)",
   "how_to_get_there": "Tap SEQ on a synth track (its first page).",
   "what_it_is": "Step entry one step at a time: the keys write the step under the cursor, the knobs move the cursor and shape the step.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "329",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L329"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "296-328",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L296-L328"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "523-569",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L523-L569"
    }
   ]
  },
  {
   "id": "save_pages",
   "name": "SAVE pages",
   "how_to_get_there": "Tap SAVE away from TRACKS, DRUMS and SONG, then tap again to change page.",
   "what_it_is": "PRESETS browses sounds, USER keeps 32 sounds, PROJECT keeps four loops, and TOOLS clears or resets the working music; GO actions need two rightward clicks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "323-326",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L323-L326"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "445-520",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L445-L520"
    }
   ]
  },
  {
   "id": "save_presets",
   "name": "SAVE > PRESETS page",
   "how_to_get_there": "Tap SAVE away from TRACKS, DRUMS or SONG and choose PRESETS.",
   "what_it_is": "Factory sounds come first, followed by loaded DX7 voices and user sounds; KNOB 1 chooses a sound, KNOB 2 an engine, KNOB 3 a kind or bank, and KNOB 4 is unused.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "430-443",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L430-L443"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui.c",
     "lines": "435-485",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L435-L485"
    }
   ]
  },
  {
   "id": "save_user",
   "name": "SAVE > USER page",
   "how_to_get_there": "Tap SAVE again from PRESETS.",
   "what_it_is": "The 32 user sound slots: pick one, then load, erase or save with two clicks each.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "324",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L324"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "445-462",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L445-L462"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/upreset.c",
     "lines": "308-337",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/upreset.c#L308-L337"
    }
   ]
  },
  {
   "id": "save_project",
   "name": "SAVE > PROJECT page",
   "how_to_get_there": "Tap SAVE to PROJECT.",
   "what_it_is": "Four stored projects, also used as sections A–D: choose slot 1–4, then load or save with two rightward clicks while stopped; KNOB 2 is unused.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "325",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L325"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "473-492",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L473-L492"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/project.c",
     "lines": "411-462",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L411-L462"
    }
   ]
  },
  {
   "id": "save_tools",
   "name": "SAVE > TOOLS page",
   "how_to_get_there": "Tap SAVE to TOOLS.",
   "what_it_is": "Clear the selected pattern, reset its sound or start a fresh working loop; each action needs two rightward clicks and the stored projects remain.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "326",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L326"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "493-517",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L493-L517"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "330-355",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L330-L355"
    }
   ]
  },
  {
   "id": "drums_grid",
   "name": "DRUMS screen, grid page",
   "how_to_get_there": "Select the drum track and tap EDIT or SEQ on TRACKS; DRUMS returns to its last page, so turn SELECT fully left to reach GRID before using keys as steps.",
   "what_it_is": "All 16 drum sounds against 16 steps; the white keys become the steps of the sound KNOB 1 picks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_studio.c",
     "lines": "454-498",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L454-L498"
    }
   ]
  },
  {
   "id": "drums_kit",
   "name": "DRUMS screen, kit page",
   "how_to_get_there": "On the DRUMS grid tap EDIT or SEQ once, or turn SELECT toward KIT.",
   "what_it_is": "16 pads that flash on each hit; the knobs set kit, drum level, drum reverb and drum pan.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_studio.c",
     "lines": "410-445",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L410-L445"
    }
   ]
  },
  {
   "id": "song_screen",
   "name": "SONG screen",
   "how_to_get_there": "Tap SAVE on the TRACKS or DRUMS screen, or hold SAVE and press white key 16.",
   "what_it_is": "Edits the song order by hand: up to 16 entries, each a section A-D and a length in bars.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_song.c",
     "lines": "1-85",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L1-L85"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_song.c",
     "lines": "87-153",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L87-L153"
    }
   ]
  },
  {
   "id": "stopped",
   "name": "Transport stopped",
   "how_to_get_there": "Press PLAY/STOP while the loop plays.",
   "what_it_is": "All tracks are stopped; PROJECT load/save and USER save/erase need this state, while live section stores can be made during playback and reach flash after stopping.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/project.c",
     "lines": "411-462",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L411-L462"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/upreset.c",
     "lines": "308-337",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/upreset.c#L308-L337"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/project.c",
     "lines": "778-863",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L778-L863"
    }
   ]
  },
  {
   "id": "playing",
   "name": "Transport playing",
   "how_to_get_there": "Press PLAY.",
   "what_it_is": "All four tracks loop.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "1725-1735",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1725-L1735"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "2300-2316",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L2300-L2316"
    }
   ]
  },
  {
   "id": "song_mode",
   "name": "Song mode",
   "how_to_get_there": "Hold SAVE and press white key 13, or press OCT- on the SONG screen.",
   "what_it_is": "PLAY plays the song order instead of the loop; recording waits until the song is stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "1725-1735",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1725-L1735"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_studio.c",
     "lines": "126-140",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L126-L140"
    }
   ]
  },
  {
   "id": "rec_ready",
   "name": "REC armed (rec ready)",
   "how_to_get_there": "Tap REC while stopped.",
   "what_it_is": "The selected track waits for recording; an empty project offers a free take, otherwise notes or PLAY begin a loop at the set tempo; KNOB 1–3 set MODE, LENGTH and START when available.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_studio.c",
     "lines": "122-140",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L122-L140"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "777-806",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L777-L806"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "1100-1119",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1100-L1119"
    }
   ]
  },
  {
   "id": "count_in",
   "name": "Count-in",
   "how_to_get_there": "Armed with START set to count, press PLAY.",
   "what_it_is": "One bar of four clicks, then the loop and recording start; notes played meanwhile only sound.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "2198-2213",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L2198-L2213"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_studio.c",
     "lines": "649-674",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L649-L674"
    }
   ]
  },
  {
   "id": "free_take",
   "name": "Free take",
   "how_to_get_there": "Arm an empty project with MODE free, then play a note.",
   "what_it_is": "Play without a click, then press REC at the next downbeat to make a 1, 2 or 4 bar loop and fit its tempo; notes round to steps and the take closes by itself after 24 seconds.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "574-588",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L574-L588"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "829-898",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L829-L898"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "1100-1119",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1100-L1119"
    }
   ]
  },
  {
   "id": "hold_clear",
   "name": "Clear-track ring",
   "how_to_get_there": "Hold REC past 0.7 s.",
   "what_it_is": "A ring fills; keep holding to clear the selected track, let go to cancel.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "809-858",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L809-L858"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "953-979",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L953-L979"
    }
   ]
  },
  {
   "id": "layer_fx",
   "name": "FX layer (punch)",
   "how_to_get_there": "Hold FX.",
   "what_it_is": "The 16 white keys apply punch effects to the mix while held; the knobs set master filter, DUST, DUCK and track filter, and releasing an effect returns to KEEP when enabled.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "656-682",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L656-L682"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/punch.c",
     "lines": "37-54",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
    }
   ]
  },
  {
   "id": "layer_erase",
   "name": "EDIT layer (erase)",
   "how_to_get_there": "Hold EDIT.",
   "what_it_is": "Keys erase their notes or drum sounds; the knobs shift, resize and transpose the pattern, and OCT- and OCT+ undo or redo notes and pattern length.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "1378-1402",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "910-955",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "491-498",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L491-L498"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "389-406",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui.c",
     "lines": "140-164",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L140-L164"
    }
   ]
  },
  {
   "id": "layer_roll",
   "name": "ARP layer (note repeat)",
   "how_to_get_there": "Hold ARP.",
   "what_it_is": "A held key repeats in time at the roll RATE (KNOB 1); while recording, rolls are written as ratchets.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "1176-1188",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "499-502",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L499-L502"
    }
   ]
  },
  {
   "id": "layer_steps",
   "name": "SEQ layer (steps)",
   "how_to_get_there": "Hold SEQ.",
   "what_it_is": "Each white key stands for one of the 16 steps shown; F#3, G#3, A#3 and C#4 switch between the four pages of steps of the selected track.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "117-170",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "332-340",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L332-L340"
    }
   ]
  },
  {
   "id": "layer_steps_held",
   "name": "SEQ layer with step keys held",
   "how_to_get_there": "Hold SEQ, then hold one or more step keys.",
   "what_it_is": "The knobs edit held steps: sound or note, level, ratchet and nudge; PRESETS and ALGORITHM set a parameter lock, while OCT- clears extra step settings and OCT+ changes fill conditions.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "183-250",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L183-L250"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "463-472",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L463-L472"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "503-508",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L503-L508"
    }
   ]
  },
  {
   "id": "layer_key",
   "name": "SEL layer (key and chords)",
   "how_to_get_there": "Hold SEL.",
   "what_it_is": "Any key sets the song's key; the knobs set chord type, scale, KEYS mode and transpose.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "342-347",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "526-540",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L526-L540"
    }
   ]
  },
  {
   "id": "layer_mix",
   "name": "GLO layer (mix)",
   "how_to_get_there": "Hold GLO.",
   "what_it_is": "White keys mute tracks, solo tracks, trigger fills or tap the tempo; the knobs set the four track levels.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "410-425",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L410-L425"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "542-545",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L542-L545"
    }
   ]
  },
  {
   "id": "layer_song",
   "name": "SAVE layer (song)",
   "how_to_get_there": "Hold SAVE.",
   "what_it_is": "Keys 1 to 4 call up sections A to D (tap several during one hold to chain them); keys 5 to 8 save the current loop as section A to D; key 13 toggles loop or song mode; key 14 records a song from the sections you play; key 16 goes to the SONG screen.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "349-443",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L349-L443"
    }
   ]
  },
  {
   "id": "layer_locked",
   "name": "A layer locked open",
   "how_to_get_there": "Hold a layer button (FX, EDIT, ARP, SEQ, SEL, GLO or SAVE) and tap HOME.",
   "what_it_is": "Releasing the layer button leaves its controls active. PLAY and REC still operate, as do the two octave buttons; pressing another button exits the layer without carrying out that button’s usual action.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "671-705",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L671-L705"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "602-618",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L602-L618"
    }
   ]
  },
  {
   "id": "menu",
   "name": "HOME menu",
   "how_to_get_there": "Hold HOME for 0.7 seconds.",
   "what_it_is": "SCREEN changes colour and zoom; LIGHTS changes button glow, key glow and note lights; AUDIO changes speaker low cut and USB recording level; SYSTEM offers calibration, ABOUT and keyboard velocity.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_menu.c",
     "lines": "9-20",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L9-L20"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_menu.c",
     "lines": "32-49",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L32-L49"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "571-588",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L571-L588"
    }
   ]
  },
  {
   "id": "about",
   "name": "ABOUT screen",
   "how_to_get_there": "In HOME menu > SYSTEM, select ABOUT and press OCT+.",
   "what_it_is": "Version, build date, credits, licence and source address.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_menu.c",
     "lines": "83-99",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L83-L99"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_menu.c",
     "lines": "212-216",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L212-L216"
    }
   ]
  },
  {
   "id": "calibration",
   "name": "Hardware calibration",
   "how_to_get_there": "Power on with both octave buttons, or open it from HOME menu > SYSTEM using OCT+.",
   "what_it_is": "Press each named button and turn each named encoder right; 30 seconds without input restores the old table, while any later menu close or the power-on calibration path can still save settings.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "1044-1111",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L1044-L1111"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/main.c",
     "lines": "173-176",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/main.c#L173-L176"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_menu.c",
     "lines": "149-158",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L149-L158"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_menu.c",
     "lines": "206-210",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L206-L210"
    }
   ]
  },
  {
   "id": "usb_rescue",
   "name": "USB rescue",
   "how_to_get_there": "Switch on holding OCT- alone (also entered by itself after two failed starts).",
   "what_it_is": "A minimal mode with audio off that only waits for a reinstall from the browser installer.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/recovery.c",
     "lines": "41-70",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/recovery.c#L41-L70"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/main.c",
     "lines": "315-317",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/main.c#L315-L317"
    }
   ]
  },
  {
   "id": "update_countdown",
   "name": "Update-mode countdown",
   "how_to_get_there": "Hold both octave buttons while stopped.",
   "what_it_is": "A countdown starts after two seconds; after five seconds the firmware flushes pending music and enters its updater, and releasing either octave button before that cancels.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/main.c",
     "lines": "202-229",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/main.c#L202-L229"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/project.c",
     "lines": "796-824",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L796-L824"
    }
   ]
  },
  {
   "id": "page_env",
   "name": "ENV page",
   "how_to_get_there": "Tap ENV to ENV, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order. This page applies to synth tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "303",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L303"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_env_dest",
   "name": "ENV DEST page",
   "how_to_get_there": "Tap ENV to ENV DEST, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order. This page applies to synth tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "304",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L304"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_lfo",
   "name": "LFO page",
   "how_to_get_there": "Tap LFO to LFO, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order. This page applies to synth tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "305",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L305"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_lfo_dest",
   "name": "LFO DEST page",
   "how_to_get_there": "Tap LFO to LFO DEST, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order. This page applies to synth tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "306",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L306"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_fx",
   "name": "FX page",
   "how_to_get_there": "Tap FX to FX, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order. This page applies to synth tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "307",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L307"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_filter",
   "name": "FILTER page",
   "how_to_get_there": "Tap FX to FILTER, or turn SELECT within its pages.",
   "what_it_is": "Track filter for synth parts; the drum track shows DRUM TRACK here, although FX held with KNOB 4 can change its filter.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "308",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L308"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "fx_keep",
   "name": "KEEP page",
   "how_to_get_there": "Tap FX to KEEP, or turn SELECT within its pages.",
   "what_it_is": "PHONE, TAPE or HALF can stay on across stop and power-off; only one runs at a time, and RESET returns effects to their defaults.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "309",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L309"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_slicer",
   "name": "SLICER page",
   "how_to_get_there": "Tap FX to SLICER, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the selected track; this page works on synth and drum tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "310",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L310"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_dly",
   "name": "DLY page",
   "how_to_get_there": "Tap FX to DLY, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "311",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L311"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_rev_cho",
   "name": "REV/CHO page",
   "how_to_get_there": "Tap FX to REV/CHO, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "312",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L312"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_sel",
   "name": "SEL page",
   "how_to_get_there": "Tap SEL to SEL, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order. This page applies to synth tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "313",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L313"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_sel_2",
   "name": "SEL 2 page",
   "how_to_get_there": "Tap SEL to SEL 2, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order. This page applies to synth tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "314",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L314"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_voice",
   "name": "VOICE page",
   "how_to_get_there": "Tap EDIT to VOICE, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order. This page applies to synth tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "317",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L317"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_voice_2",
   "name": "VOICE 2 page",
   "how_to_get_there": "Tap EDIT to VOICE 2, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order. This page applies to synth tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "318",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L318"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_global",
   "name": "GLOBAL page",
   "how_to_get_there": "Tap GLO to GLOBAL, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "319",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L319"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_master",
   "name": "MASTER page",
   "how_to_get_there": "Tap GLO to MASTER, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "320",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L320"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_system",
   "name": "SYSTEM page",
   "how_to_get_there": "Tap GLO to SYSTEM, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "321",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L321"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_drums",
   "name": "DRUMS page",
   "how_to_get_there": "Tap GLO to DRUMS, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "322",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L322"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_arp",
   "name": "ARP page",
   "how_to_get_there": "Tap ARP to ARP, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order. This page applies to synth tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "327",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L327"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_arp_2",
   "name": "ARP 2 page",
   "how_to_get_there": "Tap ARP to ARP 2, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the values shown in order. This page applies to synth tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "328",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L328"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "page_pattern",
   "name": "PATTERN page",
   "how_to_get_there": "Tap SEQ to PATTERN, or turn SELECT within its pages.",
   "what_it_is": "Four knobs adjust the selected track; this page works on synth and drum tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "330",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L330"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-365",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L365"
    }
   ]
  },
  {
   "id": "edit_analog_1",
   "name": "ANALOG OSC 1/4",
   "how_to_get_there": "Choose ANALOG on a synth track, then tap EDIT until OSC 1/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_analog.c",
     "lines": "129-143",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L129-L143"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "315",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_analog.c",
     "lines": "129-132",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L129-L132"
    }
   ]
  },
  {
   "id": "edit_analog_2",
   "name": "ANALOG FLT 2/4",
   "how_to_get_there": "Choose ANALOG on a synth track, then tap EDIT until FLT 2/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_analog.c",
     "lines": "129-143",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L129-L143"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "316",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_analog.c",
     "lines": "129-132",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L129-L132"
    }
   ]
  },
  {
   "id": "edit_digital_1",
   "name": "DIGITAL OPS 1/4",
   "how_to_get_there": "Choose DIGITAL on a synth track, then tap EDIT until OPS 1/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_digital.c",
     "lines": "145-159",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L145-L159"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "315",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_digital.c",
     "lines": "145-148",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L145-L148"
    }
   ]
  },
  {
   "id": "edit_digital_2",
   "name": "DIGITAL MOD 2/4",
   "how_to_get_there": "Choose DIGITAL on a synth track, then tap EDIT until MOD 2/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_digital.c",
     "lines": "145-159",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L145-L159"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "316",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_digital.c",
     "lines": "145-148",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L145-L148"
    }
   ]
  },
  {
   "id": "edit_wheel_1",
   "name": "WHEEL BARS 1/4",
   "how_to_get_there": "Choose WHEEL on a synth track, then tap EDIT until BARS 1/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_drawbar.c",
     "lines": "283-297",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L283-L297"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "315",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_drawbar.c",
     "lines": "283-286",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L283-L286"
    }
   ]
  },
  {
   "id": "edit_wheel_2",
   "name": "WHEEL TONE 2/4",
   "how_to_get_there": "Choose WHEEL on a synth track, then tap EDIT until TONE 2/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_drawbar.c",
     "lines": "283-297",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L283-L297"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "316",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_drawbar.c",
     "lines": "283-286",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L283-L286"
    }
   ]
  },
  {
   "id": "edit_fm6_1",
   "name": "FM6 OPS 1/4",
   "how_to_get_there": "Choose FM6 on a synth track, then tap EDIT until OPS 1/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_fm6.c",
     "lines": "461-476",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L461-L476"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "315",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_fm6.c",
     "lines": "461-464",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L461-L464"
    }
   ]
  },
  {
   "id": "edit_fm6_2",
   "name": "FM6 PATCH 2/4",
   "how_to_get_there": "Choose FM6 on a synth track, then tap EDIT until PATCH 2/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_fm6.c",
     "lines": "461-476",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L461-L476"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "316",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_fm6.c",
     "lines": "461-464",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L461-L464"
    }
   ]
  },
  {
   "id": "edit_voice_1",
   "name": "VOICE VOWL 1/4",
   "how_to_get_there": "Choose VOICE on a synth track, then tap EDIT until VOWL 1/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_formant.c",
     "lines": "227-241",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L241"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "315",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_formant.c",
     "lines": "227-230",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L230"
    }
   ]
  },
  {
   "id": "edit_voice_2",
   "name": "VOICE TONE 2/4",
   "how_to_get_there": "Choose VOICE on a synth track, then tap EDIT until TONE 2/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_formant.c",
     "lines": "227-241",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L241"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "316",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_formant.c",
     "lines": "227-230",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L230"
    }
   ]
  },
  {
   "id": "edit_grain_1",
   "name": "GRAIN GRAN 1/4",
   "how_to_get_there": "Choose GRAIN on a synth track, then tap EDIT until GRAN 1/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_grain.c",
     "lines": "436-450",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L436-L450"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "315",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_grain.c",
     "lines": "436-439",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L436-L439"
    }
   ]
  },
  {
   "id": "edit_grain_2",
   "name": "GRAIN SPRY 2/4",
   "how_to_get_there": "Choose GRAIN on a synth track, then tap EDIT until SPRY 2/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_grain.c",
     "lines": "436-450",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L436-L450"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "316",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_grain.c",
     "lines": "436-439",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L436-L439"
    }
   ]
  },
  {
   "id": "edit_lofi_1",
   "name": "LOFI CHIP 1/4",
   "how_to_get_there": "Choose LOFI on a synth track, then tap EDIT until CHIP 1/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_lofi.c",
     "lines": "218-232",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L218-L232"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "315",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_lofi.c",
     "lines": "218-221",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L218-L221"
    }
   ]
  },
  {
   "id": "edit_lofi_2",
   "name": "LOFI MOTN 2/4",
   "how_to_get_there": "Choose LOFI on a synth track, then tap EDIT until MOTN 2/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_lofi.c",
     "lines": "218-232",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L218-L232"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "316",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_lofi.c",
     "lines": "218-221",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L218-L221"
    }
   ]
  },
  {
   "id": "edit_noise_1",
   "name": "NOISE SRC 1/4",
   "how_to_get_there": "Choose NOISE on a synth track, then tap EDIT until SRC 1/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_noise.c",
     "lines": "259-276",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L259-L276"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "315",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_noise.c",
     "lines": "259-262",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L259-L262"
    }
   ]
  },
  {
   "id": "edit_noise_2",
   "name": "NOISE MOVE 2/4",
   "how_to_get_there": "Choose NOISE on a synth track, then tap EDIT until MOVE 2/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_noise.c",
     "lines": "259-276",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L259-L276"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "316",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_noise.c",
     "lines": "259-262",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L259-L262"
    }
   ]
  },
  {
   "id": "edit_phase_1",
   "name": "PHASE PHS 1/4",
   "how_to_get_there": "Choose PHASE on a synth track, then tap EDIT until PHS 1/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_phase.c",
     "lines": "185-199",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L185-L199"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "315",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_phase.c",
     "lines": "185-188",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L185-L188"
    }
   ]
  },
  {
   "id": "edit_phase_2",
   "name": "PHASE LINE 2/4",
   "how_to_get_there": "Choose PHASE on a synth track, then tap EDIT until LINE 2/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_phase.c",
     "lines": "185-199",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L185-L199"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "316",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_phase.c",
     "lines": "185-188",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L185-L188"
    }
   ]
  },
  {
   "id": "edit_phys_1",
   "name": "PHYS BODY 1/4",
   "how_to_get_there": "Choose PHYS on a synth track, then tap EDIT until BODY 1/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_phys.c",
     "lines": "263-280",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L263-L280"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "315",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_phys.c",
     "lines": "263-266",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L263-L266"
    }
   ]
  },
  {
   "id": "edit_phys_2",
   "name": "PHYS EXCT 2/4",
   "how_to_get_there": "Choose PHYS on a synth track, then tap EDIT until EXCT 2/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_phys.c",
     "lines": "263-280",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L263-L280"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "316",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_phys.c",
     "lines": "263-266",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L263-L266"
    }
   ]
  },
  {
   "id": "edit_sample_1",
   "name": "SAMPLE SET 1/4",
   "how_to_get_there": "Choose SAMPLE on a synth track, then tap EDIT until SET 1/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_sample.c",
     "lines": "205-219",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L219"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "315",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_sample.c",
     "lines": "205-208",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L208"
    }
   ]
  },
  {
   "id": "edit_sample_2",
   "name": "SAMPLE TONE 2/4",
   "how_to_get_there": "Choose SAMPLE on a synth track, then tap EDIT until TONE 2/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_sample.c",
     "lines": "205-219",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L219"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "316",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_sample.c",
     "lines": "205-208",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L208"
    }
   ]
  },
  {
   "id": "edit_trio_1",
   "name": "TRIO OSC 1/4",
   "how_to_get_there": "Choose TRIO on a synth track, then tap EDIT until OSC 1/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_trio.c",
     "lines": "380-394",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L380-L394"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "315",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_trio.c",
     "lines": "380-383",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L380-L383"
    }
   ]
  },
  {
   "id": "edit_trio_2",
   "name": "TRIO TONE 2/4",
   "how_to_get_there": "Choose TRIO on a synth track, then tap EDIT until TONE 2/4 appears.",
   "what_it_is": "Edits four sound parameters of the selected engine; changes can later be kept in a user sound or project.",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_trio.c",
     "lines": "380-394",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L380-L394"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "316",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "786-800",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_trio.c",
     "lines": "380-383",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L380-L383"
    }
   ]
  }
 ],
 "controls": {
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Starts or stops all four tracks; it keeps working inside every layer.",
    "short_label": "PLAY/STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "954-963",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L954-L963"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "903-918",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L903-L918"
     }
    ]
   },
   {
    "mode": "song_mode",
    "gesture": "press",
    "action": "Plays the song order from the top; if a section in it is empty it refuses with EMPTY SECTION: REC.",
    "short_label": "PLAY SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "954-963",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L954-L963"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1725-1735",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1725-L1735"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "press",
    "action": "Starts the loop and recording from the top, or, with START set to count, plays one bar of clicks first.",
    "short_label": "REC START",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "2168-2187",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L2168-L2187"
     }
    ]
   },
   {
    "mode": "count_in",
    "gesture": "press",
    "action": "Stops the count-in and goes back to waiting armed.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "2175-2176",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L2175-L2176"
     }
    ]
   },
   {
    "mode": "free_take",
    "gesture": "press",
    "action": "Throws the free take away; nothing changes.",
    "short_label": "DROP TAKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "883-898",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L883-L898"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "Starts or stops playback from the SONG screen.",
    "short_label": "PLAY/STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_song.c",
      "lines": "98-101",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L98-L101"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does nothing while the menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "887-891",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L887-L891"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "193-225",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L193-L225"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "playing",
    "gesture": "press",
    "action": "Starts recording the selected track at once; press again to stop recording while the loop plays on.",
    "short_label": "REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "122-140",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L122-L140"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "567-572",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L567-L572"
     }
    ]
   },
   {
    "mode": "stopped",
    "gesture": "press",
    "action": "Arms recording (rec ready); press again to disarm (REC OFF).",
    "short_label": "ARM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "122-140",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L122-L140"
     }
    ]
   },
   {
    "mode": "song_mode",
    "gesture": "press",
    "action": "While the song plays it refuses (STOP THE SONG FIRST); when stopped, arming switches back to loop mode.",
    "short_label": "REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "126-140",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L126-L140"
     }
    ]
   },
   {
    "mode": "free_take",
    "gesture": "press",
    "action": "Closes the free take into a 1, 2 or 4 bar loop at the fitted tempo and starts playback with notes rounded to steps.",
    "short_label": "CLOSE LOOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "829-874",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L829-L874"
     }
    ]
   },
   {
    "mode": "count_in",
    "gesture": "press",
    "action": "Cancels the count-in and disarms.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "130-134",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L130-L134"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "2198-2201",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L2198-L2201"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held about 2 seconds, with a ring after 0.7 seconds: clears the selected track’s notes, locks, nudges and fill conditions; releasing before the ring fills cancels, and undo returns only notes and length; the changed working loop is autosaved later.",
    "short_label": "CLEAR TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "809-858",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L809-L858"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "759-767",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L759-L767"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "140-164",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L140-L164"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "While stopped, stores the working loop in the song entry’s section and saves settings immediately; a used section needs a second REC within 3 seconds, with no undo.",
    "short_label": "STORE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_song.c",
      "lines": "104-132",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L104-L132"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "411-429",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L411-L429"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Goes to the TRACKS screen (from pages, the DRUMS screen and the SONG screen).",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "940-946",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L940-L946"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "233-245",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L233-L245"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_song.c",
      "lines": "92",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L92"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "505-508",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L505-L508"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "press",
    "action": "Opens the visualiser.",
    "short_label": "VISUALISER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "940-946",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L940-L946"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_vis.c",
      "lines": "38-44",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_vis.c#L38-L44"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "press",
    "action": "Closes the visualiser, back to TRACKS.",
    "short_label": "CLOSE VIS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "940-946",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L940-L946"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held 0.7 s: opens the menu.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "571-588",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L571-L588"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "874-884",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L874-L884"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "long_press",
    "action": "Held 0.7 seconds again: closes the menu and saves settings immediately when stopped, or waits for stopped, quiet time when playing.",
    "short_label": "CLOSE MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "874-876",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L874-L876"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "149-158",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L149-L158"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "826-863",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L826-L863"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Locks the FX layer open so both hands are free; LOCK shows on the screen.",
    "short_label": "LOCK LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "697-705",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L697-L705"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "635-647",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L635-L647"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Locks the EDIT layer open so both hands are free; LOCK shows on the screen.",
    "short_label": "LOCK LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "697-705",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L697-L705"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "635-647",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L635-L647"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_arp",
    "action": "Locks the ARP layer open so both hands are free; LOCK shows on the screen.",
    "short_label": "LOCK LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "697-705",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L697-L705"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "635-647",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L635-L647"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Locks the SEQ layer open so both hands are free; LOCK shows on the screen.",
    "short_label": "LOCK LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "697-705",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L697-L705"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "635-647",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L635-L647"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Locks the SEL layer open so both hands are free; LOCK shows on the screen.",
    "short_label": "LOCK LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "697-705",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L697-L705"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "635-647",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L635-L647"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Locks the GLO layer open so both hands are free; LOCK shows on the screen.",
    "short_label": "LOCK LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "697-705",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L697-L705"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "635-647",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L635-L647"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Locks the SAVE layer open so both hands are free; LOCK shows on the screen.",
    "short_label": "LOCK LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "697-705",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L697-L705"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "635-647",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L635-L647"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "press",
    "action": "Unlocks the locked layer and does nothing else.",
    "short_label": "UNLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "671-679",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L671-L679"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens the ENV pages (ENV, ENV DEST); again for the next page; ENV has no layer.",
    "short_label": "ENV PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "975-977",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L975-L977"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "188-202",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L188-L202"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "303-304",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L303-L304"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens LFO or LFO DEST, advancing on another tap.",
    "short_label": "LFO PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "978-980",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L978-L980"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "188-202",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L188-L202"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "305-306",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L305-L306"
     }
    ]
   }
  ],
  "button_fx": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Tapped (under 0.45 s, nothing else touched): opens the FX pages; again for the next page.",
    "short_label": "FX PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "591-597",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L591-L597"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "31-32",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L31-L32"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "188-202",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L188-L202"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "307-312",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L307-L312"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the punch-in effects layer (its screen shows after 0.14 s).",
    "short_label": "PUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "667-744",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L667-L744"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "31-32",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L31-L32"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Tapped: opens the SEL pages (SEL, SEL 2); again for the next page.",
    "short_label": "SEL PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "621-623",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L621-L623"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "188-202",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L188-L202"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "313-314",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L313-L314"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the key and chord layer.",
    "short_label": "KEY/CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "667-744",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L667-L744"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Tapped: opens one of the engine’s two sound pages, VOICE or VOICE 2, advancing on another tap.",
    "short_label": "EDIT PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "598-617",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L598-L617"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "188-202",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L188-L202"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315-318",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315-L318"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "press",
    "action": "With the drum track selected, opens its GRID or KIT screen.",
    "short_label": "DRUMS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "598-607",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L598-L607"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "108-116",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L108-L116"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Switches to the kit page.",
    "short_label": "KIT PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "598-603",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L598-L603"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Switches from KIT to GRID.",
    "short_label": "GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "598-603",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L598-L603"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Clears the cursor step’s note, tie and rest data and advances, leaving its locks, nudge and fill condition alone; undo restores the notes, and the working loop autosaves later.",
    "short_label": "CLEAR STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "609-613",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L609-L613"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "134-138",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L134-L138"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the erase layer.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "667-744",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L667-L744"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Tapped: opens the arpeggiator pages (ARP, ARP 2); again for the next page.",
    "short_label": "ARP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "618-620",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L618-L620"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "188-202",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L188-L202"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "327-328",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L327-L328"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the note-repeat layer (not the arpeggiator).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "667-744",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L667-L744"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Tapped: opens the SEQ pages (STEP, PATTERN, SONG); again for the next page.",
    "short_label": "SEQ PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "598-617",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L598-L617"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "188-202",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L188-L202"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "329-333",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L329-L333"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "press",
    "action": "With the drum track selected, opens its GRID or KIT screen.",
    "short_label": "DRUMS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "598-607",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L598-L607"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "108-116",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L108-L116"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Switches to the kit page.",
    "short_label": "KIT PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "598-603",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L598-L603"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Switches from KIT to GRID.",
    "short_label": "GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "598-603",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L598-L603"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "Leaves the SONG screen for the SEQ pages.",
    "short_label": "SEQ PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "616",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L616"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "188-202",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L188-L202"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the step-entry layer.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "667-744",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L667-L744"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Tapped: cycles GLOBAL, MASTER, SYSTEM and DRUMS.",
    "short_label": "GLO PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "624-626",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L624-L626"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "188-202",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L188-L202"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "319-322",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L319-L322"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the mix layer.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "667-744",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L667-L744"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "tracks",
    "gesture": "press",
    "action": "Opens the SONG screen.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "627-635",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L627-L635"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Opens the SONG screen.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "627-635",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L627-L635"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Opens the SONG screen.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "627-635",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L627-L635"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "Saves the song order to settings flash at once while stopped, without a question or undo.",
    "short_label": "SAVE SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "627-629",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L627-L629"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "765-775",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L765-L775"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "press",
    "action": "Opens PRESETS, USER, PROJECT and TOOLS, advancing on another tap.",
    "short_label": "SAVE PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "627-635",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L627-L635"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "323-326",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L323-L326"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the song layer.",
    "short_label": "SONG LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "667-744",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L667-L744"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "release",
    "short_label": "START CHAIN",
    "action": "Starts the chain built from two or more section taps during this hold while a loop is playing; a single tap remains a section jump.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "691-692",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L691-L692"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "429-443",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L429-L443"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Moves the keyboard an octave down (range -3 to +3).",
    "short_label": "OCT -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "964-973",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L964-L973"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "press_with:button_oct_up",
    "action": "Both together: back to octave 0.",
    "short_label": "OCT 0",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "964-973",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L964-L973"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "hold",
    "action": "While held, keys hit at ghost level.",
    "short_label": "GHOST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1304-1309",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1304-L1309"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1418"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Restores one track's notes and pattern length from the last undo snapshot, leaving nudges, parameter locks and fill conditions unchanged.",
    "short_label": "UNDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "745-756",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L745-L756"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "140-164",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L140-L164"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Steps to the previous page of 16 steps, wrapping round.",
    "short_label": "PAGE -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "758-772",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L758-L772"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "hold",
    "action": "On the drum track, held before a roll key goes down: the roll plays ghost hits.",
    "short_label": "GHOST ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1304-1309",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1304-L1309"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1208-1221",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1208-L1221"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "press_while_holding:button_seq",
    "action": "Clears the held steps' nudges, parameter locks and fill conditions at once without a question, and undo cannot recover them.",
    "short_label": "CLEAR EXTRA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "764-771",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L764-L771"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "251-270",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L251-L270"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "140-164",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L140-L164"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "Switches loop and song mode (only while stopped).",
    "short_label": "LOOP/SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_song.c",
      "lines": "104-112",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L104-L112"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Closes the menu, saving settings at once while stopped or later when quiet; from ABOUT, returns to its section.",
    "short_label": "CLOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "149-158",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L149-L158"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "227-234",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L227-L234"
     }
    ]
   },
   {
    "mode": "stopped",
    "gesture": "press_with:button_oct_up",
    "action": "Hold both octave buttons for 5 seconds while stopped to flush the working loop, dirty sections and changed song order, then enter update mode; releasing before the end cancels.",
    "short_label": "UPDATE 5s",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/main.c",
      "lines": "202-229",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/main.c#L202-L229"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "796-824",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L796-L824"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Moves the keyboard an octave up (range -3 to +3).",
    "short_label": "OCT +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "964-973",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L964-L973"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "press_with:button_oct_down",
    "action": "Both together: back to octave 0.",
    "short_label": "OCT 0",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "964-973",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L964-L973"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "hold",
    "action": "While held, keys hit at hard level.",
    "short_label": "HARD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1304-1309",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1304-L1309"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1418"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Reapplies the notes and pattern length that undo restored.",
    "short_label": "REDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "745-756",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L745-L756"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "140-164",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L140-L164"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Steps to the next page of 16 steps, wrapping round.",
    "short_label": "PAGE +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "758-772",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L758-L772"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "hold",
    "action": "On the drum track, held before a roll key goes down: the roll plays hard hits.",
    "short_label": "HARD ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1304-1309",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1304-L1309"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1208-1221",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1208-L1221"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "press_while_holding:button_seq",
    "action": "Cycles the held steps' fill condition: normal, fill only, no fill.",
    "short_label": "FILL COND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "764-771",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L764-L771"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "272-292",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L272-L292"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "Twice within 3 seconds while stopped: replaces the working loop with the song entry’s section, with no undo; the changed loop is autosaved later.",
    "short_label": "LOAD X2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_song.c",
      "lines": "113-122",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L113-L122"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "454-462",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L454-L462"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "826-863",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L826-L863"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Cycles the selected setting or opens calibration or ABOUT; closing the menu saves settings even if calibration timed out, without another question.",
    "short_label": "OK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "160-217",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L160-L217"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "251-258",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L251-L258"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "149-158",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L149-L158"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "1106-1111",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L1106-L1111"
     }
    ]
   }
  ],
  "switch_power": [
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down",
    "action": "Starts in USB rescue (audio off) so the firmware can be reinstalled from the browser.",
    "short_label": "USB RESCUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/recovery.c",
      "lines": "41-70",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/recovery.c#L41-L70"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/bootguard.h",
      "lines": "27-30",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/bootguard.h#L27-L30"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/main.c",
      "lines": "315-317",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/main.c#L315-L317"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down+button_oct_up",
    "action": "Starts panel calibration and saves settings afterwards, even after its 30-second idle cancellation, without a question.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/main.c",
      "lines": "173-176",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/main.c#L173-L176"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "1044-1111",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L1044-L1111"
     }
    ]
   }
  ],
  "encoder_select": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Sets the tempo, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "1016-1019",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L1016-L1019"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Previous or next page of the same button, stopping at the ends.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "204-230",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L204-L230"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "1016-1019",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L1016-L1019"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn",
    "action": "Sets tempo while a layer is active, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "903-909",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L903-L909"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn",
    "action": "Sets tempo while a layer is active, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "903-909",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L903-L909"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "turn",
    "action": "Sets tempo while a layer is active, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "903-909",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L903-L909"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn",
    "action": "Sets tempo while a layer is active, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "903-909",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L903-L909"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn",
    "action": "Sets tempo while a layer is active, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "903-909",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L903-L909"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "turn",
    "action": "Sets tempo while a layer is active, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "903-909",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L903-L909"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn",
    "action": "Sets tempo while a layer is active, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "903-909",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L903-L909"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "turn",
    "action": "Sets tempo while a layer is active, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "903-909",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L903-L909"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "turn",
    "action": "Sets tempo while a layer is active, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "903-909",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L903-L909"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "turn",
    "action": "Sets the tempo, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "1016-1019",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L1016-L1019"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "turn",
    "action": "Next or previous visualiser style (12, round); the choice is kept.",
    "short_label": "STYLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "1009-1014",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L1009-L1014"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_vis.c",
      "lines": "645-650",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_vis.c#L645-L650"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Moves between GRID and KIT, stopping at the ends.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "523-528",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L523-L528"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Moves between GRID and KIT, stopping at the ends.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "523-528",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L523-L528"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Previous or next menu section, stopping at the ends.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-247",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L240-L247"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "turn",
    "action": "Does nothing on the SONG screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_song.c",
      "lines": "152-153",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L152-L153"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Immediately loads factory sounds, loaded DX7 banks and user presets in order, replacing unsaved sound edits without a question or undo; on the drum track it chooses kits.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "988-1005",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L988-L1005"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "435-485",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L435-L485"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "520-544",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L520-L544"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "On PRESETS, immediately loads a factory sound, loaded DX7 voice or user sound on a synth track, replacing unsaved sound edits without a question or undo, or changes the kit on the drum track; turns on USER, PROJECT and TOOLS are ignored.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "988-1005",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L988-L1005"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "323-326",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L323-L326"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Ignored on the other pages so a stray turn cannot replace the sound being edited.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "988-1005",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L988-L1005"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Picks the drum kit.",
    "short_label": "KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "536",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L536"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Picks the drum kit.",
    "short_label": "KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "536",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L536"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn_while_holding:button_seq",
    "action": "Makes or changes a lock on the held steps, with the first click offset from the current track value; a full lock pool refuses a new lock with NO LOCK LEFT.",
    "short_label": "LOCK VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "198-205",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L198-L205"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "463-468",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L463-L468"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "690-713",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L690-L713"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Moves the cursor round the section's rows.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "249-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L249-L250"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn_while_holding:button_home",
    "short_label": "KIND/BANK",
    "action": "On a synth track, jumps to the first sound of the previous or next kind or DX7 bank without a question or undo when the first PRESETS turn comes within about 0.7 seconds of pressing HOME, suppressing HOME’s menu and visualiser actions; waiting until the HOME menu opens makes PRESETS a menu control instead.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "988-1005",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L988-L1005"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "490-538",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L490-L538"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "574-589",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L574-L589"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "874-891",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L874-L891"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn_while_holding:button_home",
    "short_label": "KIND/BANK",
    "action": "On a synth track, jumps to the first sound of the previous or next kind or DX7 bank without a question or undo when the first PRESETS turn comes within about 0.7 seconds of pressing HOME, suppressing the HOME menu and the return to TRACKS; waiting until the HOME menu opens makes PRESETS a menu control instead.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "988-1005",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L988-L1005"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "490-538",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L490-L538"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "574-589",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L574-L589"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "874-891",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L874-L891"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "940-946",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L940-L946"
     }
    ]
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Selects track 1-4 on every screen; recording or an armed take follows it; It does nothing in the menu, on the SONG screen or while a free take runs; turns inside a layer are dropped.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "1007-1008",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L1007-L1008"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "567-578",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L567-L578"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "887-891",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L887-L891"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "908-909",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L908-L909"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_song.c",
      "lines": "152-153",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L152-L153"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Selects the track; moving off the drum track goes back to TRACKS.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "529-534",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L529-L534"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Selects the track; moving off the drum track goes back to TRACKS.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "529-534",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L529-L534"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn_while_holding:button_seq",
    "action": "Picks which sound parameter the step lock acts on (the last one touched comes first).",
    "short_label": "LOCK PARAM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "239-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L239-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "469-472",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L469-L472"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Sets global swing for the four tracks; fast turns move farther.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-293",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L293"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Sets this page's 1st value; empty columns and pages marked DRUM TRACK ignore turns, and wider ranges speed up on fast turns.",
    "short_label": "VALUE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "387-520",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L387-L520"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "302-365",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L302-L365"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "296-328",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L296-L328"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Picks the drum sound (you hear it).",
    "short_label": "DRUM SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "537-565",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L537-L565"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Picks the drum kit.",
    "short_label": "KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "566-570",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L566-L570"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "turn",
    "action": "Moves the cursor through the song entries.",
    "short_label": "ENTRY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_song.c",
      "lines": "135-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L135-L150"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "turn",
    "action": "Empty project only: free (no click, and your playing sets the tempo) or tempo (play against the tempo already set).",
    "short_label": "MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "780-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L780-L807"
     }
    ]
   },
   {
    "mode": "free_take",
    "gesture": "turn",
    "action": "Does nothing during a free take or count-in.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "877-904",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L877-L904"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "turn",
    "action": "Does nothing while the visualiser shows.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "1009-1015",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L1009-L1015"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "Master filter on one knob: turn left for low-pass, right for high-pass; the middle leaves the sound open; Fast turns move farther on wider value ranges.",
    "short_label": "MASTER FILT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "481-489",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L481-L489"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-261",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L261"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn_while_holding:button_edit",
    "action": "Shifts the note or drum steps right or left by one position, while nudges, parameter locks and fill conditions stay at their old step positions.",
    "short_label": "SHIFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "57-75",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L57-L75"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "turn_while_holding:button_arp",
    "action": "Roll rate: 1/8, 1/16, 1/32, 1/32 triplet, 1/64.",
    "short_label": "ROLL RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "499-502",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L499-L502"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn_while_holding:button_seq",
    "action": "Drums: the sound new steps get (you hear it); synths: the note new steps get.",
    "short_label": "PEN SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "503-524",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L503-L524"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn_while_holding:button_seq",
    "action": "Drums: which sound of the held step the next knobs edit; synths: moves the held steps' notes.",
    "short_label": "STEP SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "183-238",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L183-L238"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "503-508",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L503-L508"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "turn_while_holding:button_sel",
    "action": "For the selected synth track, the chord type: off, triad, 7th, 9th, sus4, power.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-540",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L526-L540"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 1; Fast turns move farther on wider value ranges.",
    "short_label": "LEVEL T1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "542-545",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L542-L545"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-261",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L261"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "turn_while_holding:button_save",
    "action": "Does nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "480-549",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L480-L549"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Sets COLOR, LIGHTS or SPEAKER LOWCUT in its section; in SYSTEM it selects calibration, which OCT+ opens.",
    "short_label": "SETTING 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "9-17",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L9-L17"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "160-219",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L160-L219"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "249-258",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L249-L258"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Loads the sound at once over the selected track's sound and unsaved edits, without undo; factory sounds come first, then loaded DX7 banks and user sounds.",
    "short_label": "SYNTH SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "430-436",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L430-L436"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "285-319",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L285-L319"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "435-485",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L435-L485"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "520-544",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L520-L544"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "turn",
    "action": "Picks user slot 1-32.",
    "short_label": "USER SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "445-450",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L445-L450"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "turn",
    "action": "Chooses project slot 1–4.",
    "short_label": "PROJECT SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "123",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L123"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "325",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L325"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "turn",
    "action": "Clears the selected track pattern after two rightward detents within about 1.5 seconds; undo returns its notes and length, while locks, nudges and fills stay cleared; the changed working loop is autosaved later.",
    "short_label": "CLEAR PATT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "473-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L473-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "turn",
    "short_label": "ATTACK",
    "action": "Sets the selected synth track attack time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "303",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L303"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "41",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L41"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "turn",
    "short_label": "ENV FILTER",
    "action": "Sets how strongly the envelope moves the engine brightness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "304",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L304"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "turn",
    "short_label": "LFO RATE",
    "action": "Sets LFO speed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "305",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L305"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "49",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L49"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "turn",
    "short_label": "LFO PITCH",
    "action": "Sets the LFO pitch depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "306",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L306"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "53",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L53"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "turn",
    "short_label": "DRIVE",
    "action": "Sets the selected synth track distortion amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "307",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L307"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "73",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L73"
     }
    ]
   },
   {
    "mode": "page_filter",
    "gesture": "turn",
    "short_label": "TRACK FILTER",
    "action": "Turns the selected synth track filter from low-pass through off to high-pass.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "308",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L308"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "90",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L90"
     }
    ]
   },
   {
    "mode": "fx_keep",
    "gesture": "turn",
    "short_label": "PHONE",
    "action": "Turns PHONE on to the right and off to the left, allowing one kept effect at a time and saving the setting immediately without a question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "309",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L309"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "404-413",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L404-L413"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "turn",
    "short_label": "SLICER",
    "action": "Chooses off, gate or stutter for the selected track slicer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "310",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L310"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "85",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L85"
     }
    ]
   },
   {
    "mode": "page_dly",
    "gesture": "turn",
    "short_label": "DELAY TIME",
    "action": "Chooses the shared delay time as a tempo division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "311",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L311"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "111",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L111"
     }
    ]
   },
   {
    "mode": "page_rev_cho",
    "gesture": "turn",
    "short_label": "REVERB SIZE",
    "action": "Sets the shared reverb size.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "312",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L312"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "115",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L115"
     }
    ]
   },
   {
    "mode": "page_sel",
    "gesture": "turn",
    "short_label": "ROOT",
    "action": "Sets the selected synth track root note.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L313"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "65",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L65"
     }
    ]
   },
   {
    "mode": "page_sel_2",
    "gesture": "turn",
    "short_label": "TRANSPOSE",
    "action": "Transposes the selected synth track up or down by at most 24 semitones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "314",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L314"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "68",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L68"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "turn",
    "short_label": "VOICE",
    "action": "Chooses polyphonic, mono, legato or unison voice behavior.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "317",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L317"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "77",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L77"
     }
    ]
   },
   {
    "mode": "page_voice_2",
    "gesture": "turn",
    "short_label": "ALLOCATION",
    "action": "Chooses rotating voice allocation or reuse.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "318",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L318"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "81",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L81"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Sets the tempo from 40 to 240 BPM.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "319",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L319"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "107",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L107"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "turn",
    "short_label": "DUST",
    "action": "Sets master dust coloration.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "320",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L320"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "134",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L134"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "turn",
    "short_label": "MIDI OUT",
    "action": "Chooses keyboard MIDI output alone or keyboard and sequencer output.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "321",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L321"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "119",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L119"
     }
    ]
   },
   {
    "mode": "page_drums",
    "gesture": "turn",
    "short_label": "DRUM CH",
    "action": "Chooses the drum MIDI input channel, with zero turning it off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "322",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L322"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "131",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L131"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "turn",
    "short_label": "ARP MODE",
    "action": "Chooses off, up, down, up/down, random or played order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "327",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L327"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "57",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L57"
     }
    ]
   },
   {
    "mode": "page_arp_2",
    "gesture": "turn",
    "short_label": "ARP SWING",
    "action": "Sets the arpeggiator swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "328",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L328"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "61",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L61"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "turn",
    "short_label": "STEPS",
    "action": "Sets the selected pattern length from 1 to 64 steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "330",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L330"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "69",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L69"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "short_label": "ANALOG WAVE",
    "action": "Chooses the oscillator waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "132",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L132"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "18-40",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L18-L40"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "short_label": "CUT",
    "action": "Sets filter cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "136",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L136"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "18-40",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L18-L40"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "turn",
    "short_label": "DIGITAL ALG",
    "action": "Chooses one of eight FM algorithms.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "148",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L148"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "30-60",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L30-L60"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "turn",
    "short_label": "IDX",
    "action": "Sets FM modulation amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "152",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L152"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "30-60",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L30-L60"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "short_label": "REG",
    "action": "Chooses a drawbar registration.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "286",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L286"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "short_label": "PERC",
    "action": "Chooses organ percussion.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "290",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L290"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "turn",
    "short_label": "FM6 ALG",
    "action": "Keeps the patch algorithm or chooses algorithm 1–32.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "464",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L464"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "35-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L35-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "turn",
    "short_label": "MEG",
    "action": "Speeds up or slows down modulator envelopes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "468",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L468"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "35-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L35-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "short_label": "VOWL",
    "action": "Sets the starting vowel.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "230",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L230"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "3-22",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L3-L22"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-241",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L241"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "short_label": "BUZZ",
    "action": "Sets the buzz of the voice.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "234",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L234"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "3-22",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L3-L22"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-241",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L241"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "short_label": "SRC",
    "action": "Chooses the sample source.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "439",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L439"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "short_label": "PTCH",
    "action": "Transposes grains up or down by at most 24 semitones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "443",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L443"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "CHIP",
    "action": "Chooses the chip model.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "221",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L221"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "3-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L3-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-59",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L47-L59"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "short_label": "SWP",
    "action": "Sets the downward pitch sweep.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "225",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L225"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "3-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L3-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-59",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L47-L59"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "turn",
    "short_label": "NOISE MODE",
    "action": "Chooses analog noise, dust, shift-register noise or metallic noise.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "263",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L263"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "45-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L45-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "TRK",
    "action": "Sets filter key tracking.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "267",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L267"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "45-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L45-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "short_label": "PHASE WAVE",
    "action": "Chooses the first phase-distortion waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "short_label": "DTN",
    "action": "Sets detuning between oscillator lines.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "192",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L192"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "MODEL",
    "action": "Chooses modal, string, membrane or sympathetic-string modeling.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "267",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L267"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "POS",
    "action": "Sets strike or pluck position; sympathetic mode sets sympathetic-string strength.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "271",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L271"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "short_label": "SET",
    "action": "Chooses the factory or user sample set.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "208",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L208"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "205-219",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L219"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "short_label": "CUT",
    "action": "Sets the sample tone cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "212",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L212"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "205-219",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L219"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "short_label": "TRIO WAVES",
    "action": "Chooses the oscillator waveform combination.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "383",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L383"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "3-15",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L3-L15"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "short_label": "MODE",
    "action": "Chooses low-pass, band-pass, high-pass or notch filtering.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "387",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L387"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "3-15",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L3-L15"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   }
  ],
  "encoder_knob2": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Sets the selected track level; the first turn unmutes a muted track and fast turns move farther.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-293",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L293"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Sets this page's 2nd value; empty columns and pages marked DRUM TRACK ignore turns, and wider ranges speed up on fast turns.",
    "short_label": "VALUE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "387-520",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L387-L520"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "302-365",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L302-L365"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "turn",
    "action": "Transposes all notes on the step; an empty step gets the last note used.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "296-328",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L296-L328"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Steps the cursor through the pattern and plays the hits on that step.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "537-565",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L537-L565"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Drum track level.",
    "short_label": "DRUM LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "566-570",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L566-L570"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "turn",
    "action": "Sets the entry's section A-D (stopped only).",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_song.c",
      "lines": "135-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L135-L150"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "turn",
    "action": "When recording at a tempo: the selected track's loop length, 1, 2 or 4 bars.",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "780-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L780-L807"
     }
    ]
   },
   {
    "mode": "free_take",
    "gesture": "turn",
    "action": "Does nothing during a free take or count-in.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "877-904",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L877-L904"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "turn",
    "action": "Does nothing while the visualiser shows.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "1009-1015",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L1009-L1015"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "Master DUST (old sampler and vinyl colour); Fast turns move farther on wider value ranges.",
    "short_label": "DUST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "481-489",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L481-L489"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-261",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L261"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn_while_holding:button_edit",
    "action": "Right copies the note or drum steps into a second pass, up to 64 steps; left halves the length; nudges, parameter locks and fill conditions are not copied or moved.",
    "short_label": "LEN X2 / 1/2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "76-94",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L76-L94"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "turn_while_holding:button_arp",
    "action": "Does nothing in the ARP layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "499-502",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L499-L502"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn_while_holding:button_seq",
    "action": "The track's step division: 1/4, 1/8, 1/16, 1/32, 8T, 16T, 1/2, 1 bar or 2 bars.",
    "short_label": "DIV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "503-524",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L503-L524"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn_while_holding:button_seq",
    "action": "Sets each held note or drum hit to ghost, soft, normal or hard; this is a four-level change rather than a full velocity dial.",
    "short_label": "STEP LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "207-234",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L207-L234"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "503-508",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L503-L508"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "turn_while_holding:button_sel",
    "action": "One scale for all three synth tracks, chosen from 16.",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-540",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L526-L540"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 2; Fast turns move farther on wider value ranges.",
    "short_label": "LEVEL T2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "542-545",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L542-L545"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-261",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L261"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "turn_while_holding:button_save",
    "action": "Does nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "480-549",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L480-L549"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Sets ZOOM, KEYS or USB AUDIO in its section; in SYSTEM it selects ABOUT, which OCT+ opens.",
    "short_label": "SETTING 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "9-17",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L9-L17"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "160-219",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L160-L219"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "249-258",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L249-L258"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Chooses the previous or next engine and immediately loads its first sound over the track's sound and unsaved edits, without a question or undo.",
    "short_label": "ENGINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "436-437",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L436-L437"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "324-357",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L324-L357"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "turn",
    "action": "Loads the user slot into the selected synth track after two rightward detents within about 1.5 seconds, replacing unsaved sound edits without undo.",
    "short_label": "LOAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "445-462",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L445-L462"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/upreset.c",
      "lines": "255-279",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/upreset.c#L255-L279"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/upreset.c",
      "lines": "308-324",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/upreset.c#L308-L324"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "325",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L325"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-466",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L466"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "turn",
    "action": "Resets the selected synth track to its engine's first sound after two rightward detents within about 1.5 seconds, replacing unsaved sound edits without undo; the changed working loop is autosaved later.",
    "short_label": "INIT SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "473-479",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L473-L479"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "501-506",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L501-L506"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "324-335",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L324-L335"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "turn",
    "short_label": "DECAY",
    "action": "Sets the selected synth track decay time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "303",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L303"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "42",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L42"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "turn",
    "short_label": "ENV PITCH",
    "action": "Sets the envelope depth for pitch.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "304",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L304"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "46",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L46"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "turn",
    "short_label": "LFO WAVE",
    "action": "Chooses sine, triangle, saw, square or sample-and-hold modulation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "305",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L305"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "50",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L50"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "turn",
    "short_label": "LFO FILTER",
    "action": "Sets the LFO brightness depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "306",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L306"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L54"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "turn",
    "short_label": "CHORUS",
    "action": "Sets the selected synth track chorus send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "307",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L307"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "74",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L74"
     }
    ]
   },
   {
    "mode": "page_filter",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "308",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L308"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "fx_keep",
    "gesture": "turn",
    "short_label": "TAPE",
    "action": "Turns TAPE on to the right and off to the left, allowing one kept effect at a time and saving the setting immediately without a question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "309",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L309"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "404-413",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L404-L413"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "turn",
    "short_label": "SLICER PATT",
    "action": "Chooses one of sixteen slicer patterns.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "310",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L310"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L86"
     }
    ]
   },
   {
    "mode": "page_dly",
    "gesture": "turn",
    "short_label": "FEEDBACK",
    "action": "Sets the shared delay feedback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "311",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L311"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "112",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L112"
     }
    ]
   },
   {
    "mode": "page_rev_cho",
    "gesture": "turn",
    "short_label": "REVERB DAMP",
    "action": "Sets the shared reverb damping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "312",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L312"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "116",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L116"
     }
    ]
   },
   {
    "mode": "page_sel",
    "gesture": "turn",
    "short_label": "SCALE",
    "action": "Chooses the selected synth track scale.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L313"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "66",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L66"
     }
    ]
   },
   {
    "mode": "page_sel_2",
    "gesture": "turn",
    "short_label": "STRUM",
    "action": "Sets chord strum direction and spacing, up to 60 ms per note.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "314",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L314"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "91",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L91"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "turn",
    "short_label": "GLIDE",
    "action": "Sets glide time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "317",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L317"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "78",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L78"
     }
    ]
   },
   {
    "mode": "page_voice_2",
    "gesture": "turn",
    "short_label": "UNISON TUNE",
    "action": "Sets unison voice detuning.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "318",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L318"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "82",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L82"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "turn",
    "short_label": "SWING",
    "action": "Sets the swing shared by the four tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "319",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L319"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "108",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L108"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "turn",
    "short_label": "DUCK",
    "action": "Sets how much kick hits duck the synth tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "320",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L320"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "135",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L135"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "turn",
    "short_label": "SYNC",
    "action": "Chooses internal, USB or TRS clock and transport.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "321",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L321"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "120",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L120"
     }
    ]
   },
   {
    "mode": "page_drums",
    "gesture": "turn",
    "short_label": "DRUM LEVEL",
    "action": "Sets the drum track level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "322",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L322"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "132",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L132"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "turn",
    "short_label": "ARP RATE",
    "action": "Chooses the arpeggiator timing division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "327",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L327"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "58",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L58"
     }
    ]
   },
   {
    "mode": "page_arp_2",
    "gesture": "turn",
    "short_label": "ARP CHANCE",
    "action": "Sets the chance of each arpeggiator note sounding.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "328",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L328"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "62",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L62"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "turn",
    "short_label": "DIVISION",
    "action": "Chooses the pattern step division, from quarter notes through two bars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "330",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L330"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "70",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L70"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "short_label": "DTN",
    "action": "Sets oscillator detuning.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "133",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L133"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "18-40",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L18-L40"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "short_label": "RES",
    "action": "Sets filter resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "137",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L137"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "18-40",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L18-L40"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "turn",
    "short_label": "R2",
    "action": "Sets operator 2 frequency ratio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "149",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L149"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "30-60",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L30-L60"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "turn",
    "short_label": "MDEC",
    "action": "Sets modulator envelope decay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "153",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L153"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "30-60",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L30-L60"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "short_label": "SUB",
    "action": "Adjusts the low drawbar group.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "287",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L287"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "short_label": "CLICK",
    "action": "Sets organ key click.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "291",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L291"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "turn",
    "short_label": "FB",
    "action": "Offsets patch feedback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "465",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L465"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "35-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L35-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "turn",
    "short_label": "VMOD",
    "action": "Offsets modulator velocity sensitivity.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "469",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L469"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "35-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L35-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "short_label": "VOWL2",
    "action": "Sets the destination vowel.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "231",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L231"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "3-22",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L3-L22"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-241",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L241"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "short_label": "BRTH",
    "action": "Sets breath noise.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "235",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L235"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "3-22",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L3-L22"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-241",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L241"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "short_label": "POS",
    "action": "Sets the centre position for grains.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "440",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L440"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "short_label": "SPRD",
    "action": "Sets grain position and timing spread.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "444",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L444"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "WAVE",
    "action": "Chooses the chip waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "3-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L3-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-59",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L47-L59"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "short_label": "VIB",
    "action": "Sets vibrato.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "226",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L226"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "3-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L3-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-59",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L47-L59"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "turn",
    "short_label": "COLR",
    "action": "Moves noise colour between white, pink and brown.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "264",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L264"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "45-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L45-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "DENS",
    "action": "Sets impulse density; shift-register and metallic modes choose register length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "268",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L268"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "45-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L45-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "short_label": "WAVE2",
    "action": "Chooses the alternating second waveform or disables it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "189",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L189"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "short_label": "LINE",
    "action": "Chooses a mixed or ring-modulated second line.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "193",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L193"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "STRC",
    "action": "Sets resonator structure; membrane mode uses harmonicity and sympathetic mode chooses a chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "268",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L268"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "ACC",
    "action": "Sets velocity accent.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "272",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L272"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "short_label": "TUNE",
    "action": "Tunes the sample up or down by at most 24 semitones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "209",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L209"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "205-219",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L219"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "213",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L213"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "205-219",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L219"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "short_label": "INT2",
    "action": "Tunes oscillator 2 within 24 semitones of oscillator 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "384",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L384"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "3-15",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L3-L15"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "short_label": "CUT",
    "action": "Sets filter cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "388",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L388"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "3-15",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L3-L15"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   }
  ],
  "encoder_knob3": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Sets the selected pattern length from 1 to 64 steps; fast turns move farther.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-293",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L293"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Sets this page's 3rd value; empty columns and pages marked DRUM TRACK ignore turns, and wider ranges speed up on fast turns.",
    "short_label": "VALUE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "387-520",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L387-L520"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "302-365",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L302-L365"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "turn",
    "action": "Chooses NOTE, TIE or REST for this step.",
    "short_label": "TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "296-328",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L296-L328"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Right adds a hit of the sound on the step; left removes it.",
    "short_label": "HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "537-565",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L537-L565"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Drum reverb send.",
    "short_label": "DRUM REVERB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "566-570",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L566-L570"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "turn",
    "action": "Sets the entry's length, 1-64 bars (stopped only).",
    "short_label": "BARS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_song.c",
      "lines": "135-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L135-L150"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "turn",
    "action": "When recording at a tempo: note (your first note starts it) or count (PLAY clicks one bar first).",
    "short_label": "START",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "780-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L780-L807"
     }
    ]
   },
   {
    "mode": "free_take",
    "gesture": "turn",
    "action": "Does nothing during a free take or count-in.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "877-904",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L877-L904"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "turn",
    "action": "Does nothing while the visualiser shows.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "1009-1015",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L1009-L1015"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "Master DUCK (the kick pumps the synth tracks); Fast turns move farther on wider value ranges.",
    "short_label": "DUCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "481-489",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L481-L489"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-261",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L261"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn_while_holding:button_edit",
    "action": "Moves every note a semitone up or down (synth tracks).",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "95-106",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L95-L106"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "turn_while_holding:button_arp",
    "action": "Does nothing in the ARP layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "499-502",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L499-L502"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn_while_holding:button_seq",
    "action": "The track's own swing, added to the global one; Fast turns move farther on wider value ranges.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "503-524",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L503-L524"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn_while_holding:button_seq",
    "action": "Repeats inside the step, x1 to x4.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "183-238",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L183-L238"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "503-508",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L503-L508"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "turn_while_holding:button_sel",
    "action": "KEYS of the selected track: off, snap, white.",
    "short_label": "KEYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-540",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L526-L540"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 3; Fast turns move farther on wider value ranges.",
    "short_label": "LEVEL T3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "542-545",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L542-L545"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-261",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L261"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "turn_while_holding:button_save",
    "action": "Does nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "480-549",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L480-L549"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "In LIGHTS, changes NOTES; in AUDIO, changes USB SERIAL for the next start; in SYSTEM, sets keyboard and arp velocity from 60 to 127 in eight choices, default 100, leaving drum hits, rolls and sequencer step levels unchanged.",
    "short_label": "SETTING 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "9-20",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L9-L20"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "181-188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L181-L188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "249-258",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L249-L258"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1025-1032",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1025-L1032"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1094-1095",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1094-L1095"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1418"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Loads the first sound of the previous or next kind, DX7 bank or user group, replacing unsaved sound edits at once without undo.",
    "short_label": "KIND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "438-441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L438-L441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "468-517",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L468-L517"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui.c",
      "lines": "520-544",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L520-L544"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "turn",
    "action": "Erases the user slot immediately after two rightward detents within about 1.5 seconds while stopped, with no further question or undo.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "445-462",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L445-L462"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/upreset.c",
      "lines": "187-209",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/upreset.c#L187-L209"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/upreset.c",
      "lines": "308-337",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/upreset.c#L308-L337"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "turn",
    "action": "Loads the selected project over the working loop after two rightward detents within about 1.5 seconds while stopped, replacing unsaved work without undo; the changed working loop is autosaved later.",
    "short_label": "LOAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "473-487",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L473-L487"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "428-462",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L428-L462"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "326",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L326"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "turn",
    "short_label": "SUSTAIN",
    "action": "Sets the selected synth track sustain level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "303",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L303"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "43",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L43"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "turn",
    "short_label": "ENV SHAPE",
    "action": "Sets the envelope depth for the engine shape.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "304",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L304"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "turn",
    "short_label": "LFO PHASE",
    "action": "Sets the LFO starting phase.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "305",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L305"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "51",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L51"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "turn",
    "short_label": "LFO SHAPE",
    "action": "Sets the LFO shape depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "306",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L306"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "55",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L55"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "turn",
    "short_label": "DELAY",
    "action": "Sets the selected synth track delay send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "307",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L307"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "75",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L75"
     }
    ]
   },
   {
    "mode": "page_filter",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "308",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L308"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "fx_keep",
    "gesture": "turn",
    "short_label": "HALF",
    "action": "Turns HALF on to the right and off to the left, allowing one kept effect at a time and saving the setting immediately without a question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "309",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L309"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "404-413",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L404-L413"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "turn",
    "short_label": "SLICER RATE",
    "action": "Chooses the slicer timing division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "310",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L310"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "87",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L87"
     }
    ]
   },
   {
    "mode": "page_dly",
    "gesture": "turn",
    "short_label": "DELAY COLOR",
    "action": "Sets the tone of the delay repeats.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "311",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L311"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "113",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L113"
     }
    ]
   },
   {
    "mode": "page_rev_cho",
    "gesture": "turn",
    "short_label": "CHORUS RATE",
    "action": "Sets the shared chorus speed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "312",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L312"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "117",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L117"
     }
    ]
   },
   {
    "mode": "page_sel",
    "gesture": "turn",
    "short_label": "KEYS",
    "action": "Chooses normal chromatic keys, scale snapping or the scale on white keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L313"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "67",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L67"
     }
    ]
   },
   {
    "mode": "page_sel_2",
    "gesture": "turn",
    "short_label": "VOICE LEAD",
    "action": "Turns chord voice leading on or off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "314",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L314"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "92",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L92"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "turn",
    "short_label": "GLIDE MODE",
    "action": "Chooses glide at a fixed rate or fixed time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "317",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L317"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "79",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L79"
     }
    ]
   },
   {
    "mode": "page_voice_2",
    "gesture": "turn",
    "short_label": "PAN",
    "action": "Sets the selected synth track pan.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "318",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L318"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "83",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L83"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "turn",
    "short_label": "CLICK",
    "action": "Chooses no click, click during recording or click throughout playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "319",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L319"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "109",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L109"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "turn",
    "short_label": "MASTER FILT",
    "action": "Turns the master filter from low-pass through off to high-pass.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "320",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L320"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "136",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L136"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "turn",
    "short_label": "MIDI IN",
    "action": "Chooses incoming notes plus clock or clock alone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "321",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L321"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "121",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L121"
     }
    ]
   },
   {
    "mode": "page_drums",
    "gesture": "turn",
    "short_label": "DRUM REVERB",
    "action": "Sets the drum track reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "322",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L322"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "133",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L133"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "turn",
    "short_label": "ARP OCTAVES",
    "action": "Sets the arpeggiator span from one to four octaves.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "327",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L327"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "59",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L59"
     }
    ]
   },
   {
    "mode": "page_arp_2",
    "gesture": "turn",
    "short_label": "ARP HOLD",
    "action": "Turns arpeggiator note latching on or off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "328",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L328"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "63",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L63"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "turn",
    "short_label": "TRACK SWING",
    "action": "Sets the selected pattern swing on top of global swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "330",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L330"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "71",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L71"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "short_label": "MIX",
    "action": "Sets the mix between oscillators.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "134",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L134"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "18-40",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L18-L40"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "short_label": "DRV",
    "action": "Sets filter drive.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "138",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L138"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "18-40",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L18-L40"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "turn",
    "short_label": "R3",
    "action": "Sets operator 3 frequency ratio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "30-60",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L30-L60"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "turn",
    "short_label": "FB",
    "action": "Sets feedback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "154",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L154"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "30-60",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L30-L60"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "short_label": "BODY",
    "action": "Adjusts the middle drawbar group.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "288",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L288"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "short_label": "DRV",
    "action": "Sets organ drive.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "292",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L292"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "turn",
    "short_label": "MLVL",
    "action": "Offsets modulator levels to change brightness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "466",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L466"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "35-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L35-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "turn",
    "short_label": "DTUN",
    "action": "Spreads carrier pitches.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "35-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L35-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "short_label": "TALK",
    "action": "Sets vowel transition time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "232",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L232"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "3-22",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L3-L22"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-241",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L241"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "short_label": "Q",
    "action": "Sets formant resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "236",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L236"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "3-22",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L3-L22"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-241",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L241"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "short_label": "SIZE",
    "action": "Sets grain length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "short_label": "RAND",
    "action": "Sets random pitch variation and reverse-grain chance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "445",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L445"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "DUTY",
    "action": "Sets pulse width, or chooses one of sixteen wave tables with WRAM.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "223",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L223"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "3-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L3-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-59",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L47-L59"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "short_label": "ARP",
    "action": "Chooses no chip arpeggio, octave, major or minor.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "227",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L227"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "3-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L3-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-59",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L47-L59"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "turn",
    "short_label": "FREQ",
    "action": "Sets filter frequency.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "265",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L265"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "45-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L45-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "DRFT",
    "action": "Sets slow random drift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "269",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L269"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "45-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L45-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "short_label": "DCW",
    "action": "Sets phase distortion depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "short_label": "SUB",
    "action": "Sets the sub-oscillator level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "194",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L194"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "BRIT",
    "action": "Sets model brightness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "269",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L269"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "BOW",
    "action": "Sets bow excitation; membrane mode sets pitch bend and sympathetic mode sets buzz.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "273",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L273"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "short_label": "BITS",
    "action": "Sets sample bit reduction.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "210",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L210"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "205-219",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L219"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "short_label": "DRV",
    "action": "Sets sample drive.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "214",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L214"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "205-219",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L219"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "short_label": "INT3",
    "action": "Tunes oscillator 3 within 24 semitones of oscillator 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "385",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L385"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "3-15",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L3-L15"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "short_label": "RES",
    "action": "Sets filter resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "389",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L389"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "3-15",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L3-L15"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   }
  ],
  "encoder_knob4": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Sets the selected track pan; fast turns move farther.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-293",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L293"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Sets this page's 4th value; empty columns and pages marked DRUM TRACK ignore turns, and wider ranges speed up on fast turns.",
    "short_label": "VALUE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-260",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L260"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "387-520",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L387-L520"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "302-365",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L302-L365"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "turn",
    "action": "Chooses no flag, accent, slide or both.",
    "short_label": "FLAG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "296-328",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L296-L328"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Steps the hit's level: ghost, soft, normal, hard.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "537-565",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L537-L565"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Drum track pan.",
    "short_label": "DRUM PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "566-570",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L566-L570"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "turn",
    "action": "Sets how many entries the song has, 1-16 (stopped only).",
    "short_label": "SONG LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_song.c",
      "lines": "135-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L135-L150"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "turn",
    "action": "Does nothing while recording is armed.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "780-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L780-L807"
     }
    ]
   },
   {
    "mode": "free_take",
    "gesture": "turn",
    "action": "Does nothing during a free take or count-in.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "877-904",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L877-L904"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "turn",
    "action": "Does nothing while the visualiser shows.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "1009-1015",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L1009-L1015"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "A filter for the selected track alone, set the same way as the master one; Fast turns move farther on wider value ranges.",
    "short_label": "TRACK FILT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "481-489",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L481-L489"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-261",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L261"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn_while_holding:button_edit",
    "action": "Does nothing.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "491-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L491-L498"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "turn_while_holding:button_arp",
    "action": "Does nothing in the ARP layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "499-502",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L499-L502"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn_while_holding:button_seq",
    "action": "The track's length, 1-64 steps; Fast turns move farther on wider value ranges.",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "503-524",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L503-L524"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn_while_holding:button_seq",
    "action": "Shifts the held steps off the grid: up to 32/64 of a step early or 31/64 late.",
    "short_label": "NUDGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "183-238",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L183-L238"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "503-508",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L503-L508"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "turn_while_holding:button_sel",
    "action": "Transposes the selected track, plus or minus 24 semitones.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-540",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L526-L540"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 4 (the drum level); Fast turns move farther on wider value ranges.",
    "short_label": "LEVEL T4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "542-545",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L542-L545"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "254-261",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L254-L261"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "turn_while_holding:button_save",
    "action": "Does nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "480-549",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L480-L549"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Does nothing while the menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "9-17",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L9-L17"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "160-219",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L160-L219"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "249-258",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L249-L258"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "430-443",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L430-L443"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "891-900",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L891-L900"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "turn",
    "action": "Writes the selected synth sound to the user slot after two rightward detents within about 1.5 seconds while stopped, replacing a used slot without another question or undo; SAVED (RAM) lasts only until power-off.",
    "short_label": "USER SAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "445-462",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L445-L462"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/upreset.c",
      "lines": "220-248",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/upreset.c#L220-L248"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/upreset.c",
      "lines": "308-337",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/upreset.c#L308-L337"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "turn",
    "action": "Writes the working loop to the selected project slot after two rightward detents within about 1.5 seconds while stopped, replacing it without another question or undo; SAVED (RAM) lasts only until power-off.",
    "short_label": "PROJECT SAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "473-491",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L473-L491"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "411-425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L411-L425"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "turn",
    "action": "Starts a new working loop with default sounds, empty patterns and default tempo after two rightward detents within about 1.5 seconds; stored projects stay, undo restores only one track's notes and length, and song playback must be stopped first; the changed working loop is autosaved later.",
    "short_label": "NEW PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "330-355",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L330-L355"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "473-479",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L473-L479"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "507-517",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L507-L517"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Sets the selected synth track release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "303",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L303"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "304",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L304"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "turn",
    "short_label": "LFO FADE",
    "action": "Sets how long the LFO takes to fade in.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "305",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L305"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L52"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "turn",
    "short_label": "LFO AMP",
    "action": "Sets the LFO amplitude depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "306",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L306"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "56",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L56"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "turn",
    "short_label": "REVERB",
    "action": "Sets the selected synth track reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "307",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L307"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "76",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L76"
     }
    ]
   },
   {
    "mode": "page_filter",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "308",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L308"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "fx_keep",
    "gesture": "turn",
    "short_label": "RESET FX",
    "action": "Two rightward detents within about 1.5 seconds reset the selected track sends, filter and slicer plus shared effects and kept effect, without undo; clearing a kept effect saves settings immediately.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "365-428",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L365-L428"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "turn",
    "short_label": "SLICER DEPTH",
    "action": "Sets the slicer depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "310",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L310"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "88",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L88"
     }
    ]
   },
   {
    "mode": "page_dly",
    "gesture": "turn",
    "short_label": "DELAY MIX",
    "action": "Sets the shared delay mix.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "311",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L311"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "114",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L114"
     }
    ]
   },
   {
    "mode": "page_rev_cho",
    "gesture": "turn",
    "short_label": "CHORUS DEPTH",
    "action": "Sets the shared chorus depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "312",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L312"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "118",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L118"
     }
    ]
   },
   {
    "mode": "page_sel",
    "gesture": "turn",
    "short_label": "CHORD",
    "action": "Chooses off, triad, seventh, ninth, suspended fourth or power chords.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L313"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L89"
     }
    ]
   },
   {
    "mode": "page_sel_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "314",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L314"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "turn",
    "short_label": "PRIORITY",
    "action": "Chooses last, lowest or highest note priority for mono playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "317",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L317"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "80",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L80"
     }
    ]
   },
   {
    "mode": "page_voice_2",
    "gesture": "turn",
    "short_label": "MUTE",
    "action": "Mutes or unmutes the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "318",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L318"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "84",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L84"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "turn",
    "short_label": "TUNE",
    "action": "Sets master tuning within 50 cents of concert pitch.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "319",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L319"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "110",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L110"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "turn",
    "short_label": "ROLL RATE",
    "action": "Chooses the note-repeat rate.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "320",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L320"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "137",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L137"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "turn",
    "short_label": "-",
    "action": "Displays CPU load or USB state; turning does nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "321",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L321"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "122",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L122"
     }
    ]
   },
   {
    "mode": "page_drums",
    "gesture": "turn",
    "short_label": "DRUM DELAY",
    "action": "Sets the drum track delay send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "322",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L322"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "139",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L139"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "turn",
    "short_label": "ARP GATE",
    "action": "Sets arpeggiator note gate length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "327",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L327"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "60",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L60"
     }
    ]
   },
   {
    "mode": "page_arp_2",
    "gesture": "turn",
    "short_label": "ARP ORDER",
    "action": "Chooses pitch ordering or key press ordering for the arpeggiator.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "328",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L328"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "64",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L64"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "turn",
    "short_label": "GATE",
    "action": "Sets the pattern note gate length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "330",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L330"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "72",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L72"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "short_label": "NOIS",
    "action": "Sets oscillator noise amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "135",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L135"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "18-40",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L18-L40"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "short_label": "KTR",
    "action": "Sets filter key tracking.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "139",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L139"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "18-40",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L18-L40"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "turn",
    "short_label": "R4",
    "action": "Sets operator 4 frequency ratio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "151",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L151"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "30-60",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L30-L60"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "155",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L155"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "30-60",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L30-L60"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "short_label": "TOP",
    "action": "Adjusts the high drawbar group.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "289",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L289"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "short_label": "ROTR",
    "action": "Chooses no rotary effect, slow or fast.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "293",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L293"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "turn",
    "short_label": "MRAT",
    "action": "Offsets modulator frequency ratios.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "467",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L467"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "35-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L35-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "turn",
    "short_label": "PTCH",
    "action": "Loads F1–F8, B1–B27 or D1–D384, with an empty or damaged D slot playing INIT VOICE.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "471",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L471"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "35-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L35-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "258-267",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L258-L267"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "461-471",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L461-L471"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "short_label": "SHIFT",
    "action": "Shifts the formants up or down by at most 12 semitones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "233",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L233"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "3-22",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L3-L22"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-241",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L241"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "short_label": "RAND",
    "action": "Sets vowel randomness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "237",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L237"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "3-22",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L3-L22"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-241",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L241"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "short_label": "DENS",
    "action": "Sets grain density.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "442",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L442"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "short_label": "TONE",
    "action": "Sets grain tone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "446",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L446"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "CRSH",
    "action": "Sets crush amount, or the stepped-envelope decay with STEP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "3-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L3-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-59",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L47-L59"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "short_label": "TONE",
    "action": "Sets the tone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "228",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L228"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "3-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L3-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-59",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L47-L59"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "turn",
    "short_label": "RES",
    "action": "Sets filter resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "266",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L266"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "45-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L45-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "CRSH",
    "action": "Sets crush; shift-register and metallic modes set clock pitch above the key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "270",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L270"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "45-52",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L45-L52"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "short_label": "ENV",
    "action": "Sets the envelope depth for phase distortion.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "191",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L191"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "195",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L195"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "DAMP",
    "action": "Sets model damping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "270",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L270"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "EXC",
    "action": "Sets exciter mix.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "274",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L274"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "short_label": "LOOP",
    "action": "Turns sample looping on or off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "211",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L211"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "205-219",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L219"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "215",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L215"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "205-219",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L219"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "short_label": "DTN",
    "action": "Sets oscillator detuning.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "386",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L386"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "3-15",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L3-L15"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "short_label": "PW",
    "action": "Sets pulse width.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "390",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L390"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "3-15",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L3-L15"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "143-150",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L143-L150"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "464-470",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L464-L470"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Sets headphone and line volume, and USB recording level unless USB AUDIO is FULL; the visualiser stays visible even at zero volume.",
    "short_label": "VOLUME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/main.c",
      "lines": "193-200",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/main.c#L193-L200"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/fx.c",
      "lines": "519-543",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/fx.c#L519-L543"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/audio.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/audio.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_vis.c",
      "lines": "7-8",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_vis.c#L7-L8"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "F3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays KICK.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's IV chord an octave down (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD IV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Loops the last quarter note, in time; The effect lasts while the key is held.",
    "short_label": "LOOP 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "66-87",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L66-L87"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or KICK (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 1 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to F for all three synth tracks.",
    "short_label": "KEY F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes track 1.",
    "short_label": "MUTE T1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "410-425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L410-L425"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L296-L313"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Replaces the unsaved working loop with section A without a question or undo, immediately while stopped in loop or song mode or at the next bar during loop playback; a playing song refuses the call, later autosave keeps the replacement, and several taps during one SAVE hold during loop playback make a chain.",
    "short_label": "PLAY A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "354-374",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L354-L374"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1669-1677",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1669-L1677"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/arranger_scene.c",
      "lines": "31-69",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/arranger_scene.c#L31-L69"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "428-444",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L428-L444"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "790-795",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L790-L795"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 1 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F#3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "F#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays KICK, the same sound as the white key to its left.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "hold",
    "action": "While held, flips the chords you play between major and minor (pressed during a chord, it changes under your finger).",
    "short_label": "MAJ/MIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "227-240",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L227-L240"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1434",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1434"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases KICK on drums, or this key's mapped synth note unless WHITE keys or chord mode makes it silent; while playing it erases passing steps, and while stopped it erases throughout the pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released; on a synth track with chord mode on or KEYS set to WHITE the black keys are silent, so nothing repeats.",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Shows steps 1-16 (if the track is that long).",
    "short_label": "PAGE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "333-340",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L333-L340"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to F# for all three synth tracks.",
    "short_label": "KEY F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Shows steps 1-16 of the grid.",
    "short_label": "PAGE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "459-471",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L459-L471"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "release",
    "short_label": "CHORD BACK",
    "action": "Removes this key's chord modifier from the chords still held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1483-1485",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1483-L1485"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "-",
    "action": "Does nothing in the FX layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1360-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1360-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "257-262",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L257-L262"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "G3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays KICK 2.",
    "short_label": "KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's V chord an octave down (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD V",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Loops the last eighth note, in time; The effect lasts while the key is held.",
    "short_label": "LOOP 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "66-87",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L66-L87"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or KICK 2 (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 2 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to G for all three synth tracks.",
    "short_label": "KEY G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes track 2.",
    "short_label": "MUTE T2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "410-425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L410-L425"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L296-L313"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Replaces the unsaved working loop with section B without a question or undo, immediately while stopped in loop or song mode or at the next bar during loop playback; a playing song refuses the call, later autosave keeps the replacement, and several taps during one SAVE hold during loop playback make a chain.",
    "short_label": "PLAY B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "354-374",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L354-L374"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1669-1677",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1669-L1677"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/arranger_scene.c",
      "lines": "31-69",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/arranger_scene.c#L31-L69"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "428-444",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L428-L444"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "790-795",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L790-L795"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 2 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G#3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "G#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays KICK 2, the same sound as the white key to its left.",
    "short_label": "KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "hold",
    "action": "While held, adds the 7th from the scale (pressed during a chord, it changes under your finger).",
    "short_label": "ADD 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "227-240",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L227-L240"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1434",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1434"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases KICK 2 on drums, or this key's mapped synth note unless WHITE keys or chord mode makes it silent; while playing it erases passing steps, and while stopped it erases throughout the pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released; on a synth track with chord mode on or KEYS set to WHITE the black keys are silent, so nothing repeats.",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Shows steps 17-32 (if the track is that long).",
    "short_label": "PAGE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "333-340",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L333-L340"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to G# for all three synth tracks.",
    "short_label": "KEY G#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Shows steps 17-32 of the grid.",
    "short_label": "PAGE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "459-471",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L459-L471"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "release",
    "short_label": "CHORD BACK",
    "action": "Removes this key's chord modifier from the chords still held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1483-1485",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1483-L1485"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "-",
    "action": "Does nothing in the FX layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1360-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1360-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "257-262",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L257-L262"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays A3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "A3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays SNARE.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's VI chord an octave down (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD VI",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Loops the last sixteenth, in time; The effect lasts while the key is held.",
    "short_label": "LOOP 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "66-87",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L66-L87"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or SNARE (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 3 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to A for all three synth tracks.",
    "short_label": "KEY A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes track 3.",
    "short_label": "MUTE T3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "410-425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L410-L425"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L296-L313"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Replaces the unsaved working loop with section C without a question or undo, immediately while stopped in loop or song mode or at the next bar during loop playback; a playing song refuses the call, later autosave keeps the replacement, and several taps during one SAVE hold during loop playback make a chain.",
    "short_label": "PLAY C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "354-374",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L354-L374"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1669-1677",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1669-L1677"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/arranger_scene.c",
      "lines": "31-69",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/arranger_scene.c#L31-L69"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "428-444",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L428-L444"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "790-795",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L790-L795"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 3 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays A#3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "A#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays SNARE, the same sound as the white key to its left.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "hold",
    "action": "While held, turns the chords into sus4 (pressed during a chord, it changes under your finger).",
    "short_label": "SUS4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "227-240",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L227-L240"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1434",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1434"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases SNARE on drums, or this key's mapped synth note unless WHITE keys or chord mode makes it silent; while playing it erases passing steps, and while stopped it erases throughout the pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released; on a synth track with chord mode on or KEYS set to WHITE the black keys are silent, so nothing repeats.",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Shows steps 33-48 (if the track is that long).",
    "short_label": "PAGE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "333-340",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L333-L340"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to A# for all three synth tracks.",
    "short_label": "KEY A#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Shows steps 33-48 of the grid.",
    "short_label": "PAGE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "459-471",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L459-L471"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "release",
    "short_label": "CHORD BACK",
    "action": "Removes this key's chord modifier from the chords still held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1483-1485",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1483-L1485"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "-",
    "action": "Does nothing in the FX layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1360-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1360-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "257-262",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L257-L262"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays B3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "B3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays CLAP.",
    "short_label": "CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's VII chord an octave down (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD VII",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Loops the last 1/32, in time; The effect lasts while the key is held.",
    "short_label": "LOOP 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "66-87",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L66-L87"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or CLAP (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 4 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to B for all three synth tracks.",
    "short_label": "KEY B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes the drum track.",
    "short_label": "MUTE T4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "410-425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L410-L425"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L296-L313"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Replaces the unsaved working loop with section D without a question or undo, immediately while stopped in loop or song mode or at the next bar during loop playback; a playing song refuses the call, later autosave keeps the replacement, and several taps during one SAVE hold during loop playback make a chain.",
    "short_label": "PLAY D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "354-374",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L354-L374"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1669-1677",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1669-L1677"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/arranger_scene.c",
      "lines": "31-69",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/arranger_scene.c#L31-L69"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "428-444",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L428-L444"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "790-795",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L790-L795"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 4 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays C4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "C4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays HAT.",
    "short_label": "HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's I chord (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD I",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Stutters in 1/16 triplets; The effect lasts while the key is held.",
    "short_label": "STUTTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "66-87",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L66-L87"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or HAT (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 5 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to C for all three synth tracks.",
    "short_label": "KEY C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos track 1 (solos add up).",
    "short_label": "SOLO T1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "410-425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L410-L425"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L296-L313"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Stores the loop in section A, requiring a second press within 3 seconds if it is occupied; the copy reaches flash after playback stops and the unit is quiet, and undo cannot restore the replaced section.",
    "short_label": "STORE A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L375-L385"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "778-788",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L778-L788"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "796-811",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L796-L811"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "852-862",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L852-L862"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 5 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays C#4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "C#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays HAT, the same sound as the white key to its left.",
    "short_label": "HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "hold",
    "action": "While held, adds the 9th from the scale (pressed during a chord, it changes under your finger).",
    "short_label": "ADD 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "227-240",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L227-L240"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1434",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1434"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases HAT on drums, or this key's mapped synth note unless WHITE keys or chord mode makes it silent; while playing it erases passing steps, and while stopped it erases throughout the pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released; on a synth track with chord mode on or KEYS set to WHITE the black keys are silent, so nothing repeats.",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Shows steps 49-64 (if the track is that long).",
    "short_label": "PAGE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "333-340",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L333-L340"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to C# for all three synth tracks.",
    "short_label": "KEY C#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Shows steps 49-64 of the grid.",
    "short_label": "PAGE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "459-471",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L459-L471"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "release",
    "short_label": "CHORD BACK",
    "action": "Removes this key's chord modifier from the chords still held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1483-1485",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1483-L1485"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "-",
    "action": "Does nothing in the FX layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1360-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1360-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "257-262",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L257-L262"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays D4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "D4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays OPEN HAT.",
    "short_label": "OPEN HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's II chord (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD II",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Plays the mix backwards; The effect lasts while the key is held.",
    "short_label": "REVERSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "103-109",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L103-L109"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or OPEN HAT (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 6 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to D for all three synth tracks.",
    "short_label": "KEY D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos track 2 (solos add up).",
    "short_label": "SOLO T2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "410-425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L410-L425"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L296-L313"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Stores the loop in section B, requiring a second press within 3 seconds if it is occupied; the copy reaches flash after playback stops and the unit is quiet, and undo cannot restore the replaced section.",
    "short_label": "STORE B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L375-L385"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "778-788",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L778-L788"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "796-811",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L796-L811"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "852-862",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L852-L862"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 6 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays D#4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "D#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays OPEN HAT, the same sound as the white key to its left.",
    "short_label": "OPEN HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "hold",
    "action": "While held, inverts the chords (pressed during a chord, it changes under your finger).",
    "short_label": "INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "227-240",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L227-L240"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1434",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1434"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases OPEN HAT on drums, or this key's mapped synth note unless WHITE keys or chord mode makes it silent; while playing it erases passing steps, and while stopped it erases throughout the pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released; on a synth track with chord mode on or KEYS set to WHITE the black keys are silent, so nothing repeats.",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to D# for all three synth tracks.",
    "short_label": "KEY D#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "release",
    "short_label": "CHORD BACK",
    "action": "Removes this key's chord modifier from the chords still held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1483-1485",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1483-L1485"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "-",
    "action": "Does nothing in the FX layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1360-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1360-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "257-262",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L257-L262"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays E4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "E4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays PEDAL (the pedal hi-hat).",
    "short_label": "PEDAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's III chord (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD III",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Slows the mix to a stop like a tape; The effect lasts while the key is held.",
    "short_label": "TAPE STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "110-114",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L110-L114"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or PEDAL (the pedal hi-hat) (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 7 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to E for all three synth tracks.",
    "short_label": "KEY E",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos track 3 (solos add up).",
    "short_label": "SOLO T3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "410-425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L410-L425"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L296-L313"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Stores the loop in section C, requiring a second press within 3 seconds if it is occupied; the copy reaches flash after playback stops and the unit is quiet, and undo cannot restore the replaced section.",
    "short_label": "STORE C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L375-L385"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "778-788",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L778-L788"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "796-811",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L796-L811"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "852-862",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L852-L862"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 7 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "F4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays RIM.",
    "short_label": "RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's IV chord (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD IV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Plays the mix at half speed; The effect lasts while the key is held.",
    "short_label": "HALF SPEED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "120-127",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L120-L127"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or RIM (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 8 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to F for all three synth tracks.",
    "short_label": "KEY F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos the drum track (solos add up).",
    "short_label": "SOLO T4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "410-425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L410-L425"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L296-L313"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Stores the loop in section D, requiring a second press within 3 seconds if it is occupied; the copy reaches flash after playback stops and the unit is quiet, and undo cannot restore the replaced section.",
    "short_label": "STORE D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-385",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L375-L385"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "778-788",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L778-L788"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "796-811",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L796-L811"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "852-862",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L852-L862"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 8 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F#4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "F#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays RIM, the same sound as the white key to its left.",
    "short_label": "RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "hold",
    "action": "While held, flips the chords you play between major and minor (pressed during a chord, it changes under your finger).",
    "short_label": "MAJ/MIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "227-240",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L227-L240"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1434",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1434"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases RIM on drums, or this key's mapped synth note unless WHITE keys or chord mode makes it silent; while playing it erases passing steps, and while stopped it erases throughout the pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released; on a synth track with chord mode on or KEYS set to WHITE the black keys are silent, so nothing repeats.",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to F# for all three synth tracks.",
    "short_label": "KEY F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "release",
    "short_label": "CHORD BACK",
    "action": "Removes this key's chord modifier from the chords still held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1483-1485",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1483-L1485"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "-",
    "action": "Does nothing in the FX layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1360-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1360-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "257-262",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L257-L262"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "G4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays SNARE 2.",
    "short_label": "SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's V chord (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD V",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Sweeps a low-pass filter over the mix; The effect lasts while the key is held.",
    "short_label": "LP SWEEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "164-186",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L164-L186"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or SNARE 2 (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 9 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to G for all three synth tracks.",
    "short_label": "KEY G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "A fill plays while this key stays down.",
    "short_label": "FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "410-425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L410-L425"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L296-L313"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 9 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "release",
    "short_label": "END FILL",
    "action": "Ends the held fill.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "321-328",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L321-L328"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G#4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "G#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays SNARE 2, the same sound as the white key to its left.",
    "short_label": "SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "hold",
    "action": "While held, adds the 7th from the scale (pressed during a chord, it changes under your finger).",
    "short_label": "ADD 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "227-240",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L227-L240"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1434",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1434"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases SNARE 2 on drums, or this key's mapped synth note unless WHITE keys or chord mode makes it silent; while playing it erases passing steps, and while stopped it erases throughout the pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released; on a synth track with chord mode on or KEYS set to WHITE the black keys are silent, so nothing repeats.",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to G# for all three synth tracks.",
    "short_label": "KEY G#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "release",
    "short_label": "CHORD BACK",
    "action": "Removes this key's chord modifier from the chords still held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1483-1485",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1483-L1485"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "-",
    "action": "Does nothing in the FX layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1360-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1360-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "257-262",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L257-L262"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays A4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "A4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays LOW TOM.",
    "short_label": "LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's VI chord (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD VI",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Sweeps a high-pass filter over the mix; The effect lasts while the key is held.",
    "short_label": "HP SWEEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "164-186",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L164-L186"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or LOW TOM (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 10 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to A for all three synth tracks.",
    "short_label": "KEY A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Makes the whole next bar a fill; again before then cancels.",
    "short_label": "FILL BAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "410-425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L410-L425"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L296-L313"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 10 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays A#4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "A#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays LOW TOM, the same sound as the white key to its left.",
    "short_label": "LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "hold",
    "action": "While held, turns the chords into sus4 (pressed during a chord, it changes under your finger).",
    "short_label": "SUS4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "227-240",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L227-L240"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1434",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1434"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases LOW TOM on drums, or this key's mapped synth note unless WHITE keys or chord mode makes it silent; while playing it erases passing steps, and while stopped it erases throughout the pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released; on a synth track with chord mode on or KEYS set to WHITE the black keys are silent, so nothing repeats.",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to A# for all three synth tracks.",
    "short_label": "KEY A#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "release",
    "short_label": "CHORD BACK",
    "action": "Removes this key's chord modifier from the chords still held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1483-1485",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1483-L1485"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "-",
    "action": "Does nothing in the FX layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1360-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1360-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "257-262",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L257-L262"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays B4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "B4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays HI TOM.",
    "short_label": "HI TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's VII chord (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD VII",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Squeezes the mix into a phone-speaker band; The effect lasts while the key is held.",
    "short_label": "PHONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "188-193",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L188-L193"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or HI TOM (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 11 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to B for all three synth tracks.",
    "short_label": "KEY B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 11 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays C5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "C5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays CRASH.",
    "short_label": "CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's I chord an octave up (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD I",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Crushes the mix to fewer bits; The effect lasts while the key is held.",
    "short_label": "BIT CRUSH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "194-197",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L194-L197"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or CRASH (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 12 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to C for all three synth tracks.",
    "short_label": "KEY C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 12 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays C#5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "C#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays CRASH, the same sound as the white key to its left.",
    "short_label": "CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "hold",
    "action": "While held, adds the 9th from the scale (pressed during a chord, it changes under your finger).",
    "short_label": "ADD 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "227-240",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L227-L240"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1434",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1434"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases CRASH on drums, or this key's mapped synth note unless WHITE keys or chord mode makes it silent; while playing it erases passing steps, and while stopped it erases throughout the pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released; on a synth track with chord mode on or KEYS set to WHITE the black keys are silent, so nothing repeats.",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to C# for all three synth tracks.",
    "short_label": "KEY C#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "release",
    "short_label": "CHORD BACK",
    "action": "Removes this key's chord modifier from the chords still held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1483-1485",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1483-L1485"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "-",
    "action": "Does nothing in the FX layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1360-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1360-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "257-262",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L257-L262"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays D5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "D5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays RIDE.",
    "short_label": "RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's II chord an octave up (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD II",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Drops the sample rate for aliasing; The effect lasts while the key is held.",
    "short_label": "ALIAS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "198-206",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L198-L206"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or RIDE (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 13 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to D for all three synth tracks.",
    "short_label": "KEY D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Switches loop mode and song mode.",
    "short_label": "LOOP/SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "386-392",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L386-L392"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 13 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays D#5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "D#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays RIDE, the same sound as the white key to its left.",
    "short_label": "RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "hold",
    "action": "While held, inverts the chords (pressed during a chord, it changes under your finger).",
    "short_label": "INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "227-240",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L227-L240"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1434",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1434"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases RIDE on drums, or this key's mapped synth note unless WHITE keys or chord mode makes it silent; while playing it erases passing steps, and while stopped it erases throughout the pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released; on a synth track with chord mode on or KEYS set to WHITE the black keys are silent, so nothing repeats.",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to D# for all three synth tracks.",
    "short_label": "KEY D#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "release",
    "short_label": "CHORD BACK",
    "action": "Removes this key's chord modifier from the chords still held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1483-1485",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1483-L1485"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "-",
    "action": "Does nothing in the FX layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1360-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1360-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "257-262",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L257-L262"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays E5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "E5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays SHAKER.",
    "short_label": "SHAKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's III chord an octave up (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD III",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Chops the mix in 1/16 gates; The effect lasts while the key is held.",
    "short_label": "GATE 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "207-216",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L207-L216"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or SHAKER (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 14 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to E for all three synth tracks.",
    "short_label": "KEY E",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Records the sections played from the next bar, replacing the song order without a question when stopped or toggled off; it saves after transport stops and the unit is quiet, and undo cannot recover the old order.",
    "short_label": "SONG REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "393-404",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L393-L404"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1613-1647",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1613-L1647"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "828-838",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L828-L838"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "852-860",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L852-L860"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 14 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "F5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays CONGA.",
    "short_label": "CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's IV chord an octave up (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD IV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Adds a dotted-1/8 echo; The effect lasts while the key is held.",
    "short_label": "ECHO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "217-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L217-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or CONGA (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 15 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to F for all three synth tracks.",
    "short_label": "KEY F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 15 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F#5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "F#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays CONGA, the same sound as the white key to its left.",
    "short_label": "CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "hold",
    "action": "While held, flips the chords you play between major and minor (pressed during a chord, it changes under your finger).",
    "short_label": "MAJ/MIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "227-240",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L227-L240"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1434",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1434"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases CONGA on drums, or this key's mapped synth note unless WHITE keys or chord mode makes it silent; while playing it erases passing steps, and while stopped it erases throughout the pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released; on a synth track with chord mode on or KEYS set to WHITE the black keys are silent, so nothing repeats.",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to F# for all three synth tracks.",
    "short_label": "KEY F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "release",
    "short_label": "CHORD BACK",
    "action": "Removes this key's chord modifier from the chords still held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1483-1485",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1483-L1485"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1320-1350",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1320-L1350"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "-",
    "action": "Does nothing in the FX layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1360-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1360-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "257-262",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L257-L262"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "G5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1427-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1427-L1458"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays COWBELL.",
    "short_label": "COWBELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/drums.c",
      "lines": "65-89",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/drums.c#L65-L89"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1425"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Plays the scale's V chord an octave up (counting from C4 as I, in a seven-note scale).",
    "short_label": "CHORD V",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "166-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L166-L224"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1443-1458",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1443-L1458"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Wobbles the pitch like worn tape; The effect lasts while the key is held.",
    "short_label": "WOBBLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "115-119",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L115-L119"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1361-1368",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1361-L1368"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key's note (synth, with its chord in chord mode) or COWBELL (drums): playing, from each step that passes while held; stopped, from the whole pattern; this edits the working loop now without a question, autosaves later, and undo restores notes only.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1378-1402",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1378-L1402"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "910-955",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L910-L955"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "press_while_holding:button_arp",
    "action": "Repeats this key's note or drum sound in time at the roll rate until released (a single note, even in chord mode).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1412-1441",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1412-L1441"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1176-1188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1176-L1188"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1261-1300",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1261-L1300"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1493-1497",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1493-L1497"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1550-1553",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1550-L1553"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 16 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "117-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L117-L170"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the song key to G for all three synth tracks.",
    "short_label": "KEY G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Tap tempo (two taps or more).",
    "short_label": "TAP TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "410-425",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L410-L425"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L296-L313"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Opens the SONG screen.",
    "short_label": "SONG SCREEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "405-407",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L405-L407"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Sets or clears the selected drum sound on step 16 of this page, sounding an added hit; clearing its final hit also deletes the step’s locks, nudge and fill condition, which undo cannot restore; song playback refuses the edit and the working loop autosaves later.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "473-498",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L473-L498"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "389-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "485-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L485-L499"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key's note (or chord) into the step under the cursor; let go of all keys to move on.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "521-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L521-L568"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "146-190",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L146-L190"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "FX RELEASE",
    "action": "Returns to the KEEP effect, or the dry mix when KEEP is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1473-1478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1473-L1478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/punch.c",
      "lines": "37-54",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/punch.c#L37-L54"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "short_label": "STEP UP",
    "action": "If the occupied step was held without editing, removes its notes or selected drum hit on release without a question; when no hits remain, also clears its locks, nudge and fill condition, which undo cannot recover; the working loop autosaves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "396-406",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L396-L406"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/project.c",
      "lines": "466-499",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases this key's notes; an arpeggio latched with HOLD can continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1498-1504",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1498-L1504"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "1147-1159",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L1147-L1159"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/seq.c",
      "lines": "977-990",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L977-L990"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once every key is up after a note was written.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "526-568",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L526-L568"
     }
    ]
   }
  ],
  "screen": [
   {
    "mode": "tracks",
    "gesture": "shows",
    "action": "Tempo and transport on top; each track as a row with its sound, 16 steps, playhead, rec, solo or mute badge and level; dials for swing, level, steps, pan.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "211-296",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L211-L296"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "shows",
    "action": "One of 12 full-screen styles (oscilloscope, spectrum, spectrogram, Lissajous, VU meters, circle, tape, LCD, bounce, orbit, wires, the SLOOP logo); the style's name shows briefly.",
    "short_label": "VISUALISER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_vis.c",
      "lines": "11-13",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_vis.c#L11-L13"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_vis.c",
      "lines": "600-642",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_vis.c#L600-L642"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "shows",
    "action": "Shows each page's values and graph, the sound and engine, and its position among the family's pages; SONG counts in the SEQ family.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "686-759",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L686-L759"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "769-806",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L769-L806"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "shows",
    "action": "The four step values, and a small piano roll of 16 steps: notes by pitch, ties as lines, accents in white, slides slanted, the cursor marked.",
    "short_label": "STEP PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "256-324",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L256-L324"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "shows",
    "action": "16 sounds by 16 steps, hit levels as shades, ratchets as notches, the cursor framed; dials sound, step, hit, level.",
    "short_label": "DRUM GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "342-435",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L342-L435"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "shows",
    "action": "16 pads that flash on each hit; dials kit, level, reverb, pan.",
    "short_label": "DRUM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "342-445",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L342-L445"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "shows",
    "action": "The song entries with their section, bar length and play position, loop or song mode, and a key reminder line.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_song.c",
      "lines": "19-84",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_song.c#L19-L84"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "shows",
    "action": "Shows the armed track and the recording choices MODE, LENGTH and START when available; there is no QUANT dial.",
    "short_label": "REC READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "632-647",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L632-L647"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "685-738",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L685-L738"
     }
    ]
   },
   {
    "mode": "count_in",
    "gesture": "shows",
    "action": "A big 4-3-2-1 countdown.",
    "short_label": "COUNT-IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "694-698",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L694-L698"
     }
    ]
   },
   {
    "mode": "free_take",
    "gesture": "shows",
    "action": "Seconds played, the loop length and tempo it would make now, and a reminder to press REC on the 1.",
    "short_label": "FREE TAKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_studio.c",
      "lines": "648-680",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_studio.c#L648-L680"
     }
    ]
   },
   {
    "mode": "hold_clear",
    "gesture": "shows",
    "action": "A red ring filling around the word clear and the track number; keep holding to clear.",
    "short_label": "CLEAR RING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "955-994",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L955-L994"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "shows",
    "action": "Shows sixteen white-key effect tiles and four performance dials, with the active effect highlighted.",
    "short_label": "PUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "656-682",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L656-L682"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "shows",
    "action": "16 tiles naming each key's note or drum sound, red while held, and the undo or redo hint.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "683-724",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L683-L724"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "shows",
    "action": "16 step tiles (level shades, ratchet marks, a dot for nudge or lock, F or x for fill conditions), the page number and the dials; with a step held, its lock in the title.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "725-818",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L725-L818"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "shows",
    "action": "16 tiles with each white key's note, or its chord name in chord mode, the root lit, and the key and scale in the title.",
    "short_label": "KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "819-859",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L819-L859"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "shows",
    "action": "Mute 1-4, solo 1-4, fill, bar and the tempo tile, with the four level dials.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "860-895",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L860-L895"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "shows",
    "action": "Sections A-D (playing lit, next framed), store A-D, loop or song, rec; the title shows a chain being built.",
    "short_label": "SONG LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "896-949",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L896-L949"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "shows",
    "action": "The layer's screen with a LOCK badge in the title.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "602-618",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L602-L618"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "shows",
    "action": "Shows SCREEN, LIGHTS, AUDIO and SYSTEM tabs, up to three rows with their knob numbers, and RESTART for a pending USB SERIAL change.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "9-17",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L9-L17"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "56-139",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L56-L139"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "shows",
    "action": "Shows the version, build date, credits, licence and source address.",
    "short_label": "ABOUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_menu.c",
      "lines": "83-99",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L83-L99"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "shows",
    "action": "Names each button to press, then each knob to turn right.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "1046-1098",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L1046-L1098"
     }
    ]
   },
   {
    "mode": "usb_rescue",
    "gesture": "shows",
    "action": "SLOOP USB RESCUE, a prompt to open the installer, and AUDIO OFF.",
    "short_label": "RESCUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/recovery.c",
      "lines": "58-68",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/recovery.c#L58-L68"
     }
    ]
   },
   {
    "mode": "update_countdown",
    "gesture": "shows",
    "action": "UPDATE MODE IN 3, 2, 1 in the title, then UBOOT.",
    "short_label": "UPDATE IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/main.c",
      "lines": "202-229",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/main.c#L202-L229"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Shows brief feedback such as EMPTY SLOT, STOP BEFORE SAVE, AGAIN and SAVED.",
    "short_label": "MESSAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "445-478",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L445-L478"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/upreset.c",
      "lines": "308-337",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/upreset.c#L308-L337"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "shows",
    "action": "Lists factory sounds, loaded DX7 voices under DX1–DX12 and user sounds, with the current choice marked and No., ENG and KIND columns.",
    "short_label": "PRESETS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "401-428",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L401-L428"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "891-900",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L891-L900"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "shows",
    "action": "Shows whether project slots 1–4 are used or empty and marks the selected slot.",
    "short_label": "PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "452-465",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L452-L465"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "shows",
    "short_label": "ROLL",
    "action": "Shows the roll rate, note or drum tiles and the held-key highlights.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "683-724",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L683-L724"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "shows",
    "short_label": "STEP EDIT",
    "action": "Shows the held steps and their note or drum level, ratchet, nudge and selected lock.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "725-818",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L725-L818"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "shows",
    "short_label": "ENV",
    "action": "Shows ENV and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "303",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L303"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "shows",
    "short_label": "ENV DEST",
    "action": "Shows ENV DEST and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "304",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L304"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "shows",
    "short_label": "LFO",
    "action": "Shows LFO and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "305",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L305"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "shows",
    "short_label": "LFO DEST",
    "action": "Shows LFO DEST and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "306",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L306"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "shows",
    "short_label": "FX",
    "action": "Shows FX and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "307",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L307"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_filter",
    "gesture": "shows",
    "short_label": "FILTER",
    "action": "Shows FILTER and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "308",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L308"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "fx_keep",
    "gesture": "shows",
    "short_label": "KEEP",
    "action": "Shows KEEP and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "309",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L309"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "shows",
    "short_label": "SLICER",
    "action": "Shows SLICER and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "310",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L310"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_dly",
    "gesture": "shows",
    "short_label": "DLY",
    "action": "Shows DLY and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "311",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L311"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_rev_cho",
    "gesture": "shows",
    "short_label": "REV/CHO",
    "action": "Shows REV/CHO and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "312",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L312"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_sel",
    "gesture": "shows",
    "short_label": "SEL",
    "action": "Shows SEL and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "313",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L313"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_sel_2",
    "gesture": "shows",
    "short_label": "SEL 2",
    "action": "Shows SEL 2 and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "314",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L314"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "shows",
    "short_label": "VOICE",
    "action": "Shows VOICE and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "317",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L317"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_voice_2",
    "gesture": "shows",
    "short_label": "VOICE 2",
    "action": "Shows VOICE 2 and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "318",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L318"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "shows",
    "short_label": "GLOBAL",
    "action": "Shows GLOBAL and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "319",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L319"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "shows",
    "short_label": "MASTER",
    "action": "Shows MASTER and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "320",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L320"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "shows",
    "short_label": "SYSTEM",
    "action": "Shows SYSTEM and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "321",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L321"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_drums",
    "gesture": "shows",
    "short_label": "DRUMS",
    "action": "Shows DRUMS and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "322",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L322"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "shows",
    "short_label": "ARP",
    "action": "Shows ARP and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "327",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L327"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_arp_2",
    "gesture": "shows",
    "short_label": "ARP 2",
    "action": "Shows ARP 2 and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "328",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L328"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "shows",
    "short_label": "PATTERN",
    "action": "Shows PATTERN and its four parameter columns, with feedback for the value being adjusted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "330",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L330"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "788-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L788-L807"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "shows",
    "short_label": "ANALOG OSC",
    "action": "Shows ANALOG with page title OSC 1/4 and WAVE, DTN, MIX, NOIS in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "129-132",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L129-L132"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "shows",
    "short_label": "FLT",
    "action": "Shows ANALOG with page title FLT 2/4 and CUT, RES, DRV, KTR in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_analog.c",
      "lines": "129-132",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_analog.c#L129-L132"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "shows",
    "short_label": "DIGITAL OPS",
    "action": "Shows DIGITAL with page title OPS 1/4 and ALG, R2, R3, R4 in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "145-148",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L145-L148"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "shows",
    "short_label": "MOD",
    "action": "Shows DIGITAL with page title MOD 2/4 and IDX, MDEC, FB, - in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_digital.c",
      "lines": "145-148",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_digital.c#L145-L148"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "shows",
    "short_label": "BARS",
    "action": "Shows WHEEL with page title BARS 1/4 and REG, SUB, BODY, TOP in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "283-286",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L283-L286"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "shows",
    "short_label": "WHEEL TONE",
    "action": "Shows WHEEL with page title TONE 2/4 and PERC, CLICK, DRV, ROTR in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "283-286",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_drawbar.c#L283-L286"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "shows",
    "short_label": "FM6 OPS",
    "action": "Shows FM6 with page title OPS 1/4 and ALG, FB, MLVL, MRAT in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "461-464",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L461-L464"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "shows",
    "short_label": "PATCH",
    "action": "Shows FM6 with page title PATCH 2/4 and MEG, VMOD, DTUN, PTCH in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_fm6.c",
      "lines": "461-464",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L461-L464"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "shows",
    "short_label": "VOWL",
    "action": "Shows VOICE with page title VOWL 1/4 and VOWL, VOWL2, TALK, SHIFT in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-230",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L230"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "shows",
    "short_label": "VOICE TONE",
    "action": "Shows VOICE with page title TONE 2/4 and BUZZ, BRTH, Q, RAND in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_formant.c",
      "lines": "227-230",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_formant.c#L227-L230"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "shows",
    "short_label": "GRAN",
    "action": "Shows GRAIN with page title GRAN 1/4 and SRC, POS, SIZE, DENS in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "436-439",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L436-L439"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "shows",
    "short_label": "SPRY",
    "action": "Shows GRAIN with page title SPRY 2/4 and PTCH, SPRD, RAND, TONE in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_grain.c",
      "lines": "436-439",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_grain.c#L436-L439"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "shows",
    "short_label": "CHIP",
    "action": "Shows LOFI with page title CHIP 1/4 and CHIP, WAVE, DUTY, CRSH in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-221",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L218-L221"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "shows",
    "short_label": "MOTN",
    "action": "Shows LOFI with page title MOTN 2/4 and SWP, VIB, ARP, TONE in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-221",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_lofi.c#L218-L221"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "shows",
    "short_label": "SRC",
    "action": "Shows NOISE with page title SRC 1/4 and MODE, COLR, FREQ, RES in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "259-262",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L259-L262"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "shows",
    "short_label": "MOVE",
    "action": "Shows NOISE with page title MOVE 2/4 and TRK, DENS, DRFT, CRSH in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_noise.c",
      "lines": "259-262",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_noise.c#L259-L262"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "shows",
    "short_label": "PHS",
    "action": "Shows PHASE with page title PHS 1/4 and WAVE, WAVE2, DCW, ENV in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "185-188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L185-L188"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "shows",
    "short_label": "LINE",
    "action": "Shows PHASE with page title LINE 2/4 and DTN, LINE, SUB, - in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phase.c",
      "lines": "185-188",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phase.c#L185-L188"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "shows",
    "short_label": "BODY",
    "action": "Shows PHYS with page title BODY 1/4 and MODEL, STRC, BRIT, DAMP in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "263-266",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L263-L266"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "shows",
    "short_label": "EXCT",
    "action": "Shows PHYS with page title EXCT 2/4 and POS, ACC, BOW, EXC in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_phys.c",
      "lines": "263-266",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_phys.c#L263-L266"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "shows",
    "short_label": "SET",
    "action": "Shows SAMPLE with page title SET 1/4 and SET, TUNE, BITS, LOOP in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "205-208",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L208"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "shows",
    "short_label": "SAMPLE TONE",
    "action": "Shows SAMPLE with page title TONE 2/4 and CUT, -, DRV, - in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_sample.c",
      "lines": "205-208",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L205-L208"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "shows",
    "short_label": "TRIO OSC",
    "action": "Shows TRIO with page title OSC 1/4 and WAVE, INT2, INT3, DTN in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "380-383",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L380-L383"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "shows",
    "short_label": "TRIO TONE",
    "action": "Shows TRIO with page title TONE 2/4 and MODE, CUT, RES, PW in KNOB 1–4 order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "786-800",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L786-L800"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/eng_trio.c",
      "lines": "380-383",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_trio.c#L380-L383"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "shows",
    "short_label": "USER",
    "action": "Shows the selected user sound slot with LOAD, ERASE and SAVE actions, dimming load and erase for an empty slot.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "903-909",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L903-L909"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "shows",
    "short_label": "TOOLS",
    "action": "Shows CLRSQ, INIT and NEW with an unused third column and a prompt when a second click is required.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/params.c",
      "lines": "326",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L326"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "473-517",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L473-L517"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_draw.c",
      "lines": "769-807",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L769-L807"
     }
    ]
   }
  ]
 },
 "switching_note": {
  "switching_table_status": "Back up with the firmware that made your work before switching or starting this build. See the switching advice in Before you switch firmware.",
  "kept_on_unit": "This build stores the working loop, four sections, 32 user sounds, the editable twenty-seven-patch FM6 bank, twelve DX7 banks, four sample slots, SYN1–4 kits, song order and panel settings; the changed working loop autosaves after stopped, quiet time rather than at power-off, and live section stores wait for stopped, quiet time too. Every normal start checks saved bank information; if it is missing, banks 1–8 are erased without asking, including voices you loaded in banks 5–8; inherited settings can instead cause banks 1–4 or as many as banks 1–11 to be erased, and affected sounds then play INIT VOICE. From the flash atlas: install (loader): Incoming loader compares, erases/programs and verifies changed app sectors; flash head below 0x4000 and user area from 0x93000 are excluded from app programming. This overlaps all sixteen Open USER projects, its preferences and the first 24 KiB of its sample region. Replacing Open’s sample header leaves its whole sample bank unreadable. The same program writes can also leave PIGEON’s whole sample bank unreadable (successful install through this source loader). install (loader): After an install, the supplied loader checks sector tails for update records and erases only a 4 KiB sector whose last 256 bytes hold a valid update record. It does not skip 0x97000–0xDFFFF. Saved music is not at risk from this record cleanup (After an install, only a 4 KiB sector whose last 256 bytes hold a valid update record (marker 0x5441 at +6 and a matching nonzero CRC16 over bytes 2..79): in practice the family staging-record sector 0xE4000 and, on a first install from stock, stock’s record sector 0xE8000. Saved music does not hold that record; it is not at risk from the cleanup. This loader does not skip 0x97000–0xDFFFF). startup: Erases all five update-staging sectors without asking (first 4 bytes at 0xE0000 or first 8 at 0xE4F00 contain non-FF data). any normal startup with missing, older or misinterpreted DX bank information: At every normal boot, effective claimed count c is dx_layout when nonzero, otherwise dx_layout_old when nonzero, otherwise 4. For 1 <= c < 12, erases banks 1 through 12-c without asking, including this build’s own loaded voices; c >= 12 skips erase. Missing information normally gives c=4 and banks 1–8; misinterpreted c=1 clears banks 1–11. Claim/settings update occurs only if all required erases succeed; failed writes or later settings replacement can make a future boot repeat the erase. Bank 12 is never erased by this routine (Any normal boot with flash_ok and effective positive count below 12; inherited or restored settings can remove or alter the count). startup after bank claim/migration: Immediately saves settings after all required bank erases succeeded, or when migrating an old full twelve-bank count. This can overwrite a foreign settings copy at startup. The preceding check happens on every normal boot, not solely after installation (claim record is newly made/migrated and settings differ; usual default 4 path writes once after eight erases). first idle autosave: Rejected/absent working data leaves hash 0, so unchanged initial state can autosave without any save action, no earlier than 20 s from boot. A matching foreign FELU/type 7 current wrapper selects the opposite sector; otherwise first A (normal stopped/silent/idle guards; changed hash). host upgrade, including rescue: Stages incoming loader/request; failure and later startup cleanup erase the same five sectors (host upgrade command; accepted loader). before intentional reset/update: Flushes dirty sections, pending song/settings, and changed working loop before reset/update; only relevant objects are written (pending dirty data or working hash change). What SLOOP DX7 Banks writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over SLOOP DX7 Banks's is in when_you_leave.",
  "parent_saved_data": "It shares SLOOP’s project, sound and settings locations, but cannot open SLOOP 2.7.1 sections or its working loop; the first idle autosave writes the other copy, and the second successful alternating save can physically replace the retained newest SLOOP copy; on return, newer SLOOP can select this build’s replacement loop after the first save while the older copy remains; section saves can replace unreadable sections without treating them as used, and saving this build’s projects in newer SLOOP makes them unreadable here.",
  "parent_other_data": "The parent’s twenty-seven-patch FM6 bank has the same format; matching user sounds can be read with older parameter meanings, while newer fields are ignored; matching samples in USR1–3 can be read, but newer release-loop behaviour differs; USR4 is smaller here, so a large old sample is rejected and its tail can be cleared when banks are claimed; parent settings are only partly understood, some bits get different meanings, and MIDI options, theme and favourites are lost when this build rewrites settings; SYN kits survive only when the parent’s settings have the expected older size.",
  "lost": "A settings-dependent bank erase can recur on any normal start, affecting this build’s own loaded voices and other saved work without asking. See the switching advice in Before you switch firmware for the affected saved work. From the flash atlas: Other firmwares reading SLOOP DX7 Banks's data: Felucca lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32; user sample USR1; user sample USR2; user sample USR3, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS; Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different); Rainbow Mode lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32; user sample USR1; user sample USR2; user sample USR3, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS; Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different); Felucca [Salt] lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32; user sample USR1; user sample USR2; user sample USR3, but plays them differently (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt; Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different); WaveLoop FM-1 lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32; user sample USR1; user sample USR2, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS; Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different); WaveLoop FM-1 reads and uses SLOOP DX7 Banks's user sample USR1; user sample USR2 (Saved samples may have no slice positions set by you); SLOOP takes over SLOOP DX7 Banks's settings, calibration, song order, synthesized drum kits and DX-bank setup; section A; section B; section C; section D; working loop, converting them (Saving settings can change DX7 Banks’ saved count of banks already set up because SLOOP uses those saved options for different playing settings. Returning to DX7 Banks with a missing or incomplete count can erase DX banks at start-up; Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy; Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy); SLOOP lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); SLOOP reads and uses SLOOP DX7 Banks's FM6 patches B1–B27; user sample USR1; user sample USR2; user sample USR3; user sample USR4 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it); sloopDX takes over SLOOP DX7 Banks's settings, calibration, song order, synthesized drum kits and DX-bank setup, converting them (A settings save drops the source firmware’s synthesized drum kits and any saved MIDI controls stored after them. Favourite and display-option numbers can also mean different things); sloopDX lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32, but plays them differently (Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them); SLOOP Floyd FM takes over SLOOP DX7 Banks's settings, calibration, song order, synthesized drum kits and DX-bank setup, converting them (Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options. After Floyd saves settings, DX7 Banks has no saved count of banks already set up when you return. It erases DX banks 1–8 at its first start. Back up your DX banks before switching); SLOOP Floyd FM lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound); SLOOP Floyd FM reads and uses SLOOP DX7 Banks's user sample USR1; user sample USR2; user sample USR3 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); FM1 Quest takes over SLOOP DX7 Banks's settings, calibration, song order, synthesized drum kits and DX-bank setup, converting them (A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings); FM1 Quest lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); FM1 Quest reads and uses SLOOP DX7 Banks's user sample USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); JIANT takes over SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32, converting them (JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept); ChoralRoot lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32, but plays them differently (Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from); GHOULBOX lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32, but plays them differently; GHOULBOX reads and uses SLOOP DX7 Banks's user sample USR1; user sample USR2; user sample USR3; fm1-chord takes over SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses SLOOP DX7 Banks's user sample USR1; user sample USR2; user sample USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); MAKU reads and uses SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32; user sample USR1; user sample USR2; user sample USR3 (MAKU leaves these sample bytes in place, but its controls use built-in material; these uploaded samples are not available to play here); Jangada reads and uses SLOOP DX7 Banks's user sample USR1; user sample USR2; user sample USR3; Skiff lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32, but plays them differently (The same saved sound format does not guarantee the same sound or pattern playback); Skiff reads and uses SLOOP DX7 Banks's user sample USR1; user sample USR2; user sample USR3 (Skiff uses its own sound engines, so saved loops or slices can play differently); Hortator lists SLOOP DX7 Banks's user sample USR1; user sample USR2; user sample USR3, but plays them differently (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); ORBIT takes over SLOOP DX7 Banks's settings, calibration, song order, synthesized drum kits and DX-bank setup; section A; section B; section C; section D; user sounds 1–16; user sounds 17–32; working loop, converting them (The next settings save adds ORBIT’s MIDI controls. DX7 Banks can then no longer load its saved synthesized drum kits from that copy of the settings. It can still read shared settings and song order; Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different; Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play); ORBIT reads and uses SLOOP DX7 Banks's FM6 patches B1–B27; user sample USR1; user sample USR2; user sample USR3; user sample USR4 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); PIGEON reads and uses SLOOP DX7 Banks's user sample USR1; user sample USR2; user sample USR3 (Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same); winampFM Synth takes over SLOOP DX7 Banks's section A; section B; section C; section D; working loop, converting them (Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); winampFM Synth lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things); winampFM Synth reads and uses SLOOP DX7 Banks's FM6 patches B1–B27; user sample USR1; user sample USR2; user sample USR3; user sample USR4 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32; working loop, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things; Only the working project is imported. It may play differently. Saved SLOOP sections are not imported); FM1 Move reads and uses SLOOP DX7 Banks's FM6 patches B1–B27; user sample USR1; user sample USR2; user sample USR3; user sample USR4 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); X0X lists SLOOP DX7 Banks's user sample USR1; user sample USR2; user sample USR3, but plays them differently (Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used); Jangada converts only older version 1 sounds in this group. Newer sound versions look empty, and saving anywhere in the group drops them from the rewritten group.; winampFM Synth reads shared settings and calibration; the next settings write can discard preferences or music setup it does not retain.. What SLOOP DX7 Banks reads of other firmwares' data: SLOOP DX7 Banks reads and uses Felucca's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used); SLOOP DX7 Banks takes over SLOOP's settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites, converting them (Saving settings removes SLOOP’s learned MIDI controls, theme and favourites. Its drum kits load only if MIDI controls were left at their defaults. DX7 Banks can read SLOOP’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up); SLOOP DX7 Banks lists SLOOP's user sounds U01-U16; user sounds U17-U32, but plays them differently (Saved sounds can play differently here. Saving another slot keeps them. Replacing their slots or restoring the whole bank removes them. Sounds that use separate voice banks also need those banks); SLOOP DX7 Banks reads and uses SLOOP's FM6 patch bank B1-B27; user sample slot USR1; user sample slot USR2; user sample slot USR3; user sample slot USR4 (Saving over a patch replaces it; other saved patches in this bank are kept; Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used); SLOOP DX7 Banks reads and uses X0X's break loops slot 1; break loops slot 2; break loops slot 3 (Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used); SLOOP DX7 Banks reads and uses GHOULBOX's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used); SLOOP DX7 Banks takes over Hortator's settings and panel calibration, converting them; SLOOP DX7 Banks reads and uses Hortator's user samples USR1; user samples USR2; user samples USR3 (Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used); SLOOP DX7 Banks reads and uses Skiff's user sample USR1; user sample USR2; user sample USR3 (Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used); SLOOP DX7 Banks takes over sloopDX's settings, calibration, song order, MIDI, theme and favourites, converting them (Saving settings removes sloopDX’s extra MIDI controls, theme and favourites. It saves this beta’s own drum kits and count of banks already set up. DX7 Banks can read sloopDX’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up); SLOOP DX7 Banks reads and uses Rainbow Mode's User sample USR1 and any slice positions you set in SLICE; User sample USR2 and any slice positions you set in SLICE; User sample USR3 and any slice positions you set in SLICE (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP DX7 Banks reads and uses MAKU's inherited user sample 1; inherited user sample 2; inherited user sample 3 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP DX7 Banks reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP DX7 Banks reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP DX7 Banks reads and uses WaveLoop FM-1's user sample USR1; user sample USR2 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP DX7 Banks takes over ORBIT's settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences, converting them (A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up); SLOOP DX7 Banks reads and uses ORBIT's FM6 bank B1-B27; sample slot USR1; sample slot USR2; sample slot USR3; sample slot USR4 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP DX7 Banks reads and uses SLOOP Floyd FM's settings, panel calibration and song order; user sample slot USR1; user sample slot USR2; user sample slot USR3 (Floyd has no saved count of the DX banks DX7 Banks has set up. At start-up, DX7 Banks erases DX banks 1–8 and saves a new count; Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP DX7 Banks takes over SLOOP Floyd FM's song section A; song section B; song section C; song section D; working loop kept by autosave, converting them (Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved; Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved); SLOOP DX7 Banks lists SLOOP Floyd FM's user sounds U01–U16; user sounds U17–U32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. FLOYD sounds become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved); SLOOP DX7 Banks takes over winampFM Synth's settings, panel calibration, song order, SYN kits and MIDI, converting them (A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up); SLOOP DX7 Banks lists winampFM Synth's user sounds 1-16; user sounds 17-32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); SLOOP DX7 Banks reads and uses winampFM Synth's FM6 bank B1-B27; sample USR1; sample USR2; sample USR3; sample USR4 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP DX7 Banks takes over Felucca [Salt]'s project 1; project 2; project 3; project 4, converting them (Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy); SLOOP DX7 Banks lists Felucca [Salt]'s user sounds U01-U16; user sounds U17-U32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); SLOOP DX7 Banks reads and uses Felucca [Salt]'s user sample USR1; user sample USR2; user sample USR3 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP DX7 Banks reads and uses PIGEON's user sample USR1 in the older format; user sample USR2 in the older format; user sample USR3 in the older format (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP DX7 Banks lists FM1 Move's user sounds U01–U16; user sounds U17–U32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); SLOOP DX7 Banks reads and uses FM1 Move's FM6 bank B1–B27; sample slot USR1; sample slot USR2; sample slot USR3 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP DX7 Banks takes over FM1 Quest's settings, panel mapping, song order and Quest preferences/progress; song section A; song section B; song section C; song section D; working music (autosave), converting them (Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up; Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy; Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy); SLOOP DX7 Banks lists FM1 Quest's user sounds U01–U16; user sounds U17–U32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); SLOOP DX7 Banks reads and uses FM1 Quest's sample USR1 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops). Everything else of another firmware's looks empty or foreign to the reader.",
  "back_up_first": "In this build’s editor, Save a backup reads the unit and downloads the working loop, settings and song order, four sections, both user-sound banks, the editable FM6 bank, SYN kits, four valid sample sets and all twelve DX7 banks; custom bank names come from this browser; the file excludes firmware, foreign saved work, undo history, unused memory and unrecognised slice markers; Refresh reads banks from the unit, while Export .syx downloads the browser’s current bank copy.",
  "restore": "Restore asks once, then commits present objects one by one; absent objects remain and present empty slots are cleared where supported, while the working loop is applied now and autosaved later; a failure can leave a partial restore, and there is no whole-device undo; newer SLOOP backups are unsafe here because MIDI or theme records can be mistaken for old DX7 banks after earlier banks and kits have already been written, and newer project records also fail later in the restore. Restoring settings from SLOOP 2.5 or an older fork can remove the bank information even after voices were restored; the next start can erase those voices again without asking; use the recovery steps below.",
  "going_back": "Before leaving this build, save a backup made here after a successful normal start and export your DX7 banks; another firmware’s settings writes, or restoring SLOOP 2.5 or a fork backup from before bank information was saved, can make the next start erase banks again; after returning and letting startup finish, restore that backup made here, including its voices and settings. An older SLOOP upload to its larger USR4 can overwrite DX7 voices, and saving projects in newer SLOOP can make them unreadable here; other firmwares can write at startup or automatically before any SAVE press. Back up before switching. See the switching advice in Before you switch firmware. SLOOP DX7 Banks’ section saves, SONG REC writes, section restores and automatic section writes after a warm reset and automatic writes of pending sections before updates or resets, user-sound saves, sends to the FM-1, erases and restores, including selected DX7 voices, and USR1 sample sends to the FM-1, erases and restores can also replace ChoralRoot’s legacy sounds 1–32, VA patches, FM6 patches 1–32, CZ patches 1–32 and FM TONE patches, kept for returning to ChoralRoot 0.21 or older.",
  "foreign_work_at_risk": [
   {
    "when": "Installing this build",
    "what_happens": "The installer can replace the previous firmware’s saved work while programming this build, before the first start, without a separate saved-work question. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Own source write ranges compared with the supplied checked foreign layouts; overlaps can be partial and were not tested on a unit."
   },
   {
    "when": "Installer cleanup after an update",
    "what_happens": "After a successful update, the loader erases a block only when it ends in a valid update record, without asking. Saved music does not hold that record, so this cleanup leaves it alone.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   },
   {
    "when": "Starting with leftover update data",
    "what_happens": "If either update-area probe is occupied, startup erases the whole update area without a question; data elsewhere in that area alone does not trigger it. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   },
   {
    "when": "Any start with missing, older or misinterpreted bank information",
    "what_happens": "Every normal start checks saved bank information; if it is missing, banks 1–8 are erased without asking, including voices you loaded in banks 5–8; inherited settings can instead cause banks 1–4 or as many as banks 1–11 to be erased, and affected sounds then play INIT VOICE. Before leaving this build, save a backup made here after a successful normal start and export your DX7 banks; another firmware’s settings writes, or restoring SLOOP 2.5 or a fork backup from before bank information was saved, can make the next start erase banks again; after returning and letting startup finish, restore that backup made here, including its voices and settings. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result.",
    "own_work_at_risk": "This includes this build’s own voices in banks 1–8 by default, including user-loaded banks 5–8; the worst inherited count clears banks 1–11, covering D1–D352, and sounds referring to erased voices play INIT VOICE."
   },
   {
    "when": "Settings saved after claiming banks",
    "what_happens": "On any normal start after a successful bank claim or an old-claim migration, startup writes one settings copy without asking; a surviving older copy may remain, but the next save can replace it too. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   },
   {
    "when": "First and later working-loop autosaves",
    "what_happens": "An unreadable or missing working loop can be replaced by defaults automatically, without a question, once stopped and quiet with 2.5 seconds of input idle and at least 20 seconds since boot or the last attempt; later changed-loop saves alternate between its two copies. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   },
   {
    "when": "Any later settings save",
    "what_happens": "These settings saves can replace other firmwares’ work without a foreign-work question: menu close, calibration followed by menu close, power-on calibration even if cancelled, system or record options, visualiser style, song order, SYN kit stores and settings restore; FX KEEP writes immediately even during playback, while deferred changes wait for stopped and quiet time. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   },
   {
    "when": "Saving or restoring a project section",
    "what_happens": "A project save replaces its chosen section at once while stopped; a live section store replaces its RAM copy now and writes it after stopped, quiet time; a readable used section asks for a repeat only on the live and SONG-screen routes, while foreign unreadable sections can look empty; undo cannot recover a replaced section. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   },
   {
    "when": "Saving, erasing, renaming or restoring user sounds",
    "what_happens": "Panel save or erase asks for a second rightward click, then writes the affected sixteen-sound bank immediately while stopped; a used slot gets no extra question and no undo; a browser restore can replace a whole bank. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   },
   {
    "when": "Storing or restoring the editable FM6 bank",
    "what_happens": "An editor bank store or restore rewrites one copy of the twenty-seven-patch bank; the device adds no foreign-work question or undo, and an absent backup bank stays untouched. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   },
   {
    "when": "Sending, erasing or restoring samples",
    "what_happens": "A sample send asks in the browser, erases the header block and replaces further blocks as audio arrives; erase or a present empty backup sample clears the whole selected slot, without undo; a short upload need not touch the whole slot. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   },
   {
    "when": "Writing or erasing a DX7 bank",
    "what_happens": "A bank operation clears and optionally rewrites one whole bank at once, without a spare copy or undo; the browser asks before a destructive edit or replacement of occupied voices, but not before a move to a free slot; a full destination refuses the move. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   },
   {
    "when": "The editor filling an empty factory bank",
    "what_happens": "The default editor option fills empty banks 1–4 after reading the unit, without a question, once its factory download passes validation; banks already containing usable voices are skipped and the option can be turned off. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   },
   {
    "when": "Restoring a whole backup",
    "what_happens": "The browser asks once for the restore, then writes present objects separately; absent objects stay untouched and an empty present object clears the corresponding slot where supported; a later failure can leave earlier objects replaced, without whole-device undo. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   },
   {
    "when": "Sending another firmware update",
    "what_happens": "A host update, including one in USB rescue, erases and writes the update area without a separate foreign-work question; normal update paths first flush this firmware’s pending music. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   },
   {
    "when": "Calibrating the panel",
    "what_happens": "Power-on calibration can write settings even after its idle cancellation; menu calibration saves when the menu closes; there is no separate foreign-work question, and a write reaching another firmware’s saved work can make it disappear or default on return. See the switching advice in Before you switch firmware for the affected saved work.",
    "evidence": "inferred",
    "basis": "Selected from this fragment’s foreign-reader rows and the checked saved-object short/holds labels; write coverage can be partial and surviving copies can change the return result."
   }
  ],
  "source": [
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/storage.c",
    "lines": "14-31",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/storage.c#L14-L31"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/storage.c",
    "lines": "52-167",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/storage.c#L52-L167"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/project.c",
    "lines": "263-299",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L263-L299"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/project.c",
    "lines": "466-513",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L513"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/project.c",
    "lines": "521-679",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L521-L679"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/project.c",
    "lines": "778-863",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L778-L863"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/panel.c",
    "lines": "91-160",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L91-L160"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/ota.c",
    "lines": "396-409",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ota.c#L396-L409"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/loader/ldr_core.c",
    "lines": "91-102",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/loader/ldr_core.c#L91-L102"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/editor.c",
    "lines": "413-459",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/editor.c#L413-L459"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "web/editor.html",
    "lines": "1720-1747",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L1720-L1747"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "web/editor.html",
    "lines": "1939-1988",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L1939-L1988"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/panel.c",
    "lines": "101-122",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L101-L122"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/panel.c",
    "lines": "141-161",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L141-L161"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/main.c",
    "lines": "157-160",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/main.c#L157-L160"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/project.c",
    "lines": "704-729",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L704-L729"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "web/editor.html",
    "lines": "1723-1724",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L1723-L1724"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/eng_fm6.c",
    "lines": "258-266",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L258-L266"
   }
  ],
  "layout_sources": [
   {
    "kind": "local-data",
    "path": "flash-atlas/atlas.json",
    "url": "../flash-atlas/atlas.json",
    "read_at": "2026-10-17"
   },
   {
    "kind": "local-data",
    "path": "refresh/work/fm106.storage.json",
    "url": "../refresh/work/fm106.storage.json",
    "read_at": "2026-10-17"
   },
   {
    "kind": "local-data",
    "path": "refresh/work/hortator.storage.json",
    "url": "../refresh/work/hortator.storage.json",
    "read_at": "2026-10-17"
   },
   {
    "kind": "local-data",
    "path": "refresh/work/obervave.storage.json",
    "url": "../refresh/work/obervave.storage.json",
    "read_at": "2026-10-17"
   },
   {
    "kind": "local-data",
    "path": "refresh/work/polly.storage.json",
    "url": "../refresh/work/polly.storage.json",
    "read_at": "2026-10-17"
   },
   {
    "kind": "local-data",
    "path": "refresh/work/skiff.storage.json",
    "url": "../refresh/work/skiff.storage.json",
    "read_at": "2026-10-17"
   },
   {
    "kind": "local-data",
    "path": "refresh/work/sloopdx.storage.json",
    "url": "../refresh/work/sloopdx.storage.json",
    "read_at": "2026-10-17"
   },
   {
    "kind": "local-data",
    "path": "refresh/work/zp12.storage.json",
    "url": "../refresh/work/zp12.storage.json",
    "read_at": "2026-10-17"
   },
   {
    "kind": "local-data",
    "path": "refresh/work/rainbow.storage.json",
    "url": "../refresh/work/rainbow.storage.json",
    "read_at": "2026-10-17"
   },
   {
    "kind": "local-data",
    "path": "refresh/work/duell.storage.json",
    "url": "../refresh/work/duell.storage.json",
    "read_at": "2026-10-17"
   },
   {
    "kind": "local-data",
    "path": "refresh/work/fimba.storage.json",
    "url": "../refresh/work/fimba.storage.json",
    "read_at": "2026-10-17"
   },
   {
    "kind": "local-data",
    "path": "refresh/work/maku.storage.json",
    "url": "../refresh/work/maku.storage.json",
    "read_at": "2026-10-17"
   },
   {
    "kind": "local-data",
    "path": "refresh/work/fart.storage.json",
    "url": "../refresh/work/fart.storage.json",
    "read_at": "2026-10-17"
   }
  ],
  "overwrites_previous": [
   {
    "from": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "stock settings (and possibly patterns)",
     "stock Bluetooth data",
     "stock presets (128, banks A-D)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): stock settings (and possibly patterns); stock Bluetooth data; stock presets (128, banks A-D).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "Baud Girl presets (128)",
     "Baud Girl patterns (16, with locks)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): Baud Girl presets (128); Baud Girl patterns (16, with locks).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "felucca",
    "name": "Felucca",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches of the FM6 user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its preset bank]",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads user sample slot USR1 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks reads user sample slot USR2 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks reads user sample slot USR3 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks keeps stored but does not show user presets 1-16 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them.",
     "SLOOP DX7 Banks keeps stored but does not show user presets 17-32 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them."
    ],
    "owner_text": "At risk by itself: FM6 patches of the FM6 user presets; settings, button calibration, favourites, MIDI LEARN map. At risk when you act: project slot A; project slot B; project slot C; project slot D; the autosave (the music as you left it); FM6 voice bank B1-B32; user sample slot USR1; user sample slot USR2; user sample slot USR3; user presets 1-16; user presets 17-32. SLOOP DX7 Banks reads user sample slot USR1 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks reads user sample slot USR2 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks reads user sample slot USR3 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks keeps stored but does not show user presets 1-16 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them. SLOOP DX7 Banks keeps stored but does not show user presets 17-32 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloop",
    "name": "SLOOP",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the music in progress (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when SLOOP’s saved options are at their defaults, or DX7 Banks reads them as a count of banks already set up below 5",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when SLOOP’s saved options are at their defaults, or DX7 Banks reads them as a count of banks already set up below 6",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when SLOOP’s saved options are at their defaults, or DX7 Banks reads them as a count of banks already set up below 7",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when SLOOP’s saved options are at their defaults, or DX7 Banks reads them as a count of banks already set up below 8",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when SLOOP’s saved options are at their defaults, or DX7 Banks reads them as a count of banks already set up below 9",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when SLOOP’s saved options are at their defaults, or DX7 Banks reads them as a count of banks already set up below 10",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when SLOOP’s saved options are at their defaults, or DX7 Banks reads them as a count of banks already set up below 11",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when SLOOP’s saved options are at their defaults, or DX7 Banks reads them as a count of banks already set up below 12",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you put the factory voices back from the editor",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Saving settings removes SLOOP’s learned MIDI controls, theme and favourites. Its drum kits load only if MIDI controls were left at their defaults. DX7 Banks can read SLOOP’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       },
       {
        "way": "automatically, only when SLOOP’s saved options are at their defaults, or DX7 Banks reads them as a missing, incomplete or older count of banks already set up",
        "effect": "changed to the new format: Saving settings removes SLOOP’s learned MIDI controls, theme and favourites. Its drum kits load only if MIDI controls were left at their defaults. DX7 Banks can read SLOOP’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Saving settings removes SLOOP’s learned MIDI controls, theme and favourites. Its drum kits load only if MIDI controls were left at their defaults. DX7 Banks can read SLOOP’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "changed to the new format: Saving settings removes SLOOP’s learned MIDI controls, theme and favourites. Its drum kits load only if MIDI controls were left at their defaults. DX7 Banks can read SLOOP’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "changed to the new format: Saving settings removes SLOOP’s learned MIDI controls, theme and favourites. Its drum kits load only if MIDI controls were left at their defaults. DX7 Banks can read SLOOP’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: Saving settings removes SLOOP’s learned MIDI controls, theme and favourites. Its drum kits load only if MIDI controls were left at their defaults. DX7 Banks can read SLOOP’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "changed to the new format: Saving settings removes SLOOP’s learned MIDI controls, theme and favourites. Its drum kits load only if MIDI controls were left at their defaults. DX7 Banks can read SLOOP’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       }
      ]
     },
     {
      "object": "song section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "FM6 patch bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads user sample slot USR1 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks reads user sample slot USR2 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks reads user sample slot USR3 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks reads user sounds U01-U16 until you write over the saved data. Saved sounds can play differently here. Saving another slot keeps them. Replacing their slots or restoring the whole bank removes them. Sounds that use separate voice banks also need those banks.",
     "SLOOP DX7 Banks reads user sounds U17-U32 until you write over the saved data. Saved sounds can play differently here. Saving another slot keeps them. Replacing their slots or restoring the whole bank removes them. Sounds that use separate voice banks also need those banks.",
     "SLOOP DX7 Banks reads FM6 patch bank B1-B27 until you write over the saved data. Saving over a patch replaces it; other saved patches in this bank are kept.",
     "SLOOP DX7 Banks reads user sample slot USR4 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used."
    ],
    "owner_text": "At risk by itself: the music in progress (autosave); user sample slot USR4; settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites. At risk when you act: song section A (a whole project); song section B (a whole project); song section C (a whole project); song section D (a whole project); user sample slot USR1; user sample slot USR2; user sample slot USR3; user sounds U01-U16; user sounds U17-U32; FM6 patch bank B1-B27. SLOOP DX7 Banks reads user sample slot USR1 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks reads user sample slot USR2 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks reads user sample slot USR3 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks reads user sounds U01-U16 until you write over the saved data. Saved sounds can play differently here. Saving another slot keeps them. Replacing their slots or restoring the whole bank removes them. Sounds that use separate voice banks also need those banks. SLOOP DX7 Banks reads user sounds U17-U32 until you write over the saved data. Saved sounds can play differently here. Saving another slot keeps them. Replacing their slots or restoring the whole bank removes them. Sounds that use separate voice banks also need those banks. SLOOP DX7 Banks reads FM6 patch bank B1-B27 until you write over the saved data. Saving over a patch replaces it; other saved patches in this bank are kept. SLOOP DX7 Banks reads user sample slot USR4 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "x0x",
    "name": "X0X",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads break loops slot 1 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks reads break loops slot 2 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks reads break loops slot 3 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used."
    ],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: X0X button calibration; break loops slot 1; break loops slot 2; break loops slot 3. SLOOP DX7 Banks reads break loops slot 1 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks reads break loops slot 2 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks reads break loops slot 3 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jiant",
    "name": "JIANT",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches for the FM6 user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its preset bank]",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 2: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks keeps stored but does not show user sounds U01-U16 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them.",
     "SLOOP DX7 Banks keeps stored but does not show user sounds U17-U32 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them."
    ],
    "owner_text": "At risk by itself: FM6 patches for the FM6 user sounds; settings, calibration, favourites, MENU options. At risk when you act: song 1 section A (a whole project); song 1 section B (a whole project); song 1 section C (a whole project); song 1 section D (a whole project); song 2: four sections (whole projects); song 3: four sections (whole projects); song 4: four sections (whole projects); song 5: four sections (whole projects); song 6: four sections (whole projects); song 7: four sections (whole projects); song 8: four sections (whole projects); which song is current, every song's rows and scenes; music in progress (RESTORE LAST); FM6 voice bank B1-B32; user sounds U01-U16; user sounds U17-U32. SLOOP DX7 Banks keeps stored but does not show user sounds U01-U16 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them. SLOOP DX7 Banks keeps stored but does not show user sounds U17-U32 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "melodee",
    "name": "Melodee",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "shared user presets U109-U126",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default)",
        "effect": "lost"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you put the factory voices back from the editor",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default)",
        "effect": "lost"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you put the factory voices back from the editor",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4",
        "effect": "lost"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, factory favourites, calibration, saved template",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U289-U378",
      "effect": "partly lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "partly lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "shared user presets U379-U384",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U145-U288",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U073-U090",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U091-U108",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U001-U018",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U019-U036",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U037-U054",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U055-U072",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U127-U144",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: shared user presets U109-U126; project B: patterns, song, sounds, motion, recordings; project C: patterns, song, sounds, motion, recordings; project D: patterns, song, sounds, motion, recordings; settings, factory favourites, calibration, saved template. At risk when you act: shared user presets U289-U378 (partly lost); shared user presets U379-U384; project A: patterns, song, sounds, motion, recordings; shared user presets U145-U288; shared user presets U073-U090; shared user presets U091-U108; shared user presets U001-U018; shared user presets U019-U036; shared user presets U037-U054; shared user presets U055-U072; shared user presets U127-U144.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fomni",
    "name": "FoMni",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FoMni setup (pages, chord buttons, lights)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FoMni button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FoMni setup (pages, chord buttons, lights). At risk when you act: FoMni button calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "amb",
    "name": "AMB-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "AMB-1 pieces and setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "AMB-1 panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: AMB-1 pieces and setup. At risk when you act: AMB-1 panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "32 imported DX7 voices",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "options, playing setup and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank A (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank B (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank C (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank D (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank E (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank F (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank G (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank H (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session saved with a global save",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "favourite marks, chord/bass type and filter",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "128 saved sounds with their complete engine patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: 32 imported DX7 voices; options, playing setup and panel calibration. At risk when you act: CZ-1 bank A (16 tones); CZ-1 bank B (16 tones); CZ-1 bank C (16 tones); CZ-1 bank D (16 tones); CZ-1 bank E (16 tones); CZ-1 bank F (16 tones); CZ-1 bank G (16 tones); CZ-1 bank H (16 tones); last session saved with a global save; favourite marks, chord/bass type and filter; 128 saved sounds with their complete engine patches; recorded loop 1; recorded loop 2; recorded loop 3; recorded loop 4; recorded loop 5; recorded loop 6; recorded loop 7; recorded loop 8; recorded loop 9; recorded loop 10.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches for user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its preset bank]",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1–B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads user sample slot USR1 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks reads user sample slot USR2 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks reads user sample slot USR3 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks keeps stored but does not show user sounds 1–16 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them.",
     "SLOOP DX7 Banks keeps stored but does not show user sounds 17–32 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them."
    ],
    "owner_text": "At risk by itself: FM6 patches for user sounds; settings and panel calibration. At risk when you act: project A; project B; project C; project D; music in progress (RESTORE LAST); FM6 voice bank B1–B32; user sample slot USR1; user sample slot USR2; user sample slot USR3; user sounds 1–16; user sounds 17–32. SLOOP DX7 Banks reads user sample slot USR1 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks reads user sample slot USR2 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks reads user sample slot USR3 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks keeps stored but does not show user sounds 1–16 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them. SLOOP DX7 Banks keeps stored but does not show user sounds 17–32 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only if the checked parts at the start of the firmware update tool or in its saved update progress contain data",
        "effect": "lost"
       },
       {
        "way": "automatically, only if the checked parts of the space used to prepare firmware updates contain data",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 5",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 6",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 7",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 8",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 9",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 10",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 11",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 12",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is missing, is below twelve, or comes from an older version",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you put the factory voices back from the editor",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you start a firmware update or USB rescue",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "octave, last selected preset and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older stored user bank, if present (Beta4 does not store new edits)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: octave, last selected preset and MIDI preferences. At risk when you act: older stored user bank, if present (Beta4 does not store new edits).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "hortator",
    "name": "Hortator",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: After the new firmware saves its settings, returning to Hortator uses defaults for settings, control calibration and the remembered Bluetooth device"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: After the new firmware saves its settings, returning to Hortator uses defaults for settings, control calibration and the remembered Bluetooth device"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: After the new firmware saves its settings, returning to Hortator uses defaults for settings, control calibration and the remembered Bluetooth device"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "changed to the new format: After the new firmware saves its settings, returning to Hortator uses defaults for settings, control calibration and the remembered Bluetooth device"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "changed to the new format: After the new firmware saves its settings, returning to Hortator uses defaults for settings, control calibration and the remembered Bluetooth device"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: After the new firmware saves its settings, returning to Hortator uses defaults for settings, control calibration and the remembered Bluetooth device"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "changed to the new format: After the new firmware saves its settings, returning to Hortator uses defaults for settings, control calibration and the remembered Bluetooth device"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads user samples USR1 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks reads user samples USR2 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks reads user samples USR3 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used."
    ],
    "owner_text": "At risk by itself: settings and panel calibration. At risk when you act: project A; project B; project C; project D; user samples USR1; user samples USR2; user samples USR3. SLOOP DX7 Banks reads user samples USR1 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks reads user samples USR2 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks reads user samples USR3 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "obervave",
    "name": "OberVave",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "pattern 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 5",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 6",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 7",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "saved programs and global settings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 8",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically at first start [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: pattern 1; pattern 2; pattern 3; pattern 4 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 5 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 6 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 7 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); saved programs and global settings; pattern 8 (its B-track sound can change if it uses a saved program; its pattern notes remain).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "polly",
    "name": "Polly",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Polly shared memory 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Optional QY70 style bank",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you put the factory voices back from the editor",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "Polly setup and channel sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "All four Polly songs",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Polly shared memory 4; Optional QY70 style bank; Polly setup and channel sounds. At risk when you act: All four Polly songs; Polly shared memory 1; Polly shared memory 2; Polly shared memory 3; Polly shared memory 5; Polly shared memory 6; Polly shared memory 7; Polly shared memory 8; Polly shared memory 9; Polly shared memory 10; Polly shared memory 11; Polly shared memory 12; Polly shared memory 13; Polly shared memory 14; Polly shared memory 15; Polly shared memory 16; Polly button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "skiff",
    "name": "Skiff",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you put the factory voices back from the editor [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking) [uses its shared pattern pool]",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you put the factory voices back from the editor [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking) [uses its shared pattern pool]",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you put the factory voices back from the editor [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking) [uses its shared pattern pool]",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you put the factory voices back from the editor [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking) [uses its shared pattern pool]",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "user sounds’ own FM6 patches",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4 [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you put the factory voices back from the editor [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking) [uses its shared pattern pool]",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "shared 64-pattern pool",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "some or all lost"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default)",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you put the factory voices back from the editor",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "user sound bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads user sample USR1 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks reads user sample USR2 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks reads user sample USR3 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used.",
     "SLOOP DX7 Banks keeps stored but does not show user sound bank 1 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them.",
     "SLOOP DX7 Banks keeps stored but does not show user sound bank 2 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them."
    ],
    "owner_text": "At risk by itself: project A; project B; project C; project D; user sounds’ own FM6 patches; last session; shared 64-pattern pool (some or all lost); settings, calibration and favourites; user sound bank 1 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); user sound bank 2 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it). At risk when you act: user sample USR1; user sample USR2; user sample USR3. SLOOP DX7 Banks reads user sample USR1 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks reads user sample USR2 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks reads user sample USR3 until you write over the saved data. Samples play only if they pass the check and their zones fit this slot. Sending to or erasing this slot replaces the sample. Extra slice markers are not used. SLOOP DX7 Banks keeps stored but does not show user sound bank 1 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them. SLOOP DX7 Banks keeps stored but does not show user sound bank 2 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloopdx",
    "name": "sloopDX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Saving settings removes sloopDX’s extra MIDI controls, theme and favourites. It saves this beta’s own drum kits and count of banks already set up. DX7 Banks can read sloopDX’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       },
       {
        "way": "automatically, only when sloopDX’s saved options are at their defaults, or DX7 Banks reads them as a missing, incomplete or older count of banks already set up",
        "effect": "changed to the new format: Saving settings removes sloopDX’s extra MIDI controls, theme and favourites. It saves this beta’s own drum kits and count of banks already set up. DX7 Banks can read sloopDX’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s extra MIDI controls, theme and favourites. It saves this beta’s own drum kits and count of banks already set up. DX7 Banks can read sloopDX’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s extra MIDI controls, theme and favourites. It saves this beta’s own drum kits and count of banks already set up. DX7 Banks can read sloopDX’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s extra MIDI controls, theme and favourites. It saves this beta’s own drum kits and count of banks already set up. DX7 Banks can read sloopDX’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s extra MIDI controls, theme and favourites. It saves this beta’s own drum kits and count of banks already set up. DX7 Banks can read sloopDX’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s extra MIDI controls, theme and favourites. It saves this beta’s own drum kits and count of banks already set up. DX7 Banks can read sloopDX’s KNOB ACCEL, USB RATE, theme and recording options as a different count of banks already set up"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "selected DX7 bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "MY KIT",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "user presets 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks keeps stored but does not show user presets 1–16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
     "SLOOP DX7 Banks keeps stored but does not show user presets 17–32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: working loop; settings, calibration, song order, MIDI, theme and favourites. At risk when you act: section A; section B; section C; section D; DX7 bank 1 voices 1–16; DX7 bank 1 voices 17–32; DX7 bank 2 voices 1–16; DX7 bank 2 voices 17–32; DX7 bank 3 voices 1–16; DX7 bank 3 voices 17–32; DX7 bank 4 voices 1–16; DX7 bank 4 voices 17–32; DX7 bank 5 voices 1–16; DX7 bank 5 voices 17–32; DX7 bank 6 voices 1–16; DX7 bank 6 voices 17–32; DX7 bank 7 voices 1–16; DX7 bank 7 voices 17–32; DX7 bank 8 voices 1–16; DX7 bank 8 voices 17–32; selected DX7 bank; MY KIT; user presets 1–16; user presets 17–32. SLOOP DX7 Banks keeps stored but does not show user presets 1–16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound. SLOOP DX7 Banks keeps stored but does not show user presets 17–32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "rainbow",
    "name": "Rainbow Mode",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the FM6 patches used by the thirty-two user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "your old FM6 bank (B1–B27)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16, names and sixteen-step patterns without automation",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "user sounds U17–U32, names and sixteen-step patterns without automation",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "Project A: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project B: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project C: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project D: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the last session in the full version of Felucca",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR1 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR2 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR3 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads user sample USR1 and any slice positions you set in SLICE until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sample USR2 and any slice positions you set in SLICE until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sample USR3 and any slice positions you set in SLICE until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks keeps stored but does not show user sounds U01–U16, names and sixteen-step patterns without automation until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
     "SLOOP DX7 Banks keeps stored but does not show user sounds U17–U32, names and sixteen-step patterns without automation until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: the FM6 patches used by the thirty-two user sounds; your old FM6 bank (B1–B27); Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes; user sounds U01–U16, names and sixteen-step patterns without automation (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); user sounds U17–U32, names and sixteen-step patterns without automation (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it). At risk when you act: Project A: four tracks and their sounds, notes, automation, song chain and name; Project B: four tracks and their sounds, notes, automation, song chain and name; Project C: four tracks and their sounds, notes, automation, song chain and name; Project D: four tracks and their sounds, notes, automation, song chain and name; the last session in the full version of Felucca; User sample USR1 and any slice positions you set in SLICE; User sample USR2 and any slice positions you set in SLICE; User sample USR3 and any slice positions you set in SLICE. SLOOP DX7 Banks reads user sample USR1 and any slice positions you set in SLICE until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sample USR2 and any slice positions you set in SLICE until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sample USR3 and any slice positions you set in SLICE until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks keeps stored but does not show user sounds U01–U16, names and sixteen-step patterns without automation until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound. SLOOP DX7 Banks keeps stored but does not show user sounds U17–U32, names and sixteen-step patterns without automation until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "duell",
    "name": "DUELL beta",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved patches",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and panel setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M01–M02",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M03–M04",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M05–M06",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M07–M08",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M09–M10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M11–M12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M13–M14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M15–M16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P01–P06",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P07–P12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P13–P16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last working music",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B01–B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: saved patches; settings and panel setup. At risk when you act: multis M01–M02; multis M03–M04; multis M05–M06; multis M07–M08; user wavetable USR1; user wavetable USR2; user wavetable USR3; multis M09–M10; multis M11–M12; multis M13–M14; multis M15–M16; patterns P01–P06; patterns P07–P12; patterns P13–P16; last working music; FM6 bank B01–B32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fimba",
    "name": "FiMba-1 beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "maku",
    "name": "MAKU",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "inherited FM6 patches for user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "up to sixteen liked worlds",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "inherited user preset bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads inherited user sample 1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads inherited user sample 2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads inherited user sample 3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks keeps stored but does not show inherited user preset bank 1 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
     "SLOOP DX7 Banks keeps stored but does not show inherited user preset bank 2 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: inherited FM6 patches for user presets; settings and calibration. At risk when you act: inherited project A; inherited project B; inherited project C; inherited project D; up to sixteen liked worlds; inherited user sample 1; inherited user sample 2; inherited user sample 3; inherited user preset bank 1; inherited user preset bank 2. SLOOP DX7 Banks reads inherited user sample 1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads inherited user sample 2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads inherited user sample 3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks keeps stored but does not show inherited user preset bank 1 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound. SLOOP DX7 Banks keeps stored but does not show inherited user preset bank 2 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fart",
    "name": "Fart Machine One",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "learned button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: learned button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "chord",
    "name": "fm1-chord",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks keeps stored but does not show user sounds 1-16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
     "SLOOP DX7 Banks keeps stored but does not show user sounds 17-32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. SLOOP DX7 Banks reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks keeps stored but does not show user sounds 1-16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound. SLOOP DX7 Banks keeps stored but does not show user sounds 17-32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fumi",
    "name": "FuMi-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FuMi-1 sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FuMi-1 button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FuMi-1 sound and playing setup. At risk when you act: FuMi-1 button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jangada",
    "name": "Jangada",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads user samples USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user samples USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user samples USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops."
    ],
    "owner_text": "At risk by itself: working music (autosave); preferences, calibration and MIDI LEARN map. At risk when you act: project 1; project 2; project 3; project 4; user sounds U01-U16; user sounds U17-U32; FM6 voices B1-B16; FM6 voices B17-B32; user samples USR1; user samples USR2; user samples USR3. SLOOP DX7 Banks reads user samples USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user samples USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user samples USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches and controls for each drum in user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session saved for the next start",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions you set for USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions you set for USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song order and selection",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads user sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks keeps stored but does not show user sounds 1–16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
     "SLOOP DX7 Banks keeps stored but does not show user sounds 17–32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: FM6 patches and controls for each drum in user sounds; settings, calibration and favourites. At risk when you act: song 1; song 2; song 3; last session saved for the next start; slice positions you set for USR1; slice positions you set for USR2; song 4; song 5; song 6; song 7; song 8; song 9; song 10; song 11; song 12; song order and selection; user sample USR1; user sample USR2; user sounds 1–16; user sounds 17–32. SLOOP DX7 Banks reads user sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks keeps stored but does not show user sounds 1–16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound. SLOOP DX7 Banks keeps stored but does not show user sounds 17–32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "orbit",
    "name": "ORBIT",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you put the factory voices back from the editor [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "saved section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you put the factory voices back from the editor [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "saved section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you put the factory voices back from the editor [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "saved section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you put the factory voices back from the editor [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you put the factory voices back from the editor [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "USER sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you put the factory voices back from the editor [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "USER sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4 [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you put the factory voices back from the editor [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "sample slot USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you put the factory voices back from the editor",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads sample slot USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads sample slot USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads sample slot USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads FM6 bank B1-B27 until you write over the saved data.",
     "SLOOP DX7 Banks reads sample slot USR4 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops."
    ],
    "owner_text": "At risk by itself: saved section A (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); saved section B (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); saved section C (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); saved section D (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); working music kept by autosave; USER sounds U01-U16 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); USER sounds U17-U32 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); sample slot USR4; settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences. At risk when you act: sample slot USR1; sample slot USR2; sample slot USR3; FM6 bank B1-B27. SLOOP DX7 Banks reads sample slot USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads sample slot USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads sample slot USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads FM6 bank B1-B27 until you write over the saved data. SLOOP DX7 Banks reads sample slot USR4 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "floyd",
    "name": "SLOOP Floyd FM",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the working loop kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "changed to the new format: Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration and song order",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "kept: SLOOP DX7 Banks can read it"
       },
       {
        "way": "automatically during use",
        "effect": "kept: SLOOP DX7 Banks can read it"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "kept: SLOOP DX7 Banks can read it"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "kept: SLOOP DX7 Banks can read it"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "kept: SLOOP DX7 Banks can read it"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "kept: SLOOP DX7 Banks can read it"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "kept: SLOOP DX7 Banks can read it"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. FLOYD parts become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads user sample slot USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sample slot USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sample slot USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. FLOYD sounds become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved.",
     "SLOOP DX7 Banks reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. FLOYD sounds become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved.",
     "SLOOP DX7 Banks reads settings, panel calibration and song order until you write over the saved data. Floyd has no saved count of the DX banks DX7 Banks has set up. At start-up, DX7 Banks erases DX banks 1–8 and saves a new count."
    ],
    "owner_text": "At risk by itself: the working loop kept by autosave; settings, panel calibration and song order. At risk when you act: song section A; song section B; song section C; song section D; user sample slot USR1; user sample slot USR2; user sample slot USR3; user sounds U01–U16; user sounds U17–U32. SLOOP DX7 Banks reads user sample slot USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sample slot USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sample slot USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. FLOYD sounds become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved. SLOOP DX7 Banks reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. FLOYD sounds become FM6 sounds. Separate live envelope changes (how each note changes over time) were never saved. SLOOP DX7 Banks reads settings, panel calibration and song order until you write over the saved data. Floyd has no saved count of the DX banks DX7 Banks has set up. At start-up, DX7 Banks erases DX banks 1–8 and saves a new count.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "winampfm",
    "name": "winampFM Synth",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you put the factory voices back from the editor",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sounds 1-16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP DX7 Banks reads user sounds 17-32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP DX7 Banks reads FM6 bank B1-B27 until you write over the saved data.",
     "SLOOP DX7 Banks reads sample USR4 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops."
    ],
    "owner_text": "At risk by itself: working music kept by autosave; sample USR4; settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); sample USR1; sample USR2; sample USR3; user sounds 1-16; user sounds 17-32; FM6 bank B1-B27. SLOOP DX7 Banks reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sounds 1-16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP DX7 Banks reads user sounds 17-32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP DX7 Banks reads FM6 bank B1-B27 until you write over the saved data. SLOOP DX7 Banks reads sample USR4 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sixteen six-track patterns",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "some or all lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "song order and four scenes",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "some or all lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "eight saved sampler takes",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "twelve uploaded sounds or DX7 banks",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "screen language pack",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "system preferences and last pattern",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: sixteen six-track patterns (some or all lost); song order and four scenes (some or all lost). At risk when you act: eight saved sampler takes (some or all lost); twelve uploaded sounds or DX7 banks (some or all lost); screen language pack; system preferences and last pattern.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "salt",
    "name": "Felucca [Salt]",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "screen preferences, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads user sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sounds U01-U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP DX7 Banks reads user sounds U17-U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced."
    ],
    "owner_text": "At risk by itself: screen preferences, calibration and favourites. At risk when you act: project 1; project 2; project 3; project 4; user sample USR1; user sample USR2; user sample USR3; user sounds U01-U16; user sounds U17-U32. SLOOP DX7 Banks reads user sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sounds U01-U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP DX7 Banks reads user sounds U17-U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "pigeon",
    "name": "PIGEON",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "shared song and drum sample bank",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4",
        "effect": "lost"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you install SLOOP DX7 Banks",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you put the factory voices back from the editor",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the older FM6 patch bank PIGEON no longer uses",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older FM6 patches for user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, MIDI LEARN and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions set by hand in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "chops, drum-pad and performance edits",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last working session",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "older user preset bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads user sample USR1 in the older format until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sample USR2 in the older format until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sample USR3 in the older format until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks keeps stored but does not show older user preset bank 1 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
     "SLOOP DX7 Banks keeps stored but does not show older user preset bank 2 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: shared song and drum sample bank; the older FM6 patch bank PIGEON no longer uses; older FM6 patches for user presets; preferences, MIDI LEARN and panel calibration. At risk when you act: saved pattern A; saved pattern B; saved pattern C; saved pattern D; slice positions set by hand in the older format; chops, drum-pad and performance edits; last working session; user sample USR1 in the older format; user sample USR2 in the older format; user sample USR3 in the older format; older user preset bank 1; older user preset bank 2. SLOOP DX7 Banks reads user sample USR1 in the older format until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sample USR2 in the older format until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sample USR3 in the older format until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks keeps stored but does not show older user preset bank 1 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound. SLOOP DX7 Banks keeps stored but does not show older user preset bank 2 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm1move",
    "name": "FM1 Move",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you put the factory voices back from the editor",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3",
        "effect": "lost"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a song order from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads sample slot USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads sample slot USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads sample slot USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP DX7 Banks reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP DX7 Banks reads FM6 bank B1–B27 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); project 2; the working project kept by autosave; settings, calibration, SYN kits and stored MIDI mappings. At risk when you act: sample slot USR1; sample slot USR2; sample slot USR3; user sounds U01–U16; user sounds U17–U32; FM6 bank B1–B27. SLOOP DX7 Banks reads sample slot USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads sample slot USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads sample slot USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP DX7 Banks reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP DX7 Banks reads FM6 bank B1–B27 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm1quest",
    "name": "FM1 Quest",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "changed to the new format: Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       },
       {
        "way": "automatically, only when Quest’s red warrior is still locked and BOOT SOUND is on",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP DX7 Banks reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced."
    ],
    "owner_text": "At risk by itself: working music (autosave); settings, panel mapping, song order and Quest preferences/progress. At risk when you act: song section A; song section B; song section C; song section D; sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; sample USR1; user sounds U01–U16; user sounds U17–U32. SLOOP DX7 Banks reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP DX7 Banks reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "Groove project slot 1",
     "Groove project slot 2",
     "Groove project slot 3",
     "Groove resume autosave",
     "Groove sound bank A",
     "Groove sound bank B",
     "Groove sound bank C",
     "Groove sound bank D",
     "Groove custom drum sounds and kits",
     "Groove device preferences",
     "Groove crash reports"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Groove OS does not publish where or how it stores saved work, so loss is possible even when shared storage cannot be found. Before switching, use export all on its Projects page to save every project and the automatically saved music. Use Save a backup on Your own sounds too. Project exports list the sounds but leave out the audio. Use Save a safety copy on Your FM-1 for the banks, songs, automatically saved music and samples. Keep these files on your computer. Sound banks, custom sounds, settings and crash reports may be lost."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): Groove project slot 1; Groove project slot 2; Groove project slot 3; Groove resume autosave; Groove sound bank A; Groove sound bank B; Groove sound bank C; Groove sound bank D; Groove custom drum sounds and kits; Groove device preferences; Groove crash reports. Groove OS does not publish where or how it stores saved work, so loss is possible even when shared storage cannot be found. Before switching, use export all on its Projects page to save every project and the automatically saved music. Use Save a backup on Your own sounds too. Project exports list the sounds but leave out the audio. Use Save a safety copy on Your FM-1 for the banks, songs, automatically saved music and samples. Keep these files on your computer. Sound banks, custom sounds, settings and crash reports may be lost.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ],
  "when_you_leave": [
   {
    "to": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "section A",
     "section B",
     "section C",
     "section D",
     "working loop",
     "user sample USR1",
     "user sample USR2",
     "user sample USR3",
     "user sounds 1–16",
     "user sounds 17–32",
     "FM6 patches B1–B27",
     "user sample USR4",
     "DX7 bank 1 (32 voices)",
     "DX7 bank 2 (32 voices)",
     "DX7 bank 3 (32 voices)",
     "DX7 bank 4 (32 voices)",
     "DX7 bank 5 (32 voices)",
     "DX7 bank 6 (32 voices)",
     "DX7 bank 7 (32 voices)",
     "DX7 bank 8 (32 voices)",
     "DX7 bank 9 (32 voices)",
     "DX7 bank 10 (32 voices)",
     "DX7 bank 11 (32 voices)",
     "DX7 bank 12 (32 voices)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): section A; section B; section C; section D; working loop; user sample USR1; user sample USR2; user sample USR3; user sounds 1–16; user sounds 17–32; FM6 patches B1–B27; user sample USR4; DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); DX7 bank 5 (32 voices); DX7 bank 6 (32 voices); DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "section A",
     "section B",
     "section C",
     "section D",
     "working loop",
     "user sample USR1",
     "user sample USR2",
     "user sample USR3",
     "user sounds 1–16",
     "user sounds 17–32",
     "FM6 patches B1–B27",
     "user sample USR4",
     "DX7 bank 1 (32 voices)",
     "DX7 bank 2 (32 voices)",
     "DX7 bank 3 (32 voices)",
     "DX7 bank 4 (32 voices)",
     "DX7 bank 5 (32 voices)",
     "DX7 bank 6 (32 voices)",
     "DX7 bank 7 (32 voices)",
     "DX7 bank 8 (32 voices)",
     "DX7 bank 9 (32 voices)",
     "DX7 bank 10 (32 voices)",
     "DX7 bank 11 (32 voices)",
     "DX7 bank 12 (32 voices)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): section A; section B; section C; section D; working loop; user sample USR1; user sample USR2; user sample USR3; user sounds 1–16; user sounds 17–32; FM6 patches B1–B27; user sample USR4; DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); DX7 bank 5 (32 voices); DX7 bank 6 (32 voices); DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "felucca",
    "name": "Felucca",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if beta 2ND CORE is on and a sound calculation fails or takes too long",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CC assignments (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a compatible voice bank sent earlier remains and the saved voice bank is missing or older",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After Felucca replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "Felucca may start with RESTORE LAST ON after SLOOP DX7 Banks, even if you turned it OFF before. SLOOP DX7 Banks saves its own settings at several points, replacing the earlier settings with ones Felucca cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave.",
     "Felucca may start with beta 2ND CORE ON or OFF after SLOOP DX7 Banks. Do not rely on your earlier choice: SLOOP DX7 Banks can replace the saved settings with ones Felucca cannot read. Check MENU > SYSTEM > 2ND CORE when you return. ON (BETA) can turn itself OFF and save settings if a sound calculation fails or takes too long; OFF prevents that second-core save.",
     "Felucca reads user sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Felucca reads user sample USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Felucca reads user sample USR3 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different."
    ],
    "owner_text": "At risk by itself: FM6 patches B1–B27; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk by itself, under a condition: user sample USR4. At risk when you act: section A; section B; section C; section D; working loop; user sounds 1–16; user sounds 17–32; user sample USR1; user sample USR2; user sample USR3. After Felucca replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. Felucca may start with RESTORE LAST ON after SLOOP DX7 Banks, even if you turned it OFF before. SLOOP DX7 Banks saves its own settings at several points, replacing the earlier settings with ones Felucca cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave. Felucca may start with beta 2ND CORE ON or OFF after SLOOP DX7 Banks. Do not rely on your earlier choice: SLOOP DX7 Banks can replace the saved settings with ones Felucca cannot read. Check MENU > SYSTEM > 2ND CORE when you return. ON (BETA) can turn itself OFF and save settings if a sound calculation fails or takes too long; OFF prevents that second-core save. Felucca reads user sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Felucca reads user sample USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Felucca reads user sample USR3 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloop",
    "name": "SLOOP",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start an update or enter UPDATE MODE",
        "effect": "changed to the new format: Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Saving settings can change DX7 Banks’ saved count of banks already set up because SLOOP uses those saved options for different playing settings. Returning to DX7 Banks with a missing or incomplete count can erase DX banks at start-up"
       },
       {
        "way": "automatically, only when saved settings contain only basic settings and drum kits, and SLOOP can read an older working loop whose drum MIDI channel differs from those settings",
        "effect": "changed to the new format: Saving settings can change DX7 Banks’ saved count of banks already set up because SLOOP uses those saved options for different playing settings. Returning to DX7 Banks with a missing or incomplete count can erase DX banks at start-up"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Saving settings can change DX7 Banks’ saved count of banks already set up because SLOOP uses those saved options for different playing settings. Returning to DX7 Banks with a missing or incomplete count can erase DX banks at start-up"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "changed to the new format: Saving settings can change DX7 Banks’ saved count of banks already set up because SLOOP uses those saved options for different playing settings. Returning to DX7 Banks with a missing or incomplete count can erase DX banks at start-up"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "changed to the new format: Saving settings can change DX7 Banks’ saved count of banks already set up because SLOOP uses those saved options for different playing settings. Returning to DX7 Banks with a missing or incomplete count can erase DX banks at start-up"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "changed to the new format: Saving settings can change DX7 Banks’ saved count of banks already set up because SLOOP uses those saved options for different playing settings. Returning to DX7 Banks with a missing or incomplete count can erase DX banks at start-up"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save drum kits from the web editor (without asking)",
        "effect": "changed to the new format: Saving settings can change DX7 Banks’ saved count of banks already set up because SLOOP uses those saved options for different playing settings. Returning to DX7 Banks with a missing or incomplete count can erase DX banks at start-up"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: Saving settings can change DX7 Banks’ saved count of banks already set up because SLOOP uses those saved options for different playing settings. Returning to DX7 Banks with a missing or incomplete count can erase DX banks at start-up"
       },
       {
        "way": "when you send or remove a theme from the web editor (without asking)",
        "effect": "changed to the new format: Saving settings can change DX7 Banks’ saved count of banks already set up because SLOOP uses those saved options for different playing settings. Returning to DX7 Banks with a missing or incomplete count can erase DX banks at start-up"
       },
       {
        "way": "when you send the song from the web editor (without asking)",
        "effect": "changed to the new format: Saving settings can change DX7 Banks’ saved count of banks already set up because SLOOP uses those saved options for different playing settings. Returning to DX7 Banks with a missing or incomplete count can erase DX banks at start-up"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a section from the web editor LIVE page (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a section from the web editor LIVE page (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a section from the web editor LIVE page (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a section from the web editor LIVE page (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "DX7 bank 1 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 9 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 10 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 11 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 12 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP can use the saved song order, drum kits and older sections. Back up all your DX banks and settings before switching.",
     "SLOOP reads user sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads user sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads user sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads user sounds 1–16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP reads user sounds 17–32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP reads FM6 patches B1–B27 until you write over the saved data.",
     "SLOOP reads user sample USR4 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it."
    ],
    "owner_text": "At risk by itself: working loop; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: section A; section B; section C; section D; DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); DX7 bank 5 (32 voices); DX7 bank 6 (32 voices); DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices); user sample USR1; user sample USR2; user sample USR3; user sounds 1–16; user sounds 17–32; FM6 patches B1–B27; user sample USR4. SLOOP can use the saved song order, drum kits and older sections. Back up all your DX banks and settings before switching. SLOOP reads user sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads user sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads user sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads user sounds 1–16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP reads user sounds 17–32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP reads FM6 patches B1–B27 until you write over the saved data. SLOOP reads user sample USR4 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "x0x",
    "name": "X0X",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if X0X crashed while 2ND CORE was on and then restarted without being switched off",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Saving X0X’s settings can remove DX7 Banks’ saved count of DX banks already set up. An older copy of the settings can survive the first save. Without that count, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "After you confirm a restore on the computer, X0X starts erasing before asking again on the FM-1. Saying no keeps X0X’s current project but does not bring back erased data from your previous firmware, even if the computer says nothing changed.",
     "X0X reads user sample USR1 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
     "X0X reads user sample USR2 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
     "X0X reads user sample USR3 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used."
    ],
    "owner_text": "At risk by itself: section A; section B; section C; section D; user sounds 17–32; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: user sounds 1–16; user sample USR1; user sample USR2; user sample USR3. Saving X0X’s settings can remove DX7 Banks’ saved count of DX banks already set up. An older copy of the settings can survive the first save. Without that count, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching. After you confirm a restore on the computer, X0X starts erasing before asking again on the FM-1. Saying no keeps X0X’s current project but does not bring back erased data from your previous firmware, even if the computer says nothing changed. X0X reads user sample USR1 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used. X0X reads user sample USR2 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used. X0X reads user sample USR3 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jiant",
    "name": "JIANT",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you select a song using MIDI PROGRAM CHANGE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you switch song or project (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if no readable bank of FM6 patches for your sounds survives and a compatible old FM6 bank is present",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if its RESTORE LAST is on",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this firmware ran on your FM-1 before and the voice bank sent to it then is still stored",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After JIANT replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "JIANT may start with RESTORE LAST ON or OFF after SLOOP DX7 Banks, even if you turned it OFF before. SLOOP DX7 Banks saves its own settings at several points, replacing the earlier settings with ones JIANT cannot read; an older choice saved by another firmware can also mean the opposite here. While ON, JIANT can save by itself about 10 seconds after start-up once stopped and idle, even without edits, and again after later edits and a pause. Check MENU > SYSTEM > RESTORE LAST straight after start-up. Hold SAVE once MENU is open to keep that idle wait reset while you check; the open menu alone does not stop it. OFF stops that autosave."
    ],
    "owner_text": "At risk by itself: user sample USR3; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk by itself, under a condition: working loop; FM6 patches B1–B27; user sample USR4. At risk when you act: section A; section B; section C; section D; user sample USR1; user sample USR2; user sounds 1–16; user sounds 17–32. After JIANT replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. JIANT may start with RESTORE LAST ON or OFF after SLOOP DX7 Banks, even if you turned it OFF before. SLOOP DX7 Banks saves its own settings at several points, replacing the earlier settings with ones JIANT cannot read; an older choice saved by another firmware can also mean the opposite here. While ON, JIANT can save by itself about 10 seconds after start-up once stopped and idle, even without edits, and again after later edits and a pause. Check MENU > SYSTEM > RESTORE LAST straight after start-up. Hold SAVE once MENU is open to keep that idle wait reset while you check; the open menu alone does not stop it. OFF stops that autosave.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "melodee",
    "name": "Melodee",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change a setting on the panel or in the menu (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a template (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 12 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 9 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 10 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 11 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After Melodee replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching."
    ],
    "owner_text": "At risk by itself: working loop; user sounds 1–16; user sounds 17–32; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk by itself, under a condition: section A; section B; section C; section D; user sample USR3; FM6 patches B1–B27; user sample USR4; DX7 bank 12 (32 voices). At risk when you act: user sample USR1; user sample USR2; DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); DX7 bank 5 (32 voices); DX7 bank 6 (32 voices); DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices). After Melodee replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fomni",
    "name": "FoMni",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Saving a FoMni project can remove DX7 Banks’ saved count of DX banks already set up. An older copy of the settings can survive the first save. Without that count, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching."
    ],
    "owner_text": "At risk by itself: settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: user sounds 1–16. Saving a FoMni project can remove DX7 Banks’ saved count of DX banks already set up. An older copy of the settings can survive the first save. Without that count, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "amb",
    "name": "AMB-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Saving an AMB-1 project can remove DX7 Banks’ saved count of the DX banks it has set up. An older saved copy of settings may survive the first save. If no saved count remains, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching."
    ],
    "owner_text": "At risk by itself: settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: user sounds 1–16. Saving an AMB-1 project can remove DX7 Banks’ saved count of the DX banks it has set up. An older saved copy of settings may survive the first save. If no saved count remains, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if an older ChoralRoot favourites save is still stored and the space for its next save still contains data",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if an older ChoralRoot session save is still stored and the space for its next save still contains data",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup",
        "effect": "lost"
       },
       {
        "way": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Import 0.21 sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose a voice from a DX7 or CZ bank on the installer page and import it (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold SAVE for a global save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you place a sound as new or back in its saved factory position from the device manager (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound from the device manager and enter its new name (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore factory order from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore favourite marks from the computer (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore favourite marks with the computer question skipped (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a processor failure blocked Dual Core while its saved setting was On",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE for a global save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After ChoralRoot replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "ChoralRoot reads user sounds 1–16 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from.",
     "ChoralRoot reads user sounds 17–32 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from."
    ],
    "owner_text": "At risk by itself: user sample USR2; user sample USR3; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: section A; section B; section C; section D; working loop; user sample USR1; user sounds 1–16; user sounds 17–32. After ChoralRoot replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. ChoralRoot reads user sounds 1–16 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from. ChoralRoot reads user sounds 17–32 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if no readable bank of FM6 patches for your sounds is left and a compatible older FM6 bank is still stored",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if an earlier compatible bank sent to the FM-1 is still stored and is newer than the saved bank, or the saved bank is invalid",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you leave SLICES after editing slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you leave SLICES after editing slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you leave SLICES after editing slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After GHOULBOX replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "GHOULBOX may start with RESTORE LAST ON after SLOOP DX7 Banks, even if you turned it OFF before. SLOOP DX7 Banks saves its own settings at several points, replacing the earlier settings with ones GHOULBOX cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave.",
     "GHOULBOX reads user sample USR1 until you write over the saved data.",
     "GHOULBOX reads user sample USR2 until you write over the saved data.",
     "GHOULBOX reads user sample USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: FM6 patches B1–B27; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk by itself, under a condition: working loop; user sample USR4. At risk when you act: section A; section B; section C; section D; user sounds 1–16; user sounds 17–32; user sample USR1; user sample USR2; user sample USR3. After GHOULBOX replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. GHOULBOX may start with RESTORE LAST ON after SLOOP DX7 Banks, even if you turned it OFF before. SLOOP DX7 Banks saves its own settings at several points, replacing the earlier settings with ones GHOULBOX cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave. GHOULBOX reads user sample USR1 until you write over the saved data. GHOULBOX reads user sample USR2 until you write over the saved data. GHOULBOX reads user sample USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 9 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 10 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 11 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 12 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Open stores its settings elsewhere. Sending a sample bank far enough to write over DX7 Banks’ settings can remove its saved count of DX banks already set up. If that count is lost, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "Workbench adds Open's built-in samples right after installing it, without asking about samples. This replaces only the items marked 'by itself right after the Workbench installs Open', before you can save anything. This follows Open V12's source code; the downloaded Workbench has not been checked against it."
    ],
    "owner_text": "At risk by itself: section A; section B; section C; section D; working loop. At risk when you act: user sample USR1; user sample USR2; user sample USR3; user sounds 1–16; user sounds 17–32; FM6 patches B1–B27; user sample USR4; DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); DX7 bank 5 (32 voices); DX7 bank 6 (32 voices); DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices); settings, calibration, song order, synthesized drum kits and DX-bank setup. Open stores its settings elsewhere. Sending a sample bank far enough to write over DX7 Banks’ settings can remove its saved count of DX banks already set up. If that count is lost, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching. Workbench adds Open's built-in samples right after installing it, without asking about samples. This replaces only the items marked 'by itself right after the Workbench installs Open', before you can save anything. This follows Open V12's source code; the downloaded Workbench has not been checked against it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion of the active user slot (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE in the save screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you release a short SAVE (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM-106 saves settings over one saved copy of DX7 Banks’ settings. An older copy may still hold the number of DX banks already set up. If no saved copy holds that number, DX7 Banks erases DX banks 1–8 when you next start it, including your own banks 5–8, without asking. Back up your DX banks before switching.",
     "FM-106 Beta4 does not save edited user sounds, even when it says the save worked. Export them before turning off the FM-1 or changing firmware again."
    ],
    "owner_text": "At risk by itself: settings, calibration, song order, synthesized drum kits and DX-bank setup. FM-106 saves settings over one saved copy of DX7 Banks’ settings. An older copy may still hold the number of DX banks already set up. If no saved copy holds that number, DX7 Banks erases DX banks 1–8 when you next start it, including your own banks 5–8, without asking. Back up your DX banks before switching. FM-106 Beta4 does not save edited user sounds, even when it says the save worked. Export them before turning off the FM-1 or changing firmware again.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "hortator",
    "name": "Hortator",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample USR1 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)",
     "user sample USR2 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)",
     "user sample USR3 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)"
    ],
    "kept_unseen": [],
    "notes": [
     "After Hortator replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching."
    ],
    "owner_text": "At risk by itself: settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: section A; section B; section C; section D. Carried over: user sample USR1 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); user sample USR2 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); user sample USR3 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently). After Hortator replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "DX7 bank 6 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE in the sequencer (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE in the sequencer (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE in the sequencer (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 9 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE in the sequencer (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 10 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE in the sequencer (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 11 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 6 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE in the sequencer (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 12 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you request a copy into pattern 7 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE in the sequencer (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE twice outside the sequencer (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "OberVave saves settings over one saved copy of DX7 Banks’ settings. An older copy may still hold the number of DX banks already set up. If no saved copy holds that number, DX7 Banks erases DX banks 1–8 when you next start it, including your own banks 5–8, without asking. Back up your DX banks before switching."
    ],
    "owner_text": "At risk by itself: DX7 bank 6 (32 voices); DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices); settings, calibration, song order, synthesized drum kits and DX-bank setup. OberVave saves settings over one saved copy of DX7 Banks’ settings. An older copy may still hold the number of DX banks already set up. If no saved copy holds that number, DX7 Banks erases DX banks 1–8 when you next start it, including your own banks 5–8, without asking. Back up your DX banks before switching.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "polly",
    "name": "Polly",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete power-on hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 9 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 10 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 11 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 12 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Saving a Polly project can remove DX7 Banks’ saved count of the DX banks it has set up. An older saved copy of settings may survive the first save. If no saved count remains, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "After you agree to restore on the computer, Polly starts erasing before the FM-1 asks. Saying no on the FM-1 keeps Polly’s current project, but cannot bring back erased data from your previous firmware, even if the computer says nothing changed."
    ],
    "owner_text": "At risk by itself: section A; section B; section C; section D; working loop; user sample USR1; user sample USR2; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: user sample USR3; user sounds 1–16; user sounds 17–32; FM6 patches B1–B27; user sample USR4; DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); DX7 bank 5 (32 voices); DX7 bank 6 (32 voices); DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices). Saving a Polly project can remove DX7 Banks’ saved count of the DX banks it has set up. An older saved copy of settings may survive the first save. If no saved count remains, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching. After you agree to restore on the computer, Polly starts erasing before the FM-1 asks. Saying no on the FM-1 keeps Polly’s current project, but cannot bring back erased data from your previous firmware, even if the computer says nothing changed.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "skiff",
    "name": "Skiff",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a readable old autosave needs conversion and its patterns fit",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 9 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 10 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 11 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 12 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if Skiff starts without recovering from a crash, freeze or failed start and has not already cleared the old scene storage",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a valid older FM6 patch bank is still stored and no current set of FM6 patches can be loaded",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After Skiff replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "Unreadable settings use Skiff’s default RESTORE LAST ON.",
     "Skiff reads user sample USR1 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
     "Skiff reads user sample USR2 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
     "Skiff reads user sample USR3 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently."
    ],
    "owner_text": "At risk by itself: FM6 patches B1–B27; user sample USR4; DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); DX7 bank 5 (32 voices); DX7 bank 6 (32 voices); DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices); settings, calibration, song order, synthesized drum kits and DX-bank setup; user sample USR1; user sample USR2; user sample USR3. At risk by itself, under a condition: section A; section B; section C; section D; working loop. At risk when you act: user sounds 1–16; user sounds 17–32. After Skiff replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. Unreadable settings use Skiff’s default RESTORE LAST ON. Skiff reads user sample USR1 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently. Skiff reads user sample USR2 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently. Skiff reads user sample USR3 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloopdx",
    "name": "sloopDX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update or enter UPDATE MODE",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send MY KIT from the web editor (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: A settings save drops the source firmware’s synthesized drum kits and any saved MIDI controls stored after them. Favourite and display-option numbers can also mean different things"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "changed to the new format: A settings save drops the source firmware’s synthesized drum kits and any saved MIDI controls stored after them. Favourite and display-option numbers can also mean different things"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "changed to the new format: A settings save drops the source firmware’s synthesized drum kits and any saved MIDI controls stored after them. Favourite and display-option numbers can also mean different things"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "changed to the new format: A settings save drops the source firmware’s synthesized drum kits and any saved MIDI controls stored after them. Favourite and display-option numbers can also mean different things"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: A settings save drops the source firmware’s synthesized drum kits and any saved MIDI controls stored after them. Favourite and display-option numbers can also mean different things"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After FACTORY RESET in sloopDX, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Changing COLOR or USB RATE, removing the theme, or restoring or sending settings in sloopDX can also make DX7 Banks erase banks when you return. COLOR, theme removal or replacing settings can erase banks 1–8. USB RATE alone can erase banks 1–4 or 1–2. Other combinations of these options or replacement settings can erase up to banks 1–11. Back up your DX banks first.",
     "sloopDX reads user sounds 1–16 until you write over the saved data. Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them.",
     "sloopDX reads user sounds 17–32 until you write over the saved data. Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them."
    ],
    "owner_text": "At risk by itself: working loop; user sample USR2; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk by itself, under a condition: user sample USR1. At risk when you act: section A; section B; section C; section D; user sounds 1–16; user sounds 17–32. After FACTORY RESET in sloopDX, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Changing COLOR or USB RATE, removing the theme, or restoring or sending settings in sloopDX can also make DX7 Banks erase banks when you return. COLOR, theme removal or replacing settings can erase banks 1–8. USB RATE alone can erase banks 1–4 or 1–2. Other combinations of these options or replacement settings can erase up to banks 1–11. Back up your DX banks first. sloopDX reads user sounds 1–16 until you write over the saved data. Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them. sloopDX reads user sounds 17–32 until you write over the saved data. Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "rainbow",
    "name": "Rainbow Mode",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a greeting name was entered in the installer",
        "effect": "lost"
       },
       {
        "way": "when you change Rainbow preferences or save its greeting name (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or a name from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if you open the full version of Felucca by holding HOME + SAVE for 3 seconds and its RESTORE LAST is on (the default)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After Rainbow Mode replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "The full Felucca in Rainbow Mode may start with RESTORE LAST ON after SLOOP DX7 Banks, even if you turned it OFF before. SLOOP DX7 Banks saves its own settings at several points, replacing the earlier settings with ones the full Felucca in Rainbow Mode cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST in the full Felucca layer before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave.",
     "Rainbow Mode reads user sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Rainbow Mode reads user sample USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Rainbow Mode reads user sample USR3 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different."
    ],
    "owner_text": "At risk by itself: settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk by itself, under a condition: FM6 patches B1–B27. At risk when you act: section A; section B; section C; section D; working loop; user sounds 1–16; user sounds 17–32; user sample USR1; user sample USR2; user sample USR3. After Rainbow Mode replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. The full Felucca in Rainbow Mode may start with RESTORE LAST ON after SLOOP DX7 Banks, even if you turned it OFF before. SLOOP DX7 Banks saves its own settings at several points, replacing the earlier settings with ones the full Felucca in Rainbow Mode cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST in the full Felucca layer before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave. Rainbow Mode reads user sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Rainbow Mode reads user sample USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Rainbow Mode reads user sample USR3 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "duell",
    "name": "DUELL beta",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only if loading M01 at first start changes the music and RESTORE LAST is on",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change MIDI LEARN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change USB serial settings from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you change preferences from the editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if an earlier compatible bank upload is still stored and the saved bank is missing or older",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user wavetable directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a user wavetable directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a user wavetable from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After DUELL beta replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "The installer starts with its erase option selected for this firmware change. Clear it before installing to avoid this extra erase."
    ],
    "owner_text": "At risk by itself: FM6 patches B1–B27; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk by itself, under a condition: user sample USR4. At risk when you act: section A; section B; section C; section D; working loop; user sample USR1; user sample USR2; user sample USR3; user sounds 1–16; user sounds 17–32. After DUELL beta replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. The installer starts with its erase option selected for this firmware change. Clear it before installing to avoid this extra erase.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fimba",
    "name": "FiMba-1 beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Saving a FiMba-1 beta project can remove DX7 Banks’ saved count of DX banks already set up. An older copy of the settings can survive the first save. Without that count, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching."
    ],
    "owner_text": "At risk by itself: settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: user sounds 1–16. Saving a FiMba-1 beta project can remove DX7 Banks’ saved count of DX banks already set up. An older copy of the settings can survive the first save. Without that count, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "maku",
    "name": "MAKU",
    "flags": "CS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a valid older FM6 bank is still stored and no valid set of FM6 patches for your sounds is stored",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC for about two seconds to clear every like (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you tap REC to like the current world (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After MAKU replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching."
    ],
    "owner_text": "At risk by itself, under a condition: working loop. At risk when you act: FM6 patches B1–B27; settings, calibration, song order, synthesized drum kits and DX-bank setup. After MAKU replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fart",
    "name": "Fart Machine One",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate."
    ],
    "owner_text": "At risk when you act: user sounds 1–16. Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "chord",
    "name": "fm1-chord",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After fm1-chord replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "fm1-chord reads user sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: section A; section B; section C; section D; working loop; user sounds 1–16; user sounds 17–32; user sample USR1; user sample USR2; user sample USR3. After fm1-chord replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. fm1-chord reads user sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fumi",
    "name": "FuMi-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Saving a FuMi-1 project can remove DX7 Banks’ saved count of DX banks already set up. An older copy of the settings can survive the first save. Without that count, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching."
    ],
    "owner_text": "At risk by itself: settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: user sounds 1–16. Saving a FuMi-1 project can remove DX7 Banks’ saved count of DX banks already set up. An older copy of the settings can survive the first save. Without that count, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jangada",
    "name": "Jangada",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After Jangada replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "Jangada reads user sample USR1 until you write over the saved data.",
     "Jangada reads user sample USR2 until you write over the saved data.",
     "Jangada reads user sample USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: working loop; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: section A; section B; section C; section D; user sounds 1–16; user sounds 17–32; FM6 patches B1–B27; user sample USR4; user sample USR1; user sample USR2; user sample USR3. After Jangada replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. Jangada reads user sample USR1 until you write over the saved data. Jangada reads user sample USR2 until you write over the saved data. Jangada reads user sample USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use, from its second start, after five seconds with playback stopped, no sound and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at its first start, after five seconds with playback stopped, no sound and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the buttons and knob at power-on; cancelling also requests a settings save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change a favourite mark or the filter for favourites (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a starred user sound, which also removes its favourite mark (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run MENU calibration, then close MENU (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send MENU settings, display preferences or favourite changes from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if the song order or selection has unsaved changes and project slot D is empty, holds WaveLoop’s automatically saved session or holds data WaveLoop cannot read",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 or DRUM user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 or DRUM sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After WaveLoop FM-1 replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "WaveLoop FM-1 reads user sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Saved samples may have no slice positions set by you.",
     "WaveLoop FM-1 reads user sample USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Saved samples may have no slice positions set by you."
    ],
    "owner_text": "At risk by itself: section A; section D; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk by itself, under a condition: section B; section C; user sample USR3. At risk when you act: working loop; user sounds 1–16; user sounds 17–32; user sample USR1; user sample USR2. After WaveLoop FM-1 replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. WaveLoop FM-1 reads user sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Saved samples may have no slice positions set by you. WaveLoop FM-1 reads user sample USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Saved samples may have no slice positions set by you.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "orbit",
    "name": "ORBIT",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: The next settings save adds ORBIT’s MIDI controls. DX7 Banks can then no longer load its saved synthesized drum kits from that copy of the settings. It can still read shared settings and song order"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "changed to the new format: The next settings save adds ORBIT’s MIDI controls. DX7 Banks can then no longer load its saved synthesized drum kits from that copy of the settings. It can still read shared settings and song order"
       },
       {
        "way": "automatically, only when song order has an unsaved change as an update or restart starts",
        "effect": "changed to the new format: The next settings save adds ORBIT’s MIDI controls. DX7 Banks can then no longer load its saved synthesized drum kits from that copy of the settings. It can still read shared settings and song order"
       },
       {
        "way": "when you hold both OCT buttons as you turn it on to calibrate the controls (without asking)",
        "effect": "changed to the new format: The next settings save adds ORBIT’s MIDI controls. DX7 Banks can then no longer load its saved synthesized drum kits from that copy of the settings. It can still read shared settings and song order"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: The next settings save adds ORBIT’s MIDI controls. DX7 Banks can then no longer load its saved synthesized drum kits from that copy of the settings. It can still read shared settings and song order"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "changed to the new format: The next settings save adds ORBIT’s MIDI controls. DX7 Banks can then no longer load its saved synthesized drum kits from that copy of the settings. It can still read shared settings and song order"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you choose SAVE > PROJECT > ERASE and repeat the action (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you choose SAVE > PROJECT > ERASE and repeat the action (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you choose SAVE > PROJECT > ERASE and repeat the action (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you choose SAVE > PROJECT > ERASE and repeat the action (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose SAVE > USER > SAVE or ERASE and repeat the action (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you erase a used USER sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you send, erase, rename or restore user sounds with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store DX7 cartridge voices with optional USER sound links from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you store a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose SAVE > USER > SAVE or ERASE and repeat the action (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you erase a used USER sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you send, erase, rename or restore user sounds with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store DX7 cartridge voices with optional USER sound links from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you store a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       }
      ]
     },
     {
      "object": "DX7 bank 1 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 9 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 10 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 11 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 12 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a used FM6 patch from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send, erase or restore FM6 patches with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 patch from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you store selected DX7 cartridge voices from the web editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After ORBIT saves settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking. It can erase up to banks 1–11 if ORBIT’s MIDI IN is set to one channel from 4–15. The settings save can happen automatically if DX7 Banks’ KEY VELOCITY was 110, 120 or 127. Back up all your DX banks.",
     "ORBIT reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "ORBIT reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "ORBIT reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "ORBIT reads FM6 patches B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
     "ORBIT reads user sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself: working loop (changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk by itself, under a condition: section A; section B; section C; section D. At risk when you act: user sounds 1–16; user sounds 17–32; DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); DX7 bank 5 (32 voices); DX7 bank 6 (32 voices); DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices); user sample USR1; user sample USR2; user sample USR3; FM6 patches B1–B27; user sample USR4. After ORBIT saves settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking. It can erase up to banks 1–11 if ORBIT’s MIDI IN is set to one channel from 4–15. The settings save can happen automatically if DX7 Banks’ KEY VELOCITY was 110, 120 or 127. Back up all your DX banks. ORBIT reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. ORBIT reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. ORBIT reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. ORBIT reads FM6 patches B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred. ORBIT reads user sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "floyd",
    "name": "SLOOP Floyd FM",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options. After Floyd saves settings, DX7 Banks has no saved count of banks already set up when you return. It erases DX banks 1–8 at its first start. Back up your DX banks before switching",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options. After Floyd saves settings, DX7 Banks has no saved count of banks already set up when you return. It erases DX banks 1–8 at its first start. Back up your DX banks before switching"
       },
       {
        "way": "when you calibrate the controls from HOME and close the menu (without asking)",
        "effect": "changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options. After Floyd saves settings, DX7 Banks has no saved count of banks already set up when you return. It erases DX banks 1–8 at its first start. Back up your DX banks before switching"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options. After Floyd saves settings, DX7 Banks has no saved count of banks already set up when you return. It erases DX banks 1–8 at its first start. Back up your DX banks before switching"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options. After Floyd saves settings, DX7 Banks has no saved count of banks already set up when you return. It erases DX banks 1–8 at its first start. Back up your DX banks before switching"
       },
       {
        "way": "when you start calibrating the controls at power-on (without asking)",
        "effect": "changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options. After Floyd saves settings, DX7 Banks has no saved count of banks already set up when you return. It erases DX banks 1–8 at its first start. Back up your DX banks before switching"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sounds 1–16 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound)",
     "user sounds 17–32 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound)"
    ],
    "kept_unseen": [],
    "notes": [
     "SLOOP Floyd FM reads user sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP Floyd FM reads user sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP Floyd FM reads user sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops."
    ],
    "owner_text": "At risk by itself: working loop; settings, calibration, song order, synthesized drum kits and DX-bank setup (changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options. After Floyd saves settings, DX7 Banks has no saved count of banks already set up when you return. It erases DX banks 1–8 at its first start. Back up your DX banks before switching). At risk when you act: section A; section B; section C; section D; user sample USR1; user sample USR2; user sample USR3. Carried over: user sounds 1–16 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound); user sounds 17–32 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound). SLOOP Floyd FM reads user sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP Floyd FM reads user sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP Floyd FM reads user sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "winampfm",
    "name": "winampFM Synth",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites this firmware cannot use can be lost at the next settings save"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section A (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section B (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section C (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section D (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "DX7 bank 1 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 9 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 10 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 11 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 12 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After winampFM Synth saves settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking. It can erase up to banks 1–11 if winampFM Synth’s MIDI IN is set to one channel from 4–15. The settings save can happen automatically if DX7 Banks’ KEY VELOCITY was 110, 120 or 127. Back up all your DX banks.",
     "winampFM Synth reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sounds 1–16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads user sounds 17–32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads FM6 patches B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
     "winampFM Synth reads user sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself: working loop (changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk by itself, under a condition: section A; section B; section C; section D. At risk when you act: DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); DX7 bank 5 (32 voices); DX7 bank 6 (32 voices); DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices); user sample USR1; user sample USR2; user sample USR3; user sounds 1–16; user sounds 17–32; FM6 patches B1–B27; user sample USR4. After winampFM Synth saves settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking. It can erase up to banks 1–11 if winampFM Synth’s MIDI IN is set to one channel from 4–15. The settings save can happen automatically if DX7 Banks’ KEY VELOCITY was 110, 120 or 127. Back up all your DX banks. winampFM Synth reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sounds 1–16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads user sounds 17–32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads FM6 patches B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred. winampFM Synth reads user sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "ACS?",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when a new recording finishes and playback is stopped",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or with the computer tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload a take from the control page or with the computer tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a new recording finishes and playback is stopped",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a take from the control page or with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "at an unknown time (the chip maker's code that does this is not public)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "at an unknown time (the chip maker's code that does this is not public)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: section A; section B; section C; section D; working loop; user sample USR1; user sample USR2; user sounds 1–16; user sounds 17–32. At risk by itself, under a condition: user sample USR3. At risk when you act: FM6 patches B1–B27; user sample USR4.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "salt",
    "name": "Felucca [Salt]",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send display or favourite changes from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sounds 1–16 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt)",
     "user sounds 17–32 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt)"
    ],
    "kept_unseen": [],
    "notes": [
     "After Felucca [Salt] replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "Felucca [Salt] reads user sample USR1 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Felucca [Salt] reads user sample USR2 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Felucca [Salt] reads user sample USR3 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different."
    ],
    "owner_text": "At risk by itself: settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: section A; section B; section C; section D; user sample USR1; user sample USR2; user sample USR3. Carried over: user sounds 1–16 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt); user sounds 17–32 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt). After Felucca [Salt] replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. Felucca [Salt] reads user sample USR1 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Felucca [Salt] reads user sample USR2 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Felucca [Salt] reads user sample USR3 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "pigeon",
    "name": "PIGEON",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when playback stops after you learn or clear a MIDI mapping",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample in USR1 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR2 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR2 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "damaged (part written over)",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "DX7 bank 1 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 9 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 10 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 11 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 12 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After PIGEON replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "PIGEON reads user sample USR1 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same.",
     "PIGEON reads user sample USR2 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same.",
     "PIGEON reads user sample USR3 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same.",
     "PIGEON keeps stored but does not show user sounds 1–16 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them.",
     "PIGEON keeps stored but does not show user sounds 17–32 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them."
    ],
    "owner_text": "At risk by itself: FM6 patches B1–B27; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk by itself, under a condition: user sample USR1. At risk when you act: section A; section B; section C; section D; working loop; user sample USR2; user sample USR3; user sample USR4 (damaged (part written over)); DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); DX7 bank 5 (32 voices); DX7 bank 6 (32 voices); DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices); user sounds 1–16; user sounds 17–32. After PIGEON replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. PIGEON reads user sample USR1 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. PIGEON reads user sample USR2 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. PIGEON reads user sample USR3 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. PIGEON keeps stored but does not show user sounds 1–16 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them. PIGEON keeps stored but does not show user sounds 17–32 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm1move",
    "name": "FM1 Move",
    "flags": "CSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "DX7 bank 7 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 9 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 10 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 11 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 12 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "working loop (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported)"
    ],
    "kept_unseen": [],
    "notes": [
     "After FM1 Move replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "Move blocks ordinary project saves and autosaves while it still recognizes the old fourth sample. Direct project restores and clear commands can still erase it. Move's normal sample backup does not include that fourth sample.",
     "FM1 Move reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sounds 1–16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads user sounds 17–32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads FM6 patches B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
     "FM1 Move reads user sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself, under a condition: DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices). At risk when you act: user sample USR4; DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); settings, calibration, song order, synthesized drum kits and DX-bank setup; user sample USR1; user sample USR2; user sample USR3; user sounds 1–16; user sounds 17–32; FM6 patches B1–B27. Carried over: working loop (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported). After FM1 Move replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. Move blocks ordinary project saves and autosaves while it still recognizes the old fourth sample. Direct project restores and clear commands can still erase it. Move's normal sample backup does not include that fourth sample. FM1 Move reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sounds 1–16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads user sounds 17–32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads FM6 patches B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred. FM1 Move reads user sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm1quest",
    "name": "FM1 Quest",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest reads user sounds 1–16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "FM1 Quest reads user sounds 17–32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced."
    ],
    "owner_text": "At risk by itself: working loop; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: section A; section B; section C; section D; user sample USR1; user sample USR2; user sample USR3; user sounds 1–16; user sounds 17–32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest reads user sounds 1–16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. FM1 Quest reads user sounds 17–32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "settings, calibration, song order, synthesized drum kits and DX-bank setup",
     "section A",
     "section B",
     "section C",
     "section D",
     "user sounds 1–16",
     "user sounds 17–32",
     "working loop",
     "FM6 patches B1–B27",
     "user sample USR1",
     "user sample USR2",
     "user sample USR3",
     "user sample USR4",
     "DX7 bank 1 (32 voices)",
     "DX7 bank 2 (32 voices)",
     "DX7 bank 3 (32 voices)",
     "DX7 bank 4 (32 voices)",
     "DX7 bank 5 (32 voices)",
     "DX7 bank 6 (32 voices)",
     "DX7 bank 7 (32 voices)",
     "DX7 bank 8 (32 voices)",
     "DX7 bank 9 (32 voices)",
     "DX7 bank 10 (32 voices)",
     "DX7 bank 11 (32 voices)",
     "DX7 bank 12 (32 voices)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The official route first puts V15 back, then installs Groove OS. Treat this firmware’s saved work as lost and back it up with its own tools before starting. Groove OS’s project saves, autosave, preferences, sample uploads and extra installed pages can also replace leftover work; nobody has published which parts of storage they use. A sound missing from PRESETS may still occupy storage, and do not count on Groove OS’s own backups to keep it."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): settings, calibration, song order, synthesized drum kits and DX-bank setup; section A; section B; section C; section D; user sounds 1–16; user sounds 17–32; working loop; FM6 patches B1–B27; user sample USR1; user sample USR2; user sample USR3; user sample USR4; DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); DX7 bank 5 (32 voices); DX7 bank 6 (32 voices); DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices). The official route first puts V15 back, then installs Groove OS. Treat this firmware’s saved work as lost and back it up with its own tools before starting. Groove OS’s project saves, autosave, preferences, sample uploads and extra installed pages can also replace leftover work; nobody has published which parts of storage they use. A sound missing from PRESETS may still occupy storage, and do not count on Groove OS’s own backups to keep it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ]
 },
 "disagreements": [
  {
   "topic": "PRESETS kind knob",
   "docs_say": "An older guide table leaves the third PRESETS knob unused.",
   "source_says": "KNOB 3 changes kind or DX7 bank.",
   "docs_ref": {
    "kind": "doc",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "GUIDE.md",
    "lines": "664",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/GUIDE.md#L664"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "438-441",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L438-L441"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_draw.c",
     "lines": "891-900",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_draw.c#L891-L900"
    }
   ]
  },
  {
   "topic": "FM6 patch choices",
   "docs_say": "The older FM6 table describes factory and B-bank choices only.",
   "source_says": "PTCH also reaches D1–D384; an empty or invalid D voice gives INIT VOICE.",
   "docs_ref": {
    "kind": "doc",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "GUIDE.md",
    "lines": "714",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/GUIDE.md#L714"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_fm6.c",
     "lines": "35-52",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L35-L52"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_fm6.c",
     "lines": "258-267",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L258-L267"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_fm6.c",
     "lines": "461-471",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_fm6.c#L461-L471"
    }
   ]
  },
  {
   "topic": "Keeping effects",
   "docs_say": "One guide sentence sends the owner to FILTER and its second knob for KEEP.",
   "source_says": "The final table and handler put PHONE, TAPE, HALF and RESET on the separate KEEP page.",
   "docs_ref": {
    "kind": "doc",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "GUIDE.md",
    "lines": "327",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/GUIDE.md#L327"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "308-310",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L308-L310"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "404-428",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L404-L428"
    }
   ]
  },
  {
   "topic": "Drum track filter page",
   "docs_say": "The older SLOOP reference places the FILTER page on synth and drum tracks; a page-table comment says the same, while the guide’s detailed drum-page list agrees with the handler.",
   "source_says": "This FILTER page is rejected on the drum track; FX held with KNOB 4 can still set that track’s filter.",
   "docs_ref": {
    "kind": "doc",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "SLOOP.md",
    "lines": "42",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/SLOOP.md#L42"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "308",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L308"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/params.c",
     "lines": "340-346",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/params.c#L340-L346"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_input.c",
     "lines": "394-395",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L394-L395"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_layers.c",
     "lines": "481-489",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L481-L489"
    },
    {
     "kind": "doc",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "GUIDE.md",
     "lines": "673",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/GUIDE.md#L673"
    }
   ]
  },
  {
   "topic": "Undo after clear",
   "docs_say": "The guide says undo can recover a cleared track without spelling out which edits return.",
   "source_says": "Undo restores notes and pattern length only; cleared locks, nudges and fill conditions stay gone.",
   "docs_ref": {
    "kind": "doc",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "GUIDE.md",
    "lines": "556-557",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/GUIDE.md#L556-L557"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "389-406",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui.c",
     "lines": "140-164",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L140-L164"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "759-767",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L759-L767"
    }
   ]
  },
  {
   "topic": "USR4 sample capacity",
   "docs_say": "The older sample summaries give every slot the same roughly 7.4-second capacity.",
   "source_says": "USR1–3 remain about 7.4 seconds each at 22 kHz mono, but USR4 is about 2.9 seconds here; its smaller capacity also reduces a combined USR3+4 kit.",
   "docs_ref": {
    "kind": "doc",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "README.md",
    "lines": "175",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/README.md#L175"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_sample.c",
     "lines": "41-57",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L41-L57"
    },
    {
     "kind": "doc",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "GUIDE.md",
     "lines": "908",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/GUIDE.md#L908"
    },
    {
     "kind": "doc",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "GUIDE.md",
     "lines": "942",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/GUIDE.md#L942"
    }
   ]
  },
  {
   "topic": "Which empty banks fill automatically",
   "docs_say": "The DX7 guide says every empty bank is filled when the editor connects.",
   "source_says": "The automatic factory fill considers banks 1–4; banks 5–12 require the owner to load voices.",
   "docs_ref": {
    "kind": "doc",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "GUIDE.md",
    "lines": "731",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/GUIDE.md#L731"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7904-7914",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7904-L7914"
    }
   ]
  },
  {
   "topic": "Sample preservation when updating",
   "docs_say": "The README broadly promises that updating keeps samples.",
   "source_says": "An old USR4 sample larger than this build’s capacity is rejected, and the bank-claim erase can remove audio from its former tail without asking.",
   "docs_ref": {
    "kind": "doc",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "README.md",
    "lines": "20",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/README.md#L20"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_sample.c",
     "lines": "41-57",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L41-L57"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_sample.c",
     "lines": "89-96",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L89-L96"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/panel.c",
     "lines": "141-161",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L141-L161"
    }
   ]
  }
 ],
 "not_mapped": [
  "No hardware was used: key timing, audio quality, flash endurance and interrupted-write recovery were not measured.",
  "Closed stock and Baud Girl storage internals and effects of third-party installers remain unestablished beyond the supplied atlas evidence; see the storage fragment."
 ],
 "lights": {
  "button_play_stop": [
   {
    "mode": "playing",
    "gesture": "flash",
    "action": "Flashes on every beat, timed to when you hear it: a silent metronome.",
    "short_label": "BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "42-49",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L42-L49"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "223-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L223-L224"
     }
    ]
   },
   {
    "mode": "count_in",
    "gesture": "flash",
    "action": "Flashes on each of the four count-in beats.",
    "short_label": "COUNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "42-49",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L42-L49"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "223-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L223-L224"
     }
    ]
   },
   {
    "mode": "stopped",
    "gesture": "off",
    "action": "Dark while the transport is stopped.",
    "short_label": "STOPPED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "42-49",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L42-L49"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "223-224",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L223-L224"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "rec_ready",
    "gesture": "blinking",
    "action": "Blinks while armed.",
    "short_label": "ARMED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "225-226",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L225-L226"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "lit",
    "action": "Lit while a track records, and during a free take.",
    "short_label": "RECORDING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "225-226",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L225-L226"
     }
    ]
   },
   {
    "mode": "hold_clear",
    "gesture": "blinking",
    "action": "Blinks fast while the clear-track ring fills.",
    "short_label": "CLEARING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "225-226",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L225-L226"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "tracks",
    "gesture": "lit",
    "action": "Lit while the TRACKS screen shows.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   }
  ],
  "button_fx": [
   {
    "mode": "pages",
    "gesture": "lit",
    "action": "Lit while one of the FX pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "pages",
    "gesture": "lit",
    "action": "Lit while one of the SEL pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "pages",
    "gesture": "lit",
    "action": "Lit while one of the ENV pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "pages",
    "gesture": "lit",
    "action": "Lit while one of the LFO pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "pages",
    "gesture": "lit",
    "action": "Lit while one of the EDIT pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "pages",
    "gesture": "lit",
    "action": "Lit while one of the GLO pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "pages",
    "gesture": "lit",
    "action": "Lit while one of the ARP pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "pages",
    "gesture": "lit",
    "action": "Lit while one of the SEQ pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "lit",
    "action": "Lit on the DRUMS screen, whichever button opened it.",
    "short_label": "DRUMS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "pages",
    "gesture": "lit",
    "action": "Lit while one of the SAVE pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "lit",
    "action": "Lit on the SONG screen.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "221-222",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L221-L222"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_layers.c",
      "lines": "23-24",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_layers.c#L23-L24"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "lit",
    "action": "Lit while the octave is below 0.",
    "short_label": "OCT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "227-233",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L227-L233"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "lit",
    "action": "Lit while held (ghost hits).",
    "short_label": "GHOST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "227-233",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L227-L233"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu LIGHTS set above OFF, glows at that level so the label reads in the dark.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "242-250",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L242-L250"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "lit",
    "action": "Lit while the octave is above 0.",
    "short_label": "OCT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "227-233",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L227-L233"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "lit",
    "action": "Lit while held (hard hits).",
    "short_label": "HARD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "227-233",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L227-L233"
     }
    ]
   }
  ],
  "key_lights": [
   {
    "mode": "drum_play",
    "gesture": "lit",
    "action": "Each drum hit lights its sound's white key for a moment.",
    "short_label": "HITS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "55-63",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L55-L63"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "lit",
    "action": "Keys you hold light up; with menu NOTES on, every note sounding on the track, sequencer included, lights its key too.",
    "short_label": "NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "55-78",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L55-L78"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "lit",
    "action": "The steps that play on this page are lit; the playhead blinks.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "111-124",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L111-L124"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "lit",
    "action": "Keys in the scale are lit; the root keys blink.",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "125-128",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L125-L128"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "lit",
    "action": "Drum track: the keys of sounds the pattern holds are lit, plus keys held.",
    "short_label": "IN PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "143-144",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L143-L144"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "lit",
    "action": "Lights the white key of the selected punch effect, including an effect left on with KEEP.",
    "short_label": "EFFECT ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "109-110",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L109-L110"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "lit",
    "action": "The chosen sound's steps on this page are lit; the playhead blinks.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "148-161",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L148-L161"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu KEYS set, the Cs, all white keys or all keys glow at the LIGHTS level.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "199-210",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L199-L210"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "234-240",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L234-L240"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/panel.c",
      "lines": "78-86",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/panel.c#L78-L86"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "short_label": "NOTES",
    "action": "With NOTES on, sounding notes glow behind the layer indicators.",
    "gesture": "dim",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "168-185",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L168-L185"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "short_label": "NOTES",
    "action": "With NOTES on, sounding notes glow behind the layer indicators.",
    "gesture": "dim",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "168-185",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L168-L185"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "short_label": "NOTES",
    "action": "With NOTES on, sounding notes glow behind the layer indicators.",
    "gesture": "dim",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "168-185",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L168-L185"
     }
    ]
   },
   {
    "mode": "layer_key",
    "short_label": "SCALE GLOW",
    "action": "With NOTES on, the scale glows dimly while roots blink and sounding notes light fully.",
    "gesture": "dim",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "125-128",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L125-L128"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "168-183",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L168-L183"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "short_label": "LANE GLOW",
    "action": "On drums with NOTES on, sounds stored in the pattern glow while drum hits light fully.",
    "gesture": "dim",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "143-144",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L143-L144"
     },
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "168-183",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L168-L183"
     }
    ]
   }
  ],
  "led_f3": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Faintly lit as a row marker (key 1 starts a row of four tiles) whenever a layer is held, and all the time on the drum track.",
    "short_label": "ROW START",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "191-196",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L191-L196"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while track 1 is heard (not muted or left out by a solo).",
    "short_label": "T1 ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "129-141",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L129-L141"
     }
    ]
   }
  ],
  "led_c4": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Faintly lit as a row marker (key 5 starts a row of four tiles) whenever a layer is held, and all the time on the drum track.",
    "short_label": "ROW START",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "191-196",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L191-L196"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while track 1 is soloed.",
    "short_label": "T1 SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "129-141",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L129-L141"
     }
    ]
   }
  ],
  "led_g4": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Faintly lit as a row marker (key 9 starts a row of four tiles) whenever a layer is held, and all the time on the drum track.",
    "short_label": "ROW START",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "191-196",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L191-L196"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while a fill plays.",
    "short_label": "FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "129-141",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L129-L141"
     }
    ]
   }
  ],
  "led_d5": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Faintly lit as a row marker (key 13 starts a row of four tiles) whenever a layer is held, and all the time on the drum track.",
    "short_label": "ROW START",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "191-196",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L191-L196"
     }
    ]
   }
  ],
  "led_g3": [
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while track 2 is heard (not muted or left out by a solo).",
    "short_label": "T2 ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "129-141",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L129-L141"
     }
    ]
   }
  ],
  "led_a3": [
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while track 3 is heard (not muted or left out by a solo).",
    "short_label": "T3 ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "129-141",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L129-L141"
     }
    ]
   }
  ],
  "led_b3": [
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while track 4 is heard (not muted or left out by a solo).",
    "short_label": "T4 ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "129-141",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L129-L141"
     }
    ]
   }
  ],
  "led_d4": [
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while track 2 is soloed.",
    "short_label": "T2 SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "129-141",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L129-L141"
     }
    ]
   }
  ],
  "led_e4": [
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while track 3 is soloed.",
    "short_label": "T3 SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "129-141",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L129-L141"
     }
    ]
   }
  ],
  "led_f4": [
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while track 4 is soloed.",
    "short_label": "T4 SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "129-141",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L129-L141"
     }
    ]
   }
  ],
  "led_a4": [
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while a fill bar is armed or playing.",
    "short_label": "FILL BAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "129-141",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L129-L141"
     }
    ]
   }
  ],
  "led_g5": [
   {
    "mode": "layer_mix",
    "gesture": "flash",
    "action": "Flashes on the beat.",
    "short_label": "BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "majnikool/sloop-fm1",
      "ref": "v2.5-b28-test",
      "commit": "c741193ba46b20994d70526f92cf160006be513b",
      "path": "firmware/src/ui_input.c",
      "lines": "129-141",
      "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_input.c#L129-L141"
     }
    ]
   }
  ]
 },
 "groups": {
  "key_lights": [
   "led_a3",
   "led_a4",
   "led_as3",
   "led_as4",
   "led_b3",
   "led_b4",
   "led_c4",
   "led_c5",
   "led_cs4",
   "led_cs5",
   "led_d4",
   "led_d5",
   "led_ds4",
   "led_ds5",
   "led_e4",
   "led_e5",
   "led_f3",
   "led_f4",
   "led_f5",
   "led_fs3",
   "led_fs4",
   "led_fs5",
   "led_g3",
   "led_g4",
   "led_g5",
   "led_gs3",
   "led_gs4"
  ]
 },
 "version_note": "Pre-release test build v2.5-b28-test on the majid branch; forked from SLOOP 2.5, 22 commits beyond fa9ce57; the supplied release/hub asset comparison is recorded in refresh/targets_new.json.",
 "jack_notes": [
  {
   "part": "jack_usb_c",
   "note": "USB-C connects MIDI, the editor and installer, plus stereo audio recording at 44.1 or 48 kHz selected by the host; USB AUDIO chooses MASTER-following or FULL recording level.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/usb.c",
     "lines": "3-21",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/usb.c#L3-L21"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/audio.c",
     "lines": "28-33",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/audio.c#L28-L33"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui_menu.c",
     "lines": "175-177",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui_menu.c#L175-L177"
    }
   ]
  },
  {
   "part": "jack_midi_in",
   "note": "TRS receives MIDI notes and controller changes, or clock only when IN is CLOCK; SYNC selects whether incoming TRS clock controls the sequencer.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "2075-2112",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L2075-L2112"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/seq.c",
     "lines": "2271-2297",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L2271-L2297"
    }
   ]
  }
 ],
 "mapping_status": "An independent checker found zero errors in round 4 (2026-10-17).",
 "delta": {
  "parent": "SLOOP v2.7.1",
  "parent_map": "control-maps/sloop.json",
  "parent_commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
  "fork_point": "SLOOP 2.5 (fa9ce57)",
  "entries_carried_unchanged": 395,
  "entries_changed": 164,
  "entries_new": 346,
  "entries_dropped": 154,
  "modes_carried": 36,
  "modes_new": 45,
  "modes_dropped": 3
 },
 "delta_counting_note": "Counts include controls and lights; source repinning and final punctuation-only edits do not count as behavioral changes; scratch/delta-audit.json records each parent identity. Round 1 adds two HOME-held browser entries and moves sixteen grid-clear entries from unchanged to changed; existing entry positions remain stable.",
 "coverage_note": "The carried page/layer modes retain their identities; new mode counts include detailed parameter and engine EDIT pages added for coverage, rather than implying every such page is a new firmware feature.",
 "editor": [
  {
   "action": "Connecting the editor reads all twelve banks automatically, then fills empty banks 1–4 from the verified factory capture when its default factory-fill option is enabled; Refresh repeats the read and can also trigger that fill, without a replacement question for empty banks.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "4117-4122",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L4117-L4122"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7695-7701",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7695-L7701"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7797-7807",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7797-L7807"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7904-7914",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7904-L7914"
    }
   ]
  },
  {
   "action": "Bank names live in this browser and backup metadata; changing a name does not rename the unit bank tags.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7746-7756",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7746-L7756"
    }
   ]
  },
  {
   "action": "Delete voice asks before writing the changed bank; Tidy asks then compacts live voices and changes which patch each D slot addresses.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7760-7769",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7760-L7769"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7787-7795",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7787-L7795"
    }
   ]
  },
  {
   "action": "Move voice writes the destination first empty slot then clears the original; full destination writes nothing, and no question is asked for a successful move.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7771-7784",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7771-L7784"
    }
   ]
  },
  {
   "action": "Play on this track selects FM6 and the D slot then sends a short C-major chord on MIDI channel4 at velocity100; it does not store the sound into a bank.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7809-7833",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7809-L7833"
    }
   ]
  },
  {
   "action": "Erase bank asks then writes an empty bank; Export downloads the browser copy as SysEx; Refresh is the step that reads banks from the unit.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7797-7804",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7797-L7804"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7935-7942",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7935-L7942"
    }
   ]
  },
  {
   "action": "Import bank asks if any voices will be replaced; import single voice uses selected slot or first empty and asks if occupied; full bank refuses.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7945-7965",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7945-L7965"
    }
   ]
  },
  {
   "action": "Backup reads the listed unit objects and verifies their CRCs; restore first validates file objects, then writes only objects present, skipping unsupported DX7/SYN/FM6 objects on older devices; absent objects remain.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "1917-1978",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L1917-L1978"
    }
   ]
  },
  {
   "action": "Load several .syx sorts accepted bank files by name and fills empty banks above the factory four; too many accepted files for the free banks writes nothing, while invalid files are skipped and per-file failures can leave a partial batch.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7860-7903",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7860-L7903"
    }
   ]
  },
  {
   "action": "A project or user sound refers to a DX7 bank slot; moving, tidying, deleting or replacing that voice changes what every referring sound plays, without undo.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/ui.c",
     "lines": "529-538",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L529-L538"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/upreset.c",
     "lines": "245-248",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/upreset.c#L245-L248"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/upreset.c",
     "lines": "265-275",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/upreset.c#L265-L275"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "7760-7795",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L7760-L7795"
    }
   ]
  },
  {
   "action": "The editor can send audio or CHOP results to a user sample slot; a normal sample send asks once, replaces that slot immediately and has no undo.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "5885-5888",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L5885-L5888"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "web/editor.html",
     "lines": "6171-6196",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/web/editor.html#L6171-L6196"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/editor.c",
     "lines": "781-819",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/editor.c#L781-L819"
    }
   ]
  },
  {
   "action": "USR1–3 each hold about 7.4 seconds at 22 kHz mono; USR4 holds about 2.9 seconds here, so a combined USR3+4 kit has less room and a longer old USR4 sample is rejected.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_sample.c",
     "lines": "41-57",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L41-L57"
    },
    {
     "kind": "source",
     "repo": "majnikool/sloop-fm1",
     "ref": "v2.5-b28-test",
     "commit": "c741193ba46b20994d70526f92cf160006be513b",
     "path": "firmware/src/eng_sample.c",
     "lines": "89-96",
     "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/eng_sample.c#L89-L96"
    }
   ]
  }
 ],
 "persistence": {
  "working_loop": "Changes to sounds, notes, locks, nudges, fill conditions and ordinary song parameters change the working loop in RAM; stopped, quiet autosave keeps a changed loop after 2.5 seconds without input, with at least 20 seconds between attempts; nothing saves simply because the power switch goes off.",
  "live_sections": "SAVE-layer stores replace a section in RAM at once, even during playback, then write after stopping and silence, at least 1.5 seconds after input and 5 seconds since the previous attempt; the SONG screen and PROJECT page save immediately while stopped.",
  "undo": "Undo and redo swap one track’s notes and pattern length only; they do not restore locks, nudges, fill conditions, sound edits or replaced saved banks.",
  "source": [
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/project.c",
    "lines": "466-499",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L466-L499"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/project.c",
    "lines": "778-863",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/project.c#L778-L863"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/seq.c",
    "lines": "389-406",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/seq.c#L389-L406"
   },
   {
    "kind": "source",
    "repo": "majnikool/sloop-fm1",
    "ref": "v2.5-b28-test",
    "commit": "c741193ba46b20994d70526f92cf160006be513b",
    "path": "firmware/src/ui.c",
    "lines": "140-164",
    "url": "https://github.com/majnikool/sloop-fm1/blob/c741193ba46b20994d70526f92cf160006be513b/firmware/src/ui.c#L140-L164"
   }
  ]
 },
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "1 repeated startup erases",
   "fixed": "Documented loss of this build’s own banks after settings replacement or restore, backup recovery and every-boot triggers.",
   "at": "switching_note; storage settings/DX objects and startup rows; guide"
  },
  {
   "round": 1,
   "error": "2 live section replaces loop",
   "fixed": "Named unsaved-loop replacement during playback and while stopped, without question or undo, then later autosave.",
   "at": "controls.key_f3[9], key_g3[9], key_a3[9], key_b3[9]; guide"
  },
  {
   "round": 1,
   "error": "3 PRESETS page scope",
   "fixed": "Restricted the existing entry to PRESETS and stated that the other SAVE pages ignore turns.",
   "at": "controls.encoder_presets[1]; guide"
  },
  {
   "round": 1,
   "error": "4 HOME plus PRESETS",
   "fixed": "Appended HOME-held kind/bank jump entries for TRACKS and PRESETS without moving existing entries.",
   "at": "controls.encoder_presets[7:9]; guide"
  },
  {
   "round": 1,
   "error": "5 variable claim range",
   "fixed": "Expanded startup erase to banks 1–11, described the effective-count formula and added bank 9–11 triggers.",
   "at": "storage.install_and_startup_writes[3]; storage DX objects; switching warnings"
  },
  {
   "round": 1,
   "error": "6 drum grid clear scope",
   "fixed": "Added last-hit extra-data loss, undo limits, song-playback refusal and later autosave to all sixteen grid step keys.",
   "at": "controls.key_* drums_grid STEP entries; guide"
  },
  {
   "round": 1,
   "error": "7 PROJECT page name",
   "fixed": "Corrected the mode name, headings and storage trigger labels to PROJECT.",
   "at": "modes[10].name; storage project triggers; guide"
  },
  {
   "round": 1,
   "error": "8 engine page titles",
   "fixed": "Used each engine title and 1/4 or 2/4 numbering in mode names, routes, screen descriptions and labels.",
   "at": "modes edit_*; controls.screen[49:73]; guide"
  },
  {
   "round": 1,
   "error": "9 filter doc citation",
   "fixed": "Cited SLOOP.md line 42 and noted the guide’s correct detailed list.",
   "at": "disagreements[3]; guide"
  },
  {
   "round": 1,
   "error": "10 missing disagreements and capacity",
   "fixed": "Added all three sample/auto-fill/update disagreements and USR4 capacity in owner text.",
   "at": "disagreements[5:8]; editor[11]; guide"
  },
  {
   "round": 1,
   "error": "11 Baud Girl startup summary",
   "fixed": "Included Baud Girl presets and patterns in the startup loss summary and affected-work lists.",
   "at": "switching_note.lost; storage.owner_switching_fact; guide"
  },
  {
   "round": 1,
   "error": "12 auto-fill starts on connect",
   "fixed": "Corrected connection-time reads and auto-fill, retaining Refresh behaviour.",
   "at": "editor[0]; guide"
  },
  {
   "round": 1,
   "error": "13 first autosave target",
   "fixed": "Clarified first write to the noncurrent copy and physical loss of the retained parent current copy on the second alternating save.",
   "at": "storage.objects.working_project.load_rule; switching_note.parent_saved_data; guide"
  },
  {
   "round": 1,
   "error": "1/5/11 complete switching warnings",
   "fixed": "Rebuilt every data-trigger list from fragment rows, expanded claim losses, added calibration and return-trip effects, and checked row coverage.",
   "at": "switching_note.foreign_work_at_risk; storage.owner_warning_coverage; guide switching section"
  },
  {
   "round": 1,
   "error": "3 guide scope consistency",
   "fixed": "Kept TRACKS sound/kit browsing in its own table while limiting the PRESETS-page entry to PRESETS.",
   "at": "guide TRACKS table; controls.encoder_presets[0:2]"
  },
  {
   "round": 2,
   "error": "1 Stopped song section call",
   "fixed": "Expanded all four section-call warnings to cover stopped song mode and playing-song refusal, with direct apply/load citations.",
   "at": "controls.key_f3[9], key_g3[9], key_a3[9], key_b3[9]; corresponding Markdown rows"
  },
  {
   "round": 2,
   "error": "2 Quick HOME + PRESETS turn",
   "fixed": "Added the first-turn timing and menu fallback to both kind/bank jump entries.",
   "at": "controls.encoder_presets[7], [8]; corresponding Markdown rows"
  },
  {
   "round": 2,
   "error": "3 PRESETS drum kit and scope",
   "fixed": "Restored drum-kit browsing and moved its Markdown row to SAVE > PRESETS.",
   "at": "controls.encoder_presets[1]; Markdown SAVE pages / SAVE > PRESETS"
  },
  {
   "round": 2,
   "error": "4 Distinct EDIT page names",
   "fixed": "Prefixed the eight colliding screen labels with engine names and described the EDIT button using the displayed engine pages.",
   "at": "controls.screen[49,51,54,55,58,70,71,72]; controls.button_edit[0]; corresponding Markdown action"
  },
  {
   "round": 2,
   "error": "5 Empty reserved objects",
   "fixed": "Removed no-owner-data objects from owner loss lists, retained technical overlap rows and recorded their exclusion in coverage accounting.",
   "at": "switching_note.foreign_work_at_risk; corresponding Markdown lists; storage.owner_warning_coverage"
  },
  {
   "round": 2,
   "error": "6 X0X settings name",
   "fixed": "Used the atlas short for X0X settings and retained the return-trip project-reset warning once per bullet.",
   "at": "switching_note.foreign_work_at_risk[4,6,13,15]; corresponding Markdown lists"
  },
  {
   "round": 2,
   "error": "7 OberVave pattern 8 cleanup",
   "fixed": "Appended the conditional installer cleanup overlap for pattern 8 and added it only to the installer cleanup owner list.",
   "at": "storage.reads_foreign[471]; switching_note.foreign_work_at_risk[1]; corresponding Markdown list"
  },
  {
   "round": 3,
   "error": "1 PRESETS HOME return action",
   "fixed": "Changed only the PRESETS-page HOME + PRESETS warning to name the suppressed menu and return to TRACKS, with the HOME tap handler cited.",
   "at": "controls.encoder_presets[8]; Markdown SAVE > PRESETS page, Hold HOME + turn PRESETS"
  }
 ],
 "checker_disputes_refresh": []
}